navPag.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  1. // #ifdef H5
  2. import wx from 'weixin-js-sdk'
  3. // #endif
  4. import store from '@/store/index.js'
  5. import { isWeixin, getQueryVariable } from './common.js'
  6. import { delayPerform } from 'js-perform-lock'
  7. import md5 from 'md5'
  8. import { getUserInfo } from './util.js'
  9. import { goLoginPage } from '@/mixins/index.js'
  10. import api from '@/common/http/'
  11. import { setStorage, getStorage, removeStorage } from '@/common/utils/storage.js'
  12. export const navToPage = (function () {
  13. return async function (p, goToType = 'navigateTo') {
  14. var { url, ...data } = p
  15. var userinfo = await getUserInfo()
  16. if (
  17. url &&
  18. userinfo.isGZSign &&
  19. !['/pages/index/index', '/pages/repairConfirmation'].find(item => !!~url.indexOf(item))
  20. ) {
  21. if (
  22. (
  23. await api.post('/worker/check/manual/sign/confirm', {
  24. type: 'gz'
  25. })
  26. )?.data
  27. ) {
  28. uni.showModal({
  29. title: '温馨提示',
  30. content: '您未签署确认书!',
  31. cancelText: '取消',
  32. confirmText: '去签署',
  33. success: res => {
  34. if (res.confirm) {
  35. uni[goToType]({
  36. url: webHref('/pages/repairConfirmation?type=gz'),
  37. ...data
  38. })
  39. }
  40. }
  41. })
  42. } else {
  43. uni.showModal({
  44. title: '温馨提示',
  45. content: '签署确认书正在审核!',
  46. cancelText: '取消',
  47. confirmText: '知道了',
  48. success: res => {}
  49. })
  50. }
  51. return
  52. }
  53. if (
  54. url &&
  55. userinfo.isFSSign &&
  56. !['/pages/index/index', '/pages/repairConfirmation'].find(item => !!~url.indexOf(item))
  57. ) {
  58. if (
  59. (
  60. await api.post('/worker/check/manual/sign/confirm', {
  61. type: 'fs'
  62. })
  63. )?.data
  64. ) {
  65. uni.showModal({
  66. title: '温馨提示',
  67. content: '您未签署确认书!',
  68. cancelText: '取消',
  69. confirmText: '去签署',
  70. success: res => {
  71. if (res.confirm) {
  72. uni[goToType]({
  73. url: webHref('/pages/repairConfirmation?type=fs'),
  74. ...data
  75. })
  76. }
  77. }
  78. })
  79. } else {
  80. uni.showModal({
  81. title: '温馨提示',
  82. content: '签署确认书正在审核!',
  83. cancelText: '取消',
  84. confirmText: '知道了',
  85. success: res => {}
  86. })
  87. }
  88. return
  89. }
  90. if (
  91. url &&
  92. ![
  93. '/pages/index/index',
  94. '/pages/workorder/index',
  95. '/pages/mine/index',
  96. '/packageMine/pages/userinfo',
  97. '/packageMine/pages/phone' // 绑定手机号码
  98. ].find(item => !!~url.indexOf(item)) &&
  99. !userinfo.mobile
  100. ) {
  101. uni.showModal({
  102. title: '温馨提示',
  103. content: '你尚未绑定手机号,请尽快绑定以免影响接单!',
  104. cancelText: '取消',
  105. confirmText: '去绑定',
  106. success: res => {
  107. if (res.confirm) {
  108. uni[goToType]({
  109. url: webHref('/packageMine/pages/phone'),
  110. ...data
  111. })
  112. }
  113. }
  114. })
  115. return
  116. }
  117. if (
  118. url &&
  119. ![
  120. '/pages/index/index',
  121. '/pages/workorder/index',
  122. '/pages/mine/index',
  123. '/packageMine/pages/userinfo',
  124. '/packageGoods/pages/order', // 商城
  125. '/packageMine/pages/distributorEnter', // 分销员
  126. '/packageMine/pages/myWebsit', // 入驻师傅
  127. '/packageMine/pages/workerEnter', // 入驻师傅
  128. '/packageMine/pages/phone', // 绑定手机号码
  129. '/packageEnter/pages/insurance', // 我的保险
  130. '/packageHome/pages/codeActivity/activityForm',
  131. '/packageHome/pages/codeActivity/activityExplain',
  132. '/packageHome/pages/codeActivity/applyDetail',
  133. '/packageHome/pages/codeActivity/activityExplain',
  134. '/packageHome/pages/codeActivity/activityList',
  135. '/packageMaterial/pages/partsApply/list',
  136. '/packageHome/pages/codeActivity/applyList' //填写信息
  137. ].find(item => !!~url.indexOf(item)) &&
  138. userinfo.type !== 'WORKER'
  139. ) {
  140. uni.showModal({
  141. title: '温馨提示',
  142. content: '你尚未入驻网点,请尽快入驻以免影响接单!',
  143. cancelText: '取消',
  144. confirmText: '去入驻',
  145. success: res => {
  146. if (res.confirm) {
  147. uni[goToType]({
  148. url: webHref('/packageMine/pages/myWebsit'),
  149. ...data
  150. })
  151. }
  152. }
  153. })
  154. return
  155. }
  156. // 纯h5版本
  157. uni[goToType]({
  158. url: webHref(url),
  159. ...data
  160. })
  161. }
  162. })()
  163. export function webViewHref(url, pam = {}, crossPagePam = {}) {
  164. console.log(store.state.user, '----0')
  165. var defaultPam = {
  166. ...pam,
  167. ...crossPagePam,
  168. appId: store.state.user.appId,
  169. openId: store.state.user.openId,
  170. userId: store.state.user.userId,
  171. code2: store.state.user.code2 || '',
  172. 'x-token': store.state.user.token,
  173. mobile: store.state.user.mobile,
  174. username: store.state.user.name,
  175. ...(() => {
  176. if (store.state.user.miniOpenId) {
  177. return {
  178. miniOpenId: store.state.user.miniOpenId
  179. }
  180. }
  181. return {}
  182. })(),
  183. ...(() => {
  184. if (store.state.user.sharerOpenId) {
  185. return {
  186. sharerOpenId: store.state.user.sharerOpenId
  187. }
  188. }
  189. return {}
  190. })(),
  191. // #ifndef H5
  192. miniProgram: 'jsm_env'
  193. // #endif
  194. }
  195. var pamstr = Object.entries(defaultPam)
  196. .map(item => item.join('='))
  197. .join('&')
  198. if (!!~url.indexOf('?')) {
  199. return process.env.VUE_APP_HREF + url + `${pamstr ? '&' + pamstr : ''}`
  200. } else {
  201. return process.env.VUE_APP_HREF + url + `${pamstr ? '?' + pamstr : ''}`
  202. }
  203. }
  204. // #ifdef H5
  205. window.navToPage = navToPage
  206. // #endif
  207. export function webHref(url, pam = {}, crossPagePam = {}) {
  208. console.log(store.state.user, '----1')
  209. if (!url) {
  210. return undefined
  211. }
  212. var defaultPam = {
  213. ...pam,
  214. ...crossPagePam,
  215. appId: store.state.user.appId,
  216. openId: store.state.user.openId,
  217. userId: store.state.user.userId,
  218. code2: store.state.user.code2 || '',
  219. 'x-token': store.state.user.token,
  220. mobile: store.state.user.mobile,
  221. username: store.state.user.name,
  222. ...(() => {
  223. if (store.state.user.miniOpenId) {
  224. return {
  225. miniOpenId: store.state.user.miniOpenId
  226. }
  227. }
  228. return {}
  229. })(),
  230. ...(() => {
  231. if (store.state.user.sharerOpenId) {
  232. return {
  233. sharerOpenId: store.state.user.sharerOpenId
  234. }
  235. }
  236. return {}
  237. })(),
  238. // #ifndef H5
  239. miniProgram: 'jsm_env'
  240. // #endif
  241. }
  242. var pamstr = Object.entries(defaultPam)
  243. .map(item => item.join('='))
  244. .join('&')
  245. if (!!~url.indexOf('?')) {
  246. return url + `${pamstr ? '&' + pamstr : ''}`
  247. } else {
  248. return url + `${pamstr ? '?' + pamstr : ''}`
  249. }
  250. }
  251. export const crossPage = (function () {
  252. var funs = {}
  253. var tiemIdIs = {}
  254. var datacd = []
  255. // #ifndef H5
  256. var delaydeparture = new delayPerform(250).refactor(function () {
  257. var data = {}
  258. datacd.map(function ([name, val]) {
  259. data[name] = val
  260. })
  261. setStorage('crossPageTs', encodeURIComponent(JSON.stringify(data)))
  262. store.commit('user/setcrossPagePam', new Date().getTime())
  263. setTimeout(function () {
  264. removeStorage('crossPageTs')
  265. }, 350)
  266. datacd = []
  267. })
  268. // #endif
  269. // #ifdef H5
  270. var delaydepartFun = new delayPerform(250).refactor(function () {
  271. var data = getQueryVariable('crossPageTs')
  272. if (data) {
  273. data = JSON.parse(decodeURIComponent(data))
  274. Object.keys(data).map(name => {
  275. Object.keys(funs[name]).map(key => {
  276. funs[name][key](data[name])
  277. })
  278. })
  279. }
  280. })
  281. // #endif
  282. // #ifdef H5
  283. var idss = {}
  284. wx.miniProgram.getEnv(res => {
  285. if (res.miniprogram) {
  286. ;(function tiemID() {
  287. try {
  288. Object.keys(idss).map(name => {
  289. if (idss[name] && idss[name] < new Date().getTime()) {
  290. if (getStorage(name)) {
  291. removeStorage(name)
  292. }
  293. delete idss[name]
  294. }
  295. })
  296. } catch (e) {
  297. //TODO handle the exception
  298. }
  299. try {
  300. Object.keys(funs).map(name => {
  301. var data = getStorage(name)
  302. if (data && !idss[name]) {
  303. Object.keys(funs[name]).map(key => {
  304. funs[name][key](data)
  305. })
  306. idss[name] = new Date().getTime() + 500
  307. }
  308. })
  309. } catch (e) {
  310. //TODO handle the exception
  311. }
  312. setTimeout(tiemID, 200)
  313. })()
  314. }
  315. })
  316. // #endif
  317. var funco = {
  318. $emit(name, data) {
  319. // 同个环境下可以触发
  320. if (funs[name]) {
  321. // #ifdef H5
  322. /**
  323. * idss用于h5页面跨窗口数据监听时防止重复监听,初始设值防止防止同窗口下重复执行
  324. */
  325. idss[name] = new Date().getTime() + 500
  326. // #endif
  327. Object.keys(funs[name]).map(key => {
  328. funs[name][key](data === undefined ? true : data)
  329. })
  330. }
  331. // #ifndef H5
  332. // 用于小程序触发更新H5页面
  333. datacd.push([name, data === undefined ? true : data])
  334. delaydeparture()
  335. // #endif
  336. // #ifdef H5
  337. // h5在小程序环境下通过定时器传送
  338. wx.miniProgram.getEnv(res => {
  339. if (res.miniprogram) {
  340. var postMessage = (window.uniWebview && window.uniWebview.postMessage) || window.postMessage
  341. if (postMessage) {
  342. postMessage({
  343. data: {
  344. type: 'crossPageTs',
  345. name,
  346. data
  347. }
  348. })
  349. }
  350. if (tiemIdIs[name]) {
  351. clearTimeout(tiemIdIs[name])
  352. }
  353. setStorage(name, data === undefined ? true : data)
  354. tiemIdIs[name] = setTimeout(function () {
  355. removeStorage(name)
  356. }, 350)
  357. }
  358. })
  359. // #endif
  360. },
  361. $on(name, fun) {
  362. if (!funs[name]) {
  363. funs[name] = {}
  364. }
  365. funs[name][md5(fun.toString())] = fun
  366. // #ifdef H5
  367. delaydepartFun()
  368. // #endif
  369. },
  370. $off(name, fun) {
  371. if (fun) {
  372. var skey = md5(fun.toString())
  373. if (funs[name] && funs[name][skey]) {
  374. delete funs[name][skey]
  375. }
  376. } else {
  377. delete funs[name]
  378. }
  379. },
  380. // #ifndef H5
  381. $listener(e) {
  382. e.detail.data.map(({ type, name, data }) => {
  383. if (funs[name]) {
  384. Object.keys(funs[name]).map(key => {
  385. funs[name][key](data)
  386. })
  387. }
  388. })
  389. }
  390. // #endif
  391. }
  392. return funco
  393. })()