methodTool.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767
  1. import store from "@/store/index.js";
  2. import config from "@/common/config";
  3. import api from "@/common/api.js";
  4. export default {
  5. isGoLogin(isBack = true) {
  6. if (!uni.getStorageSync("user_account")) {
  7. uni.navigateTo({
  8. url: "/pages4/login/login?isBack=" + isBack,
  9. });
  10. return true;
  11. } else {
  12. return false;
  13. }
  14. },
  15. isLogin() {
  16. if (uni.getStorageSync("user_account")) {
  17. return true;
  18. } else {
  19. return false;
  20. }
  21. },
  22. isLogout() {
  23. // uni.removeStorageSync('user_account')
  24. // uni.removeStorageSync('token')
  25. },
  26. //提示
  27. showToast(title, icon = "none", time = 2000) {
  28. return setTimeout(() => {
  29. uni.showToast({
  30. title: title,
  31. icon: icon,
  32. duration: time,
  33. });
  34. }, 500);
  35. },
  36. //图片路径填补
  37. splitImgHost(url, scale = false, width = 250) {
  38. if (!url) {
  39. return "";
  40. } else if (
  41. url.indexOf("http") != -1 ||
  42. url.indexOf("https") != -1 ||
  43. url.indexOf("wxfile") != -1
  44. ) {
  45. } else {
  46. url = config.BASE_IMG_URL + url;
  47. }
  48. if (scale) {
  49. url = url + "?x-oss-process=image/resize,w_" + width;
  50. }
  51. return url;
  52. },
  53. setUuid(id) {
  54. uni.setStorageSync("uuid", id);
  55. },
  56. getUuid() {
  57. return uni.getStorageSync("uuid");
  58. },
  59. exit() {
  60. uni.removeStorageSync("user_account");
  61. uni.removeStorageSync("token");
  62. uni.removeStorageSync("h5_code");
  63. store.state.userInfo = null;
  64. uni.reLaunch({
  65. url: "/pages/index/index",
  66. });
  67. },
  68. /* 时间戳转换成日期
  69. * @param timestamp
  70. * @returns {*}
  71. */
  72. timestampToTime(timestamp, isDay = true, hasChinese, line) {
  73. if (!timestamp) {
  74. return "";
  75. }
  76. var date = new Date(timestamp * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
  77. var Y = date.getFullYear() + (hasChinese ? "" : "-");
  78. var M =
  79. (date.getMonth() + 1 < 10
  80. ? "0" + (date.getMonth() + 1)
  81. : date.getMonth() + 1) + (hasChinese ? "" : "-");
  82. var D =
  83. date.getDate() < 10
  84. ? "0" + date.getDate() + (hasChinese ? "" : " ")
  85. : date.getDate() + (hasChinese ? "" : " ");
  86. var h =
  87. date.getHours() < 10
  88. ? "0" + date.getHours() + ":"
  89. : date.getHours() + ":";
  90. var m =
  91. date.getMinutes() < 10
  92. ? "0" + date.getMinutes() + ":"
  93. : date.getMinutes() + ":";
  94. var s =
  95. date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
  96. if (isDay) {
  97. if (hasChinese) {
  98. return Y + "年" + M + "月" + D + "日";
  99. } else {
  100. return Y + M + D;
  101. }
  102. }
  103. if (line) {
  104. return h + m + s;
  105. }
  106. if (hasChinese) {
  107. return Y + "年" + M + "月" + D + "日" + h + m + s;
  108. } else {
  109. return Y + M + D + h + m + s;
  110. }
  111. },
  112. // 时间戳转换日期
  113. formDate(time, formate = "yyyy-mm-dd hh:mm:ss") {
  114. var padDate = function (va) {
  115. va = va < 10 ? "0" + va : va;
  116. return va;
  117. };
  118. if (time) {
  119. var value = new Date(time * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
  120. // var value = new Date(parseFloat(time))
  121. var year = value.getFullYear();
  122. var month = padDate(value.getMonth() + 1);
  123. var day = padDate(value.getDate());
  124. var hour = padDate(value.getHours());
  125. var minutes = padDate(value.getMinutes());
  126. var seconds = padDate(value.getSeconds());
  127. let res = "";
  128. switch (formate) {
  129. case "mm-dd": {
  130. res = month + "-" + day;
  131. break;
  132. }
  133. case "yyyy-mm-dd": {
  134. res = year + "-" + month + "-" + day;
  135. break;
  136. }
  137. case "yyyy-mm": {
  138. res = year + "-" + month;
  139. break;
  140. }
  141. case "mm月dd日": {
  142. res = month + "月" + day + "日";
  143. break;
  144. }
  145. case "yyyy年mm月dd日": {
  146. res = year + "年" + month + "月" + day + "日";
  147. break;
  148. }
  149. case "yyyy年mm月": {
  150. res = year + "年" + month + "月";
  151. break;
  152. }
  153. case "hh:mm": {
  154. res = hour + ":" + minutes;
  155. break;
  156. }
  157. case "yyyy-mm-dd hh:mm": {
  158. res = year + "-" + month + "-" + day + " " + hour + ":" + minutes;
  159. break;
  160. }
  161. case "yyyy.mm.dd":
  162. res = year + "." + month + "." + day;
  163. break;
  164. case "yyyy-mm-dd hh:mm:ss":
  165. case "yyyy/mm/dd":
  166. res = year + "/" + month + "/" + day;
  167. break;
  168. default: {
  169. res =
  170. year +
  171. "-" +
  172. month +
  173. "-" +
  174. day +
  175. " " +
  176. hour +
  177. ":" +
  178. minutes +
  179. ":" +
  180. seconds;
  181. break;
  182. }
  183. }
  184. return res;
  185. }
  186. return "--";
  187. },
  188. //当前时间距离目标时间还有多久
  189. GetRTime(EndTime, isDay = true) {
  190. var EndTime = EndTime; //结束时间
  191. var NowTime = new Date(); //当前时间
  192. //后台给我的是10位 精确到秒的 所有下面我就除以了1000,不要小数点后面的
  193. var t = EndTime - (NowTime.getTime() / 1000).toFixed(0);
  194. if (t <= 0) {
  195. return "已结束";
  196. }
  197. //如果后台给的是毫秒 上面不用除以1000 下面的计算时间也都要除以1000 这里我去掉1000了
  198. var d = Math.floor(t / 60 / 60 / 24); //天 var d=Math.floor(t/1000/60/60/24)
  199. var h = Math.floor((t / 60 / 60) % 24); //时 var h=Math.floor(t/1000/60/60%24)
  200. var m = Math.floor((t / 60) % 60); //分 var m=Math.floor(t/1000/60%60)
  201. var s = Math.floor(t % 60); //秒 var s=Math.floor(t/1000%60)
  202. if (parseInt(d) < 10) {
  203. d = "0" + d;
  204. }
  205. if (parseInt(h) < 10) {
  206. h = "0" + h;
  207. }
  208. if (parseInt(m) < 10) {
  209. m = "0" + m;
  210. }
  211. if (parseInt(s) < 10) {
  212. s = "0" + s;
  213. }
  214. if (isDay) {
  215. return d;
  216. }
  217. return d + "天" + h + "小时" + m + "分" + s + "秒";
  218. },
  219. TimeTotimestamp(date) {
  220. var date = date.replace(/-/g, "/");
  221. var newDate = new Date(date);
  222. return newDate.getTime() / 1000;
  223. },
  224. timest() {
  225. var tmp = Date.parse(new Date()).toString();
  226. tmp = tmp.substr(0, 10);
  227. return tmp;
  228. },
  229. //压缩图片
  230. imageInfos(url) {
  231. var self = this;
  232. return new Promise((resolve, reject) => {
  233. uni.getImageInfo({
  234. src: url,
  235. success: async (res) => {
  236. let canvasWidth = res.width; //图片原始长宽
  237. let canvasHeight = res.height;
  238. if (canvasWidth > 2000 || canvasHeight > 2000) {
  239. uni.compressImage({
  240. src: url,
  241. quality: 75,
  242. width: "35%",
  243. height: "35%",
  244. success: async (rest) => {
  245. const waitUpload = await self.uploadFile(rest.tempFilePath, 0);
  246. console.log(waitUpload, "waitUpload");
  247. resolve(waitUpload);
  248. },
  249. });
  250. } else if (canvasWidth > 1000 || canvasHeight > 1000) {
  251. uni.compressImage({
  252. src: url,
  253. quality: 75,
  254. width: "50%",
  255. height: "50%",
  256. success: async (rest) => {
  257. const waitUpload = await self.uploadFile(rest.tempFilePath, 0);
  258. console.log(waitUpload, "waitUpload");
  259. resolve(waitUpload);
  260. },
  261. });
  262. } else {
  263. const waitUpload = await self.uploadFile(url, 0);
  264. console.log(waitUpload, "waitUpload");
  265. resolve(waitUpload);
  266. // console.log('无需压缩', url);
  267. // resolve(url);
  268. }
  269. },
  270. });
  271. });
  272. },
  273. //上传图片
  274. uploadFile(options, int) {
  275. return new Promise((resolve, reject) => {
  276. var self = this;
  277. // #ifdef MP-WEIXIN
  278. const isJPG =
  279. options.indexOf("//tmp") !== -1 || options.indexOf("//temp") !== -1;
  280. // #endif
  281. // #ifdef H5
  282. const isJPG = true;
  283. // #endif
  284. if (!isJPG) {
  285. resolve(options);
  286. return;
  287. }
  288. var data = {
  289. imageStatus: int,
  290. };
  291. api.aliyunpolicy(data).then((res) => {
  292. var ossToken = res.data.data.resultContent;
  293. uni.uploadFile({
  294. url: ossToken.host,
  295. name: "file",
  296. filePath: options,
  297. fileType: "image",
  298. header: {
  299. AuthorizationToken: "WX " + uni.getStorageSync("token"),
  300. },
  301. formData: {
  302. key: ossToken.dir,
  303. OSSAccessKeyId: ossToken.accessid,
  304. policy: ossToken.policy,
  305. Signature: ossToken.signature,
  306. // callback: ossToken.callback,
  307. success_action_status: 200,
  308. },
  309. success: (result) => {
  310. // if (result.statusCode === 200) {
  311. resolve(ossToken.dir);
  312. // } else {
  313. // uni.showToast({
  314. // title: '上传失败',
  315. // icon: 'none'
  316. // });
  317. // return;
  318. // }
  319. },
  320. fail: (error) => {
  321. uni.showToast({
  322. title: "上传接口报错",
  323. icon: "none",
  324. });
  325. return;
  326. },
  327. });
  328. });
  329. });
  330. },
  331. getYears(strBirthday) {
  332. if (!strBirthday) {
  333. return "-";
  334. }
  335. var returnAge;
  336. var strBirthdayArr = strBirthday.split("-");
  337. var birthYear = strBirthdayArr[0];
  338. var birthMonth = strBirthdayArr[1];
  339. var birthDay = strBirthdayArr[2];
  340. var d = new Date();
  341. var nowYear = d.getFullYear();
  342. var nowMonth = d.getMonth() + 1;
  343. var nowDay = d.getDate();
  344. if (nowYear == birthYear) {
  345. returnAge = 0; //同年 则为0岁
  346. } else {
  347. var ageDiff = nowYear - birthYear; //年之差
  348. if (ageDiff > 0) {
  349. if (nowMonth == birthMonth) {
  350. var dayDiff = nowDay - birthDay; //日之差
  351. if (dayDiff < 0) {
  352. returnAge = ageDiff - 1;
  353. } else {
  354. returnAge = ageDiff;
  355. }
  356. } else {
  357. var monthDiff = nowMonth - birthMonth; //月之差
  358. if (monthDiff < 0) {
  359. returnAge = ageDiff - 1;
  360. } else {
  361. returnAge = ageDiff;
  362. }
  363. }
  364. } else {
  365. returnAge = -1; //返回-1 表示出生日期输入错误 晚于今天
  366. }
  367. }
  368. return returnAge; //返回周岁年龄
  369. },
  370. getDate() {
  371. let nowDate = new Date();
  372. let date = {
  373. year: nowDate.getFullYear(),
  374. month: nowDate.getMonth() + 1,
  375. date: nowDate.getDate(),
  376. };
  377. return date.year + "-" + date.month + "-" + date.date;
  378. },
  379. getZeroTime() {
  380. return Number(new Date(new Date().toLocaleDateString()).getTime() / 1000);
  381. },
  382. setClock: function (time) {
  383. var that = this,
  384. sec = parseInt(time),
  385. clockCount = {},
  386. strTimer = "";
  387. clockCount = setInterval(function () {
  388. if (sec == 0) {
  389. $(".js-count-down").html("活动已经结束");
  390. clearInterval(clockCount);
  391. return false;
  392. }
  393. strTimer = that.secondToDate(sec);
  394. $(".js-count-down").html(strTimer);
  395. sec--;
  396. }, 1000);
  397. },
  398. secondToDate(result) {
  399. var h =
  400. Math.floor(result / 3600) < 10
  401. ? "0" + Math.floor(result / 3600)
  402. : Math.floor(result / 3600);
  403. var m =
  404. Math.floor((result / 60) % 60) < 10
  405. ? "0" + Math.floor((result / 60) % 60)
  406. : Math.floor((result / 60) % 60);
  407. var s =
  408. Math.floor(result % 60) < 10
  409. ? "0" + Math.floor(result % 60)
  410. : Math.floor(result % 60);
  411. if (h == 0) {
  412. result = m + ":" + s;
  413. } else {
  414. result = h + ":" + m + ":" + s;
  415. }
  416. return result;
  417. },
  418. /**
  419. *
  420. * @param {int} result
  421. * @returns {string}
  422. * @remard 单位S转小时分钟秒
  423. */
  424. secondToTime(result, Diszing = true) {
  425. var h =
  426. Math.floor(result / 3600) < 10
  427. ? "0" + Math.floor(result / 3600)
  428. : Math.floor(result / 3600);
  429. var m =
  430. Math.floor((result / 60) % 60) < 10
  431. ? "0" + Math.floor((result / 60) % 60)
  432. : Math.floor((result / 60) % 60);
  433. var s =
  434. Math.floor(result % 60) < 10
  435. ? "0" + Math.floor(result % 60)
  436. : Math.floor(result % 60);
  437. if (h == 0 && Diszing) {
  438. result = m + ":" + s;
  439. } else {
  440. result = h + ":" + m + ":" + s;
  441. }
  442. return result;
  443. },
  444. /**
  445. * @param {Object} length 长度
  446. * 获取随机字符串
  447. */
  448. getRandomString(length) {
  449. var str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  450. var result = "";
  451. for (var i = length; i > 0; --i)
  452. result += str[Math.floor(Math.random() * str.length)];
  453. return result;
  454. },
  455. skipLogin(sign) {
  456. return api.skipLogin({ sign }).then((res) => {
  457. if (res.data.code == 200) {
  458. uni.removeStorageSync("newUser_sc");
  459. uni.removeStorageSync("shareActivityCode");
  460. //信息完善,直接进入页面
  461. uni.setStorageSync("user_account", res.data.data.user_account);
  462. uni.setStorageSync("token", res.data.data.token);
  463. store.dispatch("getUserInfo").finally((e) => {
  464. return Promise.resolve();
  465. });
  466. } else {
  467. uni.navigateTo({
  468. url: "/pages4/login/login",
  469. });
  470. return Promise.reject();
  471. }
  472. });
  473. },
  474. getCanvas(that, className = ".canvas") {
  475. return new Promise((resolve, reject) => {
  476. uni.getSystemInfo({
  477. success: (res) => {
  478. const query = uni.createSelectorQuery().in(that);
  479. setTimeout(() => {
  480. query
  481. .select(className)
  482. .boundingClientRect()
  483. .exec((newRes) => {
  484. resolve({ systemInfo: res, newRes });
  485. });
  486. }, 1000);
  487. },
  488. });
  489. });
  490. },
  491. toLink(externalLink) {
  492. if (!externalLink) {
  493. uni.showModal({
  494. showCancel: false,
  495. content: "链接不存在",
  496. });
  497. return;
  498. }
  499. // #ifdef MP-WEIXIN
  500. uni.navigateTo({
  501. url: `/pages/webview/sdlink?url=` + externalLink,
  502. });
  503. // #endif
  504. // #ifdef H5
  505. window.location.href = externalLink;
  506. // #endif
  507. },
  508. calculateScore(data) {
  509. let score = 0; //计算总分
  510. let totalScore = 0; //总分
  511. let doWrongQuestionIds = []; //做错题id(案例题简答不算在内)
  512. let doQuestionIds = []; //做过的题目id
  513. let lessQuestionNum = 0; //多选题少选
  514. let rightQuestionIds = []; //做对的题目id
  515. let totalQuestionNum = 0; //排除主观题的总条数(简单题)
  516. data.forEach((item) => {
  517. console.log("答案--", item.ans, "选择--", item.ques);
  518. totalScore += item.score * (item.type == 4 ? item.jsonStr.length : 1);
  519. if (
  520. item.type < 4 ||
  521. (item.type == 4 && !item.jsonStr.some((e) => e.type == 5))
  522. ) {
  523. totalQuestionNum++;
  524. }
  525. if (item.type == 1 || item.type == 3) {
  526. //正确
  527. if (item.ques == item.ans) {
  528. item.scoreResult = item.score;
  529. score += item.score;
  530. rightQuestionIds.push(item.questionId);
  531. } else {
  532. //错误
  533. item.scoreResult = 0;
  534. if (item.ques) {
  535. doWrongQuestionIds.push(item.questionId);
  536. }
  537. }
  538. if (item.ques) {
  539. doQuestionIds.push(item.questionId);
  540. }
  541. } else if (item.type == 2) {
  542. let isRight =
  543. item.ans &&
  544. item.ans.every((quesItem, quesIndex) => {
  545. if (item.ques) {
  546. return item.ques[quesIndex] == item.ans[quesIndex];
  547. } else {
  548. return false;
  549. }
  550. });
  551. if (isRight) {
  552. score += item.score;
  553. item.scoreResult = item.score;
  554. rightQuestionIds.push(item.questionId);
  555. } else {
  556. let hasPart = false;
  557. let checkboxScore = 1; //获取单题总分数
  558. item.ques &&
  559. item.ques.forEach((ques, quesIndex) => {
  560. //选错一个全扣
  561. if (item.ques) {
  562. if (item.ans.indexOf(item.ques[quesIndex]) == -1) {
  563. checkboxScore = 0;
  564. }
  565. } else {
  566. checkboxScore = 0;
  567. }
  568. });
  569. //没选错
  570. if (checkboxScore) {
  571. checkboxScore = 0;
  572. item.ans.forEach((ans, quesIndex) => {
  573. //漏选扣一部分,对n题给n X partScore 分
  574. if (item.ques) {
  575. if (item.ques.indexOf(item.ans[quesIndex]) != -1) {
  576. checkboxScore += item.partScore;
  577. hasPart = true;
  578. }
  579. } else {
  580. checkboxScore = 0;
  581. }
  582. });
  583. }
  584. if (!hasPart) {
  585. //0分
  586. item.scoreResult = 0;
  587. if (item.ques) {
  588. doWrongQuestionIds.push(item.questionId);
  589. }
  590. } else {
  591. //部分分
  592. lessQuestionNum++;
  593. item.scoreResult = checkboxScore;
  594. score += checkboxScore;
  595. }
  596. }
  597. if (item.ques && item.ques.length) {
  598. doQuestionIds.push(item.questionId);
  599. }
  600. } else if (item.type == 4) {
  601. let len = item.ans.length;
  602. let questionScore = 0;
  603. if (item.ques && item.ques.length) {
  604. item.ques.forEach((ele, idx) => {
  605. if (
  606. ele == item.ans[idx] ||
  607. (item.jsonStr[idx].type == 2 &&
  608. ele.toString() == item.ans[idx].toString())
  609. ) {
  610. len--;
  611. questionScore += item.score;
  612. }
  613. });
  614. score += questionScore;
  615. item.scoreResult = questionScore;
  616. len == 0 && rightQuestionIds.push(item.questionId);
  617. doQuestionIds.push(item.questionId);
  618. }
  619. } else if (item.type == 5) {
  620. if (item.ques && (item.ques.imageList.length || item.ques.text)) {
  621. doQuestionIds.push(item.questionId);
  622. }
  623. }
  624. });
  625. return {
  626. reportStatus: score >= (data[0].passScore || totalScore * 0.6) ? 1 : 0,
  627. lessQuestionNum,
  628. performance: score,
  629. totalScore,
  630. doQuestionNum: doQuestionIds.length,
  631. doQuestionIds: doQuestionIds.join(","),
  632. rightQuestionIds: rightQuestionIds.join(","),
  633. rightQuestionNum: rightQuestionIds.length,
  634. historyExamJson: JSON.stringify(data),
  635. questionIds: doWrongQuestionIds,
  636. totalQuestionNum,
  637. };
  638. },
  639. checkDomain(str) {
  640. let domain =
  641. /^([\w-]+\.)+((com)|(net)|(org)|(gov\.cn)|(info)|(cc)|(com\.cn)|(net\.cn)|(org\.cn)|(name)|(biz)|(tv)|(cn)|(mobi)|(name)|(sh)|(ac)| (io)|(tw)|(com\.tw)|(hk)|(com\.hk)|(ws)|(travel)|(us)|(tm)|(la)|(me\.uk)|(org\.uk)|(ltd\.uk)|(plc\.uk)|(in)|(eu)|(it)|(jp))$/;
  642. return domain.test(str);
  643. },
  644. isWeixin() {
  645. var ua = window.navigator.userAgent.toLowerCase();
  646. if (
  647. ua.match(/MicroMessenger/i) == "micromessenger" ||
  648. ua.match(/_SQ_/i) == "_sq_"
  649. ) {
  650. return true;
  651. } else {
  652. return false;
  653. }
  654. },
  655. imageToBase64(url, quality = 0.8) {
  656. return new Promise((resolve, reject) => {
  657. url = this.splitImgHost(url);
  658. // #ifdef MP-WEIXIN
  659. let that = this;
  660. uni.downloadFile({
  661. url,
  662. success: (res) => {
  663. if (res.statusCode === 200) {
  664. that.fileToBase64(res.tempFilePath).then((res) => {
  665. resolve(res);
  666. });
  667. }
  668. },
  669. });
  670. // #endif
  671. // #ifdef H5
  672. let image = new Image();
  673. image.onload = function () {
  674. let canvas = document.createElement("canvas");
  675. canvas.width = image.width;
  676. canvas.height = image.height;
  677. let context = canvas.getContext("2d");
  678. context.drawImage(image, 0, 0, image.width, image.height);
  679. let base64 = canvas.toDataURL("image/jpeg", quality); //将图片格式转为base64
  680. resolve(base64);
  681. };
  682. image.setAttribute("crossOrigin", "Anonymous");
  683. image.src = url + "?time=" + Date.now();
  684. image.onerror = () => {
  685. reject(new Error("urlToBase64 error"));
  686. };
  687. // #endif
  688. });
  689. },
  690. fileToBase64(url) {
  691. return new Promise((resolve, reject) => {
  692. // #ifdef MP-WEIXIN
  693. let fileSystem = uni.getFileSystemManager();
  694. fileSystem.readFile({
  695. filePath: url,
  696. encoding: "base64",
  697. position: 0,
  698. success: (res) => {
  699. resolve("data:image/jpg;base64," + res.data);
  700. },
  701. fail(err) {
  702. console.error(err, "err");
  703. },
  704. });
  705. // #endif
  706. // #ifdef H5
  707. let reader = new FileReader();
  708. reader.readAsDataURL(url);
  709. reader.onload = (e) => {
  710. resolve(e.target.result);
  711. };
  712. // #endif
  713. });
  714. },
  715. isBase64(str) {
  716. var reg =
  717. /^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*?)\s*$/i;
  718. return reg.test(str);
  719. },
  720. isObject(object) {
  721. return object !== null && typeof object === "object";
  722. },
  723. isEmptyObject(object) {
  724. return this.isObject(object) && Object.keys(object).length < 1;
  725. },
  726. checkLock(action = "jxjy") {
  727. return new Promise((resolve, reject) => {
  728. api
  729. .lockLockStatus({
  730. action,
  731. uuid: this.getUuid(),
  732. })
  733. .then((res) => {
  734. if (res.data.code == 200) {
  735. //有其他端在操作,不能学习
  736. uni.showModal({
  737. title: "提示",
  738. content: "有其他端在操作,是否将该用户踢下线?",
  739. success: (res) => {
  740. if (res.confirm) {
  741. api.offline().then((r) => {
  742. if (r.data.code === 200) {
  743. resolve();
  744. }
  745. });
  746. }
  747. },
  748. });
  749. } else if (res.data.code == 500) {
  750. //可以学习
  751. resolve();
  752. }
  753. });
  754. });
  755. },
  756. };