|
@@ -1,27 +1,137 @@
|
|
|
import pinia from '~src/store/init'
|
|
|
import { useAppStore } from '~src/store'
|
|
|
import { getButtons } from '~api/menu'
|
|
|
-import { getProjectAndContract } from '~api/user'
|
|
|
+import projectApi from '~api/project'
|
|
|
import { getStoreValue } from '~src/utils/storage'
|
|
|
-import { ArrToOneObj, getArrValue, getObjVal } from 'js-fast-way'
|
|
|
+import { ArrToOneObj, getArrValue, getObjVal, getObjValue, isNullES } from 'js-fast-way'
|
|
|
|
|
|
const store = useAppStore(pinia)
|
|
|
|
|
|
//项目合同段初始化
|
|
|
export const initProjectContract = async () => {
|
|
|
const value = getStoreValue('projectContract')
|
|
|
- const arr = getArrValue(value)
|
|
|
- if (arr.length <= 0) {
|
|
|
- const { error, data } = await getProjectAndContract()
|
|
|
+ if (value.length <= 0) {
|
|
|
+ const { error, data } = await getProjectContract()
|
|
|
if (error) return Promise.reject('error')
|
|
|
- const datas = getArrValue(data)
|
|
|
- store.setProjectContract(datas)
|
|
|
return Promise.resolve(data)
|
|
|
} else {
|
|
|
return Promise.resolve(value)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+//获取默认项目信息
|
|
|
+export const getProjectContract = async () => {
|
|
|
+ const { error, data } = await projectApi.getProjectAndContract()
|
|
|
+ let projectList = await getProjectArr(error, data)
|
|
|
+ if (projectList.length <= 0) {
|
|
|
+ return { error: true, data: [] }
|
|
|
+ }
|
|
|
+ //获取缓存的项目合同段数据
|
|
|
+ const isStore = await getStoreProjecInfo(projectList)
|
|
|
+ if (!isStore) {
|
|
|
+ const isDefault = await getDefaultProject(projectList)
|
|
|
+ if (!isDefault) return { error: true, data: [] }
|
|
|
+ }
|
|
|
+ //获取按钮权限
|
|
|
+ await initButtons()
|
|
|
+ //返回数据
|
|
|
+ return { error: false, data: projectList }
|
|
|
+}
|
|
|
+
|
|
|
+//根据缓存获取项目合同段数据
|
|
|
+const getStoreProjecInfo = async (arr) => {
|
|
|
+ const projectId = store.projectId //项目ID
|
|
|
+ const contractId = store.contractId //合同段ID
|
|
|
+ //查询缓存的选中ID是否存在
|
|
|
+ const pid = arr.findIndex(item => Number(item.id) === Number(projectId))
|
|
|
+ const contractList = getArrValue(arr[pid]?.contractInfoList)
|
|
|
+ const cid = contractList.findIndex(item => Number(item.id) === Number(contractId))
|
|
|
+ //如果缓存的选中ID不存在
|
|
|
+ if (cid === -1) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ //获取项目合同段数据
|
|
|
+ const projectInfo = await getProjectInfo(projectId)
|
|
|
+ const contractInfo = await getContractInfo(contractId)
|
|
|
+ if (isNullES(projectInfo) || isNullES(contractInfo)) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ setProjectStore(projectInfo, contractInfo)
|
|
|
+ return true
|
|
|
+}
|
|
|
+
|
|
|
+//获取默认项目信息
|
|
|
+const getDefaultProject = async (projectList) => {
|
|
|
+ const { error, status, data } = await projectApi.getDefaultProject()
|
|
|
+ if (!error && status === 200 && !isNullES(data)) {
|
|
|
+ const { projectId, contractId } = getObjValue(data)
|
|
|
+ if (!projectId || !contractId) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ const projectInfo = await getProjectInfo(projectId)
|
|
|
+ const contractInfo = await getContractInfo(contractId)
|
|
|
+ if (isNullES(projectInfo) || isNullES(contractInfo)) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ setProjectStore(projectInfo, contractInfo)
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ //获取第一个项目的第一个合同段数据
|
|
|
+ const contractList = getArrValue(projectList[0]?.contractInfoList)
|
|
|
+ const projectInfo = projectList[0]
|
|
|
+ const contractInfo = contractList[0]
|
|
|
+ //缓存数据
|
|
|
+ setProjectStore(projectInfo, contractInfo)
|
|
|
+ return true
|
|
|
+}
|
|
|
+
|
|
|
+//缓存数据
|
|
|
+const setProjectStore = (project, contract) => {
|
|
|
+ store.setProjectInfo(project)
|
|
|
+ store.setProjectId(project.id)
|
|
|
+ store.setContractInfo(contract)
|
|
|
+ store.setContractId(contract.id)
|
|
|
+}
|
|
|
+
|
|
|
+const getProjectArr = async (error, data) => {
|
|
|
+ let projectList = getArrValue(data)
|
|
|
+ if (error || projectList.length <= 0) {
|
|
|
+ window.$message?.error('没有相关项目权限')
|
|
|
+ return []
|
|
|
+ }
|
|
|
+ //处理合同段的别名
|
|
|
+ projectList.forEach(item => {
|
|
|
+ let contractArr = item['contractInfoList'] || []
|
|
|
+ contractArr.forEach(items => {
|
|
|
+ items['projectAlias'] = items['name']
|
|
|
+ })
|
|
|
+ })
|
|
|
+ //过滤空合同段的项目合同段数据
|
|
|
+ const projectArr = projectList.filter(({ contractInfoList }) => {
|
|
|
+ const contractList = getArrValue(contractInfoList)
|
|
|
+ return contractList.length > 0
|
|
|
+ })
|
|
|
+ if (projectArr.length <= 0) {
|
|
|
+ window.$message?.error('没有相关项目权限')
|
|
|
+ return []
|
|
|
+ }
|
|
|
+ store.setProjectContract(projectArr)
|
|
|
+ //返回数据
|
|
|
+ return projectArr
|
|
|
+}
|
|
|
+
|
|
|
+//获取项目信息
|
|
|
+const getProjectInfo = async (projectId) => {
|
|
|
+ const { data } = await projectApi.getProjectInfo(projectId)
|
|
|
+ return getObjValue(data)
|
|
|
+}
|
|
|
+
|
|
|
+//获取合同段信息
|
|
|
+const getContractInfo = async (contractId) => {
|
|
|
+ const { data } = await projectApi.getContractInfo(contractId)
|
|
|
+ return getObjValue(data)
|
|
|
+}
|
|
|
+
|
|
|
//按钮初始化
|
|
|
export const initButtons = async () => {
|
|
|
const value = getStoreValue('buttons')
|