seperate personel components 1401-04-02
This commit is contained in:
@@ -0,0 +1,556 @@
|
||||
<template>
|
||||
<a-spin :spinning="loading" tip="در حال ثبت اطلاعات">
|
||||
<a-list :locale="{emptyText:'رکوردی وجود ندارد.'}" bordered item-layout="horizontal">
|
||||
<a-list-item class="grid grid-cols-4" style="direction: rtl" v-for="(item,index) in contract"
|
||||
:key="index">
|
||||
<div class="col-span-3 grid grid-cols-3">
|
||||
<div class="mt-5">حقوق پایه :
|
||||
{{ item.salary }}
|
||||
</div>
|
||||
<div class="mt-5">تاریخ خاتمه :
|
||||
{{ item.end_atj | jtjdate }}
|
||||
</div>
|
||||
<div class="mt-5">تاریخ شروع :
|
||||
{{ item.start_atj | jtjdate }}
|
||||
</div>
|
||||
<div class="mt-5">بن کارگری :
|
||||
{{ item.worker_coupon }}
|
||||
</div>
|
||||
<div class="mt-5">کمک هزینه مسکن :
|
||||
{{ item.housing_allowance }}
|
||||
</div>
|
||||
<div class="mt-5">حق جذب : {{ item.right_attraction }}</div>
|
||||
<div class="mt-5"> شماره سفته :
|
||||
{{ item.promissory_number }}
|
||||
</div>
|
||||
<div class="mt-5"> مبلغ سفته :
|
||||
{{ item.promissory }}
|
||||
</div>
|
||||
<div class="mt-5"> حق سرپرستی :
|
||||
{{ item.right_guardianship }}
|
||||
</div>
|
||||
<div class="mt-5"><span>شماره قرارداد :</span> <span>{{ item.contract_number }}</span>
|
||||
</div>
|
||||
<div class="mt-5">دلیل فسخ قرارداد :
|
||||
{{ item.reason_termination }}
|
||||
</div>
|
||||
<div class="mt-5">تاریخ فسخ قرارداد :
|
||||
{{ item.datej_termination | jtjdate }}
|
||||
</div>
|
||||
<div class="mt-5">نوع قرارداد :
|
||||
{{ item.type_str }}
|
||||
</div>
|
||||
<div class="mt-5">محل خدمت :
|
||||
{{ item.cnt.value }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-1" style="direction: ltr">
|
||||
<div class="mt-5">
|
||||
<a-button :disabled="!$getAccess('personnel.contract.termination')"
|
||||
v-if="!item.date_termination" class="ml-3" @click="showTerminationModal(index)">فسخ
|
||||
قرارداد
|
||||
</a-button>
|
||||
<a-button :disabled="!$getAccess('personnel.contract.no.termination')" v-else class="ml-3"
|
||||
@click="removetermination(index)">لغو فسخ قرارداد
|
||||
</a-button>
|
||||
<a-button :disabled="!$getAccess('personnel.contract')" v-if="item.file" class="ml-3"
|
||||
target="_blank" type="primary" :href="item.file.storage">دانلود پیوست
|
||||
</a-button>
|
||||
</div>
|
||||
<div class="mt-5">
|
||||
<a-tooltip :disabled="!$getAccess('personnel.contract.delete')" placement="bottomRight"
|
||||
class="ml-3">
|
||||
<template slot="title">
|
||||
<span>حذف</span>
|
||||
</template>
|
||||
<a-popconfirm
|
||||
placement="right"
|
||||
title="آیا می خواهید حذف کنید؟"
|
||||
ok-text="بله"
|
||||
cancel-text="خیر"
|
||||
@confirm="removeContract(item)">
|
||||
<a-button type="danger" class="mt-3 mr-3">حذف</a-button>
|
||||
</a-popconfirm>
|
||||
</a-tooltip>
|
||||
<a-dropdown class="mb-4">
|
||||
<a-menu slot="overlay" @click="printContract($event,item.id)">
|
||||
<a-menu-item v-for="(subItem,subIndex) in contractTypes" :key="subIndex">{{ subItem }}
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
<a-button style="margin-left: 8px"> چاپ قرارداد
|
||||
<a-icon type="down"/>
|
||||
</a-button>
|
||||
</a-dropdown>
|
||||
<a-button class="ml-3" :disabled="!$getAccess('personnel.contract.update')"
|
||||
@click="openEditingContractModal(item,index)">ویرایش
|
||||
</a-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</a-list-item>
|
||||
</a-list>
|
||||
<a-button class="mt-3 ml-2" @click="showAddContract = true">افزودن ردیف</a-button>
|
||||
|
||||
<!-- modal add edit -->
|
||||
<a-modal @ok="detectEditMode" :okText="editContractFlag?'ویرایش':'ایجاد'" forceRender cancelText="بستن"
|
||||
v-model="showAddContract" :title="editContractFlag?'ویرایش قرارداد':'افزودن قرارداد'"
|
||||
:forceRender="true">
|
||||
<a-form :form="fromContract">
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div>
|
||||
<a-form-item label="تاریخ شروع">
|
||||
<input v-if="!contractModel.start_at" class="hidden" autocomplete="off"
|
||||
v-decorator="['note',{ rules:[{ required: true, message: 'تاریخ را وارد نمایید' }] }]"/>
|
||||
<date-picker v-model="contractModel.start_at"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div>
|
||||
<a-form-item label="تاریخ خاتمه">
|
||||
<input v-if="!contractModel.end_at" class="hidden" autocomplete="off"
|
||||
v-decorator="['note',{ rules:[{ required: true, message: 'تاریخ را وارد نمایید' }] }]"/>
|
||||
<date-picker v-model="contractModel.end_at"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-3 gap-4">
|
||||
<div>
|
||||
<a-form-item label="حقوق پایه">
|
||||
<input class="ant-input"
|
||||
v-decorator="['salary', { initialValue: 0 },{ rules: [{pattern:/^[0-9]+$/,message:'مقدار وارد شده باید عددی باشد.'},] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div>
|
||||
<a-form-item label="بن کارگری">
|
||||
<input class="ant-input"
|
||||
v-decorator="['worker_coupon', { initialValue: 0 },{ rules: [{pattern:/^[0-9]+$/,message:'مقدار وارد شده باید عددی باشد.'},] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div>
|
||||
<a-form-item label="کمک هزینه مسکن">
|
||||
<input class="ant-input"
|
||||
v-decorator="['housing_allowance', { initialValue: 0 },{ rules: [{pattern:/^[0-9]+$/,message:'مقدار وارد شده باید عددی باشد.'},] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div>
|
||||
<a-form-item label="حق جذب">
|
||||
<input class="ant-input"
|
||||
v-decorator="['right_attraction', { initialValue: 0 },{ rules: [{pattern:/^[0-9]+$/,message:'مقدار وارد شده باید عددی باشد.'},] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div>
|
||||
<a-form-item label="حق سرپرستی">
|
||||
<input class="ant-input"
|
||||
v-decorator="['right_guardianship', { initialValue: 0 },{ rules: [{pattern:/^[0-9]+$/,message:'مقدار وارد شده باید عددی باشد.'},] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div>
|
||||
<a-form-item label="مبلغ سفته">
|
||||
<input class="ant-input"
|
||||
v-decorator="['promissory', { initialValue: 0 },{ rules: [{pattern:/^[0-9]+$/,message:'مقدار وارد شده باید عددی باشد.'},] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div>
|
||||
<a-form-item label="شماره سفته">
|
||||
<input class="ant-input"
|
||||
v-decorator="['promissory_number',{ rules: [{pattern:/^[0-9]+$/,message:'مقدار وارد شده باید عددی باشد.'},] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a-form-item label="شماره قرارداد">
|
||||
<input class="ant-input"
|
||||
v-decorator="['contract_number']"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a-form-item label="حق فرزند">
|
||||
<input class="ant-input"
|
||||
v-decorator="['right_child',{ rules: [{pattern:/^[0-9]+$/,message:'مقدار وارد شده باید عددی باشد.'},] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a-form-item label="پایه سنوات">
|
||||
<input class="ant-input"
|
||||
v-decorator="['basic_years',{ rules: [{pattern:/^[0-9]+$/,message:'مقدار وارد شده باید عددی باشد.'},] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a-form-item label="حق ماموریت">
|
||||
<input class="ant-input"
|
||||
v-decorator="['right_mission',{ rules: [{pattern:/^[0-9]+$/,message:'مقدار وارد شده باید عددی باشد.'},] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a-form-item label="حق شیفت">
|
||||
<input class="ant-input"
|
||||
v-decorator="['right_shift',{ rules: [{pattern:/^[0-9]+$/,message:'مقدار وارد شده باید عددی باشد.'},] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a-form-item label="پاداش مستمر">
|
||||
<input class="ant-input"
|
||||
v-decorator="['reward',{ rules: [{pattern:/^[0-9]+$/,message:'مقدار وارد شده باید عددی باشد.'},] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
|
||||
<a-form-item label="نوع قرارداد">
|
||||
<a-select v-model="contractType" style="width: 100%" v-decorator="['type']">
|
||||
<a-select-option v-for="(item,index) in contractTypes" :value="`${index}`">
|
||||
{{ item }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
|
||||
<div>
|
||||
<a-form-item label="حق السعی">
|
||||
<input class="ant-input"
|
||||
v-decorator="['right_try',{ rules: [{pattern:/^[0-9]+$/,message:'مقدار وارد شده باید عددی باشد.'},] }]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a-form-item label="محل خدمت">
|
||||
<input class="ant-input" v-decorator="['city_workplace']"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div>
|
||||
<a-form-item label="واحد کار">
|
||||
<a-select
|
||||
v-decorator="['work_unit', { initialValue:null,rules: [{ required: true, message: 'لطفاسطح مقدار را انتخاب کنید' }] }]"
|
||||
@change="selectChange">
|
||||
<a-select-option v-for="item in work_units" :value="item.id">
|
||||
{{ item.value }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div>
|
||||
<a-form-item label="نام واحد" has-feedback v-if="showName">
|
||||
<input class="ant-input"
|
||||
v-decorator="['work_unit_name', { rules: [{ required: true, message: 'لطفا مقدار را وارد کنید' }] }]"
|
||||
autocomplete="off"
|
||||
/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
</div>
|
||||
<!--<a-form-item label="دلیل فسخ قرارداد">
|
||||
<input class="ant-input" style="width: 100%" v-decorator="['reason_termination']" />
|
||||
</a-form-item>-->
|
||||
<a-form-item label="فایل">
|
||||
<div class="dropbox">
|
||||
<a-upload-dragger
|
||||
:disabled="!$getAccess('personnel.basic.update')"
|
||||
:multiple="false"
|
||||
action="http://hr.asco-intl.com:2020/kernel/api/register/upload"
|
||||
:file-list="contractFileList"
|
||||
:default-file-list="contractFileList"
|
||||
@change="contractFileUpload"
|
||||
:remove="contractFileRemove"
|
||||
>
|
||||
<p class="ant-upload-drag-icon">
|
||||
<a-icon type="inbox"/>
|
||||
</p>
|
||||
<p class="ant-upload-text">
|
||||
فایل را درگ کنید یا اینکه کاوش کنید.
|
||||
</p>
|
||||
<p class="ant-upload-hint">
|
||||
فایلی که بارگذاری می کنید باید زیر ۵ مگابایت باشد.
|
||||
</p>
|
||||
</a-upload-dragger>
|
||||
|
||||
<!-- <a-upload-dragger
|
||||
:customRequest="uploadImage"
|
||||
:file-list="contractFileList"
|
||||
:before-upload="beforeUpload"
|
||||
>
|
||||
<p class="ant-upload-drag-icon">
|
||||
<a-icon type="inbox" />
|
||||
</p>
|
||||
<p class="ant-upload-text">
|
||||
فایل را درگ کنید یا اینکه کاوش کنید.
|
||||
</p>
|
||||
<p class="ant-upload-hint">
|
||||
تصویر که بارگذاری می کنید باید زیر ۵ مگابایت باشد.
|
||||
</p>
|
||||
</a-upload-dragger>-->
|
||||
<!-- <div v-else>
|
||||
<a-alert message="آپلود سند با موفقیت انجام شد." type="success" />
|
||||
</div>-->
|
||||
</div>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
<!-- modal add edit -->
|
||||
|
||||
<!-- modal termision -->
|
||||
<a-modal okText="ثبت" cancelText="بستن" forceRender v-model="showTermination" title="فسخ قرارداد"
|
||||
@ok="addtermination">
|
||||
<a-form :form="formTermination">
|
||||
<a-form-item label="تاریخ فسخ قرارداد">
|
||||
<input v-if="!date_termination" class="hidden" autocomplete="off"
|
||||
v-decorator="['note',{ rules:[{ required: true, message: 'تاریخ را وارد نمایید' }] }]"/>
|
||||
<date-picker v-model="date_termination"/>
|
||||
</a-form-item>
|
||||
<a-form-item label="دلیل فسخ قرارداد">
|
||||
<input class="ant-input" autocomplete="off" v-decorator="['reason_termination']"/>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
<!-- modal termision -->
|
||||
|
||||
<!-- <a-button type="primary" @click="saveData" class="mt-5" :disabled="disabled"
|
||||
v-if="contract && contract.length > 0">
|
||||
ویرایش
|
||||
</a-button>-->
|
||||
|
||||
|
||||
</a-spin>
|
||||
</template>
|
||||
<script>
|
||||
import axios from "@/axios";
|
||||
|
||||
export default {
|
||||
name: "contracts",
|
||||
props: {
|
||||
contract:{
|
||||
type: Array,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return{
|
||||
showAddContract: false,
|
||||
loading: false,
|
||||
fromContract: this.$form.createForm(this, {name: 'fromContract'}),
|
||||
formTermination: this.$form.createForm(this, {name: 'formTermination'}),
|
||||
editContractFlag: false,
|
||||
showTermination: false,
|
||||
activeContract: null,
|
||||
date_termination: null,
|
||||
contractModel: {
|
||||
start_at: '',
|
||||
end_at: '',
|
||||
salary: 0,
|
||||
worker_coupon: 0,
|
||||
housing_allowance: 0,
|
||||
right_attraction: 0,
|
||||
right_guardianship: 0,
|
||||
reason_termination: ''
|
||||
},
|
||||
contractFileList: [],
|
||||
work_units: [],
|
||||
showName: false,
|
||||
contractTypes: undefined,
|
||||
contractType: "1",
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getUnits() {
|
||||
try {
|
||||
let {data} = await axios.get('/personnel/unit/unit')
|
||||
await this.$store.commit('personnel/setUnits', data)
|
||||
data.push
|
||||
({
|
||||
id: "new",
|
||||
value: "افزودن واحد جدید"
|
||||
})
|
||||
this.work_units = data
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
selectChange(id) {
|
||||
if (id == "new") {
|
||||
this.showName = true
|
||||
}
|
||||
else if(this.showName == true) this.showName = false
|
||||
},
|
||||
async getTypes() {
|
||||
try {
|
||||
const {data} = await axios.get('/personnel/type/type')
|
||||
this.contractTypes = data
|
||||
await this.$store.commit('personnel/setContractTypes', data)
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
showTerminationModal(index) {
|
||||
this.activeContract = index;
|
||||
this.showTermination = true;
|
||||
},
|
||||
async removetermination(index) {
|
||||
try {
|
||||
let contractList = this.contract
|
||||
contractList[index].date_termination = null
|
||||
contractList[index].datej_termination = null
|
||||
contractList[index].reason_termination = null
|
||||
await this.saveData(contractList);
|
||||
} catch (e) {
|
||||
this.$ntSetError()
|
||||
|
||||
console.log(e)
|
||||
} finally {
|
||||
await this.getPersonal()
|
||||
}
|
||||
},
|
||||
async removeContract(item) {
|
||||
if (item.id) {
|
||||
try {
|
||||
await axios.post('/personnel/remove-contract', {id: item.id});
|
||||
await this.$emit('update')
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
} else {
|
||||
const index = this.contract.indexOf(item);
|
||||
this.contract.splice(index, 1);
|
||||
}
|
||||
},
|
||||
printContract(event, id) {
|
||||
window.open(`http://hr.asco-intl.com:2020/kernel/api/personnel/print?type=${event.key}&id=${id}`, '_blank').focus()
|
||||
},
|
||||
openEditingContractModal(item, index) {
|
||||
// console.log(this.contractTypes)
|
||||
// console.log(item)
|
||||
item.type = item.type ? item.type.toString() : undefined
|
||||
if (item.file) {
|
||||
this.contractFileList = [{uid: item.file.id, name: item.file.filename, status: 'done', url: item.file.storage}]
|
||||
}
|
||||
this.activeContract = index
|
||||
this.editContractFlag = true
|
||||
this.showAddContract = true
|
||||
this.contractModel.end_at = item.end_at
|
||||
this.contractModel.start_at = item.start_at
|
||||
// console.log("item:::::::::::::",item)
|
||||
// console.log(item)
|
||||
this.fromContract.setFieldsValue(item)
|
||||
|
||||
},
|
||||
async detectEditMode(e) {
|
||||
await this.addContract(e)
|
||||
if (this.editContractFlag) this.editContractFlag = false
|
||||
},
|
||||
addContract(e) {
|
||||
e.preventDefault();
|
||||
this.fromContract.validateFields((err, values) => {
|
||||
if (!err) {
|
||||
let contractList = this.contract
|
||||
if (this.image_data) {
|
||||
values.contract_file_id = this.image_data.id
|
||||
}
|
||||
if (values.work_unit == "new") {
|
||||
values.work_unit = values.work_unit_name
|
||||
}
|
||||
if (this.editContractFlag) {
|
||||
values.start_at = this.contractModel.start_at
|
||||
values.end_at = this.contractModel.end_at
|
||||
contractList[this.activeContract] = Object.assign(this.contract[this.activeContract], values)
|
||||
// console.log("model", this.contractModel)
|
||||
this.contractModel = {
|
||||
start_at: '',
|
||||
end_at: '',
|
||||
salary: 0,
|
||||
worker_coupon: 0,
|
||||
housing_allowance: 0,
|
||||
right_attraction: 0,
|
||||
right_guardianship: 0,
|
||||
reason_termination: ''
|
||||
}
|
||||
}
|
||||
else {
|
||||
// console.log("adding")
|
||||
values.start_at = this.contractModel.start_at
|
||||
values.end_at = this.contractModel.end_at
|
||||
contractList.push(values);
|
||||
}
|
||||
// console.log("data", this.contract[this.editingContractIndex])
|
||||
this.saveData(contractList);
|
||||
this.showAddContract = false;
|
||||
this.fromContract.resetFields();
|
||||
this.image_data = null;
|
||||
// console.log('contract',this.contract);
|
||||
} else {
|
||||
this.$ntGetError('اطلاعات را به صورت کامل وارد کنید');
|
||||
}
|
||||
});
|
||||
},
|
||||
contractFileUpload({fileList, event, file}) {
|
||||
if (file.response && file.response.id) {
|
||||
this.image_data = file.response
|
||||
}
|
||||
this.contractFileList = fileList;
|
||||
},
|
||||
contractFileRemove() {
|
||||
this.image_data = null
|
||||
},
|
||||
async addtermination(e) {
|
||||
e.preventDefault();
|
||||
this.formTermination.validateFields(async (err, values) => {
|
||||
if (!err) {
|
||||
try {
|
||||
let contractList = this.contract
|
||||
contractList[this.activeContract].date_termination = this.date_termination //values.date_termination;
|
||||
contractList[this.activeContract].reason_termination = values.reason_termination;
|
||||
this.showTermination = false;
|
||||
this.formTermination.resetFields();
|
||||
await this.saveData(contractList);
|
||||
} catch (e) {
|
||||
this.$ntSetError()
|
||||
|
||||
console.log(e)
|
||||
} finally {
|
||||
this.$refs.personelTbl.fetch();
|
||||
}
|
||||
} else {
|
||||
this.$ntGetError('اطلاعات را به صورت کامل وارد کنید');
|
||||
}
|
||||
});
|
||||
},
|
||||
async saveData(contractList) {
|
||||
if (contractList) {
|
||||
try {
|
||||
this.loading = true
|
||||
console.log('contractList',contractList)
|
||||
let values = {
|
||||
contract: contractList,
|
||||
id: this.id
|
||||
}
|
||||
if (!this.$getAccess('personnel.contract')) {
|
||||
values.contract = this.contract
|
||||
}
|
||||
await axios.post(`/personnel/contract/update`, values)
|
||||
this.$ntSet()
|
||||
} catch (e) {
|
||||
this.$ntSetError()
|
||||
console.log(e)
|
||||
} finally {
|
||||
await this.$emit('update')
|
||||
this.loading = false
|
||||
this.showAddContract = false
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.$ntGetError('اطلاعات را به صورت کامل وارد کنید');
|
||||
}
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
id() {
|
||||
return this.$route.params.id
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.getTypes()
|
||||
await this.getUnits()
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,129 @@
|
||||
<template>
|
||||
<a-spin :spinning="loading" tip="در حال ثبت اطلاعات">
|
||||
<a-list :locale="{emptyText:'رکوردی وجود ندارد.'}" bordered item-layout="horizontal">
|
||||
<a-list-item class="grid grid-cols-3" v-for="(item,index) in estimate" :key="index">
|
||||
<div>
|
||||
<a-tooltip placement="bottomRight">
|
||||
<template slot="title">
|
||||
<span>حذف</span>
|
||||
</template>
|
||||
<a-popconfirm :disabled="!$getAccess('personnel.function.delete')"
|
||||
placement="right"
|
||||
title="آیا می خواهید حذف کنید؟"
|
||||
ok-text="بله"
|
||||
cancel-text="خیر"
|
||||
@confirm="removeEstimate(item)">
|
||||
<a-button type="danger" class="mr-3">حذف</a-button>
|
||||
</a-popconfirm>
|
||||
</a-tooltip>
|
||||
</div>
|
||||
|
||||
<div>نمره : {{ item.score }}</div>
|
||||
<div> برنامه توسعه دوره : <span>{{ item.note }} </span></div>
|
||||
</a-list-item>
|
||||
</a-list>
|
||||
<br/>
|
||||
<a-button class="ml-2" :disabled="!$getAccess('personnel.function.create')"
|
||||
@click="showAddPerformance=true">افزودن ردیف
|
||||
</a-button>
|
||||
|
||||
<a-modal @ok="savefromPerformance" okText="ایجاد" forceRender cancelText="بستن" v-model="showAddPerformance"
|
||||
title="افزودن ارزیابی عملکرد">
|
||||
<a-form :form="fromPerformance">
|
||||
<a-form-item label="نمره">
|
||||
<a-input-number autocomplete="off" :min="0" :max="20"
|
||||
v-decorator="['score',{ rules:[{ required: true, message: 'وارد کردن الزامی است' }] }]"/>
|
||||
</a-form-item>
|
||||
<a-form-item label="برنامه توسعه دوره">
|
||||
<input class="ant-input" autocomplete="off"
|
||||
v-decorator="['note',{ rules:[{ required: false, message: 'وارد کردن الزامی است' }] }]"/>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
</a-spin>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import axios from "@/axios";
|
||||
|
||||
export default {
|
||||
name: "estimate",
|
||||
props: {
|
||||
estimate: Array
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
showAddPerformance: false,
|
||||
fromPerformance: this.$form.createForm(this, {name: 'fromPerformance'}),
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
id() {
|
||||
return this.$route.params.id
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async removeEstimate(item) {
|
||||
if (item.id) {
|
||||
try {
|
||||
await axios.post('/personnel/remove-estimate', {id: item.id});
|
||||
this.$emit('update')
|
||||
} catch (e) {
|
||||
|
||||
console.log(e);
|
||||
}
|
||||
} else {
|
||||
const index = this.estimate.indexOf(item);
|
||||
this.estimate.splice(index, 1);
|
||||
}
|
||||
},
|
||||
savefromPerformance(e) {
|
||||
e.preventDefault();
|
||||
this.fromPerformance.validateFields(async (err, values) => {
|
||||
if (!err) {
|
||||
let estimate = this.estimate
|
||||
estimate.push(values);
|
||||
this.showAddPerformance = false;
|
||||
this.$message.success('اطلاعات با موفقیت ثبت شد');
|
||||
this.fromPerformance.resetFields();
|
||||
await this.saveData(estimate);
|
||||
} else {
|
||||
this.$ntGetError('اطلاعات را به صورت کامل وارد کنید');
|
||||
}
|
||||
});
|
||||
},
|
||||
async saveData(estimate) {
|
||||
if (estimate) {
|
||||
try {
|
||||
this.loading = true
|
||||
let values = {
|
||||
estimate: estimate,
|
||||
id: this.id
|
||||
}
|
||||
values.documents = this.documents;
|
||||
if (!this.$getAccess('personnel.train')) {
|
||||
values.estimate = this.estimate
|
||||
}
|
||||
await axios.post('/personnel/estimate/update', values);
|
||||
this.$emit('update')
|
||||
this.$ntSet()
|
||||
} catch (e) {
|
||||
this.$ntSetError()
|
||||
|
||||
console.log(e)
|
||||
} finally {
|
||||
this.loading = false
|
||||
this.showAddPerformance = false
|
||||
}
|
||||
} else {
|
||||
this.$ntGetError('اطلاعات را به صورت کامل وارد کنید');
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,253 @@
|
||||
<template>
|
||||
<div id="printContent" class="hidden">
|
||||
<a-card v-if="personel && personel.proposal" title="اطلاعات فردی">
|
||||
<div class="grid sm:grid-cols-1 md:grid-cols-3 md:gap-3 lg:grid-cols-3 lg:gap-3">
|
||||
<a-form-item label="نام و نام خانوادگی">
|
||||
{{ personel.name }}
|
||||
</a-form-item>
|
||||
<a-form-item label="نام انگلیسی">
|
||||
{{ personel.name_en }}
|
||||
</a-form-item>
|
||||
<a-form-item label="کدملی">
|
||||
{{ personel.ncode }}
|
||||
</a-form-item>
|
||||
<a-form-item label="شماره پرسنلی">
|
||||
{{ personel.personel_id }}
|
||||
</a-form-item>
|
||||
<a-form-item label="موبایل">
|
||||
{{ personel.proposal.mobile }}
|
||||
</a-form-item>
|
||||
<a-form-item label="شهر متقاضی شغل">
|
||||
{{ personel.proposal.for_cities.join(' , ') }}
|
||||
</a-form-item>
|
||||
<a-form-item label="شغل متقاضی">
|
||||
{{ personel.proposal.job_title }}
|
||||
</a-form-item>
|
||||
<a-form-item label="واحد کار متقاضی">
|
||||
{{ personel.unit }}
|
||||
</a-form-item>
|
||||
<a-form-item label="نام پدر">
|
||||
{{ personel.proposal.father_name }}
|
||||
</a-form-item>
|
||||
<a-form-item label="تاریخ تولد">
|
||||
{{ personelBirthDate | jdate }}
|
||||
</a-form-item>
|
||||
<a-form-item label="شماره شناسنامه">
|
||||
{{ personel.proposal.iden_id }}
|
||||
</a-form-item>
|
||||
<a-form-item label="سریال شناسنامه">
|
||||
{{ personel.proposal.iden_serial }}
|
||||
</a-form-item>
|
||||
<a-form-item label="محل صدور">
|
||||
{{ personel.proposal.iden_place }}
|
||||
</a-form-item>
|
||||
<a-form-item label="محل تولد">
|
||||
{{ personel.proposal.birth_place }}
|
||||
</a-form-item>
|
||||
<a-form-item label="ایمیل">
|
||||
{{ personel.proposal.email }}
|
||||
</a-form-item>
|
||||
<a-form-item label="تلفن ثابت">
|
||||
{{ personel.proposal.phone }}
|
||||
</a-form-item>
|
||||
<a-form-item label="حقوق درخواستی">
|
||||
{{ personel.proposal.requested_salary }}
|
||||
</a-form-item>
|
||||
<a-form-item label="جنسیت">
|
||||
<a-radio-group v-model="personel.proposal.gender">
|
||||
<a-radio :value="1">
|
||||
مرد
|
||||
</a-radio>
|
||||
<a-radio :value="2">
|
||||
زن
|
||||
</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
<a-form-item label="وضعیت تاهل">
|
||||
<a-radio-group v-model="personel.proposal.marriage_sts">
|
||||
<a-radio :value="2">
|
||||
متاهل
|
||||
</a-radio>
|
||||
<a-radio :value="1">
|
||||
مجرد
|
||||
</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
<a-form-item label="وضعیت مسکن">
|
||||
<a-radio-group v-model="personel.proposal.house_sts">
|
||||
<a-radio :value="1">
|
||||
مالک
|
||||
</a-radio>
|
||||
<a-radio :value="2">
|
||||
مستاجر
|
||||
</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
<a-form-item label="آدرس" class="col-span-3">
|
||||
{{ personel.proposal.address }}
|
||||
</a-form-item>
|
||||
<a-form-item label="تلفن ضروری">
|
||||
{{ personel.proposal.phone_emergency }}
|
||||
</a-form-item>
|
||||
<a-form-item label="نام فرد">
|
||||
{{ personel.proposal.phone_emergency_name }}
|
||||
</a-form-item>
|
||||
<a-form-item label="نسبت">
|
||||
{{ personel.proposal.phone_emergency_related }}
|
||||
</a-form-item>
|
||||
<a-form-item label="شماره کارت">
|
||||
{{ personel.bank_card_number }}
|
||||
</a-form-item>
|
||||
<a-form-item label="شماره حساب">
|
||||
{{ personel.bank_account }}
|
||||
</a-form-item>
|
||||
<a-form-item label="شماره بیمه">
|
||||
{{ personel.insurance_no }}
|
||||
</a-form-item>
|
||||
<a-form-item label="وضعیت بیمه">
|
||||
<a-radio-group v-model="personel.insurance_sts">
|
||||
<a-radio :value="-1">
|
||||
ندارد
|
||||
</a-radio>
|
||||
<a-radio :value="1">
|
||||
دارد
|
||||
</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
<a-form-item label="تعداد فرزند">
|
||||
{{ personel.proposal.count_child }}
|
||||
</a-form-item>
|
||||
<a-form-item label="وضعیت نظام وظیفه">
|
||||
{{
|
||||
{1: 'معاف', 2: 'مشمول', 3: 'پایان خدمت'}[personel.proposal.military_sts]
|
||||
}}
|
||||
</a-form-item>
|
||||
</div>
|
||||
</a-card>
|
||||
<a-card v-if="personalDetails && personalDetails.family" title="اطلاعات خانوادگی" class="mt-5">
|
||||
<template v-for="(item,index) in personalDetails.family">
|
||||
<div class="grid sm:grid-cols-1 md:grid-cols-3 md:gap-3 lg:grid-cols-3 lg:gap-3">
|
||||
<a-form-item label="شناسه">
|
||||
{{ personalDetails.family[index].id }}
|
||||
</a-form-item>
|
||||
<a-form-item label="نام">
|
||||
{{ personalDetails.family[index].name }}
|
||||
</a-form-item>
|
||||
<a-form-item label="نسبت">
|
||||
{{ personalDetails.family[index].relation }}
|
||||
</a-form-item>
|
||||
<a-form-item label="مقطع">
|
||||
{{
|
||||
personalDetails.family[index].edu_level ?
|
||||
grade[personalDetails.family[index].edu_level.toString()] :
|
||||
null
|
||||
}}
|
||||
</a-form-item>
|
||||
<a-form-item label="رشته تحصیلی">
|
||||
{{ personalDetails.family[index].edu_title }}
|
||||
</a-form-item>
|
||||
<a-form-item label="شغل">
|
||||
{{ personalDetails.family[index].job }}
|
||||
</a-form-item>
|
||||
</div>
|
||||
<a-divider/>
|
||||
</template>
|
||||
</a-card>
|
||||
<a-card v-if="personalDetails && personalDetails.education" title="اطلاعات تحصیلی" class="mt-5">
|
||||
<template v-for="(item,index) in personalDetails.education">
|
||||
<div class="grid sm:grid-cols-1 md:grid-cols-3 md:gap-3 lg:grid-cols-3 lg:gap-3">
|
||||
<a-form-item label="شناسه">
|
||||
{{ personalDetails.education[index].id }}
|
||||
</a-form-item>
|
||||
<a-form-item label="مقطع">
|
||||
{{
|
||||
personalDetails.education[index].level ?
|
||||
grade[personalDetails.education[index].level.toString()] :
|
||||
null
|
||||
}}
|
||||
</a-form-item>
|
||||
<a-form-item label="دانشگاه">
|
||||
{{ personalDetails.education[index].university }}
|
||||
</a-form-item>
|
||||
<a-form-item label="رشته تحصیلی">
|
||||
{{ personalDetails.education[index].title }}
|
||||
</a-form-item>
|
||||
<a-form-item label="گرایش">
|
||||
{{ personalDetails.education[index].trend }}
|
||||
</a-form-item>
|
||||
<a-form-item label="سال شروع">
|
||||
{{ personalDetails.education[index].start_at }}
|
||||
</a-form-item>
|
||||
<a-form-item label="سال خاتمه">
|
||||
{{ personalDetails.education[index].end_at }}
|
||||
</a-form-item>
|
||||
</div>
|
||||
<a-divider/>
|
||||
</template>
|
||||
</a-card>
|
||||
<a-card v-if="personalDetails && personalDetails.traning" title="سوابق آموزشی" class="mt-5">
|
||||
<template v-for="(item,index) in personalDetails.traning">
|
||||
<div class="grid sm:grid-cols-1 md:grid-cols-3 md:gap-3 lg:grid-cols-3 lg:gap-3">
|
||||
<a-form-item label="شناسه">
|
||||
{{ personalDetails.traning[index].id }}
|
||||
</a-form-item>
|
||||
<a-form-item label="مرکز برگزاری">
|
||||
{{ personalDetails.traning[index].university }}
|
||||
</a-form-item>
|
||||
<a-form-item label="عنوان دوره ">
|
||||
{{ personalDetails.traning[index].title }}
|
||||
</a-form-item>
|
||||
<a-form-item label="سال">
|
||||
{{ personalDetails.traning[index].start_at }}
|
||||
</a-form-item>
|
||||
<a-form-item label="امکان ارائه گواهینامه دارم">
|
||||
<a-checkbox v-model="personalDetails.traning[index].has_certificate"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<a-divider/>
|
||||
</template>
|
||||
</a-card>
|
||||
<a-card v-if="personalDetails && personalDetails.jobs_history" title="سوابق کاری" class="mt-5">
|
||||
<template v-for="(item,index) in personalDetails.jobs_history">
|
||||
<div class="grid sm:grid-cols-1 md:grid-cols-3 md:gap-3 lg:grid-cols-3 lg:gap-3">
|
||||
<a-form-item label="شناسه">
|
||||
{{ personalDetails.jobs_history[index].id }}
|
||||
</a-form-item>
|
||||
<a-form-item label="نام سازمان ">
|
||||
{{ personalDetails.jobs_history[index].university }}
|
||||
</a-form-item>
|
||||
<a-form-item label="عنوان شغل">
|
||||
{{ personalDetails.jobs_history[index].title }}
|
||||
</a-form-item>
|
||||
<a-form-item label="دلیل خاتمه">
|
||||
{{ personalDetails.jobs_history[index].note }}
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item label="سال شروع">
|
||||
{{ personalDetails.jobs_history[index].start_at }}
|
||||
</a-form-item>
|
||||
<a-form-item label="سال خاتمه">
|
||||
{{ personalDetails.jobs_history[index].end_at }}
|
||||
</a-form-item>
|
||||
</div>
|
||||
<a-divider/>
|
||||
</template>
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "printContent",
|
||||
props: {
|
||||
personel: Object,
|
||||
personalDetails: Object,
|
||||
grade: Object,
|
||||
personelBirthDate: [String,null]
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,193 @@
|
||||
<template>
|
||||
<a-spin :spinning="loading" tip="در حال ثبت اطلاعات">
|
||||
<a-list :locale="{emptyText:'رکوردی وجود ندارد.'}" bordered item-layout="horizontal">
|
||||
<a-list-item class="grid grid-cols-3" v-for="(item,index) in training" :key="index">
|
||||
<div>
|
||||
<a-button v-if="item.file" target="_blank" type="primary"
|
||||
:disabled="!$getAccess('personnel.train.download')" :href="item.file.storage"
|
||||
class="mr-3">دانلود پیوست
|
||||
</a-button>
|
||||
<a-tooltip placement="bottomRight">
|
||||
<template slot="title">
|
||||
<span>حذف</span>
|
||||
</template>
|
||||
<a-popconfirm
|
||||
:disabled="!$getAccess('personnel.train.delete')"
|
||||
placement="right"
|
||||
title="آیا می خواهید حذف کنید؟"
|
||||
ok-text="بله"
|
||||
cancel-text="خیر"
|
||||
@confirm="removeEdu(item)"
|
||||
>
|
||||
<a-button type="danger" class="mr-3">حذف</a-button>
|
||||
</a-popconfirm>
|
||||
</a-tooltip>
|
||||
</div>
|
||||
<div><span>دسته گواهینامه :</span> {{ item.type }}</div>
|
||||
<div style="direction: rtl">عنوان گواهینامه : {{ item.title }}</div>
|
||||
</a-list-item>
|
||||
</a-list>
|
||||
<a-button :disabled="!$getAccess('personnel.train.create')" class="mt-4 ml-2"
|
||||
@click="showAddEducationalInformation=true;isAlertUpload = false">افزودن ردیف
|
||||
</a-button>
|
||||
|
||||
<a-modal forceRender okText="ایجاد" cancelText="بستن" v-model="showAddEducationalInformation"
|
||||
title="افزودن اطلاعات آموزشی" @ok="addEdu">
|
||||
<a-form :form="fromEducationalInformation">
|
||||
<div class="grid sm:grid-cols-1 md:grid-cols-2 md:gap-4 lg:grid-cols-2 lg:gap-4">
|
||||
<a-form-item label="دسته گواهینامه">
|
||||
<!--<input class="ant-input" autocomplete="off" v-decorator="['type',{rules: [{ required: true, message: 'وارد کردن شغل الزامی است' }]}]"/>-->
|
||||
<a-select style="width: 100%"
|
||||
v-decorator="['type',{rules: [{ required: true, message: 'وارد کردن شغل الزامی است' }]}]">
|
||||
<a-select-option v-for="(item,index) in category" :value="item">
|
||||
{{ item }}
|
||||
</a-select-option>
|
||||
<!--<a-select-option value="lucy">
|
||||
Lucy
|
||||
</a-select-option>
|
||||
<a-select-option value="disabled" disabled>
|
||||
Disabled
|
||||
</a-select-option>
|
||||
<a-select-option value="Yiminghe">
|
||||
yiminghe
|
||||
</a-select-option>-->
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="عنوان گواهینامه">
|
||||
<input class="ant-input" autocomplete="off"
|
||||
v-decorator="['title',{rules: [{ required: true, message: 'وارد کردن شغل الزامی است' }]}]"/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<a-form-item label="فایل">
|
||||
<div class="dropbox">
|
||||
<a-upload-dragger
|
||||
v-if="!isAlertUpload"
|
||||
:customRequest="uploadImage"
|
||||
:show-upload-list="false"
|
||||
:before-upload="beforeUpload">
|
||||
<p class="ant-upload-drag-icon">
|
||||
<a-icon type="inbox"/>
|
||||
</p>
|
||||
<p class="ant-upload-text">
|
||||
فایل را درگ کنید یا اینکه کاوش کنید.
|
||||
</p>
|
||||
<p class="ant-upload-hint">
|
||||
فایل را درگ کنید یا اینکه کاوش کنید.
|
||||
</p>
|
||||
</a-upload-dragger>
|
||||
<div v-else>
|
||||
<a-alert message="آپلود سند با موفقیت انجام شد." type="success"/>
|
||||
</div>
|
||||
</div>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
|
||||
</a-spin>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import axios from "@/axios";
|
||||
|
||||
export default {
|
||||
name: "training",
|
||||
props: {
|
||||
training: Array,
|
||||
uploadImage: Function,
|
||||
beforeUpload: Function,
|
||||
value: [Object,null]
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
showAddEducationalInformation: false,
|
||||
isAlertUpload: false,
|
||||
fromEducationalInformation: this.$form.createForm(this, {name: 'cordinate'}),
|
||||
category: [],
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
id() {
|
||||
return this.$route.params.id
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async removeEdu(item) {
|
||||
if (item.id) {
|
||||
try {
|
||||
await axios.post('/personnel/remove-traning', {id: item.id});
|
||||
this.$emit('update')
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
} else {
|
||||
const index = this.training.indexOf(item);
|
||||
this.training.splice(index, 1);
|
||||
}
|
||||
},
|
||||
addEdu(e) {
|
||||
e.preventDefault();
|
||||
this.fromEducationalInformation.validateFields(async(err, values) => {
|
||||
if (!err) {
|
||||
let training = this.training
|
||||
if (this.value) {
|
||||
values.file_id = this.value.id
|
||||
values.file = this.value.storage
|
||||
}
|
||||
training.push(values);
|
||||
this.showAddEducationalInformation = false;
|
||||
this.$message.success('اطلاعات با موفقیت ثبت شد');
|
||||
this.fromEducationalInformation.resetFields();
|
||||
this.$emit('input',null)
|
||||
await this.saveData(training);
|
||||
} else {
|
||||
this.$ntGetError('اطلاعات را به صورت کامل وارد کنید');
|
||||
}
|
||||
});
|
||||
},
|
||||
async saveData(training) {
|
||||
if (training) {
|
||||
try {
|
||||
this.loading = true
|
||||
let values = {
|
||||
training: training,
|
||||
id: this.id
|
||||
}
|
||||
values.documents = this.documents;
|
||||
if (!this.$getAccess('personnel.train')) {
|
||||
values.training = this.training
|
||||
}
|
||||
await axios.post('/personnel/training/update', values);
|
||||
this.$emit('update')
|
||||
this.$ntSet()
|
||||
} catch (e) {
|
||||
this.$ntSetError()
|
||||
|
||||
console.log(e)
|
||||
} finally {
|
||||
this.loading = false
|
||||
this.showAddEducationalInformation = false
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.$ntGetError('اطلاعات را به صورت کامل وارد کنید');
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
try {
|
||||
this.loading = true
|
||||
const {data} = await axios.get('/get-category')
|
||||
this.category = data
|
||||
} catch (e) {
|
||||
this.$message.error('خطا در دریافت اطلاعات');
|
||||
} finally {
|
||||
this.loading = false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,185 @@
|
||||
<template>
|
||||
<a-spin :spinning="loading" tip="در حال ثبت اطلاعات">
|
||||
<a-list :locale="{emptyText:'رکوردی وجود ندارد.'}" bordered item-layout="horizontal">
|
||||
<a-list-item class="grid grid-cols-3" v-for="(item,index) in writ" :key="index">
|
||||
<div>
|
||||
<a-tooltip placement="bottomRight">
|
||||
<a-button v-if="item.file" target="_blank" type="primary" :href="item.file.storage" class="mr-3">
|
||||
دانلود
|
||||
پیوست
|
||||
</a-button>
|
||||
<template slot="title">
|
||||
<span>حذف</span>
|
||||
</template>
|
||||
<a-popconfirm :disabled="!$getAccess('personnel.rule.delete')"
|
||||
placement="right"
|
||||
title="آیا می خواهید حذف کنید؟"
|
||||
ok-text="بله"
|
||||
cancel-text="خیر"
|
||||
@confirm="removeDocs(item)"
|
||||
>
|
||||
<a-button type="danger" class="mr-3">حذف</a-button>
|
||||
|
||||
</a-popconfirm>
|
||||
|
||||
</a-tooltip>
|
||||
</div>
|
||||
<div style="direction: rtl"><span>نوع :</span><span>{{ item.type_str }}</span></div>
|
||||
<div style="direction: rtl">عنوان : {{ item.note }}</div>
|
||||
</a-list-item>
|
||||
</a-list>
|
||||
<a-button :disabled="!$getAccess('personnel.rule.create')" class="mt-4 ml-2"
|
||||
@click="showAddDocument=true;isAlertUpload = false">افزودن ردیف
|
||||
</a-button>
|
||||
|
||||
|
||||
<a-modal okText="ایجاد" cancelText="بستن" forceRender v-model="showAddDocument" title="افزودن سند"
|
||||
@ok="addDocs">
|
||||
<a-form :form="fromDocs">
|
||||
|
||||
<a-form-item label="نوع" has-feedback>
|
||||
|
||||
<a-select
|
||||
v-decorator="['type']"
|
||||
placeholder="انتخاب نوع"
|
||||
>
|
||||
<a-select-option value="1">
|
||||
حکم
|
||||
</a-select-option>
|
||||
<a-select-option value="2">
|
||||
اخطار
|
||||
</a-select-option>
|
||||
<a-select-option value="3">
|
||||
پاداش
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="شرح">
|
||||
|
||||
<input class="ant-input" style="width:100%"
|
||||
autocomplete="off"
|
||||
v-decorator="['note']"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="فایل">
|
||||
<div class="dropbox">
|
||||
<a-upload-dragger
|
||||
v-if="!isAlertUpload"
|
||||
:customRequest="uploadImage"
|
||||
:show-upload-list="false"
|
||||
:before-upload="beforeUpload"
|
||||
>
|
||||
<p class="ant-upload-drag-icon">
|
||||
<a-icon type="inbox"/>
|
||||
</p>
|
||||
<p class="ant-upload-text">
|
||||
فایل را درگ کنید یا اینکه کاوش کنید.
|
||||
</p>
|
||||
<p class="ant-upload-hint">
|
||||
تصویر که بارگذاری می کنید باید زیر ۵ مگابایت باشد.
|
||||
</p>
|
||||
</a-upload-dragger>
|
||||
<div v-else>
|
||||
<a-alert message="آپلود سند با موفقیت انجام شد." type="success"/>
|
||||
</div>
|
||||
</div>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
|
||||
</a-modal>
|
||||
</a-spin>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import axios from "@/axios";
|
||||
|
||||
export default {
|
||||
name: "writs",
|
||||
props: {
|
||||
writ: Array,
|
||||
uploadImage: Function,
|
||||
beforeUpload: Function,
|
||||
value: [Object,null]
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
showAddDocument: false,
|
||||
isAlertUpload: false,
|
||||
fromDocs: this.$form.createForm(this, {name: 'fromDocs'}),
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
id() {
|
||||
return this.$route.params.id
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async removeDocs(item) {
|
||||
if (item.id) {
|
||||
try {
|
||||
await axios.post('/personnel/remove-writ', {id: item.id});
|
||||
await this.$emit('update')
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
} else {
|
||||
const index = this.writ.indexOf(item);
|
||||
this.writ.splice(index, 1);
|
||||
}
|
||||
},
|
||||
addDocs(e) {
|
||||
e.preventDefault();
|
||||
this.fromDocs.validateFields(async(err, values) => {
|
||||
if (!err) {
|
||||
let writ = this.writ
|
||||
if (this.value) {
|
||||
values.file_id = this.value.id
|
||||
values.file = this.value.storage
|
||||
}
|
||||
writ.push(values);
|
||||
this.showAddDocument = false;
|
||||
this.$message.success('اطلاعات با موفقیت ثبت شد');
|
||||
this.fromDocs.resetFields();
|
||||
this.$emit('input',null)
|
||||
await this.saveData(writ);
|
||||
} else {
|
||||
this.$ntGetError('اطلاعات را به صورت کامل وارد کنید');
|
||||
}
|
||||
});
|
||||
},
|
||||
async saveData(writ) {
|
||||
if (writ) {
|
||||
try {
|
||||
this.loading = true
|
||||
let values = {
|
||||
writ: writ,
|
||||
id: this.id
|
||||
}
|
||||
values.documents = this.documents;
|
||||
if (!this.$getAccess('personnel.train')) {
|
||||
values.writ = this.writ
|
||||
}
|
||||
await axios.post('/personnel/writ/update', values);
|
||||
this.$emit('update')
|
||||
this.$ntSet()
|
||||
} catch (e) {
|
||||
this.$ntSetError()
|
||||
|
||||
console.log(e)
|
||||
} finally {
|
||||
this.loading = false
|
||||
this.showAddEducationalInformation = false
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.$ntGetError('اطلاعات را به صورت کامل وارد کنید');
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user