update 1399-12-24

This commit is contained in:
AliGhasami
2021-03-14 09:40:47 +03:30
parent eea2705893
commit 1692a9973e
27 changed files with 2283 additions and 1124 deletions
Binary file not shown.
Binary file not shown.
+5 -5
View File
@@ -1,7 +1,7 @@
@font-face {
font-family: 'p-yek';
src: url("../fonts/yekan/medium.woff") format("woff");
src: url("../fonts/yekan/iran-yekan-400.woff2") format("woff");
font-weight: normal;
font-style: normal
}
@@ -9,27 +9,27 @@
@font-face {
font-family: 'p-yek';
src: url("../fonts/yekan/bold.woff") format("woff");
src: url("../fonts/yekan/iran-yekan-400.woff2") format("woff");
font-weight: bold;
}
@font-face {
font-family: 'p-yek';
src: url("../fonts/yekan/heavy.woff") format("woff");
src: url("../fonts/yekan/iran-yekan-400.woff2") format("woff");
font-weight: 700;
}
@font-face {
font-family: 'p-yek';
src: url("../fonts/yekan/light.woff") format("woff");
src: url("../fonts/yekan/iran-yekan-400.woff2") format("woff");
font-weight: 300;
}
@font-face {
font-family: 'p-yek';
src: url("../fonts/yekan/regular.woff") format("woff");
src: url("../fonts/yekan/iran-yekan-400.woff2") format("woff");
font-weight: 400;
}
+156
View File
@@ -0,0 +1,156 @@
<template>
<div class="clearfix">
<AUpload
:action="url"
:headers="headers"
:accept="accept"
list-type="picture-card"
:multiple="false"
:data="getData"
:file-list="fileList"
@preview="handlePreview"
@select="select"
@beforeUpload="beforeUpload"
@change="handleChange"
:remove="handleRemove"
>
<div v-if="fileList.length < 8">
<a-icon type="plus"/>
<div class="ant-upload-text">
{{ title || label }}
</div>
</div>
</AUpload>
<AModal :visible="previewVisible" :footer="null" @cancel="handleCancel">
<img alt="example" style="width: 100%" :src="previewImage"/>
</AModal>
<AFormItem ref="fi">
<input v-decorator="[field]" type="hidden"/>
</AFormItem>
</div>
</template>
<script>
function getBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
});
}
//import themeConfig from "../../../../themeConfig";
export default {
name: 'UploadInput',
props: {
title: {},
label: {},
field: {},
size: {
default: 2
},
accept: {default: "image/jpeg"},
serverType: {
types: {
1: 'عکس',
2: 'فیلم',
3: 'مدارک',
4: 'صوت',
5: 'pdf',
}
},
},
data() {
return {
url: 'http://hr.asco-intl.com/back/public/api/register/upload',
previewVisible: false,
previewImage: '',
fileList: [],
};
},
watch: {
fileList(n, o) {
if (n.length > o.length) {
this.$emit('add-file', n);
} else if (n.length < o.length) {
this.$emit('remove-file', n);
}
}
},
methods: {
handleRemove(){
const a = {};
a[`${this.field}`] =null
this.$refs.fi.FormContext.form.setFieldsValue(a)
},
beforeUpload(file) {
const isJpgOrPng = this.types.includes(file.type);
if (!isJpgOrPng) {
this.$message.error('تنها مجاز به ارسال تصویر با پسوند jpg هستید.');
}
const isLt2M = file.size / 1024 / 1024 < this.size;
if (!isLt2M) {
this.$message.error(`فایل بارگذاری شده بیش از ${this.size} مگا بایت نباید باشد.`);
}
return isJpgOrPng && isLt2M;
},
handleCancel() {
this.previewVisible = false;
},
async handlePreview(file) {
if (!file.url && !file.preview) {
file.preview = await getBase64(file.originFileObj);
}
this.previewImage = file.url || file.preview;
this.previewVisible = true;
},
handleChange({fileList, event, file}) {
if (fileList.length > 1) {
this.$message.error('تنها یک فایل در این قست قابل بارگذاری می باشد.');
return false;
}
if (file.response && file.response.id) {
this.$emit('ok', file.response);
const a = {};
a[`${this.field}`] = file.response.id
this.$refs.fi.FormContext.form.setFieldsValue(a)
}
this.fileList = fileList;
},
select() {
console.log("555 ==> ", 555);
},
getData() {
return {
has_thumb: 1,
has_watermark: 1,
type: this.serverType || 1,
subject: 1,
title: 1
}
}
}
,
computed: {
headers() {
return {
'Authorization': 'Bearer ' + localStorage.getItem("accessToken") || localStorage.accessToken
}
}
}
}
;
</script>
<style>
/* you can make up upload button and sample style by using stylesheets */
.ant-upload-select-picture-card i {
font-size: 32px;
color: #999;
}
.ant-upload-select-picture-card .ant-upload-text {
margin-top: 8px;
color: #666;
}
</style>
+145
View File
@@ -0,0 +1,145 @@
<template>
<div class="clearfix">
<AUpload
:action="url"
:headers="headers"
accept="image/jpeg"
list-type="picture-card"
:multiple="true"
:data="getData"
:file-list="fileList"
@preview="handlePreview"
@select="select"
@beforeUpload="beforeUpload"
@change="handleChange"
>
<div v-if="fileList.length < 8">
<a-icon type="plus"/>
<div class="ant-upload-text">
{{ title || label }}
</div>
</div>
</AUpload>
<AModal :visible="previewVisible" :footer="null" @cancel="handleCancel">
<img alt="example" style="width: 100%" :src="previewImage"/>
</AModal>
<AFormItem ref="fi">
<input v-decorator="[field]" type="hidden"/>
</AFormItem>
</div>
</template>
<script>
function getBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
});
}
import themeConfig from "../../../../themeConfig";
export default {
name: 'UploadInput',
props: {
title: {},
field: {},
size: {
default: 2
},
label: {},
serverType: {
types: {
1: 'عکس',
2: 'فیلم',
3: 'مدارک',
4: 'صوت',
5: 'pdf',
}
},
},
data() {
return {
url: themeConfig.home('cu/file/create'),
previewVisible: false,
previewImage: '',
fileList: [],
resList: [],
};
},
watch: {
fileList(n, o) {
if (n.length > o.length) {
this.$emit('add-file', n);
} else if (n.length < o.length) {
this.$emit('remove-file', n);
}
}
},
methods: {
beforeUpload(file) {
const isJpgOrPng = this.types.includes(file.type);
if (!isJpgOrPng) {
this.$message.error('پسوند قابل قبول نیست.');
}
const isLt2M = file.size / 1024 / 1024 < this.size;
if (!isLt2M) {
this.$message.error(`فایل بارگذاری شده بیش از ${this.size} مگا بایت نباید باشد.`);
}
return isJpgOrPng && isLt2M;
},
handleCancel() {
this.previewVisible = false;
},
async handlePreview(file) {
if (!file.url && !file.preview) {
file.preview = await getBase64(file.originFileObj);
}
this.previewImage = file.url || file.preview;
this.previewVisible = true;
},
handleChange({fileList, event, file}) {
if (file.response && file.response.id) {
this.$emit('ok', file.response);
this.resList.push(file.response.id);
const a = {};
a[`${this.field}`] = this.resList
this.$refs.fi.FormContext.form.setFieldsValue(a)
}
this.fileList = fileList;
},
select() {
},
getData() {
return {
has_thumb: 1,
has_watermark: 1,
type: this.serverType || 1,
subject: 1,
title: 1
}
}
},
computed: {
headers() {
return {
'Authorization': 'Bearer ' + localStorage.getItem("accessToken") || localStorage.accessToken
}
}
}
};
</script>
<style>
/* you can make up upload button and sample style by using stylesheets */
.ant-upload-select-picture-card i {
font-size: 32px;
color: #999;
}
.ant-upload-select-picture-card .ant-upload-text {
margin-top: 8px;
color: #666;
}
</style>
+1 -1
View File
@@ -3,7 +3,7 @@
<ACard ref="tblCard">
<ASpin :spinning="loading">
<div class="flex w-full justify-between">
<a-input-search class="w-1/4 pb-4 input-ltr" placeholder="جستجو بر اساس نام / کد ملی / کد پرسنلی / شمار بیمه" enter-button="جستجو" @search="onSearch"/>
<a-input-search class="w-1/4 pb-4 input-ltr" placeholder="" enter-button="جستجو" @search="onSearch"/>
<div class="flex items-center">
<a class="left-table-btn" @click="fullScreen">
<feather-icon :icon="getFullIcon" svg-classes="w-5 h-5"/>
@@ -22,9 +22,9 @@
:parent="parent"
:hiddenBackground="clickNotClose"
:reduce="reduce"
v-hammer:swipe="onMenuSwipe">
v-hammer:swipe="onMenuSwipe" >
<div @mouseenter="mouseEnter" @mouseleave="mouseLeave">
<div @mouseenter="mouseEnter" @mouseleave="mouseLeave" >
<!-- Header -->
<div class="header-sidebar flex items-end justify-between" slot="header">
@@ -352,4 +352,9 @@ export default {
display: none !important;
}
.vs-sidebar
{
width: 16% !important;
}
</style>
@@ -2,9 +2,9 @@
export default [
{
url: '/dashboard',
name: 'داشبرد',
name: 'داشبورد',
icon: 'HomeIcon',
i18n: 'داشبرد',
i18n: 'داشبورد',
slug: "config",
},
{
+9 -9
View File
@@ -27,10 +27,10 @@ import axios from './axios.js'
Vue.prototype.$http = axios
// API Calls
import './http/requests'
/*import './http/requests'*/
// mock
import './fake-db/index.js'
/*import './fake-db/index.js'*/
// Theme Configurations
import '../themeConfig.js'
@@ -78,16 +78,16 @@ import './filters/filters'
// Clipboard
import VueClipboard from 'vue-clipboard2'
/*import VueClipboard from 'vue-clipboard2'
Vue.use(VueClipboard)
Vue.use(VueClipboard)*/
// Tour
import VueTour from 'vue-tour'
/*import VueTour from 'vue-tour'
Vue.use(VueTour)
require('vue-tour/dist/vue-tour.css')
require('vue-tour/dist/vue-tour.css')*/
// VeeValidate
@@ -97,7 +97,7 @@ Vue.use(VeeValidate)
// Google Maps
import * as VueGoogleMaps from 'vue2-google-maps'
/*import * as VueGoogleMaps from 'vue2-google-maps'
Vue.use(VueGoogleMaps, {
load: {
@@ -105,7 +105,7 @@ Vue.use(VueGoogleMaps, {
key: 'AIzaSyB4DDathvvwuwlwnUu7F4Sow3oU22y5T1Y',
libraries: 'places' // This is required if you use the Auto complete plug-in
}
})
})*/
// Vuejs - Vue wrapper for hammerjs
import {VueHammer} from 'vue2-hammer'
@@ -120,7 +120,7 @@ Vue.use(notify)
// PrismJS
import 'prismjs'
//import 'prismjs'
import 'prismjs/themes/prism-tomorrow.css'
+2 -2
View File
@@ -4,14 +4,14 @@ export default {
Vue.prototype.$ntSetError = function (msg) {
this.$vs.notify({
title: 'خطا در ثبت اطلاعات',
text: msg || 'اطلاعات ثبت نگردید.',
//text: msg || 'اطلاعات ثبت نگردید.',
color: 'danger',
})
}
Vue.prototype.$ntSet = function (msg) {
this.$vs.notify({
title: 'اطلاعات ثبت شد.',
//title: 'اطلاعات ثبت شد.',
text: msg || 'اطلاعات با موفقیت به ثبت رسید',
color: 'primary',
})
+4 -4
View File
@@ -54,7 +54,7 @@ const router = new Router({
{
path: '/dashboard',
name: 'dashborrdPage',
component: () => import('./views/DashboardAnalytics.vue'),
component: () => import('./views/dashboard/DashboardAnalytics.vue'),
meta: {
rule: 'editor'
}
@@ -105,7 +105,7 @@ router.afterEach(() => {
router.beforeEach((to, from, next) => {
// return next();
let isLogin = sessionStorage.getItem('accessToken');
console.log("to.path ==> ", to.path);
//console.log("to.path ==> ", to.path);
if (
(
to.path === "/register/form" ||
@@ -115,9 +115,9 @@ router.beforeEach((to, from, next) => {
to.path === "/auth/forgot-password"
)
) {
if (isLogin) {
/* if (isLogin) {
router.push({path: '/'});
}
}*/
return next();
}
-130
View File
@@ -1,130 +0,0 @@
<!-- =========================================================================================
File Name: DashboardAnalytics.vue
Description: Dashboard Analytics
----------------------------------------------------------------------------------------
Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
Author: Pixinvent
Author URL: http://www.themeforest.net/user/pixinvent
========================================================================================== -->
<template>
<div>
<div class="grid grid-cols-4 gap-4">
<div>
<a-card >
<span>تعداد کل پرسنل</span>
<h1>{{ model.total_personnel }}</h1>
<a-divider />
<span>ثبت نام شده در 30 روز گذشته {{ model.last_month_personnel }}</span>
</a-card>
</div>
<div>
<a-card >
<span>تعداد کل درخواست ها</span>
<h1>{{ model.total_proposal }}</h1>
<a-divider />
<span>ثبت شده در 30 روز گذشته {{ model.last_month_proposal }}</span>
</a-card>
</div>
<div>
<a-card >
<span>تعداد کل قراداد ها</span>
<h1>{{ model.total_contract }}</h1>
<a-divider />
<span>ثبت شده در 30 روز گذشته {{ model.last_month_contract }}</span>
</a-card>
</div>
<div>
</div>
</div>
<br/>
<div class="grid grid-cols-2 gap-4">
<div>
<div>
<a-card title="پرسنل استخدام شده در 30 روزگذشته">
<ATable
class="p-0 m-0"
:pagination="true"
bordered
:locale="{emptyText:'داده ای یافت نشد'}"
:columns="cols" :data-source="personelPerMonth">
</ATable>
</a-card>
</div>
</div>
<div>
<div>
<a-card title="پرسنلی که تازه و یا نزدیک به اتمام قرادادشان هست">
<ATable
class="p-0 m-0"
:pagination="true"
bordered
:locale="{emptyText:'داده ای یافت نشد'}"
:columns="cols" :data-source="personelPerMonth">
</ATable>
</a-card>
</div>
</div>
</div>
</div>
</template>
<script>
import * as TableCol from "@/table/personelPerMonth";
//import {ax} from "@/axios";
import axios from "@/axios"
export default {
data() {
return {
col:null,
model:{},
personelPerMonth:[],
}
},
components: {
},
computed: {
},
async created() {
this.cols = TableCol.default;
//console.log('111111111',axios.defaults.headers);
try {
await axios.get('dashboard')
.then((res)=>{
//console.log('dsfsdfsdfds');
this.model=res.data;
this.personelPerMonth=res.data.personnel;
}).catch((error)=>{
//console.log('dsafsdfsdfsdf');
console.log(error);
});
}
catch (error)
{
// console.log('gggggggg');
}
},
}
</script>
<style lang="scss">
.ant-pagination
{
direction: ltr !important;
}
td,th{
text-align: right !important;
}
</style>
+387 -86
View File
@@ -2,72 +2,220 @@
<template>
<div>
<a-card>
<a-tabs default-active-key="1" style="direction: ltr" >
<a-tab-pane key="2" tab="مدیریت شهرها">
<a-tab-pane key="3" tab="شهرهای محل همکاری">
<input
v-if="inputCityVisible"
class="ant-input"
ref="input"
type="text"
size="small"
:style="{ width: '78px' }"
:value="inputValue"
@change="handleInputChange"
@blur="handleInputConfirmCity"
@keyup.enter="handleInputConfirmCity"
/>
<a-tag v-else style="background: #fff; borderStyle: dashed;" @click="showInputCity">
<a-icon type="plus" />افزودن
</a-tag>
<template v-for="(city, index) in configCities">
<a-tag :key="city.id" :closable="true" @close="() => handleCloseCity(city.id)">
{{ city.title }}
</a-tag>
</template>
<br>
<a-button type="primary" class="mt-10" @click="saveCity()">
ذخیره اطلاعات
</a-button>
</a-tab-pane>
<a-tab-pane key="2" tab="دسته های آموزشی">
<input
v-if="inputVisible"
class="ant-input"
ref="input"
type="text"
size="small"
:style="{ width: '78px' }"
:value="inputValue"
@change="handleInputChange"
@blur="handleInputConfirm"
@keyup.enter="handleInputConfirm"
/>
<a-tag v-else style="background: #fff; borderStyle: dashed;" @click="showInput">
<a-icon type="plus" /> افزودن دسته جدید آموزشی
</a-tag>
<template v-for="(tag, index) in tags">
<!-- <a-tooltip v-if="tag.length > 20" :key="tag" :title="tag">
<a-tag :key="tag" :closable="index !== 0" @close="() => handleClose(tag)">
{{ `${tag.slice(0, 20)}...` }}
</a-tag>
</a-tooltip>-->
<a-tag :key="tag" :closable="true" @close="() => handleClose(tag)">
{{ tag }}
</a-tag>
</template>
<br>
<a-button type="primary" class="mt-10" @click="saveCategory()">
ذخیره اطلاعات
</a-button>
<!-- <template v-for="(item, index) in category">
&lt;!&ndash; <a-tooltip v-if="tag.length > 20" :key="tag" :title="tag">
<a-tag :key="tag" :closable="index !== 0" @close="() => handleClose(tag)">
{{ `${tag.slice(0, 20)}...` }}
</a-tag>
</a-tooltip>&ndash;&gt;
<a-tag :key="item" :closable="index !== 0" @close="() => handleClose(item)">
{{ item }}
</a-tag>
</template>-->
</a-tab-pane>
<a-tab-pane key="1" tab="مدیریت شهرها">
<div>
<a-card title="شهرهای محل همکاری" :bordered="true" >
<!-- <a-card title="شهرهای محل همکاری" :bordered="true" >
<a-form :form="formCities" @submit="handleSubmitCities">
<div class="grid grid-cols-6 gap-4">
<div>
<a-button type="primary" class="mt-5">
ذخیره شهر ها
<a-form-item>
<a-button type="primary" @click="handleSubmitCities" class="mt-5">
ذخیره شهر ها
</a-button>
</a-form-item>
</div>
<div class="col-span-5">
<a-select
class="mt-5"
mode="multiple"
:default-value="[]"
style="width: 100%;direction: ltr !important;"
placeholder="انتخاب شهر"
>
<a-select-option v-for="item,index in cities" :key="item.id" style="direction: rtl !important;">
{{item.title}}
</a-select-option>
</a-select>
</div>
<a-modal
v-model="showAddJob"
okText="ثبت تغییرات "
@ok="handleSubmit"
cancelText="بستن"
title="افزودن شغل" >
<a-form :form="form" @submit="handleSubmit">
<a-form-item label="شغل">
<a-input
v-decorator="['title',{rules: [{ required: true, message: 'وارد کردن شغل الزامی است' }],},]"/>
</a-form-item>
<a-form-item label="شهر های همکاری">
<a-select
class="mt-3"
mode="multiple"
style="width: 100%;direction: rtl !important;"
placeholder="انتخاب شهر"
v-decorator="['cities',{rules: [{ required: true, message: 'وارد کردن شهر های همکاری الزامی است' }],},]"
>
<a-select-option v-for="item,index in cities" :key="`${item.id}`">
{{item.title}}
</a-select-option>
</a-select>
</a-form-item>
</a-form>
</a-modal>
<div class="col-span-5">
<a-form-item >
<a-select
v-decorator="['select',{ rules: [{ required: true, message: 'لطفا شهر را انتخاب نمایید' }] },]"
class="mt-5"
mode="tags"
style="width: 100%;direction: ltr !important;"
placeholder="انتخاب شهر" >
<a-select-option v-for="item,ndex in cities" :value="item.id" :key="item.id" style="direction: rtl !important;">
{{item.title}}
</a-select-option>
</a-select>
</a-form-item>
</div>
</div>
</a-card>
</a-form>
&lt;!&ndash;
<a-form :form="formCities" @submit="">
<div>
<a-form-item >
</a-form-item>
</div>
<div class="col-span-5">
<a-form-item label="">
</a-form-item>
</div>
</a-form>
</div>&ndash;&gt;
</a-card>-->
<a-spin :spinning="spinning">
<a-modal
v-model="showAddJob"
okText="ثبت تغییرات "
@ok="handleSubmit"
cancelText="بستن"
title="افزودن شغل" >
<a-form :form="form">
<a-form-item label="شغل">
<input class="ant-input"
v-decorator="['title',{rules: [{ required: true, message: 'وارد کردن شغل الزامی است' }],},]"/>
</a-form-item>
<a-form-item label="نمایش در لیست ثبت نام">
<a-checkbox v-decorator="['is_visible',{valuePropName:'checked',rules: [{ required: false, message: '' }],},]" >
نمایش بده
</a-checkbox>
</a-form-item>
<a-form-item label="شهر های همکاری">
<a-select
show-search
:filter-option="filterOption"
notFoundContent="اطلاعاتی یافت نشد"
class="mt-3"
mode="multiple"
style="width: 100%;direction: rtl !important;"
placeholder="انتخاب شهر"
v-decorator="['cities',{rules: [{ required: true, message: 'وارد کردن شهر های همکاری الزامی است' }],},]" >
<a-select-option v-for="item,index in cities" :key="`${item.id}`">
{{item.title}}
</a-select-option>
</a-select>
</a-form-item>
</a-form>
</a-modal>
</a-spin>
</div>
<a-button @click="showAddJob =true" type="primary" class="mt-5">
افزودن شغل
</a-button>
</a-button >
<br/>
<ATable
<x-table ref="jobTbl" class="mt-4" style="direction: rtl"
:model="cols">
<!-- <template slot="operator" slot-scope="text,record">
<a-button type="primary" @click="showPersonal(text.record)">
مشاهده و ویرایش اطلاعات
</a-button>
</template>-->
<template slot="cities_str_slot" slot-scope="{text,record}">
<!--{{ record.cities_str }}-->
<a-tag v-for="item,index in record.cities_str" :key="index" >{{item}}</a-tag>
</template>
<template slot="visible" slot-scope="{text,record}">
<a-tag color="green" v-if="record.is_visible">
نمایش
</a-tag>
<a-tag color="red" v-else>
عدم نمایش
</a-tag>
</template>
<template slot="operator" slot-scope="{text,record}">
<a-tooltip placement="bottomLeft">
<template slot="title">
<span>حذف</span>
</template>
<a-popconfirm
title="آیا می خواهید حذف کنید؟"
ok-text="بله"
cancel-text="خیر"
@confirm="okDelete(record.id)"
>
<a-button type="danger" class="ml-3">
حذف
</a-button>
</a-popconfirm>
</a-tooltip>
<a-button type="primary" @click="showEditModal(record)" >
ویرایش
</a-button>
</template>
</x-table>
<!-- <ATable
class="mt-5"
:pagination="true"
bordered
@@ -101,16 +249,19 @@
ویرایش
</a-button>
</template>
<!-- <a-button type="primary">
&lt;!&ndash; <a-button type="primary">
Primary
</a-button>-->
</a-button>&ndash;&gt;
</ATable>-->
</ATable>
</a-tab-pane>
<a-tab-pane key="1" tab="پیکربندی سیستم">
<!-- <a-tab-pane key="1" tab="پیکربندی سیستم">
<a-checkbox v-model="global" style="direction: rtl">
ثبت نام در تمامی شهر ها
</a-checkbox>
@@ -118,59 +269,69 @@
<a-button type="primary" class="mt-5" @click="setConfig()">
ثبت اطلاعات
</a-button>
</a-tab-pane>
</a-tab-pane>-->
</a-tabs>
<a-modal
v-model="showJobEditModal"
okText="ثبت تغییرات "
@ok="saveEditJob"
cancelText="بستن"
title="ویرایش شغل" >
<a-form :form="fromJobEdit" @submit="saveEditJob" >
<a-form :form="fromJobEdit">
<a-form-item label="شغل">
<a-input
<input class="ant-input"
v-decorator="['title',{rules: [{ required: true, message: 'وارد کردن شغل الزامی است' }]}]"/>
</a-form-item>
<a-form-item label="نمایش در لیست ثبت نام">
<a-checkbox v-decorator="['is_visible',{valuePropName:'checked',rules: [{ required: false, message: '' }],},]" >
نمایش بده
</a-checkbox>
</a-form-item>
<a-form-item label="شهر های همکاری">
<a-select
show-search
:filter-option="filterOption"
notFoundContent="اطلاعاتی یافت نشد"
class="mt-3"
mode="multiple"
style="width: 100%;direction: rtl !important;"
autocomplete="off"
placeholder="انتخاب شهر"
v-decorator="['cities',{rules: [{ required: true, message: 'وارد کردن شهر های همکاری الزامی است' }]}]"
>
v-decorator="['cities',{rules: [{ required: true, message: 'وارد کردن شهر های همکاری الزامی است' }]}]">
<a-select-option v-for="(item,index) in cities" :key="`${item.id}`">
{{item.title}}
</a-select-option>
</a-select>
</a-form-item>
</a-form>
</a-modal>
</a-card>
</div>
</template>
<script>
import * as TableCol from "./jobCols";
//import * as TableCol from "./jobCols";
//import * from TblJobs from "./pe"
/*import * as TableCol from './jobTbl';*/
//import XTable from "@/components/x-table/XTable";
import * as TableCol from './jobTbl';
import XTable from "@/components/x-table/XTable";
import axios from "@/axios";
import axios from "@/axios";
export default {
data() {
return {
titleJobModal: '',
tags: [],
configCities:[{id:1,title:'تهران'},{id:2,title:'اصفهان'}],
inputVisible: false,
inputCityVisible:false,
inputValue: '',
spinning: false,
titleJobModal: '',
col: null,
global: false,
showAddJob: false,
@@ -184,6 +345,7 @@
username: '',
form: this.$form.createForm(this, {name: 'coordinated'}),
fromJobEdit: this.$form.createForm(this, {name: 'coordinated'}),
formCities:this.$form.createForm(this, {name: 'coordinated'}),
defaultCity:[]
}
},
@@ -196,7 +358,107 @@
}*/
},
methods: {
async getJobs()
saveCategory(){
axios.post('/category',{category:this.tags})
.then((res)=>{
//console.log(res.data);
this.$message.success('اطلاعات با موفقیت ثبت شد');
//this.getJobs();
//this.showAddJob=false;
}).catch((error)=>{
this.$message.error('خطا در دریافت اطلاعات');
});
},
saveCity(){
axios.post('/add-city',{cities:this.configCities})
.then((res)=>{
//console.log(res.data);
this.configCities=res.data.map((item)=>{ return {id:item.id,title:item.title} });
this.$message.success('اطلاعات با موفقیت ثبت شد');
//this.getJobs();
//this.showAddJob=false;
}).catch((error)=>{
this.$message.error('خطا در دریافت اطلاعات');
});
},
handleClose(removedTag) {
const tags = this.tags.filter(tag => tag !== removedTag);
console.log(tags);
this.tags = tags;
},
handleCloseCity(removedTag){
if(removedTag!=null)
{
axios.post('/remove-city',{id:removedTag}).then((res)=>{
});
}
let index=this.configCities.findIndex((item)=> {
return item.id==removedTag;
});
if(index>-1){
this.configCities.splice(index,1);
}
},
showInput() {
this.inputVisible = true;
this.$nextTick(function() {
this.$refs.input.focus();
});
},
showInputCity() {
this.inputCityVisible = true;
this.$nextTick(function() {
this.$refs.input.focus();
});
},
handleInputChange(e) {
this.inputValue = e.target.value;
},
handleInputConfirmCity(){
const inputValue = this.inputValue;
if(inputValue.length==0)
return ;
let index=this.configCities.findIndex((item)=>{
return item.title==inputValue;
})
if(index==-1){
this.configCities.push({id:null,title:inputValue});
}
this.inputCityVisible=false;
this.inputValue='';
},
handleInputConfirm() {
const inputValue = this.inputValue;
let tags = this.tags;
//console.log('tags',tags);
/* if(tags.length==0)
{
tags.push(inputValue);
}
else{
}*/
if (inputValue && tags.indexOf(inputValue) === -1) {
tags = [...tags, inputValue];
}
//console.log(tags);
Object.assign(this, {
tags,
inputVisible: false,
inputValue: '',
});
},
filterOption(input, option) {
return (
option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
);
},
/* async getJobs()
{
await axios.get('/jobs')
.then((res) => {
@@ -204,30 +466,36 @@
}).catch((error) => {
this.$message.error('خطا در دریافت اطلاعات');
});
},
showEditModal(id)
},*/
showEditModal(record)
{
this.showJobEditModal=true;
var item=this.jobs.find((item) => item.id==id);
//var item=this.jobs.find((item) => item.id==id);
this.$nextTick(()=>{
this.currentJobID=item.id;
this.fromJobEdit.setFieldsValue(item);
this.currentJobID=record.id;
this.fromJobEdit.setFieldsValue(record);
})
},
saveEditJob(e)
{
e.preventDefault();
this.fromJobEdit.validateFields((err, values) => {
if (!err) {
this.spinning = true;
try{
values.id=this.currentJobID;
axios.post('/jobs',values)
this.$message.success('اطلاعات با موفقیت ثبت شد');
this.getJobs();
this.showJobEditModal = false;
axios.post('/jobs',values).then((res)=>{
this.$refs.jobTbl.fetch();
this.$message.success('اطلاعات با موفقیت ثبت شد');
this.showJobEditModal = false;
})
//this.getJobs();
//this.$refs.jobTbl.fetch();
}catch (e) {
this.$message.error('خطا در دریافت اطلاعات');
}
this.spinning =false;
}
});
},
@@ -235,20 +503,43 @@
e.preventDefault();
this.form.validateFields((err, values) => {
if (!err) {
this.spinning = true;
axios.post('/jobs',values)
.then((res)=>{
//console.log(res.data);
this.$message.success('اطلاعات با موفقیت ثبت شد');
this.getJobs();
this.$refs.jobTbl.fetch();
this.form.resetFields();
//this.getJobs();
this.showAddJob=false;
}).catch((error)=>{
this.$message.error('خطا در دریافت اطلاعات');
});
this.spinning = false;
//console.log('Received values of form: ', values);
//this.$store.commit('update', values);
}
});
},
handleSubmitCities(e) {
e.preventDefault();
this.formCities.validateFields((err, values) => {
if (!err) {
//console.log("fdgsdfgdfg",values);
/* axios.post('/jobs',values)
.then((res)=>{
//console.log(res.data);
this.$message.success('اطلاعات با موفقیت ثبت شد');
this.getJobs();
this.showAddJob=false;
}).catch((error)=>{
this.$message.error('خطا در دریافت اطلاعات');
});*/
//console.log('Received values of form: ', values);
//this.$store.commit('update', values);
}
});
},
async changeTab() {
/* switch (this.activeTab)
{
@@ -284,11 +575,11 @@
this.$message.error('خطا در ثبت اطلاعات');
});
},
async okDelete(id){
try{
await axios.post('/jobs',{ id:id , delete:true })
this.getJobs()
this.$refs.jobTbl.fetch();
//this.getJobs()
}catch (e) {
}finally {
@@ -311,15 +602,24 @@
this.$message.error('خطا در دریافت اطلاعات');
});
await axios.get('/get-category')
.then((res) => {
//console.log(res.data);
this.tags=res.data;
}).catch((error) => {
this.$message.error('خطا در دریافت اطلاعات');
});
await axios.get('/cities')
.then((res) => {
this.cities = res.data;
this.configCities=res.data.map((item)=>{ return {id:item.id,title:item.title} });
console.log(res.data);
}).catch((error) => {
this.$message.error('خطا در دریافت اطلاعات');
});
this.getJobs();
//this.getJobs();
},
mounted() {
@@ -369,4 +669,5 @@
direction: rtl;
margin-right: 25px;
}
</style>
+8
View File
@@ -0,0 +1,8 @@
import XTbl, {Xtc} from '../../components/x-table/index';
const tbl = new XTbl('/jobsList', '');
tbl.add(new Xtc('title', 'عنوان شغل').noSort());
tbl.add(new Xtc('cities_str_slot', 'شهر های فعال در شغل').renderSlot('cities_str_slot').noSort());
tbl.add(new Xtc('is_visible', 'نمایش در ثبت نام').renderSlot('visible').noSort());
tbl.add(new Xtc('id', 'عملیات').renderSlot('operator').noSort())
export default tbl;
+160
View File
@@ -0,0 +1,160 @@
<!-- =========================================================================================
File Name: DashboardAnalytics.vue
Description: Dashboard Analytics
----------------------------------------------------------------------------------------
Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
Author: Pixinvent
Author URL: http://www.themeforest.net/user/pixinvent
========================================================================================== -->
<template>
<div>
<!-- <div class="grid grid-cols-4 gap-4">
<div>
<a-card >
<span>تعداد کل پرسنل</span>
<h1>{{ model.total_personnel }}</h1>
<a-divider />
<span>ثبت نام شده در 30 روز گذشته {{ model.last_month_personnel }}</span>
</a-card>
</div>
<div>
<a-card >
<span>تعداد کل درخواست ها</span>
<h1>{{ model.total_proposal }}</h1>
<a-divider />
<span>ثبت شده در 30 روز گذشته {{ model.last_month_proposal }}</span>
</a-card>
</div>
<div>
<a-card >
<span>تعداد کل قراداد ها</span>
<h1>{{ model.total_contract }}</h1>
<a-divider />
<span>ثبت شده در 30 روز گذشته {{ model.last_month_contract }}</span>
</a-card>
</div>
<div>
</div>
</div>-->
<br/>
<div class="grid grid-cols-2 gap-4">
<div>
<a-card title="لیست پرسنل اتمام قرارداد در ماه گذشته">
<x-table style="height: 400px;overflow: auto" class="mt-4" :model="contractEndPastMonth"></x-table>
</a-card>
</div>
<div>
<a-card title="لیست پرسنل اتمام قرارداد در ماه جاری">
<x-table style="height: 400px;overflow: auto" class="mt-4" :model="contractEndCurrentMonth"></x-table>
</a-card>
</div>
<div>
<a-card title="لیست پرسنل اتمام قرارداد در ماه آینده">
<x-table style="height: 400px;overflow: auto" class="mt-4" :model="contractEndNextMonth"></x-table>
</a-card>
</div>
<div>
<a-card title="لیست پرسنل استخدام شده در ماه گذشته">
<x-table style="height: 400px;overflow: auto" class="mt-4" :model="PersonelPastMonth"></x-table>
</a-card>
</div>
<div>
<a-card title="لیست پرسنل استخدام شده در ماه جاری">
<x-table style="height: 400px;overflow: auto" class="mt-4" :model="PersonelCurrentMonth"></x-table>
</a-card>
</div>
<div>
<a-card title="لیست پرسنل فسخ قرارداد در ماه گذشته">
<x-table style="height: 400px;overflow: auto" class="mt-4" :model="contractTerminationPastMonth"></x-table>
</a-card>
</div>
<div>
<a-card title="لیست پرسنل فسخ قرارداد در ماه جاری">
<x-table style="height: 400px;overflow: auto" class="mt-4" :model="contractTerminationCurrentMonth"></x-table>
</a-card>
</div>
</div>
</div>
</template>
<script>
//import * as TableCol from "@/table/personelPerMonth";
import * as TableColcontractEndPastMonth from './personelEndContractPastmonthTbl';
import * as TableColcontractEndNextMonth from './personelEndContractNextmonthTbl';
import * as TableColcontractCurrentMonth from './personelEndContractCurrentmonthTbl';
import * as TableColPersonelPastMonth from './personelPastmonthTbl';
import * as TableColPersonelCurrentMonth from './personelCurrentmonthTbl';
import * as TableColcontractTerminationCurrentMonth from './contractTerminationCurrentMonthTbl';
import * as TableColcontractTerminationPastMonth from './contractTerminationPastMonthTbl';
import XTable from "@/components/x-table/XTable";
//import {ax} from "@/axios";
import axios from "@/axios"
export default {
data() {
return {
contractEndNextMonth,
contractEndPastMonth,
contractEndCurrentMonth,
PersonelCurrentMonth,
PersonelPastMonth,
contractTerminationPastMonth,
contractTerminationCurrentMonth
//col:null,
//model:{},
//personelPerMonth:[],
}
},
components: {
XTable,
},
computed: {
},
async created() {
this.contractEndPastMonth = TableColcontractEndPastMonth.default;
this.contractEndNextMonth = TableColcontractEndNextMonth.default;
this.contractEndCurrentMonth = TableColcontractCurrentMonth.default;
this.PersonelCurrentMonth=TableColPersonelCurrentMonth.default;
this.PersonelPastMonth= TableColPersonelPastMonth.default;
this.contractTerminationPastMonth=TableColcontractTerminationPastMonth.default;
this.contractTerminationCurrentMonth=TableColcontractTerminationCurrentMonth.default;
//console.log('111111111',axios.defaults.headers);
// try {
// await axios.get('dashboard')
// .then((res)=>{
// //console.log('dsfsdfsdfds');
// this.model=res.data;
// this.personelPerMonth=res.data.personnel;
// }).catch((error)=>{
// //console.log('dsafsdfsdfsdf');
// console.log(error);
// });
// }
// catch (error)
// {
// // console.log('gggggggg');
// }
},
}
</script>
<style lang="scss" >
.ant-pagination
{
direction: ltr !important;
}
td,th{
text-align: right !important;
}
/* .ant-input-search
{
display: none !important;
}*/
</style>
@@ -0,0 +1,8 @@
import XTbl, {Xtc} from '../../components/x-table/index';
const tbl = new XTbl('contractTerminationCurrentMonth', 'لیست پرسنل');
tbl.add(new Xtc('personnel.personel_id', 'کد پرسنلی').noSort());
tbl.add(new Xtc('personnel.name', 'نام و نام خانوادگی').noSort())
tbl.add(new Xtc('start_atj', 'تاریخ شروع قرارداد').noSort())
tbl.add(new Xtc('end_atj', 'تاریخ اتمام قرارداد').noSort())
export default tbl;
@@ -0,0 +1,8 @@
import XTbl, {Xtc} from '../../components/x-table/index';
const tbl = new XTbl('contractTerminationPastMonth', 'لیست پرسنل');
tbl.add(new Xtc('personnel.personel_id', 'کد پرسنلی').noSort());
tbl.add(new Xtc('personnel.name', 'نام و نام خانوادگی').noSort())
tbl.add(new Xtc('start_atj', 'تاریخ شروع قرارداد').noSort())
tbl.add(new Xtc('end_atj', 'تاریخ اتمام قرارداد').noSort())
export default tbl;
@@ -0,0 +1,7 @@
import XTbl, {Xtc} from '../../components/x-table/index';
const tbl = new XTbl('personelCurrentMonth', 'لیست پرسنل');
tbl.add(new Xtc('personel_id', 'کد پرسنلی').noSort());
tbl.add(new Xtc('name', 'نام و نام خانوادگی').noSort())
tbl.add(new Xtc('caj', 'تاریخ استخدام').noSort())
export default tbl;
@@ -0,0 +1,8 @@
import XTbl, {Xtc} from '../../components/x-table/index';
const tbl = new XTbl('personelContactEndCurrentMonth', 'لیست پرسنل');
tbl.add(new Xtc('personnel.personel_id', 'کد پرسنلی').noSort());
tbl.add(new Xtc('personnel.name', 'نام و نام خانوادگی').noSort())
tbl.add(new Xtc('start_atj', 'تاریخ شروع قرارداد').noSort())
tbl.add(new Xtc('end_atj', 'تاریخ اتمام قرارداد').noSort())
export default tbl;
@@ -0,0 +1,8 @@
import XTbl, {Xtc} from '../../components/x-table/index';
const tbl = new XTbl('personelContactEndNextMonth', 'لیست پرسنل');
tbl.add(new Xtc('personnel.personel_id', 'کد پرسنلی').noSort());
tbl.add(new Xtc('personnel.name', 'نام و نام خانوادگی').noSort())
tbl.add(new Xtc('start_atj', 'تاریخ شروع قرارداد').noSort())
tbl.add(new Xtc('end_atj', 'تاریخ اتمام قرارداد').noSort())
export default tbl;
@@ -0,0 +1,8 @@
import XTbl, {Xtc} from '../../components/x-table/index';
const tbl = new XTbl('personelContactEndPastMonth', 'لیست پرسنل');
tbl.add(new Xtc('personnel.personel_id', 'کد پرسنلی').noSort());
tbl.add(new Xtc('personnel.name', 'نام و نام خانوادگی').noSort())
tbl.add(new Xtc('start_atj', 'تاریخ شروع قرارداد').noSort())
tbl.add(new Xtc('end_atj', 'تاریخ اتمام قرارداد').noSort())
export default tbl;
@@ -0,0 +1,7 @@
import XTbl, {Xtc} from '../../components/x-table/index';
const tbl = new XTbl('personelPastMonth', 'لیست پرسنل');
tbl.add(new Xtc('personel_id', 'کد پرسنلی').noSort());
tbl.add(new Xtc('name', 'نام و نام خانوادگی').noSort())
tbl.add(new Xtc('caj', 'تاریخ استخدام').noSort())
export default tbl;
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -2,8 +2,8 @@ import XTbl, {Xtc} from '../../components/x-table/index';
const tbl = new XTbl('http://hr.asco-intl.com/back/public/api/personnel', 'لیست پرسنل');
tbl.add(new Xtc('name', 'نام و نام خانوادگی').filterText());
tbl.add(new Xtc('fname', 'کد پرسنلی').filterText())
tbl.add(new Xtc('id', 'شماره بیمه').filterText())
tbl.add(new Xtc('personel_id', 'کد پرسنلی').filterText())
tbl.add(new Xtc('insurance_no', 'شماره بیمه').filterText())
tbl.add(new Xtc('ncode', 'کد ملی').filterText())
tbl.add(new Xtc('caj', 'ثبت نام').filterDate().noSort())
tbl.add(new Xtc('uaj', 'به روز رسانی').filterText().noSort())
+139 -122
View File
@@ -35,7 +35,6 @@
</x-table>
<a-modal :width="1000" v-model="showMosahebeModal" title="مشاهده مصاحبه ها" >
<div v-if="is_skeleton">
<ASkeleton/>
</div>
@@ -56,12 +55,12 @@
{{ item.interviewer }}
</a-descriptions-item>
<a-descriptions-item label="وضعیت">
{{ item.type }}
{{ item.sts_str }}
</a-descriptions-item>
</a-descriptions>
<a-card title="جزییات">
<a-list>
<a-list-item v-for="element,index in item.result" :key="index" v-if="item.result">
<a-card title="جزییات" >
<a-list >
<a-list-item v-for="element,index in item.result" :key="index" v-if="item.result" style="direction: rtl">
<div class="flex w-full flex-col">
<div class="flex justify-between w-full items-center">
<h3>{{title_interview[index]}}</h3>
@@ -86,7 +85,6 @@
</div>
</div>
<template slot="footer">
<a-button key="back" @click="showMosahebeModal=false">
بستن
@@ -96,27 +94,22 @@
</a-modal>
<a-modal force-render :width="990" v-model="showAddMosahebeModal" title="ثبت مصاحبه">
<template slot="footer">
<a-button v-if="current < 2" type="primary" @click="savefromMosahebe">
بعدی
</a-button>
<a-button
v-if="current == 2"
type="primary"
@click="savefromMosahebe"
>
@click="savefromMosahebe">
ثبت اطلاعات
</a-button>
<a-button v-if="current > 0" style="margin-left: 8px" @click="prev">
قبلی
</a-button>
</template>
<div>
<a-steps :current="current" style="direction: ltr">
<a-steps :current="current" style="direction:rtl">
<a-step title="ثبت تاریخ و مصاحبه کننده" />
<a-step title="ثبت جزئیات" />
<a-step title="ایجاد پرونده" />
@@ -139,13 +132,13 @@
</a-form-item>
<date-picker
:auto-submit="true"
color="#4f72ab"
color="#1DA57A"
v-model="interview_at"
element="interview_at"
/>
</div>
<a-form-item label="نام مصاحبه کننده">
<a-input autocomplete="off" v-decorator="['interviewer',{rules: [{ required: true, message: 'وارد کردن شغل الزامی است' }]}]"/>
<input class="ant-input" autocomplete="off" v-decorator="['interviewer',{rules: [{ required: true, message: 'نام مصاحبه کننده را وارد نمایید' }]}]"/>
</a-form-item>
</div>
</a-card>
@@ -162,14 +155,14 @@
</a-form-item>
<a-form-item label="توضیحات">
<a-textarea
<textarea class="ant-input"
placeholder=""
v-decorator="['result_1.desc']"
:auto-size="{ minRows: 2, maxRows: 6 }"
/>
</a-form-item>
<a-form-item label="نتیجه">
<!--<a-form-item label="نتیجه">
<a-radio-group v-decorator="['result_1.sts']">
<a-radio :value="-1">
رد شده
@@ -179,7 +172,7 @@
</a-radio>
</a-radio-group>
</a-form-item>
</a-form-item>-->
</a-card>
<br/>
@@ -190,14 +183,14 @@
</a-form-item>
<a-form-item label="توضیحات">
<a-textarea
<textarea class="ant-input"
placeholder=""
v-decorator="['result_2.desc']"
:auto-size="{ minRows: 2, maxRows: 6 }"
/>
</a-form-item>
<a-form-item label="نتیجه">
<!-- <a-form-item label="نتیجه">
<a-radio-group v-decorator="['result_2.sts']">
<a-radio :value="-1">
رد شده
@@ -207,7 +200,7 @@
</a-radio>
</a-radio-group>
</a-form-item>
</a-form-item>-->
</a-card>
<br/>
@@ -219,7 +212,8 @@
<a-form-item label="توضیحات">
<a-textarea
<textarea
class="ant-input"
placeholder=""
v-decorator="['result_3.desc']"
:auto-size="{ minRows: 2, maxRows: 6 }"
@@ -227,7 +221,7 @@
</a-form-item>
<a-form-item label="نتیجه">
<!-- <a-form-item label="نتیجه">
<a-radio-group v-decorator="['result_3.sts']">
<a-radio :value="-1">
رد شده
@@ -237,7 +231,7 @@
</a-radio>
</a-radio-group>
</a-form-item>
</a-form-item>-->
</a-card>
<br/>
@@ -249,14 +243,14 @@
<a-form-item label="توضیحات">
<a-textarea
<textarea class="ant-input"
placeholder=""
v-decorator="['result_4.desc']"
:auto-size="{ minRows: 2, maxRows: 6 }"
/>
</a-form-item>
<!--
<a-form-item label="نتیجه">
<a-radio-group v-decorator="['result_4.sts']">
<a-radio :value="-1">
@@ -267,7 +261,7 @@
</a-radio>
</a-radio-group>
</a-form-item>
</a-form-item>-->
</a-card>
<br/>
@@ -279,7 +273,7 @@
<a-form-item label="توضیحات">
<a-textarea
<textarea class="ant-input"
placeholder=""
v-decorator="['result_5.desc']"
:auto-size="{ minRows: 2, maxRows: 6 }"
@@ -287,7 +281,7 @@
</a-form-item>
<a-form-item label="نتیجه">
<!-- <a-form-item label="نتیجه">
<a-radio-group v-decorator="['result_5.sts']">
<a-radio :value="-1">
رد شده
@@ -297,25 +291,27 @@
</a-radio>
</a-radio-group>
</a-form-item>
</a-form-item>-->
</a-card>
</div>
<div v-show="current==2">
<a-form-item label="نتیجه کلی مصاحبه">
<a-radio-group v-decorator="['sts']">
<a-radio-group v-decorator="['sts',{rules: [{ required: true, message: 'نتیجه مصاحبه را انتخاب نمایید' }]}]">
<a-radio :value="-1">
رد شده
</a-radio>
<a-radio :value="1">
قبول
</a-radio>
<a-radio :value="2">
الویت دوم
</a-radio>
</a-radio-group>
</a-form-item>
<a-alert message="توجه داشته باشید که در صورت قبول انتخاب کردن نتیجه کلی مصاحبه برای فرد مورد نظر کد پرسنلی ایجاد خواهد شد." type="warning" />
<!-- <a-alert message="توجه داشته باشید که در صورت قبول انتخاب کردن نتیجه کلی مصاحبه برای فرد مورد نظر کد پرسنلی ایجاد خواهد شد." type="warning" />-->
</div>
@@ -345,72 +341,80 @@
<div>شغل متقاضی : {{ personalInformation.job_title }}</div>
<div>نام پدر : {{ personalInformation.father_name }}</div>
<div>تاریخ تولد : {{ personalInformation.birth_date }}</div>
<div>جنسیت : {{ personalInformation.gender }}</div>
<div>وضعیت تاهل : {{personalInformation.marriage_sts }}</div>
<div>جنسیت : {{ personalInformation.gender_str }}</div>
<div>وضعیت تاهل : {{personalInformation.marriage_sts_str }}</div>
<div>شماره شناسنامه : {{ personalInformation.iden_id }}</div>
<div>سریال شناسنامه : {{ personalInformation.iden_serial }}</div>
<div>محل صدور : {{ personalInformation.iden_place }}</div>
<div>محل تولد : {{ personalInformation.birth_place }}</div>
<div>وضعیت مسکن : {{ personalInformation.record }}</div>
<div>آدرس : {{ personalInformation.address }}</div>
<div>وضعیت مسکن : {{ personalInformation.house_sts_str }}</div>
<div>ایمیل : {{ personalInformation.email }}</div>
<div>تلفن ثابت : {{ personalInformation.phone }}</div>
<div>شماره بیمه : {{ personalInformation.name }}</div>
<div>شماره بیمه : {{ personalInformation.insurance_no }}</div>
<div>تلفن ضروری : {{ personalInformation.phone_emergency }}</div>
<div>نام فرد مرتبط : {{ personalInformation.phone_emergency_related }}</div>
<div>نسبت فرد : </div>
<div>نام فرد مرتبط : {{ personalInformation.phone_emergency_name }}</div>
<div>نسبت فرد : {{ personalInformation.phone_emergency_related }}</div>
<div>حقوق درخواستی : {{ personalInformation.requested_salary }}</div>
<div class="col-span-2">شماره حساب بانک پاسارگاد : {{ personalInformation.pasargad_bank_number }}</div>
<div class="col-span-3">آدرس : {{ personalInformation.address }}</div>
</div>
</a-card>
<br/>
<!-- <a-card title="اطلاعات خانوادگی" :bordered="true" >
<div class="grid grid-cols-3 gap-4" v-if="personalDetails.family[0]">
<div>مقطع : {{ personalDetails.pro[0].university }}</div>
<div>دانشگاه : {{ personalDetails.pro[0].university }}</div>
<div>رشته تحصیلی: {{ personalDetails.pro[0].title }}</div>
<div>گرایش: {{ personalDetails.pro[0].trend }}</div>
<div>سال شروع: {{ personalDetails.pro[0].start_at }}</div>
<div>سال خاتمه: {{ personalDetails.pro[0].end_at }}</div>
</div>
</a-card>-->
<br/>
<a-card title="اطلاعات تحصیلی" :bordered="true" >
<div class="grid grid-cols-3 gap-4" v-if="personalDetails.pro && personalDetails.pro[0] ">
<div>مقطع : {{ personalDetails.pro[0].university }}</div>
<div>دانشگاه : {{ personalDetails.pro[0].university }}</div>
<div>رشته تحصیلی: {{ personalDetails.pro[0].title }}</div>
<div>گرایش: {{ personalDetails.pro[0].trend }}</div>
<div>سال شروع: {{ personalDetails.pro[0].start_at }}</div>
<div>سال خاتمه: {{ personalDetails.pro[0].end_at }}</div>
<a-card title="اطلاعات خانوادگی" :bordered="true" >
<template v-for="(item,index) in personalDetails['family']" >
<div class="grid grid-cols-3 gap-1" >
<div>نام : {{ item.name }}</div>
<div>نسبت : {{ item.relation }}</div>
<div>مقطع : {{ item.edu_level_str }}</div>
<div> رشته تحصیلی : {{ item.edu_title }}</div>
<div> شغل : {{ item.job }}</div>
</div>
<a-divider />
</template>
</a-card>
<br/>
<a-card title="اطلاعات تحصیلی" :bordered="true" >
<template v-for="(item,index) in personalDetails['education']">
<div class="grid grid-cols-3 gap-4" >
<div>مقطع : {{ item.level_str }}</div>
<div>دانشگاه : {{ item.university }}</div>
<div>رشته تحصیلی: {{ item.title }}</div>
<div>گرایش: {{ item.trend }}</div>
<div>سال شروع: {{ item.start_at }}</div>
<div>سال خاتمه: {{ item.end_at }}</div>
</div>
<a-divider />
</template>
</a-card>
<br/>
<a-card title="سوابق آموزشی" :bordered="true" >
<template v-for="(item,index) in personalDetails['traning']">
<div class="grid grid-cols-3 gap-4">
<div>مرکز برگزاری : {{ item.university }}</div>
<div>عنوان دوره : {{ item.title }}</div>
<div>سال : {{ item.start_at }}</div>
<div>امکان ارائه گواهینامه : {{ item.has_certificate_str }}</div>
</div>
<a-divider />
</template>
</a-card>
<br/>
<!-- <a-card title="سوابق آموزشی" :bordered="true" >
<div class="grid grid-cols-3 gap-4" v-if="personalDetails.pro[1]">
<div>مرکز برگزاری : {{ personalDetails.pro[1].university }}</div>
<div>عنوان دوره : {{ personalDetails.pro[1].title }}</div>
<div>سال : {{ personalDetails.pro[1].start_at }}</div>
<a-card title="سوابق کاری" :bordered="true" >
<template v-for="(item,index) in personalDetails['jobs_history']">
<div class="grid grid-cols-4 gap-4" >
<div>نام سازمان : {{ item.university }}</div>
<div>عنوان شغل : {{ item.title }}</div>
<div>سال شروع : {{ item.start_at }}</div>
<div v-if="item.end_at">سال خاتمه : {{ item.end_at }}</div>
<div v-else>سال خاتمه : تاکنون</div>
<!--<div>تاکنون : {{ item.end_at }}</div>-->
<div class="col-span-2">دلیل خاتمه : {{ item.note }}</div>
</div>
</a-card>-->
<br/>
<!--<a-card title="سوابق کاری" :bordered="true" >
<div class="grid grid-cols-3 gap-4" v-if="personalDetails.pro[2]">
<div>نام سازمان : {{ personalDetails.pro[2].university }}</div>
<div>عنوان شغل : {{ personalDetails.pro[2].title }}</div>
<div>سال شروع : {{ personalDetails.pro[2].start_at }}</div>
<div>سال خاتمه : {{ personalDetails.pro[2].end_at }}</div>
</div>
</a-card>-->
<a-divider />
</template>
</a-card>
</a-modal>
</a-card>
</div>
</template>
@@ -470,35 +474,35 @@
savefromMosahebe(e) {
e.preventDefault();
this.fromMosahebe.validateFields(async(err, values) => {
if (!err) {
try{
if(this.current < 2)
{
this.next();
}
else
{
console.log(values,'values')
const id = this.row_id
values.interview_at = this.interview_at
values.id = id
await axios.post('proposal/update',values)
this.showAddMosahebeModal = false
this.$ntSet('اطلاعات با موفقیت کامل شد')
this.fromMosahebe.resetFields()
}
}catch (e) {
this.$ntSetError()
throw e
}finally {
}
try{
if(this.current < 2)
{
this.next();
}
else
{
if (!err) {
console.log(values,'values')
const id = this.row_id
values.interview_at = this.interview_at
values.id = id
await axios.post('proposal/update',values)
this.showAddMosahebeModal = false
this.current=0;
//this.fromMosahebe.resetFields();
this.$ntSet('اطلاعات با موفقیت کامل شد')
this.fromMosahebe.resetFields();
}
}
}catch (e) {
this.$ntSetError()
throw e
}finally {
}
});
},
interview(e) {
/* interview(e) {
e.preventDefault();
this.fromMosahebe.validateFields(async (err, values) => {
if (!err) {
@@ -513,7 +517,7 @@
}
}
});
},
},*/
next() {
this.current++;
},
@@ -521,11 +525,12 @@
this.current--;
},
showDetails(record) {
console.log('aaaaa',record);
axios.post('/proposal/details', {id:record.id})
.then((res)=>{
this.personalInformation=record;
this.personalDetails=res.data;
console.log(this.personalDetails);
// console.log(this.personalDetails);
this.showInformationModal=true;
}).catch((error)=>{
this.$message.error('خطا در دریافت اطلاعات');
@@ -535,9 +540,9 @@
let self = this
this.$confirm({
title: 'آیا مطمئن به استخدام هستید ؟',
content: 'در صورتی که گزینه بله را انتخاب کنید کد پرسنلی برای فرد درخواست کننده در سیستم اختصاص خواهد یافت',
content: 'در صورتی که گزینه تایید را انتخاب نمایید فرد مورد نظر به عنوان پرسنل در سیستم ثبت می شود ',
cancelText:'انصراف',
okText:'بله',
okText:'تایید',
onOk() {
// this.$message.success('درخواست شما ثبت شد.');
@@ -555,7 +560,7 @@
}
},
onCancel() {
console.log('Cancel');
//console.log('Cancel');
},
//class: 'test',
});
@@ -570,13 +575,25 @@
</script>
<style>
.ant-modal-mask
{
z-index: 9999999 !important;
}
.ant-modal-wrap
{
z-index: 999999999 !important;
}
.ant-modal-mask
{
z-index: 9999999 !important;
}
.ant-modal-wrap
{
z-index: 999999999 !important;
}
ant-modal-title{
margin-right: 1rem;
}
.ant-steps-item-title::after{
/*left: unset !important;*/
right:100% !important;
}
/*.ant-modal-close
{
left: 0 !important;
}*/
</style>
+163 -114
View File
@@ -6,58 +6,51 @@
</div>
<vx-card class="mx-auto mt-10">
<a-steps :current="current" style="direction: ltr">
<a-steps :current="current" >
<a-step title="مرحله اول" />
<a-step title="مرحله دوم" />
<a-step title="مرحله سوم" />
<a-step title="مرحله سوم" />
</a-steps>
<div v-show="current == 0">
<p class="mt-6">
متقاضی گرامی ضمن سپاس از علاقه مندی شما برای همکاری با مجموعه آسکو بین الملل، لطفا اطلاعات شخصی و شغل مورد نظر خود را به دقت تکمیل فرمایید.
</p>
<p>
درخواستها مورد بررسی قرار گرفته و در صورت هماهنگی با فرصتهای شغلی شرکت، با شما تماس گرفته خواهد شد.
</p>
<p>
با تشکر و آرزوی موفقیت
</p>
</div>
<a-divider/>
<div class="steps-content">
<ASpin :spinning="loading">
<a-form :form="formFirst">
<!-- <a-form-item label="نام و نام خانوادگی">
&lt;!&ndash;<a-input autocomplete="off" v-decorator="['name2',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />&ndash;&gt;
&lt;!&ndash; <a-input v-decorator="['name',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" class="ant-input" placeholder="Basic usage" />&ndash;&gt;
&lt;!&ndash;<input type="text" v-decorator="['name',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" class="ant-input" >&ndash;&gt;
&lt;!&ndash; <vs-input v-decorator="['name',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />&ndash;&gt;
</a-form-item>-->
<div v-show="current==0" class="mt-4" >
<a-form-item label="نام و نام خانوادگی">
<!--<a-input autocomplete="off" v-decorator="['name2',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />-->
<a-input v-decorator="['name',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" class="ant-input" placeholder="Basic usage" />
<!--<input type="text" v-decorator="['name',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" class="ant-input" >-->
<!-- <vs-input v-decorator="['name',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />-->
</a-form-item>
<div v-show="current==0" class="mt-4">
<a-button type="primary" @click="addCity()">
<a-button type="primary" @click="addCity()">
افزودن ردیف
</a-button>
<a-card :bordered="true" class="mt-3" v-for="(item,index) in jobs">
<a-card :bordered="true" class="mt-3" v-for="(item,index) in jobsList">
<div class="grid sm:grid-cols-1 md:grid-cols-2 md:gap-3 lg:grid-cols-2 lg:gap-3">
<div>
<a-form-item label="انتخاب شهر">
<a-select
v-decorator="[`jobs[${index}].city`,{rules: [{ required: true, message: 'انتخاب شهر الزامی است.' }]}]"
:filter-option="filterOption"
show-search
v-decorator="[`jobs[${index}].city`,{rules: [{ required: true, message: 'انتخاب شهر الزامی است.' }]}]"
autocomplete="off"
placeholder="لطفا شهر را انتخاب کنید."
>
@select="getJob(index)"
notFoundContent="اطلاعاتی یافت نشد"
placeholder="لطفا شهر را انتخاب کنید." >
<a-select-option v-for="item in city" :value="item.id">
{{ item.title }}
</a-select-option>
@@ -65,13 +58,20 @@
</a-form-item>
</div>
<a-form-item label="انتخاب شغل">
<a-select autocomplete="off" aria-placeholder="لطفا شغل خود را انتخاب کنید." v-decorator="[`jobs[${index}].job`,{rules: [{ required: true, message: 'انتخاب شغل الزامی است.' }]}]">
<a-select-option v-for="item in job" :value="item.id">
<a-select
:filter-option="filterOption"
show-search
notFoundContent="اطلاعاتی یافت نشد"
autocomplete="off" aria-placeholder="لطفا شغل خود را انتخاب کنید." v-decorator="[`jobs[${index}].job`,{rules: [{ required: true, message: 'انتخاب شغل الزامی است.' }]}]">
<a-select-option v-for="item in jobsList[index].jobs" :value="item.id">
{{ item.title }}
</a-select-option>
</a-select>
</a-form-item>
</div>
<a-button type="danger" @click="deleteCity(index)" v-if="index >0" >
حذف
</a-button>
</a-card>
</div>
</a-form>
@@ -84,32 +84,38 @@
<div class="grid sm:grid-cols-1 md:grid-cols-4 lg:grid-cols-4 gap-4 mt-5">
<a-form-item label="نام و نام خانوادگی">
<a-input autocomplete="off" v-decorator="['name',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />
<!-- <a-input autocomplete="off" v-decorator="['name',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />-->
<input autocomplete="off" type="text" v-decorator="['name',{initialValue: null,rules: [{ required: true, message: 'نام و نام خانوادگی را وارد نمایید' }]}]" class="ant-input" >
</a-form-item>
<a-form-item label="نام پدر">
<a-input autocomplete="off" v-decorator="['father_name',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />
<!--<a-input autocomplete="off" v-decorator="['father_name',{initialValue: null,rules: [{ required: true, message: 'نام پدر را وارد نمایید' }]}]" />-->
<input autocomplete="off" type="text" class="ant-input" v-decorator="['father_name',{initialValue: null,rules: [{ required: true, message: 'نام پدر را وارد نمایید' }]}]">
</a-form-item>
<div>
<a-form-item label="تاریخ تولد">
<a-form-item label="تاریخ تولد" :required="birth_day ? false:true" :validateStatus=" birth_day ? '' : 'error'" :help=" birth_day ? '':'تاریخ تولد را وارد نمایید'" >
<!-- birth_date-->
<a-input
v-model="birth_day"
id="birth_day"
autocomplete="off"
<input
class="ant-input"
readonly="true"
v-model="birth_day"
id="birth_day"
autocomplete="off"
/>
<!-- v-decorator="['birthdate',{initialValue: null,rules: [{ required: true, message: 'تاریخ تولد را وارد نمایید' }]}]"-->
</a-form-item>
<date-picker
:auto-submit="true"
color="#4f72ab"
color="#1da57a"
v-model="birth_day"
element="birth_day"
/>
</div>
<a-form-item label="کد ملی">
<a-input autocomplete="off" v-decorator="['ncode',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />
<!--<a-input autocomplete="off" v-decorator="['ncode',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />-->
<input autocomplete="off" type="text" v-decorator="['ncode',{initialValue: null,rules: [{ required: true, message: 'کد ملی را وارد نمایید' },{ min : 10, message: 'کد ملی 10 رقمی می باشد' },{ max : 10, message: 'کد ملی 10 رقمی می باشد' }]}]" class="ant-input" >
</a-form-item>
</div>
@@ -136,11 +142,11 @@
</a-radio-group>
</a-form-item>
<a-form-item label="شماره حساب بانک پاسارگاد">
<a-input autocomplete="off" v-decorator="['pasargad_bank_number',{initialValue: null}]" />
<input class="ant-input" autocomplete="off" v-decorator="['pasargad_bank_number',{initialValue: null}]" />
</a-form-item>
<a-form-item label="حقوق درخواستی">
<a-input autocomplete="off" v-decorator="['requested_salary',{initialValue: null}]" />
<input class="ant-input" autocomplete="off" v-decorator="['requested_salary',{initialValue: null,rules: [{ required: true, message: 'حقوق درخواستی را وارد نمایید' }]}]" />
</a-form-item>
</div>
@@ -151,7 +157,7 @@
<div class="grid sm:grid-cols-1 md:grid-cols-4 lg:grid-cols-4 gap-4">
<a-form-item label="شماره شناسنامه">
<a-input autocomplete="off" v-decorator="['iden_code',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />
<input class="ant-input" autocomplete="off" v-decorator="['iden_code',{initialValue: null,rules: [{ required: true, message: 'شماره شناسنامه را وارد نمایید' }]}]" />
</a-form-item>
<a-form-item label="سریال شناسنامه">
@@ -161,7 +167,7 @@
{{ item }}
</a-select-option>
</a-select>
<a-input v-decorator="['iden_no_right',{initialValue: null}]" autocomplete="off" style="width: 70%;direction: rtl" />
<input class="ant-input" v-decorator="['iden_no_right',{initialValue: null}]" autocomplete="off" style="width: 77%;direction: rtl" />
</a-input-group>
</a-form-item>
<!-- <a-input-group compact>
@@ -178,11 +184,11 @@
<a-form-item label="محل صدور">
<a-input autocomplete="off" v-decorator="['iden_where',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />
<input class="ant-input" autocomplete="off" v-decorator="['iden_where',{initialValue: null,rules: [{ required: true, message: 'محل صدور را وارد نمایید' }]}]" />
</a-form-item>
<a-form-item label="محل تولد">
<a-input autocomplete="off" v-decorator="['birth_where',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />
<input class="ant-input" autocomplete="off" v-decorator="['birth_where',{initialValue: null,rules: [{ required: true, message: 'محل تولد را وارد نمایید' }]}]" />
</a-form-item>
</div>
</a-card>
@@ -190,7 +196,7 @@
<a-card title="اطلاعات سکونت" :bordered="true" >
<a-form-item label="وضعیت مسکن">
<a-radio-group style="direction: ltr" v-decorator="['house_status',{initialValue: '1'}]" button-style="solid">
<a-radio-group style="direction: ltr" v-decorator="['house_sts',{initialValue: '1'}]" button-style="solid">
<a-radio-button value="2">
مستاجر
</a-radio-button>
@@ -201,34 +207,34 @@
</a-form-item>
<a-form-item label="آدرس">
<a-input autocomplete="off" v-decorator="['address',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />
<input class="ant-input" autocomplete="off" v-decorator="['address',{initialValue: null,rules: [{ required: true, message: 'آدرس را وارد نمایید' }]}]" />
</a-form-item>
<div class="md:flex">
<div class="md:w-1/4 md:pl-4">
<a-row >
<a-form-item label="ایمیل">
<a-input style="direction: rtl !important;" v-decorator="['email',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]">
<input class="ant-input" style="direction: rtl !important;" v-decorator="['email',{initialValue: null,rules: [{ required: true, message: 'ایمیل را وارد نمایید' }]}]">
<!-- <feather-icon style="direction: ltr !important;" icon="MailIcon" slot="addonAfter" class="pt-1" svgClasses="w-5 h-5" />-->
</a-input>
<!-- </a-input>-->
</a-form-item>
</a-row>
</div>
<div class="md:w-1/4 md:pl-4">
<a-row >
<a-form-item label="موبایل">
<a-input autocomplete="off" v-decorator="['mobile',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" >
<input class="ant-input" autocomplete="off" v-decorator="['mobile',{initialValue: null,rules: [{ required: true, message: 'شماره موبایل را وارد نمایید' }]}]" >
<!--<feather-icon style="direction: ltr !important;" icon="SmartPhoneIcon" slot="addonAfter" class="pt-1" svgClasses="w-5 h-5" />-->
</a-input>
<!-- </a-input>-->
</a-form-item>
</a-row>
</div>
<div class="md:w-1/4 md:pl-4">
<a-row >
<a-form-item label="تلفن ثابت">
<a-input autocomplete="off" v-decorator="['phone',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]" >
<input class="ant-input" autocomplete="off" v-decorator="['phone',{initialValue: null,rules: [{ required: true, message: 'تلفن ثابت را وارد نمایید' }]}]" >
<!--<feather-icon style="direction: ltr !important;" icon="PhoneIcon" slot="addonAfter" class="pt-1" svgClasses="w-5 h-5" />-->
</a-input>
<!-- </a-input>-->
</a-form-item>
</a-row>
</div>
@@ -240,27 +246,27 @@
<div class="md:w-1/4 md:pl-4">
<a-row >
<a-form-item label="تلفن ضروری">
<a-input style="direction: rtl !important;" v-decorator="['phone_emergency',{initialValue: null,rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]">
<input class="ant-input" style="direction: rtl !important;" v-decorator="['phone_emergency',{initialValue: null,rules: [{ required: true, message: 'تلفن ضروری را وارد نمایید' }]}]">
<!-- <feather-icon style="direction: ltr !important;" icon="MailIcon" slot="addonAfter" class="pt-1" svgClasses="w-5 h-5" />-->
</a-input>
<!-- </a-input>-->
</a-form-item>
</a-row>
</div>
<div class="md:w-1/4 md:pl-4">
<a-row >
<a-form-item label="نام فرد">
<a-input autocomplete="off" v-decorator="['phone_emergency_name',{initialValue: null}]" >
<input class="ant-input" autocomplete="off" v-decorator="['phone_emergency_name',{initialValue: null}]" >
<!--<feather-icon style="direction: ltr !important;" icon="SmartPhoneIcon" slot="addonAfter" class="pt-1" svgClasses="w-5 h-5" />-->
</a-input>
<!-- </a-input>-->
</a-form-item>
</a-row>
</div>
<div class="md:w-1/4 md:pl-4">
<a-row >
<a-form-item label="نسبت">
<a-input autocomplete="off" v-decorator="['phone_emergency_related',{initialValue: null}]" >
<input class="ant-input" autocomplete="off" v-decorator="['phone_emergency_related',{initialValue: null}]" >
<!--<feather-icon style="direction: ltr !important;" icon="PhoneIcon" slot="addonAfter" class="pt-1" svgClasses="w-5 h-5" />-->
</a-input>
<!-- </a-input>-->
</a-form-item>
</a-row>
</div>
@@ -271,25 +277,25 @@
<a-card title="سابقه بیمه" :bordered="true" >
<a-form-item label="سابقه بیمه">
<a-radio-group style="direction: ltr" v-decorator="['has_insurance',{initialValue: '1'}]" button-style="solid" @change="number_insurance">
<a-radio-button value="1">
<a-radio-group style="direction: ltr" v-decorator="['has_insurance',{initialValue:-1}]" button-style="solid" @change="number_insurance">
<a-radio-button :value="1">
دارم
</a-radio-button>
<a-radio-button value="-1">
<a-radio-button :value="-1">
ندارم
</a-radio-button>
</a-radio-group>
</a-form-item>
<a-form-item label="شماره بیمه" v-if="has_instructor == '-1' ">
<a-input autocomplete="off" style="width: 40%" v-decorator="['insurance_no',{initialValue: null,rules: [{ required: false, message: 'این فیلد نمیتواند خالی باشد.' }]}]" />
<a-form-item label="شماره بیمه" v-if="has_instructor == 1 ">
<input class="ant-input" autocomplete="off" style="width: 40%" v-decorator="['insurance_no',{initialValue: null,rules: [{ required: false, message: 'شماره بیمه را وارد نمایید' }]}]" />
</a-form-item>
</a-card>
<br/>
<a-card title="اطلاعات خانوادگی" :bordered="true" >
<a-list class="mb-5" v-if="family.length > 0" :locale="{emptyText:'رکوردی وجود ندارد.'}" bordered item-layout="horizontal" >
<a-list class="mb-5" v-if="family.length > 0" :locale="{emptyText:'اطلاعاتی برای نمایش وجود ندارد.'}" bordered item-layout="horizontal" >
<a-list-item class="grid grid-cols-4" v-for="(item,index) in family" :key="index" >
<div>
<div style="direction: ltr" > نام :{{ item.name }}</div>
@@ -331,7 +337,7 @@
<br/>
<a-card title="سوابق تحصیلی" :bordered="true" >
<a-list class="mb-5" v-if="edu.length > 0" :locale="{emptyText:'رکوردی وجود ندارد.'}" bordered item-layout="horizontal" >
<a-list class="mb-5" v-if="edu.length > 0" :locale="{emptyText:'اطلاعاتی برای نمایش وجود ندارد.'}" bordered item-layout="horizontal" >
<a-list-item class="grid grid-cols-4" v-for="(item,index) in edu" :key="index" >
<div>
<div style="direction: ltr" v-if="item.grade"> مقطع :{{ item.grade.title }}</div>
@@ -376,7 +382,7 @@
<br/>
<a-card title="سوابق آموزشی" :bordered="true" >
<a-list class="mb-5" v-if="educational.length > 0" :locale="{emptyText:'رکوردی وجود ندارد.'}" bordered item-layout="horizontal" >
<a-list class="mb-5" v-if="educational.length > 0" :locale="{emptyText:'اطلاعاتی برای نمایش وجود ندارد.'}" bordered item-layout="horizontal" >
<a-list-item class="grid grid-cols-3" v-for="(item,index) in educational" :key="index" >
<div>
<div style="direction: rtl"> مرکز برگزار کننده : {{ item.university }}</div>
@@ -387,7 +393,7 @@
<div style="direction: rtl">سال : {{ item.start }}</div>
<div style="direction: rtl">
امکان ارائه گواهینامه دارم:
<feather-icon icon="CheckIcon" v-if="item.has_file" svgClasses="w-5 h-5 text-success"/>
<feather-icon icon="CheckIcon" v-if="item.has_certificate" svgClasses="w-5 h-5 text-success"/>
<feather-icon icon="XIcon" v-else svgClasses="w-5 h-5 text-danger"/>
</div>
</div>
@@ -420,7 +426,7 @@
<br/>
<a-card title="سوابق کاری" :bordered="true" >
<a-list class="mb-5" v-if="work.length > 0" :locale="{emptyText:'رکوردی وجود ندارد.'}" bordered item-layout="horizontal" >
<a-list class="mb-5" v-if="work.length > 0" :locale="{emptyText:'اطلاعاتی برای نمایش وجود ندارد.'}" bordered item-layout="horizontal" >
<a-list-item class="grid grid-cols-4" v-for="(item,index) in work" :key="index" >
<div>
<div style="direction: rtl"> نام سازمان : {{ item.university }}</div>
@@ -469,7 +475,7 @@
<br/>
<a-form-item>
<a-checkbox v-decorator="['commitment',{initialValue:false,rules: [{ required: true, message: 'تعهد الزامی است.' }]}]">
<a-checkbox v-decorator="['commitment',{valuePropName: 'checked',initialValue: true,rules: [{ required: true, message: 'نام را وارد نمایید' }]}]">
با آگاهی از قوانین و مقررات و صحت اطلاعات تایید میکنم.
</a-checkbox>
</a-form-item>
@@ -487,8 +493,7 @@
<a-result
status="success"
title="اطلاعات با موفقیت ثبت شد"
sub-title="لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است."
>
sub-title="">
<template #extra>
<a-button @click="LoginUser">
اتمام
@@ -503,16 +508,16 @@
<a-modal :visible="visibleFamily" title="اطلاعات خانوادگی" @ok="createFamily" @cancel="cancelFamily" ok-text="ایجاد" cancel-text="انصراف">
<a-form :form="formFamily">
<a-form-item label="نام">
<a-input autocomplete="off" v-decorator="['name',{rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]"/>
<input class="ant-input" autocomplete="off" v-decorator="['name',{rules: [{ required: true, message: 'نام را وارد نمایید' }]}]"/>
</a-form-item>
<a-form-item label="نسبت">
<a-input autocomplete="off" v-decorator="['relation',{rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]"/>
<input class="ant-input" autocomplete="off" v-decorator="['relation',{rules: [{ required: true, message: 'نسب را وارد نمایید' }]}]"/>
</a-form-item>
<a-form-item label="مقطع">
<a-select
class="mt-3"
style="width: 100%;direction: rtl !important;"
v-decorator="['level',{rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]"
v-decorator="['level',{rules: [{ required: false, message: 'مقطع را وارد نمایید' }]}]"
@change="changeGrade"
allowClear
>
@@ -522,10 +527,10 @@
</a-select>
</a-form-item>
<a-form-item label="رشته تحصیلی">
<a-input autocomplete="off" v-decorator="['edu_title',{rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]"/>
<input class="ant-input" autocomplete="off" v-decorator="['edu_title',{rules: [{ required: false, message: 'رشته تحصیلی را وارد نمایید' }]}]"/>
</a-form-item>
<a-form-item label="شغل">
<a-input autocomplete="off" v-decorator="['job',{rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]"/>
<input class="ant-input" autocomplete="off" v-decorator="['job',{rules: [{ required: false, message: 'شغل را وارد نمایید' }]}]"/>
</a-form-item>
<!-- <a-form-item label="مقطع">
<a-select
@@ -570,13 +575,13 @@
</a-form>
</a-modal>
<a-modal :visible="visibleEdu" title="افزودن سابقه تحصیلی" @ok="createEdu" @cancel="cancelEdu" ok-text="ایجاد" cancel-text="انصراف">
<a-modal :forceRender="true" :visible="visibleEdu" title="افزودن سابقه تحصیلی" @ok="createEdu" @cancel="cancelEdu" ok-text="ایجاد" cancel-text="انصراف">
<a-form :form="formEdu">
<a-form-item label="مقطع">
<a-select
class="mt-3"
style="width: 100%;direction: rtl !important;"
v-decorator="['level',{rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]"
v-decorator="['level',{rules: [{ required: true, message: 'مقطع را وارد نمایید ' }]}]"
@change="changeGrade"
allowClear
>
@@ -586,24 +591,25 @@
</a-select>
</a-form-item>
<a-form-item label="دانشگاه">
<a-input autocomplete="off" v-decorator="['university',{rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]"/>
<input class="ant-input" autocomplete="off" v-decorator="['university',{rules: [{ required: true, message: 'دانشگاه را وارد نمایید' }]}]"/>
</a-form-item>
<a-form-item label="رشته تحصیلی">
<a-input autocomplete="off" v-decorator="['major',{rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]"/>
<input class="ant-input" autocomplete="off" v-decorator="['major',{rules: [{ required: true, message: 'رشته تحصیلی را وارد نمایید' }]}]"/>
</a-form-item>
<a-form-item label="گرایش تحصیلی">
<a-input autocomplete="off" v-decorator="['orientation',{rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]"/>
<input class="ant-input" autocomplete="off" v-decorator="['orientation',{rules: [{ required: false, message: 'گرایش تحصیلی را وارد نمایید' }]}]"/>
</a-form-item>
<div class="md:flex">
<div class="md:w-1/2">
<a-form-item label="سال شروع">
<a-input-number autocomplete="off" :min="1350" :max="1401" v-decorator="['start',{rules: [{ required: true, message: 'لطفا مقدار سال شروع را به درستی بین 1350 تا 1401 وارد کنید.' }]}]"/>
<!--<a-input-number v-decorator="['result_1.score',{initialValue: 0}]" :min="0" :max="20" />-->
</a-form-item>
</div>
<div class="md:w-1/2">
<a-form-item label="سال خاتمه">
<a-input-number id="end" ref="end" autocomplete="off" :disabled="is_check" :min="1350" :max="1401" v-decorator="['end',{rules: [{ required: is_check ? false : true, message: 'لطفا مقدار سال خاتمه را به درستی بین 1350 تا 1401 وارد کنید.' }]}]"/>
<a-input-number type="number" class="ant-input-number" id="end" ref="end" autocomplete="off" :disabled="is_check" :min="1350" :max="1401" v-decorator="['end',{rules: [{ required: is_check ? false : true, message: 'لطفا مقدار سال خاتمه را به درستی بین 1350 تا 1401 وارد کنید.' }]}]"/>
</a-form-item>
</div>
<div class="md:w-1/3">
@@ -622,10 +628,10 @@
<a-form :form="formEducational">
<a-form-item label="مرکز برگزار کننده">
<a-input autocomplete="off" v-decorator="['university',{rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]"/>
<input class="ant-input" autocomplete="off" v-decorator="['university',{rules: [{ required: true, message: 'مرکز برگزار کننده را وارد نمایید' }]}]"/>
</a-form-item>
<a-form-item label="عنوان دوره">
<a-input autocomplete="off" v-decorator="['major',{rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]"/>
<input class="ant-input" autocomplete="off" v-decorator="['major',{rules: [{ required: true, message: 'عنوان دوره را وارد نمایید' }]}]"/>
</a-form-item>
<div class="md:flex">
@@ -636,7 +642,7 @@
</div>
<div class="md:w-1/3">
<a-form-item label="امکان ارائه گواهینامه دارم">
<a-checkbox v-decorator="['has_file',{initialValue:false,valuePropName: 'checked'}]"/>
<a-checkbox v-decorator="['has_certificate',{initialValue:false,valuePropName: 'checked'}]"/>
</a-form-item>
</div>
</div>
@@ -647,13 +653,13 @@
<a-modal :visible="visibleWork" title="افزودن سابقه کاری" @ok="createWork" @cancel="cancelWork" ok-text="ایجاد" cancel-text="انصراف">
<a-form :form="formWork">
<a-form-item label="نام سازمان">
<a-input autocomplete="off" v-decorator="['university',{rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]"/>
<input class="ant-input" autocomplete="off" v-decorator="['university',{rules: [{ required: true, message: 'نام سازمان را وارد نمایید ' }]}]"/>
</a-form-item>
<a-form-item label="عنوان شغل">
<a-input autocomplete="off" v-decorator="['major',{rules: [{ required: true, message: 'این فیلد نمیتواند خالی باشد.' }]}]"/>
<input class="ant-input" autocomplete="off" v-decorator="['major',{rules: [{ required: true, message: 'عنوان شغل را وارد نمایید' }]}]"/>
</a-form-item>
<a-form-item label="دلیل خاتمه">
<a-input autocomplete="off" v-decorator="['note',{rules: [{ required:false, message: 'این فیلد نمیتواند خالی باشد.' }]}]"/>
<input class="ant-input" autocomplete="off" v-decorator="['note',{rules: [{ required:is_work_check ? false : true, message: 'دلیل خاتمه را وارد نمایید' }]}]"/>
</a-form-item>
<div class="md:flex">
@@ -677,7 +683,7 @@
</a-form>
</a-modal>
<a-modal :visible="visibleAccept" title="شرایط و مقررات" @ok="visibleAccept = false" @cancel="visibleAccept = false" ok-text="باشه" cancel-text="انصراف">
<a-modal :visible="visibleAccept" title="شرایط و مقررات" @ok="visibleAccept = false" @cancel="visibleAccept = false" ok-text="تایید" cancel-text="انصراف">
اینجانب {{ fullName }} در تاریخ {{ date }} فرم بالا را تکمیل نموده و صحت کلیه اطلاعات تکمیل شده را تأیید می نمایم.
</a-modal>
@@ -717,7 +723,8 @@
edu:[],
family:[],
work:[],
jobs:[{city:null,job:null}],
jobsList:[{jobs:[]}],
//jobs:[{city:null,job:null}],
//model:[],
educational:[],
birth_day:'',
@@ -746,9 +753,21 @@
}
},
methods:{
deleteCity(index){
this.jobsList.splice(index,1);
//console.log(index);
},
filterOption(input, option) {
return (
option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
);
},
/* Agrement(rule, value, callback){
},*/
addCity()
{
this.jobs.push({city:null,job:null})
this.jobsList.push({jobs:[]});
},
number_insurance(e){
this.has_instructor = e.target.value
@@ -759,9 +778,9 @@
{
this.formFirst.validateFields(async(err, values) => {
if (!err) {
//this.current++;
this.current++;
console.log(values,'first')
// console.log(values,'first')
}
});
}
@@ -795,28 +814,46 @@
}
},
async getCity(){
getCity(){
try{
const {data} = await axios.get('/register/cities')
this.city = data
//const {data} = await axios.get('/register/cities')
axios.get('/register/cities').then((res)=>{
this.city = res.data;
}).catch((error)=>{
this.$ntSetError()
});
}catch (e) {
this.$ntSetError()
}
},
async getDate(){
getDate(){
try{
const {data} = await axios.get('/register/date')
this.date = data
//const {data} = await axios.get('/register/date')
axios.get('/register/date').then((res)=>{
this.date = res.data;
}).catch((error)=>{
this.$ntSetError()
});;
}catch (e) {
this.$ntSetError()
}
},
async getJob(){
try{
const {data} = await axios.post('/register/jobs')
this.job = data
}catch (e) {
getJob(index){
if(index!=undefined)
{
try{
this.formFirst.resetFields(`jobs[${index}].job`);
axios.post('/register/jobs',{city:""+this.formFirst.getFieldValue(`jobs[${index}].city`)+""}).then((res)=>{
//this.formFirst.setFieldsValue(`jobs[${index}].city`)
this.jobsList[index].jobs=res.data;
console.log(this.jobsList[index].jobs);
//console.log(this.jobsList[0].map((item)=> item.title))
});
//this.job = data
}catch (e) {
this.$ntSetError()
}
}
},
openModalEdu(){
@@ -1034,20 +1071,32 @@
computed:{
},
mounted() {
this.getCity()
this.getJob()
created() {
this.getCity()
this.getJob()
},
mounted() {
}
}
</script>
<style scoped>
[dir=rtl] .anticon.anticon-plus{
position: relative;
top: 4px;
left: 5px;
}
.ant-modal-title{
margin-right: 1rem;
}
<style>
[dir=rtl] .anticon.anticon-plus{
position: relative;
top: 4px;
left: 5px;
}
.ant-modal-title{
margin-right: 1rem;
}
.ant-steps-item-title::after{
/*left: unset !important;*/
right:100% !important;
}
/*.ant-select-arrow
{
left: 11px !important;
}*/
</style>