Files
FE_CPONE/test/vuex/dashboard-user-mcu/modules/dashboard_user.js
2026-05-08 09:50:43 +07:00

149 lines
6.8 KiB
JavaScript

import * as api from "../api/dashboard_user.js"
export default {
namespaced: true,
state: {
users: [],
selected_user: {},
project_options: [],
search_username: '',
search_project: { mcu_id: 'all', project_number: 'All', project_name: 'Semua Project' },
project_keyword: '',
page: 1,
limit: 20,
total_rows: 0,
total_pages: 0,
last_search_signature: '',
last_search_at: 0,
search_status: 0,
save_status: 0,
save_error_message: '',
dialog_success: false,
msg_success: ''
},
mutations: {
update_users(state, val) { state.users = val },
update_selected_user(state, val) { state.selected_user = val },
update_project_options(state, val) { state.project_options = val },
update_search_username(state, val) { state.search_username = val },
update_search_project(state, val) { state.search_project = val },
update_project_keyword(state, val) { state.project_keyword = val },
update_page(state, val) { state.page = val },
update_limit(state, val) { state.limit = val },
update_total_rows(state, val) { state.total_rows = val },
update_total_pages(state, val) { state.total_pages = val },
update_last_search_signature(state, val) { state.last_search_signature = val },
update_last_search_at(state, val) { state.last_search_at = val },
update_search_status(state, val) { state.search_status = val },
update_save_status(state, val) { state.save_status = val },
update_save_error_message(state, val) { state.save_error_message = val },
update_dialog_success(state, val) { state.dialog_success = val },
update_msg_success(state, val) { state.msg_success = val }
},
actions: {
async search(context, prm) {
let normalized = {
username: (prm && prm.username ? prm.username : '').trim(),
project: (prm && prm.project ? prm.project : 'all'),
page: Number(prm && prm.page ? prm.page : context.state.page) || 1,
limit: Number(prm && prm.limit ? prm.limit : context.state.limit) || 20
}
let signature = JSON.stringify(normalized)
let now = Date.now()
if (signature === context.state.last_search_signature && (now - context.state.last_search_at) < 1000) {
return { status: 'SKIP' }
}
context.commit('update_last_search_signature', signature)
context.commit('update_last_search_at', now)
context.commit('update_search_status', 1)
try {
let payload = Object.assign({}, normalized, { token: one_token() })
let resp = await api.search(payload)
if (resp.status != 'OK') {
context.commit('update_search_status', 3)
context.commit('update_save_error_message', resp.message)
} else {
let data = resp.data || {}
context.commit('update_users', data.records || [])
context.commit('update_total_rows', data.pagination ? data.pagination.total_rows : 0)
context.commit('update_total_pages', data.pagination ? data.pagination.total_pages : 0)
context.commit('update_limit', data.pagination ? data.pagination.limit : 20)
context.commit('update_search_status', 2)
}
} catch (e) {
context.commit('update_search_status', 3)
context.commit('update_save_error_message', e.message)
}
},
async search_project(context, prm) {
try {
prm.token = one_token()
let resp = await api.search_project(prm)
if (resp.status != 'OK') {
context.commit('update_project_options', [])
} else {
context.commit('update_project_options', resp.data.records || [])
}
} catch (e) {
context.commit('update_project_options', [])
}
},
async save(context, prm) {
context.commit('update_save_status', 1)
prm.token = one_token()
let resp = await api.save(prm)
if (resp.status != 'OK') {
context.commit('update_save_status', 3)
context.commit('update_save_error_message', resp.message)
return resp
}
context.commit('update_save_status', 2)
context.commit('update_msg_success', (resp.data && resp.data.message) ? resp.data.message : 'User berhasil disimpan')
context.commit('update_dialog_success', true)
return resp
},
async reset_password(context, prm) {
context.commit('update_save_status', 1)
prm.token = one_token()
let resp = await api.reset_password(prm)
if (resp.status != 'OK') {
context.commit('update_save_status', 3)
context.commit('update_save_error_message', resp.message)
return resp
}
context.commit('update_save_status', 2)
context.commit('update_msg_success', (resp.data && resp.data.message) ? resp.data.message : 'Password berhasil direset')
context.commit('update_dialog_success', true)
return resp
},
async assign_project(context, prm) {
context.commit('update_save_status', 1)
prm.token = one_token()
let resp = await api.assign_project(prm)
if (resp.status != 'OK') {
context.commit('update_save_status', 3)
context.commit('update_save_error_message', resp.message)
return resp
}
context.commit('update_save_status', 2)
context.commit('update_msg_success', (resp.data && resp.data.message) ? resp.data.message : 'Project berhasil di-assign')
context.commit('update_dialog_success', true)
return resp
},
async remove_project(context, prm) {
context.commit('update_save_status', 1)
prm.token = one_token()
let resp = await api.remove_project(prm)
if (resp.status != 'OK') {
context.commit('update_save_status', 3)
context.commit('update_save_error_message', resp.message)
return resp
}
context.commit('update_save_status', 2)
context.commit('update_msg_success', (resp.data && resp.data.message) ? resp.data.message : 'Project berhasil dihapus')
context.commit('update_dialog_success', true)
return resp
}
}
}