diff --git a/src/views/KaryawanEdit.vue b/src/views/KaryawanEdit.vue index ec91f899d126da35baad0bd93b2dd789cd50ca2f..9fb3aaa3b90639c518f1a594480c2e9817b2d8de 100644 --- a/src/views/KaryawanEdit.vue +++ b/src/views/KaryawanEdit.vue @@ -31,10 +31,23 @@ </div> <div class="mb-3 me-3"> <label for="deptInput" class="text-blue"> Departemen </label> - <input v-model="employee.department" list="dept" id="deptInput" class="form-control" @change="getAtasan"> + <!-- <input v-model="employee.department" list="dept" id="deptInput" class="form-control" @change="getAtasan"> <datalist id="dept"> <option v-for="d in this.dept" :key="d" :value="d.name"></option> - </datalist> + </datalist> --> + <v-select v-model="dept_in" + :options="this.dept" + label="name" + > + <template #search="{attributes, events}"> + <input + class="vs__search" + :required="!dept_in" + v-bind="attributes" + v-on="events" + /> + </template> + </v-select> </div> <div class="mb-3 me-3"> <label for="jabatanInput" class="text-blue"> Jabatan </label> @@ -46,10 +59,15 @@ </div> <div class="mb-3 me-3"> <label for="atasanInput" class="text-blue"> Atasan </label> - <input v-model="employee.manager" list="atasan" id="atasanInput" class="form-control"> + <!-- <input v-model="employee.manager" list="atasan" id="atasanInput" class="form-control"> <datalist id="atasan"> <option v-for="a in this.atasan" :key="a.id" :value="a.name"></option> - </datalist> + </datalist> --> + <v-select v-model="atasan_in" + :options="this.atasan" + label="name" + > + </v-select> </div> <button type="submit" class="btn-blue p-1" >Simpan</button> <router-link :to="{ path: '/user' }" style="text-decoration: none"> @@ -83,13 +101,16 @@ import Header from "../components/header" import Sidebar from "../components/sidebar" import { HTTP } from "../http-common"; +import vSelect from 'vue-select' +import 'vue-select/dist/vue-select.css' export default { name: "KaryawanEdit", components: { Header, - Sidebar + Sidebar, + vSelect }, data() { return{ @@ -100,7 +121,7 @@ export default { nik: "", dept_in: "", jbt: "", - atasan_in: "", + atasan_in: null, username: "", email: "", password: "", @@ -126,67 +147,6 @@ export default { username: "" } }, - temp_dept: ["Keuangan", "Marketing", "Operasional"], - temp_atasan: ["Yusuf", "Budi"], - temp_jabatan: ["Manager", "Staf"], - temp_users: [ - { - id: 1, - nama: "Budi", - email: "budi@example.com", - jabatan: "manager", - departemen: "keuangan", - tanggal: "02-15-2020", - }, - { - id: 2, - nama: "Asep", - email: "asep@example.com", - jabatan: "staf", - departemen: "marketing", - tanggal: "02-12-2020", - }, - { - id: 3, - nama: "Yana", - email: "yana@example.com", - jabatan: "staf", - departemen: "keuangan", - tanggal: "02-10-2020", - }, - { - id: 4, - nama: "Yusuf", - email: "yusuf@example.com", - jabatan: "staf", - departemen: "keuangan", - tanggal: "02-10-2020", - }, - { - id: 5, - nama: "Siti", - email: "siti@example.com", - jabatan: "staf", - departemen: "keuangan", - tanggal: "02-10-2020", - }, - { - id: 6, - nama: "Yuni", - email: "yuni@example.com", - jabatan: "staf", - departemen: "keuangan", - tanggal: "02-10-2020", - }, - { - id: 7, - nama: "Hadi", - email: "hadi@example.com", - jabatan: "staf", - departemen: "keuangan", - tanggal: "02-10-2020", - }, - ], dept_last_page : 1, nav_active : JSON.parse(localStorage.getItem('navActive')), } @@ -210,49 +170,30 @@ export default { this.jabatan = this.temp_jabatan }, getAtasan(){ - this.dept.forEach((d) => { - if (d.name == this.employee.department){ - this.deptId = d.id - this.employee.department_id = d.id - HTTP.get(`departments/${this.deptId}/employees?except=${this.emp_id}`).then((res)=>{ + HTTP.get(`departments/${this.dept_in.id}/employees`).then((res)=>{ if (res.data.success == true){ this.atasan = [] res.data.data.forEach((a) => { this.atasan.push({name: a.name, id: a.id}) }) + console.log(this.atasan) } }) - } - }) }, save(e){ e.preventDefault(); - //cek departemen - if (this.deptId == null){ - alert("Departemen tidak ditemukan") - return - } - //cari id atasan let atasan_id = null - this.atasan.forEach(a => { - if (a.name == this.employee.manager){ - atasan_id = a.id - this.employee.manager_id = a.id - } - }); - if (atasan_id == null){ - alert(`Atasan tidak ditemukan dalam departemen ${this.dept_in}`) - return + if (this.atasan_in != null){ + atasan_id = this.atasan_in.id } - // let formValue = [this.nama, this.nik, this.deptId, this.jbt, atasan_id, this.username, this.email, this.password] let data = { user_id : this.employee.user_id, - manager_id : this.employee.manager_id, - department_id : this.employee.department_id, + manager_id : atasan_id, + department_id : this.dept_in.id, nik : this.employee.nik, name : this.employee.name, position : this.employee.position, @@ -289,10 +230,10 @@ export default { let user = res.data.data this.nama = user.name this.nik = user.nik - this.dept_in = user.department - this.deptId = user.dept_id + this.dept_in = {name: user.department, id:user.department_id} this.jbt = user.position this.atasan_id = user.manager_id + this.atasan_in = {name: this.employee.manager, id:this.employee.manager_id} this.username = user.user.username this.email = user.user.email this.emp_id = user.id @@ -310,6 +251,12 @@ export default { this.id = this.$route.params.id this.getData() + }, + watch:{ + dept_in(){ + console.log("in") + this.getAtasan() + } } } diff --git a/src/views/KaryawanInsert.vue b/src/views/KaryawanInsert.vue index bde8be3c8e8829fa74b51c5a5eaee945aee24648..2d9543f44fc97ca73dae75f5305cdeb25aaf34dc 100644 --- a/src/views/KaryawanInsert.vue +++ b/src/views/KaryawanInsert.vue @@ -31,14 +31,13 @@ </div> <div class="mb-3 me-3"> <label for="deptInput" class="text-blue"> Departemen </label> - <input v-model="dept_in" list="dept" id="deptInput" class="form-control" @input="getAtasan"> + <!-- <input v-model="dept_in" list="dept" id="deptInput" class="form-control" @input="getAtasan"> <datalist id="dept"> <option v-for="d in this.dept" :key="d" :value="d.name"></option> - </datalist> - <!-- <v-select v-model="dept_in" + </datalist> --> + <v-select v-model="dept_in" :options="this.dept" label="name" - @closed="()=>(getAtasan())" > <template #search="{attributes, events}"> <input @@ -47,8 +46,8 @@ v-bind="attributes" v-on="events" /> - </template> --> - <!-- </v-select> --> + </template> + </v-select> </div> <div class="mb-3 me-3"> <label for="jabatanInput" class="text-blue"> Jabatan </label> @@ -60,10 +59,15 @@ </div> <div class="mb-3 me-3"> <label for="atasanInput" class="text-blue"> Atasan </label> - <input v-model="atasan_in" list="atasan" id="atasanInput" class="form-control"> + <!-- <input v-model="atasan_in" list="atasan" id="atasanInput" class="form-control"> <datalist id="atasan"> <option v-for="a in this.atasan" :key="a" :value="a.name"></option> - </datalist> + </datalist> --> + <v-select v-model="atasan_in" + :options="this.atasan" + label="name" + > + </v-select> </div> <button type="submit" class="btn-blue p-1" >Simpan</button> <router-link :to="{ path: '/user' }" style="text-decoration: none"> @@ -97,7 +101,8 @@ import Header from "../components/header" import Sidebar from "../components/sidebar" import { HTTP } from "../http-common"; -// import vSelect from 'vue-select' +import vSelect from 'vue-select' +import 'vue-select/dist/vue-select.css' export default { @@ -105,7 +110,7 @@ export default { components: { Header, Sidebar, - // vSelect + vSelect }, data() { return{ @@ -116,7 +121,7 @@ export default { nik: "", dept_in: "", jbt: "", - atasan_in: "", + atasan_in: null, username: "", email: "", password: "", @@ -147,56 +152,29 @@ export default { this.jabatan = this.temp_jabatan }, getAtasan(){ - this.dept.forEach((d) => { - if (d.name == this.dept_in){ - this.deptId = d.id - // this.employee.department_id = d.id - HTTP.get(`departments/${this.deptId}/employees`).then((res)=>{ + HTTP.get(`departments/${this.dept_in.id}/employees`).then((res)=>{ if (res.data.success == true){ this.atasan = [] res.data.data.forEach((a) => { this.atasan.push({name: a.name, id: a.id}) }) + console.log(this.atasan) } }) - } - }) - // console.log("in") - // HTTP.get(`departments/${this.dept_in.id}/employees`).then((res)=>{ - // if (res.data.success == true){ - // this.atasan = [] - // res.data.data.forEach((a) => { - // this.atasan.push({name: a.name, id: a.id}) - // }) - // } - // }) }, insert(e){ e.preventDefault(); - - //cek departemen - if (this.deptId == null){ - alert("Departemen tidak ditemukan") - return - } + // let formValue = [this.nama, this.nik, this.deptId, this.jbt, atasan_id, this.username, this.email, this.password] - //cari id atasan let atasan_id = null - this.atasan.forEach(a => { - if (a.name == this.atasan_in){ - atasan_id = a.id - } - }); - if (atasan_id == null){ - alert(`Atasan tidak ditemukan dalam departemen ${this.dept_in}`) - return + if (this.atasan_in != null){ + atasan_id = this.atasan_in.id } - // let formValue = [this.nama, this.nik, this.deptId, this.jbt, atasan_id, this.username, this.email, this.password] let data = { manager_id : atasan_id, - department_id : this.deptId, + department_id : this.dept_in.id, nik : this.nik, name : this.nama, position : this.jbt, @@ -227,6 +205,12 @@ export default { mounted(){ this.getDept() this.getJabatan() + }, + watch:{ + dept_in(){ + console.log("in") + this.getAtasan() + } } } diff --git a/src/views/KpiCreate.vue b/src/views/KpiCreate.vue index 417f110a84180eb080e4373546c07dd6a3ef5b80..66fee748cb573075b4b1069b49382c78bd2d44ae 100644 --- a/src/views/KpiCreate.vue +++ b/src/views/KpiCreate.vue @@ -52,7 +52,7 @@ </div> <button type="submit" class="btn-blue p-1" >Simpan</button> - <router-link :to="{ path: '/user' }" style="text-decoration: none"> + <router-link :to="{ path: '/manager/kpi' }" style="text-decoration: none"> <button class="btn-red p-1">Batalkan</button> </router-link> </div> diff --git a/src/views/KpiDetail.vue b/src/views/KpiDetail.vue index e69b38d1a6093160fb8912162fe855a9b870fe86..fbcdb4f7b2336b0d1608df817b3b8119f21ccf42 100644 --- a/src/views/KpiDetail.vue +++ b/src/views/KpiDetail.vue @@ -79,18 +79,22 @@ <label class="form-check-label text-blue ms-2" for="CheckDefault">Target Inverted </label> </div> </div> - <div> - <button @click="responses " class="btn float-end">Responses</button> - </div> + </div> </form> + <div class="row p-3"> + <div class="col"> + <button @click="responses" class="btn float-end">Responses</button> + </div> + </div> <div class="row p-3"> <h1 class="text-blue">Buat Response</h1> <hr class="my-2"> <form id="formResponse" @submit="insert" autocomplete="off"> <div class="mb-3 me-3"> <label class="text-blue"> Nilai Aktual </label> - <input v-model="response.actual" type="number" min="0" class="form-control" required> + <input v-if="!kpi.is_score_inverted" v-model="response.actual" type="number" min="0" :max="kpi.target" class="form-control" required> + <input v-else v-model="response.actual" type="number" min="0" class="form-control" required> </div> <div class="mb-3 me-3"> <label class="text-blue"> Deskripsi </label> @@ -100,7 +104,14 @@ <label class="text-blue"> Bukti </label> <input type="file" accept="image/*" class="form-control" @change="onUpload" required> </div> - <button type="submit" class="btn p-1" >Simpan</button> + <div class="row"> + <div class="col-md-auto"> + <button type="submit" class="btn p-1" >Simpan</button> + </div> + <div v-show="sending" class="col p-2"> + <p class="text-blue">Mengirimkan response...</p> + </div> + </div> </form> </div> @@ -115,7 +126,7 @@ import Header from "../components/header" import Sidebar from "../components/sidebar" import { HTTP } from '../http-common' -import 'vue-select/dist/vue-select.css' + export default { @@ -123,6 +134,7 @@ export default { components: { Header, Sidebar, + }, data() { return{ @@ -134,9 +146,10 @@ export default { description : "", status : "pending", date : "", - images:[] + images:[], }, - nav_active : JSON.parse(localStorage.getItem('navActive')), + nav_active : JSON.parse(localStorage.getItem('navActive')), + sending : false, } }, methods: { @@ -158,12 +171,17 @@ export default { formData.append("status", this.response.status); formData.append("date", this.response.date); formData.append("images[0]", this.response.images[0]); + this.sending = true HTTP.post("kpi-responses", formData).then(()=>{ alert("Berhasil Membuat Response") document.getElementById("formResponse").reset(); + this.response.actual = 0; + this.response.description = ""; + this.sending = false }).catch((e)=>{ console.log(e.response.data) alert("Gagal Membuat Response") + this.sending = false }) }, onUpload(e){ @@ -173,7 +191,9 @@ export default { // this.item.imageUrl = URL.createObjectURL(file) }, responses(){ - this.$router.push({ path: `/kpi/${this.kpi_id}/responses`}) + // this.$router.push({ path: `/kpi/${this.kpi_id}/responses`}) + // console.log(this.kpi_id) + this.$router.push({ name: "KpiResponses", params: {kpiId:this.kpi_id}}) } diff --git a/src/views/ManagerKpiIndex.vue b/src/views/ManagerKpiIndex.vue index 1a303747d00995d4cab9c709261735ff23b6d8d3..175a16214093242be7913568213d672b8f325df6 100644 --- a/src/views/ManagerKpiIndex.vue +++ b/src/views/ManagerKpiIndex.vue @@ -35,7 +35,7 @@ :filter="filter" :filter_column="'period_type'" :key = "componentKey" - @edit-entry="editKpi" + :edit = "false" @delete-entry="deleteKpi" @detail-entry="detailKpi" ></Table2> @@ -112,7 +112,7 @@ export default { }, editKpi(id){ //routing page edit - console.log(id) + this.$router.push({ name: "KpiManagerEdit", params: { id: id }}); }, detailKpi(id){ //routing page detail diff --git a/src/views/ResponseDetail.vue b/src/views/ResponseDetail.vue index 27c2395a00d5ce9eee0f9d15f9ee58edeec5ab40..3e5eabf3a7ed9921dcde39d311f6f3beab911e98 100644 --- a/src/views/ResponseDetail.vue +++ b/src/views/ResponseDetail.vue @@ -83,7 +83,9 @@ <div class="modal-body"> <div class="mb-3 me-3 p-2"> <label class="text-blue"> Nilai Aktual </label> - <input v-model="response.actual" type="number" min="0" class="form-control" required> + <!-- <input v-model="response.actual" type="number" min="0" class="form-control" required> --> + <input v-if="!kpi.is_score_inverted" v-model="response.actual" type="number" min="0" :max="kpi.target" class="form-control" required> + <input v-else v-model="responseAdj.actual" type="number" min="0" class="form-control" required> </div> </div> <div class="modal-footer"> @@ -198,10 +200,16 @@ export default { }).catch(()=> {alert("Gagal Mengubah Status")}) }, approve(){ - this.changeStatus(this.responseId, "approved") + if (confirm("Terima Response?")){ + this.changeStatus(this.responseId, "approved") + } + }, reject(){ - this.changeStatus(this.responseId, "rejected") + if (confirm("Tolak Response?")){ + this.changeStatus(this.responseId, "rejected") + } + }, adjust(){ document.getElementById("modalButton").click() diff --git a/src/views/ResponseIndex.vue b/src/views/ResponseIndex.vue index 4b1bf977acc677df0a47ee58950481dd41567dce..e34656a560187a6190df375b0323f1798ad93b71 100644 --- a/src/views/ResponseIndex.vue +++ b/src/views/ResponseIndex.vue @@ -104,7 +104,8 @@ <div class="modal-body"> <div class="mb-3 me-3 p-2"> <label class="text-blue"> Nilai Aktual </label> - <input v-model="responseAdj.actual" type="number" min="0" class="form-control" required> + <input v-if="!kpi.is_score_inverted" v-model="responseAdj.actual" type="number" min="0" :max="kpi.target" class="form-control" required> + <input v-else v-model="responseAdj.actual" type="number" min="0" class="form-control" required> </div> </div> <div class="modal-footer"> @@ -260,10 +261,15 @@ export default { }) }, approve(id){ - this.changeStatus(id, "approved") + if (confirm("Terima Response?")){ + this.changeStatus(id, "approved") + } + }, reject(id){ - this.changeStatus(id, "rejected") + if (confirm("Tolak Response?")){ + this.changeStatus(id, "rejected") + } }, adjust(id){ HTTP.get(`kpi-responses/${id}`).then((res)=>{ diff --git a/src/views/UserIndex.vue b/src/views/UserIndex.vue index 67a51d6cf94f860247ad6ac53c985ae0ff207e42..e3233f1ca40aea8f1f156f22a134c76cefbb2b97 100644 --- a/src/views/UserIndex.vue +++ b/src/views/UserIndex.vue @@ -281,7 +281,7 @@ export default { HTTP.delete(`employees/${id}`).then((res) =>{ if (res.status == 200){ alert("Berhasil menghapus Karyawan") - this.getUsers() + window.location.reload() } }).catch( () => { alert("Gagal Menghapus Karyawan")