Compare commits

...

3 commits

Author SHA1 Message Date
DESKTOP-1R2VSQH\Lenovo ThinkPad E490
60dfe0a6a5 Merge branch 'feat/registry' into develop 2026-06-11 17:55:26 +07:00
DESKTOP-1R2VSQH\Lenovo ThinkPad E490
d3e45048e8 fix 2026-06-11 16:30:18 +07:00
DESKTOP-1R2VSQH\Lenovo ThinkPad E490
a8920b4473 feat(changeName): change Rank 2026-06-10 10:59:06 +07:00
5 changed files with 66 additions and 168 deletions

View file

@ -1,50 +0,0 @@
# /.forgejo/workflows/build.yml
name: Build
# on:
# push:
# tags:
# - "v[0-9]+.[0-9]+.[0-9]+"
# - "v[0-9]+.[0-9]+.[0-9]+*"
# workflow_dispatch:
env:
REGISTRY: ${{ vars.CONTAINER_REGISTRY }}
REGISTRY_USERNAME: ${{ vars.CONTAINER_REGISTRY_USERNAME }}
REGISTRY_PASSWORD: ${{ secrets.CONTAINER_REGISTRY_PASSWORD }}
CONTAINER_IMAGE_NAME: ${{ vars.CONTAINER_REGISTRY }}/${{ vars.CONTAINER_IMAGE_OWNER }}/${{ vars.CONTAINER_IMAGE_NAME }}
IMAGE_VERSION: build
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
config-inline: |
[registry."${{ env.REGISTRY }}"]
ca=["/etc/ssl/certs/ca-certificates.crt"]
- name: Tag Version
run: |
if [[ "${{ github.event_name }}" == "push" ]]; then
echo "IMAGE_VERSION=${{ github.ref_name }}" | sed 's/v//g' >> $GITHUB_ENV
else
echo "IMAGE_VERSION=${{ env.IMAGE_VERSION }}-${{ github.run_number }}" >> $GITHUB_ENV
fi
- name: Login in to registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ env.REGISTRY_USERNAME }}
password: ${{ env.REGISTRY_PASSWORD }}
- name: Build and push docker image
uses: docker/build-push-action@v3
with:
platforms: linux/amd64
context: .
file: ./docker/Dockerfile
tags: ${{ env.CONTAINER_IMAGE_NAME }}:latest,${{ env.CONTAINER_IMAGE_NAME }}:${{ env.IMAGE_VERSION }}
push: true

View file

