updated
This commit is contained in:
parent
2842279165
commit
8a53037137
14 changed files with 154 additions and 239 deletions
158
.github/workflows/release.yaml
vendored
158
.github/workflows/release.yaml
vendored
|
|
@ -1,86 +1,86 @@
|
||||||
name: release-test
|
name: release-test
|
||||||
run-name: release-test ${{ github.actor }}
|
run-name: release-test ${{ github.actor }}
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- "version-[0-9]+.[0-9]+.[0-9]+"
|
- "version-[0-9]+.[0-9]+.[0-9]+"
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
env:
|
env:
|
||||||
REGISTRY: docker.frappet.com
|
REGISTRY: docker.frappet.com
|
||||||
IMAGE_NAME: ehr/bma-ehr-admin
|
IMAGE_NAME: ehr/bma-ehr-admin
|
||||||
DEPLOY_HOST: 49.0.91.80
|
DEPLOY_HOST: frappet.com
|
||||||
COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-admin
|
COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-admin
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# act workflow_dispatch -W .github/workflows/release.yaml --input IMAGE_VER=test-v6.1 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd
|
# act workflow_dispatch -W .github/workflows/release.yaml --input IMAGE_VER=test-v6.1 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd
|
||||||
release-test:
|
release-test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
# skip Set up QEMU because it fail on act and container
|
# skip Set up QEMU because it fail on act and container
|
||||||
# Gen Version try to get version from tag or inut
|
# Gen Version try to get version from tag or inut
|
||||||
- name: Set output tags
|
- name: Set output tags
|
||||||
id: vars
|
id: vars
|
||||||
run: echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
|
run: echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
|
||||||
- name: Gen Version
|
- name: Gen Version
|
||||||
id: gen_ver
|
id: gen_ver
|
||||||
run: |
|
run: |
|
||||||
if [[ $GITHUB_REF == 'refs/tags/'* ]]; then
|
if [[ $GITHUB_REF == 'refs/tags/'* ]]; then
|
||||||
IMAGE_VER=${{ steps.vars.outputs.tag }}
|
IMAGE_VER=${{ steps.vars.outputs.tag }}
|
||||||
else
|
else
|
||||||
IMAGE_VER=${{ github.event.inputs.IMAGE_VER }}
|
IMAGE_VER=${{ github.event.inputs.IMAGE_VER }}
|
||||||
fi
|
fi
|
||||||
if [[ $IMAGE_VER == '' ]]; then
|
if [[ $IMAGE_VER == '' ]]; then
|
||||||
IMAGE_VER='test-vBeta'
|
IMAGE_VER='test-vBeta'
|
||||||
fi
|
fi
|
||||||
echo '::set-output name=image_ver::'$IMAGE_VER
|
echo '::set-output name=image_ver::'$IMAGE_VER
|
||||||
- name: Test Version
|
- name: Test Version
|
||||||
run: |
|
run: |
|
||||||
echo $GITHUB_REF
|
echo $GITHUB_REF
|
||||||
echo ${{ steps.gen_ver.outputs.image_ver }}
|
echo ${{ steps.gen_ver.outputs.image_ver }}
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v2
|
||||||
- name: Login in to registry
|
- name: Login in to registry
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v2
|
||||||
with:
|
with:
|
||||||
registry: ${{env.REGISTRY}}
|
registry: ${{env.REGISTRY}}
|
||||||
username: ${{secrets.DOCKER_USER}}
|
username: ${{secrets.DOCKER_USER}}
|
||||||
password: ${{secrets.DOCKER_PASS}}
|
password: ${{secrets.DOCKER_PASS}}
|
||||||
- name: Build and load local docker image
|
- name: Build and load local docker image
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v3
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64
|
||||||
push: true
|
push: true
|
||||||
tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{ steps.gen_ver.outputs.image_ver }},${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest
|
tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{ steps.gen_ver.outputs.image_ver }},${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest
|
||||||
|
|
||||||
- name: Reload docker compose
|
- name: Reload docker compose
|
||||||
uses: appleboy/ssh-action@v0.1.8
|
uses: appleboy/ssh-action@v0.1.8
|
||||||
with:
|
with:
|
||||||
host: ${{env.DEPLOY_HOST}}
|
host: ${{env.DEPLOY_HOST}}
|
||||||
username: frappet
|
username: frappet
|
||||||
password: ${{ secrets.SSH_PASSWORD }}
|
password: ${{ secrets.SSH_PASSWORD }}
|
||||||
port: 10102
|
port: 10102
|
||||||
script: |
|
script: |
|
||||||
cd "${{env.COMPOSE_PATH}}"
|
cd "${{env.COMPOSE_PATH}}"
|
||||||
docker compose pull
|
docker compose pull
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
echo "${{ steps.gen_ver.outputs.image_ver }}"> success
|
echo "${{ steps.gen_ver.outputs.image_ver }}"> success
|
||||||
- uses: snow-actions/line-notify@v1.1.0
|
- uses: snow-actions/line-notify@v1.1.0
|
||||||
if: success()
|
if: success()
|
||||||
with:
|
with:
|
||||||
access_token: ${{ secrets.TOKEN_LINE }}
|
access_token: ${{ secrets.TOKEN_LINE }}
|
||||||
message: |
|
message: |
|
||||||
-Success✅✅✅
|
-Success✅✅✅
|
||||||
Image: ${{env.IMAGE_NAME}}
|
Image: ${{env.IMAGE_NAME}}
|
||||||
Version: ${{ steps.gen_ver.outputs.IMAGE_VER }}
|
Version: ${{ steps.gen_ver.outputs.IMAGE_VER }}
|
||||||
By: ${{secrets.DOCKER_USER}}
|
By: ${{secrets.DOCKER_USER}}
|
||||||
- uses: snow-actions/line-notify@v1.1.0
|
- uses: snow-actions/line-notify@v1.1.0
|
||||||
if: failure()
|
if: failure()
|
||||||
with:
|
with:
|
||||||
access_token: ${{ secrets.TOKEN_LINE }}
|
access_token: ${{ secrets.TOKEN_LINE }}
|
||||||
message: |
|
message: |
|
||||||
-Failure❌❌❌
|
-Failure❌❌❌
|
||||||
Image: ${{env.IMAGE_NAME}}
|
Image: ${{env.IMAGE_NAME}}
|
||||||
Version: ${{ steps.gen_ver.outputs.IMAGE_VER }}
|
Version: ${{ steps.gen_ver.outputs.IMAGE_VER }}
|
||||||
By: ${{secrets.DOCKER_USER}}
|
By: ${{secrets.DOCKER_USER}}
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ const menuList = readonly<any[]>([
|
||||||
activeIcon: "person",
|
activeIcon: "person",
|
||||||
label: "ข้อมูลหลัก",
|
label: "ข้อมูลหลัก",
|
||||||
path: "metadata",
|
path: "metadata",
|
||||||
role: ["SUPER_ADMIN", "ADMIN"],
|
role: ["SUPER_ADMIN"],
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
key: 2.0,
|
key: 2.0,
|
||||||
|
|
@ -100,12 +100,12 @@ const menuList = readonly<any[]>([
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 2.0,
|
key: 2.0,
|
||||||
label: "จัดการบทบาท (Roles)",
|
label: "จัดการบทบาทและสิทธิ์ (Roles)",
|
||||||
path: "manageRoles",
|
path: "manageRoles",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 2.0,
|
key: 2.0,
|
||||||
label: "จัดการสิทธิ์ (Permissions)",
|
label: "กำหนดสิทธิ์ (Permissions)",
|
||||||
path: "managePermission",
|
path: "managePermission",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -418,13 +418,11 @@ onMounted(() => {
|
||||||
</d-table>
|
</d-table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
copyPosition
|
|
||||||
<DialogAddPosition
|
<DialogAddPosition
|
||||||
v-model:add-position="modalAddPosition"
|
v-model:add-position="modalAddPosition"
|
||||||
v-model:form-data="formPositionSelect"
|
v-model:form-data="formPositionSelect"
|
||||||
v-model:edit-check="editPosition"
|
v-model:edit-check="editPosition"
|
||||||
v-model:copy-check="copyPosition"
|
v-model:copy-check="copyPosition"
|
||||||
|
|
||||||
:get-data="searchInput"
|
:get-data="searchInput"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -48,9 +48,7 @@ export default [
|
||||||
name: "masterCalendarWork",
|
name: "masterCalendarWork",
|
||||||
component: calendarWorkPage,
|
component: calendarWorkPage,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [7],
|
|
||||||
Role: "metadata",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -58,9 +56,7 @@ export default [
|
||||||
name: "masterInsigniaPage",
|
name: "masterInsigniaPage",
|
||||||
component: masterInsignia,
|
component: masterInsignia,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [7],
|
|
||||||
Role: "metadata",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -68,9 +64,7 @@ export default [
|
||||||
name: "masterInsigniadetail",
|
name: "masterInsigniadetail",
|
||||||
component: detailInsignia,
|
component: detailInsignia,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [7],
|
|
||||||
Role: "metadata",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -78,9 +72,7 @@ export default [
|
||||||
name: "masterPersonal",
|
name: "masterPersonal",
|
||||||
component: personalPage,
|
component: personalPage,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [7],
|
|
||||||
Role: "metadata",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -88,9 +80,7 @@ export default [
|
||||||
name: "masterPersonalDistrict",
|
name: "masterPersonalDistrict",
|
||||||
component: personalDistrict,
|
component: personalDistrict,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [7],
|
|
||||||
Role: "metadata",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -98,9 +88,7 @@ export default [
|
||||||
name: "masterPersonalSubDistrict",
|
name: "masterPersonalSubDistrict",
|
||||||
component: personalSubDistrict,
|
component: personalSubDistrict,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [7],
|
|
||||||
Role: "metadata",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -108,9 +96,7 @@ export default [
|
||||||
name: "masterPosition",
|
name: "masterPosition",
|
||||||
component: positionPage,
|
component: positionPage,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [7],
|
|
||||||
Role: "metadata",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -118,9 +104,7 @@ export default [
|
||||||
name: "masterPositionLevel",
|
name: "masterPositionLevel",
|
||||||
component: positionLevelPage,
|
component: positionLevelPage,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [9],
|
|
||||||
Role: "metadata",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -128,9 +112,7 @@ export default [
|
||||||
name: "masterPositionEmployee",
|
name: "masterPositionEmployee",
|
||||||
component: positionEmployeePage,
|
component: positionEmployeePage,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [8],
|
|
||||||
Role: "metadata",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -138,9 +120,7 @@ export default [
|
||||||
name: "masterPositionEmployeeLevel",
|
name: "masterPositionEmployeeLevel",
|
||||||
component: positionEmployeeLevelPage,
|
component: positionEmployeeLevelPage,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [9],
|
|
||||||
Role: "metadata",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -149,9 +129,7 @@ export default [
|
||||||
name: "KPIIndicatorByPlan",
|
name: "KPIIndicatorByPlan",
|
||||||
component: IndicatorByPlan,
|
component: IndicatorByPlan,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [1.1],
|
|
||||||
Role: "evaluateKPI",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -160,9 +138,7 @@ export default [
|
||||||
name: "KPIIndicatorByPlan/Add",
|
name: "KPIIndicatorByPlan/Add",
|
||||||
component: IndicatorByPlanDetail,
|
component: IndicatorByPlanDetail,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [1.1],
|
|
||||||
Role: "evaluateKPI",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -170,9 +146,7 @@ export default [
|
||||||
name: "KPIIndicatorByPlanByid",
|
name: "KPIIndicatorByPlanByid",
|
||||||
component: IndicatorByPlanDetail,
|
component: IndicatorByPlanDetail,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [1.1],
|
|
||||||
Role: "evaluateKPI",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -180,9 +154,7 @@ export default [
|
||||||
name: "KPIIndicatorByRole",
|
name: "KPIIndicatorByRole",
|
||||||
component: IndicatorByRole,
|
component: IndicatorByRole,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [1.1],
|
|
||||||
Role: "evaluateKPI",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -190,9 +162,7 @@ export default [
|
||||||
name: "KPIIndicatorByRoleAdd",
|
name: "KPIIndicatorByRoleAdd",
|
||||||
component: IndicatorByRoleDetail,
|
component: IndicatorByRoleDetail,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [1.1],
|
|
||||||
Role: "evaluateKPI",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -200,9 +170,7 @@ export default [
|
||||||
name: "KPIIndicatorByRoleByid",
|
name: "KPIIndicatorByRoleByid",
|
||||||
component: IndicatorByRoleDetail,
|
component: IndicatorByRoleDetail,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [1.1],
|
|
||||||
Role: "evaluateKPI",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -210,9 +178,7 @@ export default [
|
||||||
name: "KPICompetency",
|
name: "KPICompetency",
|
||||||
component: competencyPage,
|
component: competencyPage,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [1.1],
|
|
||||||
Role: "evaluateKPI",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -220,9 +186,7 @@ export default [
|
||||||
name: "KPICompetencyAdd",
|
name: "KPICompetencyAdd",
|
||||||
component: competencyAddPage,
|
component: competencyAddPage,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [1.1],
|
|
||||||
Role: "evaluateKPI",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -230,9 +194,7 @@ export default [
|
||||||
name: "KPICompetencyByid",
|
name: "KPICompetencyByid",
|
||||||
component: competencyAddPage,
|
component: competencyAddPage,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [1.1],
|
|
||||||
Role: "evaluateKPI",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -241,9 +203,7 @@ export default [
|
||||||
name: "strategic",
|
name: "strategic",
|
||||||
component: StrategicView,
|
component: StrategicView,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [1.6],
|
|
||||||
Role: "development",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -251,9 +211,7 @@ export default [
|
||||||
name: "KPIAssignment",
|
name: "KPIAssignment",
|
||||||
component: AssignmentView,
|
component: AssignmentView,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [1.6],
|
|
||||||
Role: "development",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -261,9 +219,7 @@ export default [
|
||||||
name: "KPIAssignmentById",
|
name: "KPIAssignmentById",
|
||||||
component: AssignmentDetailView,
|
component: AssignmentDetailView,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN"],
|
||||||
Key: [1.1],
|
|
||||||
Role: "evaluateKPI",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -127,7 +127,7 @@ watch(
|
||||||
lazy-rules
|
lazy-rules
|
||||||
hide-bottom-space
|
hide-bottom-space
|
||||||
class="inputgreen"
|
class="inputgreen"
|
||||||
label="คำอิบาย"
|
label="คำอธิบาย"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,7 @@ export default [
|
||||||
name: "manageUsers",
|
name: "manageUsers",
|
||||||
component: ListsPageUser,
|
component: ListsPageUser,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN", "ADMIN"],
|
||||||
Key: [7],
|
|
||||||
Role: "user_role",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -28,25 +26,15 @@ export default [
|
||||||
name: "manageUsersRolesId",
|
name: "manageUsersRolesId",
|
||||||
component: PageManagementRole,
|
component: PageManagementRole,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN", "ADMIN"],
|
||||||
Key: [7],
|
|
||||||
Role: "user_role",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
|
||||||
path: "/users/:id",
|
|
||||||
name: "masterInsignia",
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
path: "/roles",
|
path: "/roles",
|
||||||
name: "manageRoles",
|
name: "manageRoles",
|
||||||
component: ListsPageRole,
|
component: ListsPageRole,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN", "ADMIN"],
|
||||||
Key: [7],
|
|
||||||
Role: "user_role",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -55,9 +43,7 @@ export default [
|
||||||
name: "manageRolesId",
|
name: "manageRolesId",
|
||||||
component: ListsPage2Role,
|
component: ListsPage2Role,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN", "ADMIN"],
|
||||||
Key: [7],
|
|
||||||
Role: "user_role",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -66,9 +52,7 @@ export default [
|
||||||
name: "managePermission",
|
name: "managePermission",
|
||||||
component: PermissionPage,
|
component: PermissionPage,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
Role: ["SUPER_ADMIN", "ADMIN"],
|
||||||
Key: [7],
|
|
||||||
Role: "user_role",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -153,7 +153,9 @@ onMounted(() => {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="row items-center">
|
<div class="row items-center">
|
||||||
<div class="toptitle text-dark row items-center q-py-xs">จัดการบทบาท</div>
|
<div class="toptitle text-dark row items-center q-py-xs">
|
||||||
|
จัดการบทบาทและสิทธิ์
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<q-card flast bordered class="q-pa-md">
|
<q-card flast bordered class="q-pa-md">
|
||||||
|
|
|
||||||
|
|
@ -1171,7 +1171,7 @@ function onSubmit() {
|
||||||
class="q-mr-sm"
|
class="q-mr-sm"
|
||||||
@click="router.go(-1)"
|
@click="router.go(-1)"
|
||||||
/>
|
/>
|
||||||
จัดการสิทธิ์บทบาท
|
จัดการบทบาทและสิทธิ์
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<q-form greedy @submit.prevent @validation-success="onSubmit">
|
<q-form greedy @submit.prevent @validation-success="onSubmit">
|
||||||
|
|
@ -1200,7 +1200,7 @@ function onSubmit() {
|
||||||
lazy-rules
|
lazy-rules
|
||||||
hide-bottom-space
|
hide-bottom-space
|
||||||
class="inputgreen"
|
class="inputgreen"
|
||||||
label="คำอิบาย"
|
label="คำอธิบาย"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -1247,12 +1247,28 @@ function onSubmit() {
|
||||||
icon="info"
|
icon="info"
|
||||||
flat
|
flat
|
||||||
size="12px"
|
size="12px"
|
||||||
><q-tooltip class="text-body1 ">
|
><q-tooltip class="text-body1">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<div class="row no-wrap"><strong>ROOT</strong>-มีสิทธิเข้าถึงข้อมูลในทุกระดับ ตั้งแต่ระดับของตัวเองลงไปชั้นล่างสุด และขึ้นไปถึงชั้นบนสุด</div>
|
<div class="row no-wrap">
|
||||||
<div class="row no-wrap"><strong>CHILD</strong>-มีสิทธิเข้าถึงข้อมูลเฉพาะระดับชั้นปัจจุบันของตัวเอง ลงไปถึงชั้นล่างสุด</div>
|
<strong>ROOT</strong>-มีสิทธิเข้าถึงข้อมูลในทุกระดับ
|
||||||
<div class="row no-wrap"><strong>NORMAL</strong>-มีสิทธิเข้าถึงข้อมูลเฉพาะในระดับชั้นตัวเองเท่านั้น ไม่สามารถขึ้นหรือลงได้</div>
|
ตั้งแต่ระดับของตัวเองลงไปชั้นล่างสุด
|
||||||
<div class="row no-wrap"><strong>SPECIFIC</strong>-มีสิทธิเข้าถึงข้อมูลเฉพาะเจาะจง ซึ่งจะต้องกำ หนด ID ของข้อมูลที่ต้องการเข้าถึงด้วย</div>
|
และขึ้นไปถึงชั้นบนสุด
|
||||||
|
</div>
|
||||||
|
<div class="row no-wrap">
|
||||||
|
<strong>CHILD</strong
|
||||||
|
>-มีสิทธิเข้าถึงข้อมูลเฉพาะระดับชั้นปัจจุบันของตัวเอง
|
||||||
|
ลงไปถึงชั้นล่างสุด
|
||||||
|
</div>
|
||||||
|
<div class="row no-wrap">
|
||||||
|
<strong>NORMAL</strong
|
||||||
|
>-มีสิทธิเข้าถึงข้อมูลเฉพาะในระดับชั้นตัวเองเท่านั้น
|
||||||
|
ไม่สามารถขึ้นหรือลงได้
|
||||||
|
</div>
|
||||||
|
<div class="row no-wrap">
|
||||||
|
<strong>SPECIFIC</strong
|
||||||
|
>-มีสิทธิเข้าถึงข้อมูลเฉพาะเจาะจง ซึ่งจะต้องกำ หนด ID
|
||||||
|
ของข้อมูลที่ต้องการเข้าถึงด้วย
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</q-tooltip></q-btn
|
</q-tooltip></q-btn
|
||||||
></q-th
|
></q-th
|
||||||
|
|
@ -1659,10 +1675,9 @@ function onSubmit() {
|
||||||
top: -5px;
|
top: -5px;
|
||||||
right: -5px;
|
right: -5px;
|
||||||
}
|
}
|
||||||
.absolute-customH{
|
.absolute-customH {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -2px;
|
top: -2px;
|
||||||
right: -2px;
|
right: -2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ const columns = ref<QTableProps["columns"]>([
|
||||||
{
|
{
|
||||||
name: "role",
|
name: "role",
|
||||||
align: "left",
|
align: "left",
|
||||||
label: "สิทธิ์การจัดการ",
|
label: "สิทธิ์",
|
||||||
sortable: false,
|
sortable: false,
|
||||||
field: "role",
|
field: "role",
|
||||||
headerStyle: "font-size: 14px",
|
headerStyle: "font-size: 14px",
|
||||||
|
|
@ -352,7 +352,7 @@ onMounted(() => {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="row items-center">
|
<div class="row items-center">
|
||||||
<div class="toptitle text-dark row items-center q-py-xs">จัดการสิทธิ์</div>
|
<div class="toptitle text-dark row items-center q-py-xs">กำหนดสิทธิ์</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<q-card flast bordered>
|
<q-card flast bordered>
|
||||||
|
|
@ -568,7 +568,7 @@ onMounted(() => {
|
||||||
size="17px"
|
size="17px"
|
||||||
name="mdi-account-group"
|
name="mdi-account-group"
|
||||||
/>
|
/>
|
||||||
<div class="q-pl-md">จัดการสิทธิ์</div>
|
<div class="q-pl-md">กำหนดสิทธิ์</div>
|
||||||
</div>
|
</div>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,6 @@ export default [
|
||||||
name: "viewLogs",
|
name: "viewLogs",
|
||||||
component: ListsPage,
|
component: ListsPage,
|
||||||
meta: {
|
meta: {
|
||||||
Auth: true,
|
|
||||||
Key: [7],
|
|
||||||
Role: ["SUPER_ADMIN", "ADMIN"],
|
Role: ["SUPER_ADMIN", "ADMIN"],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
10
src/plugins/checkPermission.ts
Normal file
10
src/plugins/checkPermission.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
import keycloak from "@/plugins/keycloak";
|
||||||
|
|
||||||
|
const checkPermission = (array2: string[]): boolean => {
|
||||||
|
if (keycloak.tokenParsed) {
|
||||||
|
const array1: string[] = keycloak.tokenParsed?.role;
|
||||||
|
return array1.some((element) => array2.includes(element));
|
||||||
|
} else return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default checkPermission;
|
||||||
|
|
@ -10,6 +10,7 @@ import ModuleLogs from "@/modules/03_logs/router";
|
||||||
|
|
||||||
// TODO: ใช้หรือไม่?
|
// TODO: ใช้หรือไม่?
|
||||||
import keycloak from "@/plugins/keycloak";
|
import keycloak from "@/plugins/keycloak";
|
||||||
|
import checkPermission from "@/plugins/checkPermission";
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
history: createWebHistory(import.meta.env.BASE_URL),
|
history: createWebHistory(import.meta.env.BASE_URL),
|
||||||
|
|
@ -66,16 +67,10 @@ router.beforeEach((to, from, next) => {
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// keycloak.updateToken(60);
|
// keycloak.updateToken(60);
|
||||||
// const role = keycloak.tokenParsed?.role;
|
// if (checkPermission(to.meta.Role)) {
|
||||||
// console.log("tokenParsed===>", keycloak.tokenParsed?.role);
|
|
||||||
// console.log("Role===>", to.meta.Role);
|
|
||||||
// console.log(hasCommonValues(role, to.meta.Role));
|
|
||||||
|
|
||||||
// if (role.includes(to.meta.Role)) {
|
|
||||||
next();
|
next();
|
||||||
// } else {
|
// } else {
|
||||||
// next({ path: "" });
|
// next({ path: "" });
|
||||||
// // next();
|
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
import { defineStore } from "pinia";
|
|
||||||
import { ref } from "vue";
|
|
||||||
|
|
||||||
export const useroleUserDataStore = defineStore("roleusers", () => {
|
|
||||||
const insignia1Role = ref<boolean>(false);
|
|
||||||
const insignia2Role = ref<boolean>(false);
|
|
||||||
const caregiverRole = ref<boolean>(false);
|
|
||||||
const chairmanRole = ref<boolean>(false);
|
|
||||||
const commanderRole = ref<boolean>(false);
|
|
||||||
const admin2Role = ref<boolean>(false);
|
|
||||||
const adminRole = ref<boolean>(false);
|
|
||||||
const oligarchRole = ref<boolean>(false);
|
|
||||||
|
|
||||||
// const hasCommonValues = (array1: number[], array2: number[]): boolean => {
|
|
||||||
// return array1.some((element) => array2.includes(element));
|
|
||||||
// };
|
|
||||||
|
|
||||||
const fetchroleUser = async (keycloak: any) => {
|
|
||||||
if (keycloak != null) {
|
|
||||||
insignia1Role.value = await keycloak.includes("insignia1");
|
|
||||||
insignia2Role.value = await keycloak.includes("insignia2");
|
|
||||||
caregiverRole.value = await keycloak.includes("caregiver");
|
|
||||||
chairmanRole.value = await keycloak.includes("chairman");
|
|
||||||
commanderRole.value = await keycloak.includes("commander");
|
|
||||||
admin2Role.value = await keycloak.includes("admin2");
|
|
||||||
adminRole.value = await keycloak.includes("admin");
|
|
||||||
oligarchRole.value = await keycloak.includes("oligarch");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
fetchroleUser,
|
|
||||||
insignia1Role,
|
|
||||||
insignia2Role,
|
|
||||||
caregiverRole,
|
|
||||||
chairmanRole,
|
|
||||||
commanderRole,
|
|
||||||
admin2Role,
|
|
||||||
adminRole,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
@ -16,6 +16,7 @@ import type {
|
||||||
optionType,
|
optionType,
|
||||||
} from "../interface/request/main/main";
|
} from "../interface/request/main/main";
|
||||||
import { menuList } from "../interface/request/main/main";
|
import { menuList } from "../interface/request/main/main";
|
||||||
|
import checkPermission from "@/plugins/checkPermission";
|
||||||
// import { useroleUserDataStore } from "@/stores/roleUser";
|
// import { useroleUserDataStore } from "@/stores/roleUser";
|
||||||
|
|
||||||
const { setVerticalScrollPosition } = scroll;
|
const { setVerticalScrollPosition } = scroll;
|
||||||
|
|
@ -269,8 +270,6 @@ const doLogout = () => {
|
||||||
* ดิงชื่อผู้ใช้งานจาก keycloak
|
* ดิงชื่อผู้ใช้งานจาก keycloak
|
||||||
*/
|
*/
|
||||||
if (keycloak.tokenParsed != null) {
|
if (keycloak.tokenParsed != null) {
|
||||||
console.log("tokenParsed===>", keycloak.tokenParsed);
|
|
||||||
|
|
||||||
fullname.value = keycloak.tokenParsed.name;
|
fullname.value = keycloak.tokenParsed.name;
|
||||||
role.value = keycloak.tokenParsed.role;
|
role.value = keycloak.tokenParsed.role;
|
||||||
}
|
}
|
||||||
|
|
@ -762,8 +761,7 @@ watch(
|
||||||
<q-list padding>
|
<q-list padding>
|
||||||
<div v-for="(menuItem, index) in menuList" :key="index">
|
<div v-for="(menuItem, index) in menuList" :key="index">
|
||||||
<!-- เมนูย่อย -->
|
<!-- เมนูย่อย -->
|
||||||
<!-- v-if="role.includes(menuItem.role)" -->
|
<div v-if="checkPermission(menuItem.role)">
|
||||||
<div>
|
|
||||||
<q-expansion-item
|
<q-expansion-item
|
||||||
group="somegroup"
|
group="somegroup"
|
||||||
class="menuSub"
|
class="menuSub"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue