提交 eb610b6b authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 7f122024
......@@ -34,3 +34,8 @@ export function getProjectUserList(params?: { id?: string | string[] }) {
export function updateProject(data?: { id: string | string[]; title?: string; alias?: string; project_type: string; project_status: string; project_uri?: string; landing_page_uri?: string; }) {
return httpRequest.post('/api/zws/v1/backend/project/update', data)
}
// 获取项目相关的公共map
export function getProjectMap() {
return httpRequest.get('/api/zws/v1/backend/project/conditions')
}
<script setup lang="ts">
import { useGetProjectMap } from '@/composables/useGetProjectMap'
import type { FormRules } from 'element-plus'
import { getProjectDetail } from '../api'
import { useMap } from '../composables/useMap'
const route = useRoute()
const { projectTypeMap, projectStatusMap } = useGetProjectMap()
const { types, status, projectId, checkAuth, prefix } = useMap()
prefix.value = 'U:zws_config_projects:'
const ruleFormRef = ref()
......@@ -39,6 +41,7 @@ onMounted(() => {
if (prop.status?.isView || prop.status?.isUpdate) {
getProjectDetail({ id: route.params.id }).then((res: { data: ProjectInfoBase }) => {
form = Object.assign(form, res.data)
projectId.value = res.data.project_id
})
}
})
......@@ -62,26 +65,26 @@ defineExpose({
<el-card shadow="never" header="基本信息">
<el-form ref="ruleFormRef" :disabled="status?.isView" :model="form" :rules="rules" label-width="140px">
<el-form-item label="项目名称">
<el-input v-model="form.title" />
<el-input v-model="form.title" :disabled="!checkAuth('title')" />
</el-form-item>
<el-form-item label="项目别名">
<el-input v-model="form.alias" />
<el-input v-model="form.alias" :disabled="!checkAuth('alias')" />
</el-form-item>
<el-form-item label="项目类型" prop="project_type">
<el-select v-model="form.project_type" placeholder="请选择">
<el-option v-for="item in projectTypeMap" :key="item.id" :label="item.name" :value="item.id" />
<el-select v-model="form.project_type" placeholder="请选择" :disabled="!checkAuth('project_type')">
<el-option v-for="item in types" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="状态" prop="project_status">
<el-select v-model="form.project_status" placeholder="请选择">
<el-option v-for="item in projectStatusMap" :key="item.id" :label="item.name" :value="item.id" />
<el-select v-model="form.project_status" placeholder="请选择" :disabled="!checkAuth('project_status')">
<el-option v-for="item in status" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="项目站首页(原项目页)">
<el-input v-model="form.project_uri" />
<el-input v-model="form.project_uri" :disabled="!checkAuth('project_uri')" />
</el-form-item>
<el-form-item label="移动端落地页(原着陆页地址)">
<el-input v-model="form.landing_page_uri" />
<el-input v-model="form.landing_page_uri" :disabled="!checkAuth('landing_page_uri')" />
</el-form-item>
</el-form>
</el-card>
......
<script setup lang="ts">
import AppList from '@/components/base/AppList.vue'
import { getProjectUserList } from '../api'
import { useMap } from '../composables/useMap'
const { hasAuth } = useMap()
const AddMember = defineAsyncComponent(() => import('../components/AddMember.vue'))
const route = useRoute()
......
import { getProjectMap } from '../api'
interface State {
id: string
name: string
}
interface Project {
project_id: string
roles: string[]
permissions: string[]
tags: Record<string, string>
}
const types = ref<State[]>([])
const status = ref<State[]>([])
const authProjectList = ref<Project[]>([])
const tags = ref<Record<string, string>>({})
export function useMap() {
const projectId = ref('')
const prefix = ref('')
function fetchInfo() {
getProjectMap().then((res: any) => {
const data = res.data
types.value =
data.project_type_map?.map((item: { id: number; name: string }) => ({ ...item, id: item.id.toString() })) || []
status.value =
data.project_status_map?.map((item: { id: number; name: string }) => ({ ...item, id: item.id.toString() })) ||
[]
authProjectList.value = data.project_auth_map || []
tags.value = data.tags || {}
})
}
if (!authProjectList.value.length) fetchInfo()
// 当前项目
const project = computed(() => {
return authProjectList.value.find(item => item.project_id === projectId.value)
})
// 是否需要权限控制
function isAuth(key: string, pre: string = prefix.value) {
const prop = pre + key
return Object.prototype.hasOwnProperty.call(tags.value, prop)
}
// 有没有权限
function hasAuth(key: string, pid: string = projectId.value, pre: string = prefix.value) {
const project = authProjectList.value.find(item => item.project_id === pid)
// 暂时先返回true; 有项目ID的必须定义项目ID,要不等于没做权限处理
if (!project) return true
const prop = pre + key
return Object.prototype.hasOwnProperty.call(project.tags, prop)
}
// 权限校验
function checkAuth(key: string, pid: string = projectId.value, pre: string = prefix.value) {
return isAuth(key, pre) ? hasAuth(key, pid, pre) : true
}
return { types, status, authProjectList, tags, project, projectId, prefix, isAuth, hasAuth, checkAuth }
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论