@ -1,86 +0,0 @@
# /.forgejo/workflows/ci-cd.yml
name: Build & Deploy on Dev
on:
push:
# branches:
# - dev
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
- "v[0-9]+.[0-9]+.[0-9]+*"
workflow_dispatch:
env:
REGISTRY: ${{ vars.CONTAINER_REGISTRY }}
REGISTRY_USERNAME: ${{ vars.CONTAINER_REGISTRY_USERNAME }}
REGISTRY_PASSWORD: ${{ secrets.CONTAINER_REGISTRY_PASSWORD }}
CONTAINER_IMAGE_NAME: ${{ vars.CONTAINER_REGISTRY }}/${{ vars.CONTAINER_IMAGE_OWNER }}/${{ vars.CONTAINER_IMAGE_NAME }}
IMAGE_VERSION: latest
DISCORD_WEBHOOK: ${{ vars.DISCORD_WEBHOOK }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
config-inline: |
[registry."${{ env.REGISTRY }}"]
ca=["/etc/ssl/certs/ca-certificates.crt"]
- name: Tag Version
run: |
if [ "${{ github.ref_type }}" == "tag" ]; then
echo "IMAGE_VERSION=${{ github.ref_name }}" >> $GITHUB_ENV
else
echo "IMAGE_VERSION=latest" >> $GITHUB_ENV
fi
- name: Login in to registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ env.REGISTRY_USERNAME }}
password: ${{ env.REGISTRY_PASSWORD }}
- name: Build and push docker image
uses: docker/build-push-action@v3
with:
platforms: linux/amd64
context: .
file: ./docker/Dockerfile
tags: ${{ env.CONTAINER_IMAGE_NAME }}:latest,${{ env.CONTAINER_IMAGE_NAME }}:${{ env.IMAGE_VERSION }}
push: true
- name: Remote Deploy
uses: appleboy/ssh-action@v1.2.1
with:
host: ${{ vars.SSH_DEPLOY_HOST }}
port: ${{ vars.SSH_DEPLOY_PORT }}
username: ${{ secrets.SSH_DEPLOY_USER }}
password: ${{ secrets.SSH_DEPLOY_PASSWORD }}
script: |
cd ~/repo
./replace-env.sh APP_MGT "${{ env.IMAGE_VERSION }}"
./deploy.sh hrms-mgt
- name: Discord Notification
if: always()
run: |
STATUS="${{ job.status == 'success' && '✅ Success' || '❌ Failed' }}"
COLOR="${{ job.status == 'success' && '3066993' || '15158332' }}"
TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%SZ)
curl -H "Content-Type: application/json" \
-X POST \
-d "{
\"embeds\": [{
\"title\": \"$STATUS\",
\"description\": \"**Build & Deploy**\\n- Image: \`${{ env.CONTAINER_IMAGE_NAME }}\`\\n- Version: \`${{ env.IMAGE_VERSION }}\`\\n- By: \`${{ github.actor }}\`\",
\"color\": $COLOR,
\"footer\": {
\"text\": \"Release Notification\",
\"icon_url\": \"https://example.com/success-icon.png\"
},
\"timestamp\": \"$TIMESTAMP\"
}]
}" \
${{ env.DISCORD_WEBHOOK }}

View file

@ -1,29 +0,0 @@
name: Build
on:
workflow_dispatch:
inputs:
version:
description: "Version to deploy"
type: string
required: false
default: "latest"
env:
IMAGE_VERSION: build
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Remote Deploy
uses: appleboy/ssh-action@v1.2.1
with:
host: ${{ vars.SSH_DEPLOY_HOST }}
port: ${{ vars.SSH_DEPLOY_PORT }}
username: ${{ secrets.SSH_DEPLOY_USER }}
password: ${{ secrets.SSH_DEPLOY_PASSWORD }}
script: |
cd ~/repo
./replace-env.sh APP_MGT "${{ inputs.version }}"
./deploy.sh hrms-mgt

View file

