Compare commits
3 Commits
1121c50af8
...
9de368ae57
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9de368ae57 | ||
|
|
f43edeb703 | ||
|
|
ef27055ca2 |
2
.env.development
Normal file
2
.env.development
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
VITE_APP_TITLE=member.ose.tw (dev)
|
||||||
|
VITE_API_BASE_URL=http://127.0.0.1:8000
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
# member.ose.tw frontend env
|
# member.ose.tw frontend env (production)
|
||||||
VITE_APP_TITLE=member.ose.tw
|
VITE_APP_TITLE=member.ose.tw
|
||||||
VITE_API_BASE_URL=http://memberapi_ose_tw:8000
|
VITE_API_BASE_URL=http://memberapi_ose_tw:8000
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,6 +1,5 @@
|
|||||||
# Local env
|
# Local env
|
||||||
.env
|
.env
|
||||||
.env.development
|
|
||||||
|
|
||||||
# Build output and deps
|
# Build output and deps
|
||||||
node_modules/
|
node_modules/
|
||||||
|
|||||||
@@ -86,13 +86,21 @@ async function redirectToOidc(options = {}) {
|
|||||||
codeChallenge: pkce.codeChallenge,
|
codeChallenge: pkce.codeChallenge,
|
||||||
codeChallengeMethod: 'S256'
|
codeChallengeMethod: 'S256'
|
||||||
})
|
})
|
||||||
const authorizeUrl = res.data.authorize_url
|
const authorizeUrl = res?.data?.authorize_url
|
||||||
const parsed = new URL(authorizeUrl)
|
if (!authorizeUrl) {
|
||||||
|
throw new Error('登入設定錯誤:未取得授權網址')
|
||||||
|
}
|
||||||
|
let parsed
|
||||||
|
try {
|
||||||
|
parsed = new URL(authorizeUrl, window.location.origin)
|
||||||
|
} catch (_err) {
|
||||||
|
throw new Error(`登入設定錯誤:授權網址無效 (${authorizeUrl})`)
|
||||||
|
}
|
||||||
const state = parsed.searchParams.get('state')
|
const state = parsed.searchParams.get('state')
|
||||||
if (state) {
|
if (state) {
|
||||||
sessionStorage.setItem('oidc_expected_state', state)
|
sessionStorage.setItem('oidc_expected_state', state)
|
||||||
}
|
}
|
||||||
window.location.href = authorizeUrl
|
window.location.href = parsed.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
async function generatePkcePair() {
|
async function generatePkcePair() {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
<el-table v-else :data="roles" stripe border class="w-full shadow-sm">
|
<el-table v-else :data="roles" stripe border class="w-full shadow-sm">
|
||||||
<template #empty><el-empty description="目前無角色" /></template>
|
<template #empty><el-empty description="目前無角色" /></template>
|
||||||
<el-table-column prop="role_key" label="Role Key" width="200" />
|
<el-table-column prop="role_key" label="Role Key" width="200" />
|
||||||
|
<el-table-column prop="role_code" label="Role Code" min-width="220" />
|
||||||
<el-table-column prop="system_name" label="系統" min-width="150" />
|
<el-table-column prop="system_name" label="系統" min-width="150" />
|
||||||
<el-table-column prop="name" label="角色名稱" min-width="180" />
|
<el-table-column prop="name" label="角色名稱" min-width="180" />
|
||||||
<el-table-column prop="status" label="狀態" width="110" />
|
<el-table-column prop="status" label="狀態" width="110" />
|
||||||
@@ -35,6 +36,9 @@
|
|||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="Role Code" prop="role_code">
|
||||||
|
<el-input v-model="createForm.role_code" placeholder="例如 mkt:marketing_card:edit" />
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="角色名稱" prop="name"><el-input v-model="createForm.name" /></el-form-item>
|
<el-form-item label="角色名稱" prop="name"><el-input v-model="createForm.name" /></el-form-item>
|
||||||
<el-form-item label="描述"><el-input v-model="createForm.description" type="textarea" :rows="2" /></el-form-item>
|
<el-form-item label="描述"><el-input v-model="createForm.description" type="textarea" :rows="2" /></el-form-item>
|
||||||
<el-form-item label="狀態">
|
<el-form-item label="狀態">
|
||||||
@@ -53,6 +57,9 @@
|
|||||||
<el-dialog v-model="showEditDialog" title="編輯角色" width="660px" @close="resetEditForm">
|
<el-dialog v-model="showEditDialog" title="編輯角色" width="660px" @close="resetEditForm">
|
||||||
<el-form :model="editForm" label-width="150px">
|
<el-form :model="editForm" label-width="150px">
|
||||||
<el-form-item label="Role Key"><el-input :model-value="editForm.role_key" disabled /></el-form-item>
|
<el-form-item label="Role Key"><el-input :model-value="editForm.role_key" disabled /></el-form-item>
|
||||||
|
<el-form-item label="Role Code">
|
||||||
|
<el-input v-model="editForm.role_code" placeholder="例如 mkt:marketing_card:edit" />
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="系統">
|
<el-form-item label="系統">
|
||||||
<el-select v-model="editForm.system_key" filterable style="width: 100%">
|
<el-select v-model="editForm.system_key" filterable style="width: 100%">
|
||||||
<el-option
|
<el-option
|
||||||
@@ -127,6 +134,7 @@ const createFormRef = ref()
|
|||||||
|
|
||||||
const createForm = ref({
|
const createForm = ref({
|
||||||
system_key: '',
|
system_key: '',
|
||||||
|
role_code: '',
|
||||||
name: '',
|
name: '',
|
||||||
description: '',
|
description: '',
|
||||||
status: 'active'
|
status: 'active'
|
||||||
@@ -134,12 +142,14 @@ const createForm = ref({
|
|||||||
const editForm = ref({
|
const editForm = ref({
|
||||||
role_key: '',
|
role_key: '',
|
||||||
system_key: '',
|
system_key: '',
|
||||||
|
role_code: '',
|
||||||
name: '',
|
name: '',
|
||||||
description: '',
|
description: '',
|
||||||
status: 'active'
|
status: 'active'
|
||||||
})
|
})
|
||||||
const rules = {
|
const rules = {
|
||||||
system_key: [{ required: true, message: '請選擇系統', trigger: 'change' }],
|
system_key: [{ required: true, message: '請選擇系統', trigger: 'change' }],
|
||||||
|
role_code: [{ required: true, message: '請輸入 Role Code', trigger: 'blur' }],
|
||||||
name: [{ required: true, message: '請輸入角色名稱', trigger: 'blur' }]
|
name: [{ required: true, message: '請輸入角色名稱', trigger: 'blur' }]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,6 +185,7 @@ async function load() {
|
|||||||
function resetCreateForm() {
|
function resetCreateForm() {
|
||||||
createForm.value = {
|
createForm.value = {
|
||||||
system_key: '',
|
system_key: '',
|
||||||
|
role_code: '',
|
||||||
name: '',
|
name: '',
|
||||||
description: '',
|
description: '',
|
||||||
status: 'active'
|
status: 'active'
|
||||||
@@ -185,6 +196,7 @@ function openEdit(row) {
|
|||||||
editForm.value = {
|
editForm.value = {
|
||||||
role_key: row.role_key,
|
role_key: row.role_key,
|
||||||
system_key: row.system_key,
|
system_key: row.system_key,
|
||||||
|
role_code: row.role_code || '',
|
||||||
name: row.name,
|
name: row.name,
|
||||||
description: row.description || '',
|
description: row.description || '',
|
||||||
status: row.status || 'active'
|
status: row.status || 'active'
|
||||||
@@ -196,6 +208,7 @@ function resetEditForm() {
|
|||||||
editForm.value = {
|
editForm.value = {
|
||||||
role_key: '',
|
role_key: '',
|
||||||
system_key: '',
|
system_key: '',
|
||||||
|
role_code: '',
|
||||||
name: '',
|
name: '',
|
||||||
description: '',
|
description: '',
|
||||||
status: 'active'
|
status: 'active'
|
||||||
@@ -209,6 +222,7 @@ async function handleCreate() {
|
|||||||
try {
|
try {
|
||||||
await createRole({
|
await createRole({
|
||||||
system_key: createForm.value.system_key,
|
system_key: createForm.value.system_key,
|
||||||
|
role_code: createForm.value.role_code,
|
||||||
name: createForm.value.name,
|
name: createForm.value.name,
|
||||||
description: createForm.value.description || null,
|
description: createForm.value.description || null,
|
||||||
status: createForm.value.status
|
status: createForm.value.status
|
||||||
@@ -229,6 +243,7 @@ async function handleEdit() {
|
|||||||
try {
|
try {
|
||||||
await updateRole(editForm.value.role_key, {
|
await updateRole(editForm.value.role_key, {
|
||||||
system_key: editForm.value.system_key,
|
system_key: editForm.value.system_key,
|
||||||
|
role_code: editForm.value.role_code,
|
||||||
name: editForm.value.name,
|
name: editForm.value.name,
|
||||||
description: editForm.value.description || null,
|
description: editForm.value.description || null,
|
||||||
status: editForm.value.status
|
status: editForm.value.status
|
||||||
|
|||||||
Reference in New Issue
Block a user