Compare commits
17 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4a2a4eb3a3 | |||
| 0420b4cdbd | |||
| 4a8d6fb5d7 | |||
| dfd20c97dc | |||
|
|
066cc2dfcf | ||
|
|
7489c9d2aa | ||
|
|
1a1b8ed2cf | ||
|
|
d82d138c76 | ||
|
|
9fcea3ba95 | ||
|
|
ef2e9bd6a8 | ||
|
|
5f0c6756d9 | ||
|
|
bfcbe96678 | ||
| 13aa604a33 | |||
| fc6a42ee91 | |||
|
|
8c2f100cba | ||
|
|
0119ecec6d | ||
|
|
3a0d655ab0 |
7 changed files with 135 additions and 39 deletions
|
|
@ -16,4 +16,6 @@ export default {
|
|||
|
||||
/** กำหนดสิทธิ์*/
|
||||
managementPermission,
|
||||
|
||||
resetPassword: `${management}/user/reset-password`,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -36,8 +36,11 @@ const {
|
|||
hideLoader,
|
||||
success,
|
||||
dialogConfirm,
|
||||
dialogMessage,
|
||||
} = useCounterMixin();
|
||||
|
||||
const NODE_ENV = ref<string>(process.env.NODE_ENV || "development");
|
||||
|
||||
/** Tree*/
|
||||
const activeId = ref<string>(""); // id ของโครงสร้างที่ใช้งานอยู่
|
||||
const orgId = ref<string | null>(null); // id ของ node ที่เลือก
|
||||
|
|
@ -195,6 +198,12 @@ const itemMenu = ref<ItemsMenu[]>([
|
|||
color: "blue-9",
|
||||
type: "managementRole",
|
||||
},
|
||||
{
|
||||
label: "รีเซ็ตรหัสผ่าน",
|
||||
icon: "mdi-lock-reset",
|
||||
color: "teal-4",
|
||||
type: "resetPassword",
|
||||
},
|
||||
{
|
||||
label: "ลบ",
|
||||
icon: "delete",
|
||||
|
|
@ -281,7 +290,7 @@ async function fetchListUsers() {
|
|||
e.name === "STAFF" ||
|
||||
e.name === "SUPER_ADMIN" ||
|
||||
e.name === "ADMIN" ||
|
||||
e.name === "USER"
|
||||
e.name === "USER",
|
||||
)
|
||||
: [],
|
||||
}));
|
||||
|
|
@ -319,6 +328,8 @@ function onClickAction(type: string, data: Users) {
|
|||
// เปลี่ยนสถานะเปิด/ปิดของผู้ใช้งาน
|
||||
const status = type === "open" ? true : false;
|
||||
onLockUser(data.id, status);
|
||||
} else if (type === "resetPassword") {
|
||||
onReSetPassword(data.id);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -346,7 +357,7 @@ async function onDeleteUser(id: string) {
|
|||
currentPage.value = await updateCurrentPage(
|
||||
currentPage.value,
|
||||
maxPage.value,
|
||||
rows.value.length
|
||||
rows.value.length,
|
||||
);
|
||||
await fetchListUsers();
|
||||
success($q, "ลบข้อมูลสำเร็จ");
|
||||
|
|
@ -385,7 +396,7 @@ function onLockUser(id: string, type: boolean) {
|
|||
type ? "ยืนยันการเปิดใช้" : "ยืนยันการระงับใช้งาน",
|
||||
type
|
||||
? "ต้องการยืนยันการเปิดใช้นี้หรือไม่ ?"
|
||||
: "ต้องการยืนยันระงับการใช้งานนี้หรือไม่ ?"
|
||||
: "ต้องการยืนยันระงับการใช้งานนี้หรือไม่ ?",
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -410,7 +421,7 @@ function filterFnOptions(val: string, update: Function, type: string) {
|
|||
case "employeeClass":
|
||||
update(() => {
|
||||
employeeClassOption.value = employeeClassMain.value.filter(
|
||||
(v: DataOption) => v.name.indexOf(val) > -1
|
||||
(v: DataOption) => v.name.indexOf(val) > -1,
|
||||
);
|
||||
});
|
||||
break;
|
||||
|
|
@ -430,6 +441,42 @@ async function onSearchData() {
|
|||
await fetchListUsers();
|
||||
}
|
||||
|
||||
function onReSetPassword(id: string) {
|
||||
dialogConfirm(
|
||||
$q,
|
||||
async () => {
|
||||
try {
|
||||
showLoader();
|
||||
const messsage =
|
||||
NODE_ENV.value === "production"
|
||||
? "รหัสผ่านจะถูกเปลี่ยนเป็น วันเดือนปีพุทธศักราชเกิด ของผู้ใช้งาน (รูปแบบ ววดดปปปป เช่น 14042533)"
|
||||
: "ระบบจะตั้งรหัสผ่านใหม่เป็น P@ssw0rd";
|
||||
await http.post(config.API.resetPassword, {
|
||||
keycloak: id,
|
||||
});
|
||||
// success($q, "รีเซ็ตรหัสผ่านสำเร็จ");
|
||||
dialogMessage(
|
||||
$q,
|
||||
"รีเซ็ตรหัสผ่านสำเร็จ",
|
||||
messsage,
|
||||
"mdi-check-circle",
|
||||
"ตกลง",
|
||||
"green",
|
||||
() => {},
|
||||
() => {},
|
||||
true,
|
||||
);
|
||||
} catch (error) {
|
||||
messageError($q, error);
|
||||
} finally {
|
||||
hideLoader();
|
||||
}
|
||||
},
|
||||
"ยืนยันการรีเซ็ตรหัสผ่าน",
|
||||
"ต้องการยืนยันการรีเซ็ตรหัสผ่านนี้หรือไม่ ?",
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* ดูการเปลี่ยนแปลงของจำนวนข้อมูลต่อหน้า
|
||||
* ดึงข้อมูลรายชื่อผู้ใช้งานตามจำนวนข้อมูลต่อหน้า
|
||||
|
|
@ -438,7 +485,7 @@ watch(
|
|||
() => pageSize.value,
|
||||
() => {
|
||||
fetchListUsers();
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const tokenParsedData = ref<string[]>([]);
|
||||
|
|
@ -473,7 +520,7 @@ onMounted(async () => {
|
|||
<template>
|
||||
<div class="row items-center">
|
||||
<div class="toptitle text-dark row items-center q-py-xs">
|
||||
จัดการผู้ใช้งาน
|
||||
จัดการผู้ใช้งาน {{ NODE_ENV }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ const visibleColumns = ref<string[]>([
|
|||
"amount",
|
||||
"createdAt",
|
||||
"createdFullName",
|
||||
"accessType",
|
||||
]);
|
||||
const columns = ref<QTableProps["columns"]>([
|
||||
{
|
||||
|
|
@ -62,6 +63,22 @@ const columns = ref<QTableProps["columns"]>([
|
|||
.join("");
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "accessType",
|
||||
align: "left",
|
||||
label: "การเข้าถึง",
|
||||
sortable: true,
|
||||
field: "accessType",
|
||||
headerStyle: "font-size: 14px",
|
||||
style: "font-size: 14px",
|
||||
format(val, row) {
|
||||
if (val === "ALL") {
|
||||
return `ทั้งหมด`;
|
||||
} else {
|
||||
return `${val} (${row.orgName})`;
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "amount",
|
||||
align: "left",
|
||||
|
|
@ -147,7 +164,7 @@ function serchDataTable() {
|
|||
rows.value = onSearchDataTable(
|
||||
keyword.value,
|
||||
rowsMain.value,
|
||||
columns.value ? columns.value : []
|
||||
columns.value ? columns.value : [],
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,8 +13,10 @@ export const useIssueStore = defineStore("issue", () => {
|
|||
const statusOptions = ref<Options[]>([
|
||||
{ label: "ทั้งหมด", value: "" },
|
||||
{ label: "ใหม่", value: "NEW" },
|
||||
{ label: "กำลังดำเนินการ", value: "IN_PROGRESS" },
|
||||
{ label: "Dev กำลังดำเนินการ", value: "IN_PROGRESS" },
|
||||
{ label: "แก้ไขแล้ว", value: "RESOLVED" },
|
||||
{ label: "Helpdesk กำลังดำเนินการ", value: "HELPDESK_IN_PROGRESS" },
|
||||
{ label: "แจ้งกลับแล้ว", value: "REPLIED" },
|
||||
{ label: "ปิดแล้ว", value: "CLOSED" },
|
||||
]);
|
||||
|
||||
|
|
@ -24,11 +26,15 @@ export const useIssueStore = defineStore("issue", () => {
|
|||
case "NEW":
|
||||
return "ใหม่";
|
||||
case "IN_PROGRESS":
|
||||
return "กำลังดำเนินการ";
|
||||
return "Dev กำลังดำเนินการ";
|
||||
case "RESOLVED":
|
||||
return "แก้ไขแล้ว";
|
||||
case "CLOSED":
|
||||
return "ปิดแล้ว";
|
||||
case "HELPDESK_IN_PROGRESS":
|
||||
return "Helpdesk กำลังดำเนินการ";
|
||||
case "REPLIED":
|
||||
return "แจ้งกลับแล้ว";
|
||||
default:
|
||||
return "-";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ const { convertStatus, convertSystem } = store;
|
|||
const { systemOptions, statusOptions } = storeToRefs(store);
|
||||
|
||||
const visibleColumns = ref<string[]>([
|
||||
"codeIssue",
|
||||
"title",
|
||||
"description",
|
||||
"system",
|
||||
|
|
@ -34,6 +35,43 @@ const visibleColumns = ref<string[]>([
|
|||
"status",
|
||||
]);
|
||||
const columns = ref<QTableProps["columns"]>([
|
||||
{
|
||||
name: "codeIssue",
|
||||
align: "left",
|
||||
label: "รหัส",
|
||||
sortable: false,
|
||||
field: "codeIssue",
|
||||
headerStyle: "font-size: 14px",
|
||||
style: "font-size: 14px",
|
||||
},
|
||||
{
|
||||
name: "createdAt",
|
||||
align: "left",
|
||||
label: "วันที่สร้าง",
|
||||
sortable: false,
|
||||
field: "createdAt",
|
||||
headerStyle: "font-size: 14px",
|
||||
style: "font-size: 14px",
|
||||
format: (val: string) => date2Thai(new Date(val), false, true),
|
||||
},
|
||||
{
|
||||
name: "createdFullName",
|
||||
align: "left",
|
||||
label: "ชื่อผู้สร้าง",
|
||||
sortable: false,
|
||||
field: "createdFullName",
|
||||
headerStyle: "font-size: 14px",
|
||||
style: "font-size: 14px",
|
||||
},
|
||||
{
|
||||
name: "org",
|
||||
align: "left",
|
||||
label: "หน่วยงาน",
|
||||
sortable: false,
|
||||
field: "org",
|
||||
headerStyle: "font-size: 14px",
|
||||
style: "font-size: 14px",
|
||||
},
|
||||
{
|
||||
name: "title",
|
||||
align: "left",
|
||||
|
|
@ -71,16 +109,6 @@ const columns = ref<QTableProps["columns"]>([
|
|||
headerStyle: "font-size: 14px",
|
||||
style: "font-size: 14px",
|
||||
},
|
||||
|
||||
{
|
||||
name: "org",
|
||||
align: "left",
|
||||
label: "หน่วยงาน",
|
||||
sortable: false,
|
||||
field: "org",
|
||||
headerStyle: "font-size: 14px",
|
||||
style: "font-size: 14px",
|
||||
},
|
||||
{
|
||||
name: "email",
|
||||
align: "left",
|
||||
|
|
@ -100,25 +128,6 @@ const columns = ref<QTableProps["columns"]>([
|
|||
style: "font-size: 14px",
|
||||
},
|
||||
|
||||
{
|
||||
name: "createdAt",
|
||||
align: "left",
|
||||
label: "วันที่สร้าง",
|
||||
sortable: false,
|
||||
field: "createdAt",
|
||||
headerStyle: "font-size: 14px",
|
||||
style: "font-size: 14px",
|
||||
format: (val: string) => date2Thai(new Date(val), false, true),
|
||||
},
|
||||
{
|
||||
name: "createdFullName",
|
||||
align: "left",
|
||||
label: "ชื่อผู้สร้าง",
|
||||
sortable: false,
|
||||
field: "createdFullName",
|
||||
headerStyle: "font-size: 14px",
|
||||
style: "font-size: 14px",
|
||||
},
|
||||
{
|
||||
name: "status",
|
||||
align: "left",
|
||||
|
|
@ -194,6 +203,7 @@ onMounted(async () => {
|
|||
await fetchListIssues();
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="row items-center">
|
||||
<div class="toptitle text-dark row items-center q-py-xs">
|
||||
|
|
@ -231,6 +241,7 @@ onMounted(async () => {
|
|||
</div>
|
||||
<div class="col-xs-12 col-sm-8 col-md-6">
|
||||
<q-select
|
||||
class="select_ellipsis2"
|
||||
dense
|
||||
outlined
|
||||
v-model="statusFilter"
|
||||
|
|
|
|||
|
|
@ -187,5 +187,18 @@ h3.resigtry-tab-title
|
|||
text-overflow: ellipsis
|
||||
width: 200px
|
||||
|
||||
.select_ellipsis2 .q-field__native > span
|
||||
white-space: nowrap
|
||||
overflow: hidden
|
||||
text-overflow: ellipsis
|
||||
width: 300px
|
||||
|
||||
.select_ellipsis3 .q-field__native > span
|
||||
white-space: nowrap
|
||||
overflow: hidden
|
||||
text-overflow: ellipsis
|
||||
width: auto
|
||||
max-width: 60ch
|
||||
|
||||
.dialog-content-top .q-dialog__inner
|
||||
align-items: start
|
||||
|
|
|
|||
|
|
@ -357,7 +357,7 @@ async function fetchKeycloakPosition() {
|
|||
});
|
||||
}
|
||||
|
||||
const profileImg = ref<string>("");
|
||||
const profileImg = ref<string>(avatar);
|
||||
async function getImg(id: string, pathName: string) {
|
||||
await http
|
||||
.get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, pathName))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue