149 lines
6.8 KiB
JavaScript
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
|
|
}
|
|
}
|
|
}
|