Compare commits
3 commits
5bcf07c306
...
60dfe0a6a5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
60dfe0a6a5 | ||
|
|
d3e45048e8 | ||
|
|
a8920b4473 |
5 changed files with 66 additions and 168 deletions
|
|
@ -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
|
||||
|
|
@ -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 }}
|
||||
|
|
@ -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
|
||||
|
|
@ -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')"
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue