ui库合并版本完成
This commit is contained in:
305
ui/lib/js/modules.js
Normal file
305
ui/lib/js/modules.js
Normal file
@@ -0,0 +1,305 @@
|
||||
import http from "./request";
|
||||
import utils from "./utils";
|
||||
import Vue from "vue"
|
||||
|
||||
export const sys = {
|
||||
state: () => ({
|
||||
info: {},
|
||||
theme: {}
|
||||
}),
|
||||
mutations: {
|
||||
setSysInfo(state, info) {
|
||||
state.info = info
|
||||
},
|
||||
setTheme(state, theme) {
|
||||
state.theme = theme
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
getSystem({commit}, info) {
|
||||
return http.post("/app/appdvcpconfig/getSystemInfo", null, {withoutToken: true}).then(res => {
|
||||
if (res?.data) {
|
||||
let {systemInfo, colorScheme, enableGreyFilter} = res.data
|
||||
systemInfo = JSON.parse(systemInfo || null) || {}
|
||||
colorScheme = JSON.parse(colorScheme || null) || {}
|
||||
commit("setSysInfo", {...info, ...systemInfo})
|
||||
commit("setTheme", {colorScheme, enableGreyFilter})
|
||||
return res.data
|
||||
} else return Promise.reject()
|
||||
}).catch(() => commit("setSysInfo", info))
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 用户信息
|
||||
*/
|
||||
export const user = {
|
||||
state: () => ({
|
||||
token: "",
|
||||
info: {},
|
||||
routes: []
|
||||
}),
|
||||
mutations: {
|
||||
setToken(state, token) {
|
||||
state.token = token;
|
||||
},
|
||||
setUserInfo(state, info) {
|
||||
state.info = info
|
||||
},
|
||||
cleanUserInfo(state) {
|
||||
state.info = {}
|
||||
state.token = ""
|
||||
},
|
||||
setUserExtra(state, extra = {}) {
|
||||
Object.keys(extra).map(e => Vue.set(state, e, extra[e]))
|
||||
},
|
||||
setRoutes(state,routes){
|
||||
state.routes = routes
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
getToken({commit}, params) {
|
||||
let action = "/auth/oauth/token"
|
||||
if (params?.action) {
|
||||
action = params?.action
|
||||
delete params?.action
|
||||
}
|
||||
const password = utils.$encryption(params)
|
||||
return http.post(action, null, {
|
||||
auth: {
|
||||
username: 'villcloud',
|
||||
password: "villcloud"
|
||||
},
|
||||
params: {grant_type: 'password', scope: 'server', ...params, password}
|
||||
}).then(res => {
|
||||
if (res?.access_token) {
|
||||
const {token_type, access_token} = res, token = [token_type, access_token].join(" ")
|
||||
return commit('setToken', token)
|
||||
}
|
||||
})
|
||||
},
|
||||
getUserInfo({commit, dispatch}) {
|
||||
return http.post("/admin/user/detail-phone").then(res => {
|
||||
if (res?.data) {
|
||||
commit("setUserInfo", res.data)
|
||||
return Promise.all([dispatch('getWorkflowConfigs')]).then(() => res.data)
|
||||
}
|
||||
})
|
||||
},
|
||||
getRouteName({state}, appName) {
|
||||
return state.routes.find(e => e.component == appName)?.route || appName
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 企微jssdk功能
|
||||
*/
|
||||
let timer = {injectJWeixin: null, initOpenData: null}
|
||||
export const wxwork = {
|
||||
state: () => ({
|
||||
agentSignURL: "",
|
||||
apiList: [],
|
||||
config: {}
|
||||
}),
|
||||
mutations: {
|
||||
setConfig(state, config) {
|
||||
state.config = config
|
||||
},
|
||||
setAgentSignURL(state, url) {
|
||||
state.agentSignURL = url
|
||||
},
|
||||
setApiList(state, list) {
|
||||
state.apiList = list
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
agentSign({state, commit, rootState}, params) {
|
||||
//授权jssdk在url上使用,并获取corpId
|
||||
let url = window.location.href
|
||||
if (state.agentSignURL == url && state.config.corpId) {
|
||||
return Promise.resolve()
|
||||
} else {
|
||||
commit("setAgentSignURL", url)
|
||||
commit("setApiList", [])
|
||||
let action = "/app/wxcptp/portal/agentSign"
|
||||
if (!!params?.action) {
|
||||
action = params.action
|
||||
delete params.action
|
||||
}
|
||||
const {corpId} = rootState.user.info
|
||||
return http.post(action, null, {
|
||||
withoutToken: true,
|
||||
params: {corpId, ...params, url}
|
||||
}).then(res => {
|
||||
if (res?.data) {
|
||||
let config = {
|
||||
...params,
|
||||
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
|
||||
beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
|
||||
corpid: res.data.corpid, // 必填,企业微信的corpid,必须与当前登录的企业一致
|
||||
agentid: res.data.agentId, // 必填,企业微信的应用id (e.g. 1000247)
|
||||
timestamp: Number(res.data.timestamp), // 必填,生成签名的时间戳
|
||||
nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
|
||||
signature: res.data.signature,// 必填,签名,见 附录-JS-SDK使用权限签名算法
|
||||
...res.data
|
||||
}
|
||||
commit("setConfig", config)
|
||||
return config
|
||||
}
|
||||
}).catch(err => {
|
||||
commit("setAgentSignURL", "")
|
||||
console.error(err)
|
||||
})
|
||||
}
|
||||
},
|
||||
injectJWeixin({state, commit}, apis) {
|
||||
const inject = (jsApiList) => new Promise((resolve, reject) => {
|
||||
jsApiList = jsApiList || []
|
||||
if (timer.injectJWeixin) {//节流设置,50ms内的多次请求合并到一处
|
||||
clearTimeout(timer.injectJWeixin)
|
||||
jsApiList = [...new Set([...state.apiList, ...jsApiList])]
|
||||
commit("setApiList", jsApiList)
|
||||
}
|
||||
timer.injectJWeixin = setTimeout(() => {
|
||||
const sdk = wx?.agentConfig ? wx : jWeixin
|
||||
sdk?.agentConfig({
|
||||
...state.config, jsApiList,
|
||||
success: res => resolve(res),
|
||||
fail: err => {
|
||||
console.error(err)
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
}, 50)
|
||||
})
|
||||
return inject(apis)
|
||||
},
|
||||
initOpenData({dispatch, commit}, params = {}) {
|
||||
const initWOD = (count = 0) => {
|
||||
if (!!window?.WWOpenData) {
|
||||
const canvas = params?.canvas
|
||||
if (canvas) delete params.canvas
|
||||
if (timer.initOpenData) {
|
||||
clearTimeout(timer.initOpenData)
|
||||
}
|
||||
const init = () => canvas ? dispatch('initCanvas') : dispatch('bindElements')
|
||||
timer.initOpenData = setTimeout(() => {
|
||||
window?.WWOpenData?.checkSession({
|
||||
success: () => init(),
|
||||
fail: () => {
|
||||
dispatch('agentSign', params).then(() => dispatch("injectJWeixin")).then(() => init())
|
||||
}
|
||||
})
|
||||
}, 50)
|
||||
} else if (count > 10) {
|
||||
console.log("无法获取WWOpenData")
|
||||
} else {
|
||||
setTimeout(() => {
|
||||
initWOD(++count)
|
||||
}, 200)
|
||||
}
|
||||
}
|
||||
dispatch('agentSign', params).then(() => dispatch("injectJWeixin")).then(() => initWOD())
|
||||
},
|
||||
bindElements() {
|
||||
const nodes = document.querySelectorAll('.AiOpenData')
|
||||
window.WWOpenData?.bindAll(nodes)
|
||||
},
|
||||
initCanvas() {
|
||||
window.WWOpenData?.initCanvas()
|
||||
},
|
||||
transCanvas(store, items) {
|
||||
return new Promise((resolve, reject) => {
|
||||
window.WWOpenData?.prefetch({items}, (err, data) => {
|
||||
err ? reject(err) : resolve(data)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 各种前端方案记录选择
|
||||
*/
|
||||
export const logs = {
|
||||
state: () => ({
|
||||
closeIntro: []
|
||||
}),
|
||||
mutations: {
|
||||
addCloseIntro(state, app) {
|
||||
state.closeIntro.push(app)
|
||||
}
|
||||
},
|
||||
}
|
||||
/**
|
||||
* 流程信息
|
||||
*/
|
||||
const startProcess = (form) => {
|
||||
const {bid, app, flows = {}} = form
|
||||
const process = flows[app]
|
||||
if (!!process) {
|
||||
const {id: pid, config} = process
|
||||
let workflowConfig = JSON.parse(config || null), nowNodeId = [], startId
|
||||
workflowConfig?.nodes?.map(e => {
|
||||
if (e.type == "start") {
|
||||
e.properties.isStart = true
|
||||
e.properties.updateTime = utils.$moment().format("YYYY-MM-DD HH:mm:ss")
|
||||
startId = e.id
|
||||
}
|
||||
})
|
||||
workflowConfig?.edges?.map(e => {
|
||||
if (e.sourceNodeId == startId) {
|
||||
nowNodeId.push(e.targetNodeId)
|
||||
}
|
||||
})
|
||||
nowNodeId = nowNodeId?.toString()
|
||||
return !!nowNodeId && http.post("/app/appworkflowlog/addOrUpdate", {bid, pid, nowNodeId, workflowConfig: JSON.stringify(workflowConfig)})
|
||||
}
|
||||
}
|
||||
export const workflow = {
|
||||
state: () => ({}),
|
||||
mutations: {
|
||||
setWfConfigs(state, configs) {
|
||||
configs.map(e => {
|
||||
Vue.set(state, e.app, e)
|
||||
})
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
getWorkflowConfigs({commit}) {
|
||||
return http.post("/app/appworkflowmanage/list", null, {
|
||||
params: {size: 999}
|
||||
}).then(res => {
|
||||
if (res?.data) {
|
||||
return commit("setWfConfigs", res.data.records)
|
||||
}
|
||||
}).catch(() => 0)
|
||||
},
|
||||
startFlow(context, form) {
|
||||
startProcess(form)
|
||||
},
|
||||
endFlow(context, form) {
|
||||
let {workflowConfig = {}, nowNodeId} = form
|
||||
workflowConfig?.nodes?.map(e => {
|
||||
if (e.type == "end") {
|
||||
e.properties.isFinished = true
|
||||
e.properties.updateTime = utils.$moment().format("YYYY-MM-DD HH:mm:ss")
|
||||
nowNodeId = "nowNodeId"
|
||||
}
|
||||
})
|
||||
return http.post("/app/appworkflowlog/addOrUpdate", {...form, nowNodeId, workflowConfig: JSON.stringify(workflowConfig)})
|
||||
}
|
||||
},
|
||||
processAdapter(config) {//流程业务拦截器
|
||||
if (/addOrUpdate/.test(config.url)) {
|
||||
let app = config.url.replace(/.+(app[^\\\/]+).+/g, '$1')
|
||||
if (/appapplicationinfo/.test(app)) {//动态台账表单
|
||||
app = config.params?.appId
|
||||
} else if (/appcontentinfo/.test(app)) {//内容发布
|
||||
app = config.data?.moduleId
|
||||
}
|
||||
config.workflow = app
|
||||
}
|
||||
return config
|
||||
},
|
||||
startProcess
|
||||
}
|
||||
Reference in New Issue
Block a user