common.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  1. import api from '@/api'
  2. import router from '../router'
  3. import { Message } from 'element-ui'
  4. import Permission from '@/utils/permissions'
  5. import showPermissionDialog from "@/utils/model/noPermission/index";
  6. import { Base64 } from 'js-base64';
  7. import Config from '@/config'
  8. export default {
  9. /**
  10. * 防抖
  11. * @param {Function} func
  12. * @param {Number} duration
  13. * @returns
  14. */
  15. debounce(func, duration = 500) {
  16. let timer;
  17. return () => {
  18. clearTimeout(timer)
  19. timer = setTimeout(func, duration)
  20. }
  21. },
  22. /**
  23. * 节流
  24. * @param {Function} func
  25. * @param {Number} delay
  26. * @returns
  27. */
  28. throttle(func, delay = 2000) {
  29. let flag = true
  30. return () => {
  31. if (!flag) return;
  32. flag = false;
  33. setTimeout(() => {
  34. func()
  35. flag = true
  36. }, delay)
  37. }
  38. },
  39. //对象转数组
  40. objectToArray(val){
  41. var data = []
  42. if (Object.keys(val).length > 0) {
  43. Object.keys(val).forEach(item => {
  44. if(val[item]){
  45. data.push(
  46. {
  47. key: item,
  48. value: val[item]
  49. }
  50. )
  51. }
  52. })
  53. } else {
  54. return []
  55. }
  56. return data
  57. },
  58. //转简单数组
  59. ArrayToArray(data){
  60. var arr = []
  61. data.forEach(item => {
  62. if (item.type == 3) {
  63. arr.push({
  64. key:item.value,
  65. value:item.searchValue.map(itemValue => {
  66. return itemValue.value
  67. })
  68. })
  69. } else {
  70. arr.push({
  71. key:item.value,
  72. value:item.searchValue.label
  73. })
  74. }
  75. })
  76. return arr
  77. },
  78. /**
  79. * 获取uuid
  80. * @param {*} len 长度
  81. * @param {*} radix 进制
  82. * @returns
  83. */
  84. uuid(len, radix) {
  85. var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
  86. var uuid = [], i;
  87. radix = radix || chars.length;
  88. if (len) {
  89. for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];
  90. } else {
  91. var r;
  92. uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
  93. uuid[14] = '4';
  94. for (i = 0; i < 36; i++) {
  95. if (!uuid[i]) {
  96. r = 0 | Math.random()*16;
  97. uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
  98. }
  99. }
  100. }
  101. return uuid.join('');
  102. },
  103. //object转字符串
  104. objectToString(val) {
  105. var data = []
  106. if (val.constructor == Object) {
  107. if (Object.keys(val).length > 0) {
  108. Object.keys(val).forEach(item => {
  109. data.push(
  110. {
  111. key: item,
  112. value: val[item]
  113. }
  114. )
  115. })
  116. } else {
  117. return ''
  118. }
  119. } else if (val.constructor == Array) {
  120. if (val.length > 0) {
  121. data = val
  122. } else {
  123. return ''
  124. }
  125. } else {
  126. return val
  127. }
  128. // 生成字符串
  129. var str = ''
  130. data.forEach(item => {
  131. var value = ''
  132. if (Array.isArray(item.value)) {
  133. value = '(' + item.value.join(' OR ') + ')'
  134. } else {
  135. if (item.value) {
  136. value = item.value
  137. } else {
  138. return
  139. }
  140. }
  141. if (str) {
  142. str = str + ' AND ' + item.key + '=' + value
  143. } else {
  144. str = str + item.key + '=' + value
  145. }
  146. })
  147. return str
  148. },
  149. /**
  150. * 获取字段列表
  151. * @param {Array} array
  152. * @param {Function} fun
  153. * @param {Object} props
  154. * @returns
  155. */
  156. getField(array, fun, props) {
  157. var type = {
  158. 'Array': '3',
  159. 'DateTime': '2',
  160. 'String': '1'
  161. }
  162. //获取规范数据
  163. var keys = []
  164. var arr = []
  165. if (props) {
  166. keys = Object.keys(props)
  167. }
  168. //获取所需要的数据
  169. var newArray = array.filter(item => {
  170. return fun(item)
  171. })
  172. if (keys.length > 0) {
  173. newArray.forEach(item => {
  174. var obj = {}
  175. keys.forEach(key => {
  176. if (key == 'type') {
  177. obj[key] = type[item[props[key]]] || item[props[key]]
  178. }else if(key == 'value' && props.value == 'value'){
  179. obj[key] = item.field
  180. }else{
  181. obj[key] = item[props[key]]
  182. }
  183. })
  184. // 过滤不需要的数据
  185. if (['id'].includes(obj.value) == false) {
  186. arr.push(obj)
  187. }
  188. })
  189. return arr;
  190. }
  191. return newArray
  192. },
  193. /**
  194. * 获取表格数据
  195. * @author zhuliu
  196. * @param {object} row 当前行数据
  197. * @param {object} field 对应的栏位
  198. * @param {String} prop 数据类型为数组对象时所需要使用的字段
  199. * @param {object} data 需要获取对应label值时的字典对象(包含数据以及配置及{data,prop})
  200. * @param {object} data.prop
  201. * @return {String} 返回值
  202. * @example
  203. * getColumnData({value:1},{type:'String',value:'value'}) //返回字符串1
  204. */
  205. getColumnData(row, field, prop, data) {
  206. if (field.type == 'Array') {
  207. if (row[field.value] && row[field.value].length > 0) {
  208. if (prop) {
  209. return row[field.value].map(item => {
  210. return item[prop]
  211. }).join('、')
  212. }
  213. return row[field.value].join('、')
  214. } else {
  215. return '--'
  216. }
  217. } else if (field.type == 'Object') {
  218. if (!row[field.value]) {
  219. return '--'
  220. }
  221. if (prop) {
  222. return row[field.value][prop]
  223. }
  224. return row[field.value].name
  225. }
  226. else {
  227. if (data) {
  228. if (data.data.constructor == Array) {
  229. var dataProp = data.prop || {
  230. label: 'label',
  231. value: 'value'
  232. }
  233. var obj = data.data.find(item => {
  234. return item[dataProp.value] == row[field.value]
  235. })
  236. if (obj) {
  237. return obj[dataProp.label]
  238. } else {
  239. return '--'
  240. }
  241. } else {
  242. return data.data[row[field.value]]
  243. }
  244. }
  245. if (row[field.value] == '0') {
  246. return '0'
  247. }
  248. return row[field.value] || '--'
  249. }
  250. },
  251. //查看图片1
  252. checkViewer(guid) {
  253. if(!guid){
  254. return ''
  255. }
  256. return `/api/fileManager/downloadFile?fileId=${guid}`
  257. },
  258. //查看图片2
  259. checkGuid(guid,type='pdf') {
  260. if(!guid){
  261. return ''
  262. }
  263. var src = this.checkViewer(guid)
  264. var previewUrl = src + '&fullfilename=test.'+type
  265. return `http://${Config.staticURL}:8012/onlinePreview?url=` + encodeURIComponent(Base64.encode(window.location.origin+previewUrl))
  266. },
  267. //跳转预览界面
  268. previewFile(data,guid,type='pdf'){
  269. var FileUrl = this.checkGuid(guid,type)
  270. const router1 = router.resolve({
  271. path: '/checkFile',
  272. query: {
  273. ...data,
  274. FileUrl: FileUrl,
  275. guid:guid
  276. }
  277. })
  278. window.open(router1.href, '_blank');
  279. },
  280. //查看专利详情
  281. checkPatentDetails(patentNo,projectId) {
  282. router.push(
  283. {
  284. path: '/patentDetails/' + patentNo,
  285. query: {
  286. projectId: projectId,
  287. }
  288. }
  289. )
  290. },
  291. //查看显示栏位管理
  292. async getCustomField(type, patentObj = {}) {
  293. var params = {
  294. tableName: type,
  295. ...patentObj,
  296. }
  297. let apiItem = Object.keys(patentObj).length > 0 ? 'getTableColumns':'getCustomField'
  298. var a = []
  299. await api[apiItem](params).then((response) => {
  300. if (response.code == 200) {
  301. a = response.data.data
  302. }
  303. }).catch(error => {
  304. return []
  305. });
  306. return a
  307. },
  308. /**
  309. * 获取排序字段(sortProp:{order})
  310. * @param {Object} param0 {sort,column, prop, order,sortProp,defaultValue,multiple}
  311. * @returns
  312. */
  313. getSortData({ sort, column, prop, order, sortProp, defaultValue, multiple }) {
  314. var sortProp1 = sortProp || {
  315. "orderBy": "orderBy",
  316. "orderType": 'orderType'
  317. }
  318. if (multiple) {
  319. var sortData = sort
  320. } else {
  321. var sortData = []
  322. }
  323. if (order == null) {
  324. if (defaultValue) {
  325. this.sort = [defaultValue]
  326. }
  327. this.sort = [
  328. {
  329. "orderBy": "createTime",
  330. "orderType": 1
  331. }
  332. ]
  333. } else {
  334. var orderType = {
  335. ascending: 0,
  336. descending: 1
  337. }
  338. var params = sortData.find(item => {
  339. return item[sortProp1.orderBy] == prop
  340. })
  341. if (params) {
  342. params[sortProp1.orderType] = orderType[order]
  343. } else {
  344. params = {}
  345. params[sortProp1.orderBy] = prop
  346. params[sortProp1.orderType] = orderType[order]
  347. sortData.push(params)
  348. }
  349. }
  350. return sortData
  351. },
  352. //显示表头数据
  353. renderHeaderMethods(h, { column }, message) {
  354. var message = '点击升序'
  355. switch (column.order) {
  356. case "":
  357. message = '点击升序'
  358. break;
  359. case "ascending":
  360. message = '点击降序'
  361. break;
  362. case 'descending':
  363. message = '点击取消排序'
  364. break
  365. }
  366. return [
  367. ,
  368. h(
  369. 'el-tooltip',
  370. {
  371. props: {
  372. content: message, // 鼠标悬停时要展示的文字提示
  373. placement: 'top' // 悬停内容展示的位置
  374. }
  375. },
  376. [h('span', column.label)] // 图标
  377. )
  378. ]
  379. },
  380. /**
  381. * 跳转到导入专利界面
  382. * @param {Object} data 参数
  383. * @param {*} type 导入类型
  384. */
  385. toImportParent(data, type) {
  386. if(!(Permission.FunPermissions('xiaoshi/patentImport'))){
  387. showPermissionDialog()
  388. return false
  389. }
  390. var types = {
  391. 1: '/import',
  392. 2: '/PatentNoImport',
  393. 4: '/conditionImport'
  394. }
  395. router.push(
  396. {
  397. path: types[type],
  398. query: {
  399. ...data
  400. }
  401. }
  402. )
  403. },
  404. // 校验文件是否全部上传并处理文件的guid
  405. allUploadFile(form) {
  406. var arr =[]
  407. let allUpload = this.validFile(form.systemFileList,arr)
  408. if (allUpload) {
  409. Message.warning('文件未全部上传,请耐心等待')
  410. return false
  411. }
  412. if(form.systemFileList && form.systemFileList.length>0){
  413. form.fileGuids = form.systemFileList.map(item => {
  414. return item.guid
  415. })
  416. }else{
  417. form.fileGuids = []
  418. }
  419. },
  420. //校验文件是否全部上传
  421. validFile(data,arr) {
  422. if (data && data.length > 0) {
  423. for(var i =0;i<data.length;i++){
  424. if(data[i] && data[i].guid){
  425. arr.push(data[i].guid)
  426. }else{
  427. return true
  428. }
  429. }
  430. return false
  431. } else {
  432. return false
  433. }
  434. },
  435. //校验是否全部上传
  436. checkUploadFile(data) {
  437. if(!data){
  438. return []
  439. }
  440. var arr = []
  441. let allUpload = this.validFile(data,arr)
  442. if (allUpload) {
  443. Message.warning('文件未全部上传,请耐心等待')
  444. return false
  445. }
  446. return arr
  447. },
  448. }