import http from "./http"; import Vue from "vue"; /** * 用户登录信息 */ export const user = { state: () => ({}), mutations: { setUser(state, user) { for (const key in user) { Vue.set(state, key, user[key]) } } }, actions: { getAccount({dispatch, commit}, config) { //获取企业微信后台账号信息 return http.post("/admin/user/detail-phone", null, config).then(res => { if (res?.code == 0) { commit('setUser', res.data) return Promise.all([dispatch('getGridInfo', config)]) } }) }, getGridInfo({commit}, config) { //获取登录着网格员信息 return http.post("/app/appgirdmemberinfo/checkLogOnUser", null, config).then(res => { if (res?.data) { let {girdId, girdMemberId, girdName, checkType: girdCheckType, appGirdInfo: gridInfo} = res.data return commit("setUser", {girdId, girdMemberId, girdName, girdCheckType, gridInfo}) } }) } } } /** * 水印方法 * */ export const waterMarker = { mutations: { initWaterMarker(state) { const waterMarked = document.querySelector('#waterMarker') if (!waterMarked && state.user?.name) { const waterMarker = document.createElement('div') waterMarker.id = 'waterMarker' waterMarker.style.position = 'absolute' waterMarker.style.display = 'flex' waterMarker.style.flexWrap = 'wrap' waterMarker.style.overflow = 'hidden' waterMarker.style.justifyContent = 'space-between' waterMarker.style.alignContent = 'flex-start' waterMarker.style.zIndex = '2' waterMarker.style.top = '0' waterMarker.style.color = 'rgba(153,153,153,.2)' waterMarker.style.width = '100%' waterMarker.style.height = '100%' waterMarker.style.pointerEvents = 'none' for (let i = 0; i < 200; i++) { const markerItem = document.createElement('div') markerItem.style.fontSize = '14px' markerItem.style.padding = '30px' markerItem.style.height = '80px' markerItem.style.transform = 'rotate(-20deg)' markerItem.style.flexShrink = '0' markerItem.innerText = state.user?.name + state.user?.phone?.slice(-4) || "未授权" waterMarker.appendChild(markerItem) } document.querySelector('uni-page-body')?.appendChild(waterMarker) } // canvas 方案 // const HiDPICanvas = (w, h, ratio) => { // const PIXEL_RATIO = () => { // const c = document.createElement("canvas"), // ctx = c.getContext("2d"), // dpr = window.devicePixelRatio || 1, // bsr = ctx['webkitBackingStorePixelRatio'] || // ctx['mozBackingStorePixelRatio'] || // ctx['msBackingStorePixelRatio'] || // ctx['oBackingStorePixelRatio'] || // ctx['backingStorePixelRatio'] || 1; // // return dpr / bsr; // } // if (!ratio) { // ratio = PIXEL_RATIO(); // } // const can = document.createElement("canvas"); // can.width = w * ratio; // can.height = h * ratio; // can.style.width = w + "px"; // can.style.height = h + "px"; // can.getContext("2d").setTransform(ratio, 0, 0, ratio, 0, 0); // return can // } // if (!waterMarked && state.user?.name) { // const canvas = HiDPICanvas(100, 40) // canvas.style.display = 'none'; // let ctx = canvas.getContext("2d") // ctx.rotate(-20 * Math.PI / 180); // ctx.fillStyle = 'rgba(153,153,153,.3)'; // ctx.textAlign = 'left'; // ctx.textBaseline = 'middle'; // ctx.font = "lighter 7px 'Microsoft YaHei UI',sans-serif" // ctx.fillText(state.user?.name + state.user?.phone?.slice(-4) || "未授权", 0, 30); // const waterMarker = document.createElement('div') // if (waterMarker) { // waterMarker.id = 'waterMarker' // waterMarker.style.position = 'absolute' // waterMarker.style.zIndex = '2' // waterMarker.style.top = '0' // waterMarker.style.width = '100%' // waterMarker.style.height = '100%' // waterMarker.style.pointerEvents = 'none' // waterMarker.style.backgroundImage = "url(" + canvas.toDataURL("image/png") + ")" // document.querySelector('uni-page-body').appendChild(waterMarker) // } // } } } } /** * 企微jssdk功能 */ let apiList = [] export const wxwork = { actions: { injectJWeixin({commit, dispatch, state}, ops) { const inject = (jsApiList, config = state.config) => new Promise((resolve, reject) => { setTimeout(() => { let sdk = wx?.agentConfig ? wx : jWeixin sdk?.agentConfig({ ...config, jsApiList, success: res => resolve(res), fail: err => { console.error(err) reject(err) } }) }, 500) }) return new Promise((resolve, reject) => { dispatch("agentSign").then(config => { if (typeof ops == "object") { ops?.map(api => { if (!apiList?.includes(api)) apiList.push(api) }) } else { if (!apiList?.includes(ops)) apiList.push(ops) } inject(apiList, config).then(r => resolve(r)).catch(err => reject(err)) }) }) }, wxInvoke(state, op) { setTimeout(() => { let sdk = typeof wx?.invoke == 'function' ? wx : jWeixin sdk?.invoke(op?.[0], op?.[1], op?.[2]) }, 500) }, previewFile({dispatch}, op) { if (window.navigator.userAgent.indexOf("Windows NT") > -1) { uni.showToast({ title: "企业微信暂不支持PC端的预览文件!", icon: 'none' }) } else { dispatch("injectJWeixin", "previewFile").then(() => { setTimeout(() => { let sdk = typeof wx?.invoke == 'function' ? wx : jWeixin sdk?.invoke('previewFile', {...op}, res => { console.log(res) }) }, 500) }) } }, closeAgent({dispatch}) { dispatch("injectJWeixin", "closeWindow").then(() => { setTimeout(() => { let sdk = typeof wx?.closeWindow == 'function' ? wx : jWeixin sdk?.closeWindow() }, 500) }) }, selectEnterpriseContact({dispatch}, params) { return new Promise((resolve, reject) => { dispatch("injectJWeixin", "selectEnterpriseContact").then(() => { setTimeout(() => { let sdk = typeof wx?.invoke == 'function' ? wx : jWeixin sdk?.invoke("selectEnterpriseContact", { fromDepartmentId: -1, mode: "multi", type: ["user"], ...params }, res => { if (res.err_msg == "selectEnterpriseContact:ok") { if (typeof res.result == 'string') { res.result = JSON.parse(res.result) } resolve(res.result) } else { reject(res) } }) }, 500) }) }) }, selectPrivilegedContact({dispatch}, params) { return new Promise((resolve, reject) => { dispatch("injectJWeixin", "selectPrivilegedContact").then(() => { setTimeout(() => { let sdk = typeof wx?.invoke == 'function' ? wx : jWeixin sdk?.invoke("selectPrivilegedContact", { fromDepartmentId: -1, mode: "multi", ...params }, res => { if (res.err_msg == "selectPrivilegedContact:ok") { if (typeof res.result == 'string') { res.result = JSON.parse(res.result) } resolve(res.result) } else { reject(res) } }) }, 300) }).catch(() => { reject('error') }) }) }, } }