@ -59,6 +59,7 @@ const changeNameData = reactive<FormChangeName>({
profileId: profileId.value,
prefixId: "", // id
prefix: "", //
rank: "", //
firstName: "", //
lastName: "", //
status: "", //
@ -69,11 +70,13 @@ const selection = ref<string[]>([]); // ตัวเลือก
const prefixChange = ref<string | null | undefined>(""); //
const firstNameChange = ref<string | null | undefined>(""); //
const lastNameChange = ref<string | null | undefined>(""); //
const rankChange = ref<string | null | undefined>(""); //
const profileInfo = ref<DataProfile>(); // Profile
const statusOption = ref<string[]>([
"เปลี่ยนคำนำหน้าชื่อ",
"เปลี่ยนยศ",
"เปลี่ยนชื่อ",
"เปลี่ยนนามสกุล",
"เปลี่ยนชื่อ-นามสกุล",
@ -84,6 +87,7 @@ const statusOption = ref<string[]>([
const statusOptionFilter = ref<string[]>([
"เปลี่ยนคำนำหน้าชื่อ",
"เปลี่ยนชื่อ",
"เปลี่ยนยศ",
"เปลี่ยนนามสกุล",
"เปลี่ยนชื่อ-นามสกุล",
"เปลี่ยนคำนำหน้าชื่อ และชื่อ",
@ -107,6 +111,17 @@ const columns = ref<QTableProps["columns"]>([
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "rank",
align: "left",
label: "ยศ",
sortable: true,
field: "rank",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "firstName",
align: "left",
@ -156,6 +171,7 @@ const columns = ref<QTableProps["columns"]>([
]);
const visibleColumns = ref<string[]>([
"prefix",
"rank",
"firstName",
"lastName",
"lastUpdateFullName",
@ -215,6 +231,7 @@ function onSubmit() {
firstName: changeNameData.firstName,
lastName: changeNameData.lastName,
status: changeNameData.status,
rank: changeNameData.rank,
documentId: changeNameData.documentId,
})
.then(async (res) => {
@ -346,6 +363,14 @@ function filterSelector(val: string, update: Function, refData: string) {
);
});
break;
case "rankOps":
update(() => {
store.Ops.rankOps = store.OpsFilter.rankOps.filter(
(v: DataOption) => v.name.indexOf(val) > -1
);
});
break;
default:
break;
}
@ -390,12 +415,14 @@ watch(
changeNameData.prefix,
changeNameData.firstName,
changeNameData.lastName,
changeNameData.rank,
],
() => {
submitDisable.value =
changeNameData.prefix === prefixChange.value &&
changeNameData.firstName === firstNameChange.value &&
changeNameData.lastName === lastNameChange.value;
changeNameData.lastName === lastNameChange.value &&
changeNameData.rank === rankChange.value;
}
);
@ -411,6 +438,9 @@ watch(
if (!selection.value.includes("lastname")) {
changeNameData.lastName = lastNameChange.value;
}
if (!selection.value.includes("rank")) {
changeNameData.rank = rankChange.value;
}
}
);
/** ทำงานเมื่อ Components ถูกเรียกใช้งาน*/
@ -445,12 +475,14 @@ onMounted(async () => {
icon="add"
@click="
() => {
changeNameData.prefix = profileInfo?.prefixMain;
changeNameData.prefix = profileInfo?.prefix;
changeNameData.firstName = profileInfo?.firstName;
changeNameData.lastName = profileInfo?.lastName;
changeNameData.rank = profileInfo?.rank;
prefixChange = changeNameData.prefix;
firstNameChange = changeNameData.firstName;
lastNameChange = changeNameData.lastName;
rankChange = changeNameData.rank;
changeNameData.status = '';
dialogStatus = 'create';
submitDisable = true;
@ -563,12 +595,17 @@ onMounted(async () => {
<div class="row q-mb-sm">
<div class="col-12">
<div class="row">
<div class="q-gutter-sm">
<div class="q-col-gutter-sm">
<q-checkbox
v-model="selection"
val="prefix"
label="เปลี่ยนคำนำหน้าชื่อ"
/>
<q-checkbox
v-model="selection"
val="rank"
label="เปลี่ยนยศ"
/>
<q-checkbox
v-model="selection"
val="firstname"
@ -609,6 +646,31 @@ onMounted(async () => {
) "
/>
</div>
<div class="col">
<q-select
:readonly="!selection.includes('rank')"
v-model="changeNameData.rank"
:options="store.Ops.rankOps"
label="ยศ"
dense
:class="!selection.includes('rank') ? '' : 'inputgreen'"
outlined
use-input
hide-selected
fill-input
lazy-rules
emit-value
map-options
:rules="[(val:string) => !!val || `${'กรุณาเลือกยศ'}`]"
hide-bottom-space
input-debounce="0"
option-label="name"
option-value="name"
@filter="(inputValue:string,
doneFn:Function) => filterSelector(inputValue, doneFn,'rankOps'
) "
/>
</div>
<div class="col">
<q-input
:readonly="!selection.includes('firstname')"

View file

@ -66,6 +66,7 @@ interface FormChangeName {
profileId: string;
prefixId: string | null | undefined;
prefix: string | null | undefined;
rank: string | null | undefined;
firstName: string | null | undefined;
lastName: string | null | undefined;
status: string | null | undefined;