push
This commit is contained in:
481
lib/saas/view/userManage/userList/add.vue
Normal file
481
lib/saas/view/userManage/userList/add.vue
Normal file
@@ -0,0 +1,481 @@
|
||||
<!-- @format -->
|
||||
|
||||
<template>
|
||||
<ns-view-add-form
|
||||
:schemas="formSchema"
|
||||
title="新增员工"
|
||||
:model="data"
|
||||
api="/api/parking_merchant/objs/person/add" />
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent, reactive } from 'vue';
|
||||
import { dateUtil } from '/nerv-lib/util/date-util';
|
||||
|
||||
export default defineComponent({
|
||||
name: 'NsViewUserAdd',
|
||||
|
||||
setup() {
|
||||
const data = reactive({});
|
||||
|
||||
let formSchema = reactive([
|
||||
{
|
||||
field: 'information',
|
||||
label: '基本信息',
|
||||
displayFormItem: false,
|
||||
class: 'ns-form-item-full',
|
||||
component: 'NsChildForm',
|
||||
componentProps: {
|
||||
title: '基本信息',
|
||||
schemas: [
|
||||
{
|
||||
field: 'personName',
|
||||
label: '姓名',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
trigger: 'change',
|
||||
},
|
||||
{
|
||||
pattern: /^[\u4E00-\u9FA5]{1,18}$/,
|
||||
message: '只支持中文,长度不得超过36个字符',
|
||||
trigger: 'change',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'sex',
|
||||
component: 'NsRadioGroup',
|
||||
label: '性别',
|
||||
defaultValue: 1,
|
||||
componentProps: {
|
||||
styleType: { flex: true },
|
||||
options: [
|
||||
{
|
||||
label: '男',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: '女',
|
||||
value: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '不能为空',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'personNum',
|
||||
label: '员工编号',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '员工编号不能为空',
|
||||
trigger: 'blur',
|
||||
},
|
||||
{
|
||||
pattern: /^[a-zA-Z\d]{0,16}$/,
|
||||
message: '不支持特殊字符、中文、空格,长度不得超过16个字符',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'idCard',
|
||||
label: '身份证号',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// trigger: 'blur',
|
||||
// },
|
||||
{
|
||||
pattern:
|
||||
'^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$',
|
||||
message: '请输入正确的身份证号',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'telNum',
|
||||
label: '手机号码',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '手机号码不能为空',
|
||||
trigger: 'change',
|
||||
},
|
||||
{
|
||||
pattern: '^[1][3456789][\\d]{9}$',
|
||||
message: '请输入正确的中国大陆手机号',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'nation',
|
||||
component: 'nsSelectApi',
|
||||
label: '民族',
|
||||
componentProps: {
|
||||
api: '/api/community/objs/DictItem',
|
||||
params: {
|
||||
pageSize: 100,
|
||||
code: 'MZ',
|
||||
},
|
||||
placeholder: '请选择用户民族',
|
||||
resultField: 'data',
|
||||
labelField: 'dictName',
|
||||
valueField: 'dictValue',
|
||||
immediate: true,
|
||||
autoSelectFirst: false,
|
||||
},
|
||||
|
||||
// rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '请选择民族',
|
||||
// },
|
||||
// ],
|
||||
},
|
||||
{
|
||||
field: 'departmentUuidList',
|
||||
component: 'nsSelectApi',
|
||||
label: '所属部门',
|
||||
componentProps: {
|
||||
api: '/api/community/objs/Department',
|
||||
params: {
|
||||
pageSize: 100,
|
||||
},
|
||||
mode: 'multiple',
|
||||
resultField: 'data.data',
|
||||
labelField: 'departmentName',
|
||||
valueField: 'departmentUuid',
|
||||
autoSelectFirst: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'departmentMainUuid',
|
||||
component: 'nsSelectApi',
|
||||
label: '主部门',
|
||||
params: {
|
||||
departmentUuidList: 'fieldLink.departmentUuidList',
|
||||
},
|
||||
componentProps: {
|
||||
api: '/api/community/objs/Department',
|
||||
|
||||
resultField: 'data.data',
|
||||
labelField: 'departmentName',
|
||||
valueField: 'departmentUuid',
|
||||
autoSelectFirst: false,
|
||||
dependency: 'departmentUuidList',
|
||||
},
|
||||
},
|
||||
// {
|
||||
// field: 'roleUuid',
|
||||
// component: 'nsSelectApi',
|
||||
// label: '员工角色',
|
||||
// componentProps: {
|
||||
// api: '/api/community/objs/Role',
|
||||
// params: {
|
||||
// pageSize: 100,
|
||||
// },
|
||||
// resultField: 'data.data',
|
||||
// labelField: 'roleName',
|
||||
// valueField: 'roleUuid',
|
||||
// immediate: true,
|
||||
// autoSelectFirst: false,
|
||||
// },
|
||||
// rules: [
|
||||
// {
|
||||
// required: false,
|
||||
// message: '请选择角色',
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
{
|
||||
field: 'homeAddress',
|
||||
label: '居住地址',
|
||||
component: 'NsInputCity',
|
||||
componentProps: {
|
||||
api: '/api/parking_merchant/objs/BaseArea',
|
||||
},
|
||||
fieldMap: ['homeAddress', 'provinceCode', 'cityCode', 'areaCode'],
|
||||
// rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '不能为空',
|
||||
// },
|
||||
// ],
|
||||
},
|
||||
{
|
||||
field: 'address',
|
||||
label: '详细地址',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// trigger: 'blur',
|
||||
// },
|
||||
{
|
||||
pattern:
|
||||
'^[a-zA-Z\\d\u4e00-\u9fa5]{0,36}$|^[\u4e00-\u9fa5][a-zA-Z\\d\u4e00-\u9fa5]{0,36}[\u4e00-\u9fa5]$',
|
||||
message: '不支持特殊字符、空格,长度不得超过36个字符,中文占2位',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'personStatus',
|
||||
component: 'NsSelect',
|
||||
label: '状态',
|
||||
componentProps: {
|
||||
options: [
|
||||
{
|
||||
label: '在职',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: '离职',
|
||||
value: 2,
|
||||
},
|
||||
],
|
||||
|
||||
labelField: 'label',
|
||||
valueField: 'value',
|
||||
immediate: false,
|
||||
// defaultValue: 1,
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '不能为空',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'personPicUuid',
|
||||
component: 'NsUpload',
|
||||
label: '员工图片',
|
||||
componentProps: {
|
||||
// 上传的地址
|
||||
url: '/api/parking_merchant/objs/sys/FileUpload',
|
||||
// 上传的图片大小
|
||||
maxSize: 5242880,
|
||||
// 上传的图片类型
|
||||
fileType: ['jpg', 'png', 'jpeg'],
|
||||
// 展示图片数量
|
||||
count: 1,
|
||||
// 上传的文件类型,0-证书,1-图片,2-身份证件
|
||||
uploadType: 1,
|
||||
fieldName: 'certificateUuid',
|
||||
|
||||
// imgUrl: '/api/community/objs/FacePic/',
|
||||
// imgModuleUrl:
|
||||
// '/api/community/objs/FacePic/8f50a2f2dee948c4bfab58928d182897',
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'idCardPicUuid',
|
||||
component: 'NsUpload',
|
||||
label: '身份证扫描件',
|
||||
componentProps: {
|
||||
// 上传的地址
|
||||
url: '/api/parking_merchant/objs/sys/FileUpload',
|
||||
// 上传的图片大小
|
||||
maxSize: 5242880,
|
||||
// 上传的图片类型
|
||||
fileType: ['jpg', 'png', 'jpeg'],
|
||||
// 展示图片数量
|
||||
count: 1,
|
||||
// 上传的文件类型,0-证书,1-图片,2-身份证件
|
||||
uploadType: 2,
|
||||
// imgUrl: '/api/community/objs/FacePic/',
|
||||
// imgModuleUrl:
|
||||
// '/api/community/objs/FacePic/8f50a2f2dee948c4bfab58928d182897',
|
||||
},
|
||||
// rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '请上传图片',
|
||||
// },
|
||||
// ],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'location',
|
||||
label: '其他信息',
|
||||
displayFormItem: false,
|
||||
class: 'ns-form-item-full',
|
||||
component: 'NsChildForm',
|
||||
componentProps: {
|
||||
title: '其他信息',
|
||||
schemas: [
|
||||
{
|
||||
field: 'maritalStatus',
|
||||
component: 'nsSelectApi',
|
||||
label: '婚姻状况',
|
||||
componentProps: {
|
||||
api: '/api/community/objs/DictItem',
|
||||
params: {
|
||||
code: 'HYZK',
|
||||
},
|
||||
resultField: 'data',
|
||||
labelField: 'dictName',
|
||||
valueField: 'dictValue',
|
||||
immediate: true,
|
||||
autoSelectFirst: false,
|
||||
},
|
||||
// rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '不能为空',
|
||||
// },
|
||||
// ],
|
||||
},
|
||||
{
|
||||
field: 'education',
|
||||
component: 'nsSelectApi',
|
||||
label: '文化程度',
|
||||
componentProps: {
|
||||
api: '/api/community/objs/DictItem',
|
||||
params: {
|
||||
code: 'WHCD',
|
||||
},
|
||||
resultField: 'data',
|
||||
labelField: 'dictName',
|
||||
valueField: 'dictValue',
|
||||
immediate: true,
|
||||
autoSelectFirst: false,
|
||||
},
|
||||
// rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '不能为空',
|
||||
// },
|
||||
// ],
|
||||
},
|
||||
{
|
||||
field: 'entryTime',
|
||||
component: 'NsDatePicker',
|
||||
defaultValue: dateUtil(new Date()),
|
||||
label: '入职日期',
|
||||
componentProps: {
|
||||
valueFormat: 'X',
|
||||
format: 'YYYY-MM-DD',
|
||||
},
|
||||
// rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '不能为空',
|
||||
// },
|
||||
// ],
|
||||
},
|
||||
{
|
||||
field: 'graduatedSchool',
|
||||
label: '毕业院校',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '毕业院校不能为空',
|
||||
// trigger: 'blur',
|
||||
// },
|
||||
{
|
||||
pattern:
|
||||
/^[a-zA-Z\\d\u4e00-\u9fa5]{0,24}$|^[\u4e00-\u9fa5][a-zA-Z\\d\u4e00-\u9fa5]{0,24}[\u4e00-\u9fa5]$/,
|
||||
message: '不支持特殊字符、空格,长度不得超过24个字符,中文占2位',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'major',
|
||||
label: '所属专业',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
{
|
||||
pattern:
|
||||
/^[a-zA-Z\\d\u4e00-\u9fa5]{0,24}$|^[\u4e00-\u9fa5][a-zA-Z\\d\u4e00-\u9fa5]{0,24}[\u4e00-\u9fa5]$/,
|
||||
message: '不支持特殊字符、空格,长度不得超过24个字符,中文占2位',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'email',
|
||||
label: '邮箱地址',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
{
|
||||
required: false,
|
||||
trigger: 'blur',
|
||||
},
|
||||
{
|
||||
pattern: /^\w+@[a-z0-9]+\.[a-z]{2,4}$/,
|
||||
message: '邮箱格式不正确',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'residenceAddress',
|
||||
label: '户籍地址',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '户籍地址不能为空',
|
||||
// trigger: 'blur',
|
||||
// },
|
||||
{
|
||||
pattern:
|
||||
/^[a-zA-Z\\d\u4e00-\u9fa5]{0,64}$|^[\u4e00-\u9fa5][a-zA-Z\\d\u4e00-\u9fa5]{0,64}[\u4e00-\u9fa5]$/,
|
||||
message: '不支持特殊字符、空格,长度不得超过64个字符,中文占2位',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'remarks',
|
||||
label: '备注',
|
||||
component: 'NsTextarea',
|
||||
rules: [
|
||||
{
|
||||
required: false,
|
||||
trigger: 'blur',
|
||||
},
|
||||
{
|
||||
pattern: /^[\u4e00-\u9fa5]{0,120}$|^.{0,255}$/,
|
||||
message: '0-255个字符,中文占2位',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
return {
|
||||
formSchema,
|
||||
data,
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.top {
|
||||
border-bottom-color: #ecedef;
|
||||
border-bottom-style: solid;
|
||||
border-bottom-width: 1px;
|
||||
}
|
||||
</style>
|
||||
186
lib/saas/view/userManage/userList/detail.vue
Normal file
186
lib/saas/view/userManage/userList/detail.vue
Normal file
@@ -0,0 +1,186 @@
|
||||
<template>
|
||||
<ns-view-detail api="/api/parking_merchant/objs/person/detail" :detail="detail" />
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent, reactive } from 'vue';
|
||||
import { getCodeNameFromValue } from './index';
|
||||
import { dateUtil } from '/nerv-lib/util/date-util';
|
||||
export default defineComponent({
|
||||
name: 'NsViewUserDetail',
|
||||
setup() {
|
||||
const detail = [
|
||||
{
|
||||
title: '基本信息',
|
||||
items: [
|
||||
{
|
||||
label: '姓名',
|
||||
name: 'personName',
|
||||
},
|
||||
{
|
||||
label: '性别',
|
||||
name: 'sex',
|
||||
format: (value: any, data: any) => {
|
||||
switch (value) {
|
||||
case 1:
|
||||
return '男';
|
||||
case 0:
|
||||
return '女';
|
||||
default:
|
||||
return '-';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '员工编号',
|
||||
name: 'personNum',
|
||||
},
|
||||
{
|
||||
label: '身份证号',
|
||||
name: 'idCard',
|
||||
},
|
||||
{
|
||||
label: '手机号码',
|
||||
name: 'telNum',
|
||||
},
|
||||
{
|
||||
label: '民族',
|
||||
name: 'nation',
|
||||
format: (value: any, data: any) => {
|
||||
console.log(value, data, 'value');
|
||||
if (!value) return;
|
||||
let temp = getCodeNameFromValue('MZ', value);
|
||||
if (temp) {
|
||||
return temp;
|
||||
} else {
|
||||
return '-';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '所属部门',
|
||||
name: 'departmentNameList',
|
||||
format: (value: any, data: any) => {
|
||||
if (value) {
|
||||
let temp = '';
|
||||
let jdgeTemp = false;
|
||||
value.forEach((element: any[]) => {
|
||||
if (jdgeTemp) {
|
||||
temp += ',';
|
||||
temp += element.join('/');
|
||||
} else {
|
||||
jdgeTemp = true;
|
||||
temp += element.join('/');
|
||||
}
|
||||
});
|
||||
return temp;
|
||||
} else {
|
||||
return '-';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '主部门',
|
||||
name: 'departmentMainName',
|
||||
},
|
||||
{
|
||||
label: '员工角色',
|
||||
name: 'roleVOList',
|
||||
format: (value: any) => {
|
||||
if (value) {
|
||||
let apusic = '';
|
||||
value.forEach((element: any) => {
|
||||
apusic = element.roleName;
|
||||
});
|
||||
return apusic;
|
||||
} else {
|
||||
return '-';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '居住地址',
|
||||
name: 'homeAddress',
|
||||
},
|
||||
{
|
||||
label: '详细地址',
|
||||
name: 'address',
|
||||
},
|
||||
{
|
||||
label: '员工图片',
|
||||
name: 'personPicUuid',
|
||||
type: 'image',
|
||||
format: (value: string, data: any) => {
|
||||
return '/api/parking_merchant/objs/sys/ParkPic/' + value;
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '身份证扫描件',
|
||||
name: 'idCardPicUuid',
|
||||
type: 'image',
|
||||
format: (value: any, data: any) => {
|
||||
return '/api/parking_merchant/objs/sys/IdCardPic/' + value;
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: '其他信息',
|
||||
items: [
|
||||
{
|
||||
label: '婚姻状况',
|
||||
name: 'maritalStatus',
|
||||
format: (value: any, data: any) => {
|
||||
let temp = getCodeNameFromValue('HYZK', value);
|
||||
if (temp) {
|
||||
return temp;
|
||||
} else {
|
||||
return '-';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '文化程度',
|
||||
name: 'education',
|
||||
format: (value: any, data: any) => {
|
||||
let temp = getCodeNameFromValue('WHCD', value);
|
||||
if (temp) {
|
||||
return temp;
|
||||
} else {
|
||||
return '-';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '入职日期',
|
||||
name: 'entryTime',
|
||||
format: (value: any) => {
|
||||
return dateUtil(value).format('YYYY-MM-DD HH:mm:ss');
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '毕业院校',
|
||||
name: 'graduatedSchool',
|
||||
},
|
||||
{
|
||||
label: '所属专业',
|
||||
name: 'major',
|
||||
},
|
||||
{
|
||||
label: '邮箱地址',
|
||||
name: 'email',
|
||||
},
|
||||
{
|
||||
label: '户籍地址',
|
||||
name: 'residenceAddress',
|
||||
},
|
||||
{
|
||||
label: '备注',
|
||||
name: 'remarks',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
return { detail };
|
||||
},
|
||||
});
|
||||
</script>
|
||||
461
lib/saas/view/userManage/userList/edit.vue
Normal file
461
lib/saas/view/userManage/userList/edit.vue
Normal file
@@ -0,0 +1,461 @@
|
||||
<!-- @format -->
|
||||
|
||||
<template>
|
||||
<ns-view-add-form
|
||||
:schemas="formSchema"
|
||||
title="编辑员工"
|
||||
:model="data"
|
||||
api="/api/parking_merchant/objs/person/update" />
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent, reactive, ref } from 'vue';
|
||||
import moment from 'moment';
|
||||
import { http } from '/nerv-lib/util/http';
|
||||
import { useRouter } from 'vue-router';
|
||||
export default defineComponent({
|
||||
name: 'NsViewUserEdit',
|
||||
setup() {
|
||||
const data = reactive({});
|
||||
const router = useRouter();
|
||||
|
||||
const params = router.currentRoute.value.query;
|
||||
const homeAddress = ref('');
|
||||
const provinceCode = ref('');
|
||||
const areaCode = ref('');
|
||||
const cityCode = ref('');
|
||||
const personPicImageUrl = ref('');
|
||||
const idCardImageUrl = ref('');
|
||||
if (params.personUuid !== undefined) {
|
||||
http
|
||||
.get(`/api/parking_merchant/objs/person/detail`, { personUuid: params.personUuid })
|
||||
.then((res) => {
|
||||
data.personName = res.data.personName;
|
||||
data.sex = res.data.sex;
|
||||
data.sexName = res.data.sex ? '男' : '女';
|
||||
data.personNum = res.data.personNum;
|
||||
data.idCard = res.data.idCard;
|
||||
data.major = res.data.major;
|
||||
data.address = res.data.address;
|
||||
data.graduatedSchool = res.data.graduatedSchool;
|
||||
data.residenceAddress = res.data.residenceAddress;
|
||||
data.telNum = res.data.telNum;
|
||||
data.remarks = res.data.remarks;
|
||||
data.education = res.data.education;
|
||||
data.maritalStatus = res.data.maritalStatus;
|
||||
data.personStatus = res.data.personStatus;
|
||||
data.nation = res.data.nation;
|
||||
data.homeAddress = res.data.homeAddress;
|
||||
data.areaCode = res.data.areaCode;
|
||||
data.cityCode = res.data.cityCode; //moment(new Date()).format('YYYY-MM-DD 23:59:59')
|
||||
data.entryTime = moment(new Date(res.data.entryTime)).format('x');
|
||||
|
||||
data.provinceCode = res.data.provinceCode;
|
||||
homeAddress.value = res.data.homeAddress;
|
||||
areaCode.value = res.data.areaCode;
|
||||
cityCode.value = res.data.cityCode;
|
||||
provinceCode.value = res.data.provinceCode;
|
||||
personPicImageUrl.value = `/api/parking_merchant/objs/sys/ParkPic/${res.data.personPicUuid}`;
|
||||
idCardImageUrl.value = `/api/parking_merchant/objs/sys/IdCardPic/${res.data.idCardPicUuid}`;
|
||||
// formSchema.value.filter(
|
||||
// (item) => item.field === 'avatar'
|
||||
// )[0].componentProps.baseImageUrl = `/api/community/objs/ParkPic/${data.avatar}`;
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
|
||||
let formSchema = reactive([
|
||||
{
|
||||
label: '用户uuid',
|
||||
field: 'personUuid',
|
||||
component: 'NsInputText',
|
||||
show: false,
|
||||
defaultValue: params.personUuid,
|
||||
},
|
||||
{
|
||||
field: 'information',
|
||||
label: '基本信息',
|
||||
displayFormItem: false,
|
||||
class: 'ns-form-item-full',
|
||||
component: 'NsChildForm',
|
||||
componentProps: {
|
||||
title: '基本信息',
|
||||
schemas: [
|
||||
{
|
||||
field: 'personName',
|
||||
label: '姓名',
|
||||
component: 'NsInputText',
|
||||
},
|
||||
{
|
||||
field: 'sexName',
|
||||
component: 'NsInputText',
|
||||
label: '性别',
|
||||
viewOnly: true,
|
||||
},
|
||||
{
|
||||
field: 'sex',
|
||||
component: 'NsInputText',
|
||||
show: false,
|
||||
label: '性别',
|
||||
},
|
||||
{
|
||||
field: 'personNum',
|
||||
label: '员工编号',
|
||||
component: 'NsInputText',
|
||||
},
|
||||
{
|
||||
field: 'idCard',
|
||||
label: '身份证号',
|
||||
component: 'NsInputText',
|
||||
// rules: [
|
||||
// {
|
||||
// pattern:
|
||||
// '^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$',
|
||||
// message: '请输入正确的身份证号',
|
||||
// trigger: 'blur',
|
||||
// },
|
||||
// ],
|
||||
},
|
||||
{
|
||||
field: 'telNum',
|
||||
label: '手机号码',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '手机号码不能为空',
|
||||
trigger: 'change',
|
||||
},
|
||||
{
|
||||
pattern: '^[1][3456789][\\d]{9}$',
|
||||
message: '请输入正确的中国大陆手机号',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'nation',
|
||||
component: 'nsSelectApi',
|
||||
label: '民族',
|
||||
componentProps: {
|
||||
api: '/api/community/objs/DictItem',
|
||||
params: {
|
||||
pageSize: 100,
|
||||
code: 'MZ',
|
||||
},
|
||||
placeholder: '请选择用户民族',
|
||||
resultField: 'data',
|
||||
labelField: 'dictName',
|
||||
valueField: 'dictValue',
|
||||
immediate: true,
|
||||
autoSelectFirst: false,
|
||||
},
|
||||
|
||||
rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '请选择民族',
|
||||
// },
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'departmentUuidList',
|
||||
component: 'nsSelectApi',
|
||||
label: '所属部门',
|
||||
componentProps: {
|
||||
api: '/api/community/objs/Department',
|
||||
params: {
|
||||
pageSize: 100,
|
||||
},
|
||||
mode: 'multiple',
|
||||
resultField: 'data.data',
|
||||
labelField: 'departmentName',
|
||||
valueField: 'departmentUuid',
|
||||
autoSelectFirst: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'departmentMainUuid',
|
||||
component: 'nsSelectApi',
|
||||
label: '主部门',
|
||||
|
||||
params: {
|
||||
departmentUuidList: 'fieldLink.departmentUuidList',
|
||||
},
|
||||
componentProps: {
|
||||
api: '/api/community/objs/Department',
|
||||
resultField: 'data.data',
|
||||
labelField: 'departmentName',
|
||||
valueField: 'departmentUuid',
|
||||
autoSelectFirst: false,
|
||||
dependency: 'departmentUuidList',
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'homeAddress',
|
||||
label: '居住地址',
|
||||
component: 'NsInputCity',
|
||||
componentProps: {
|
||||
api: '/api/parking_merchant/objs/BaseArea',
|
||||
defaultHomeAddress: homeAddress,
|
||||
defaultProvinceCode: provinceCode,
|
||||
defaultCityCode: cityCode,
|
||||
defaultAreaCode: areaCode,
|
||||
},
|
||||
fieldMap: ['homeAddress', 'provinceCode', 'cityCode', 'areaCode'],
|
||||
rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '不能为空',
|
||||
// },
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'address',
|
||||
label: '详细地址',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// trigger: 'blur',
|
||||
// },
|
||||
{
|
||||
pattern:
|
||||
'^[a-zA-Z\\d\u4e00-\u9fa5]{0,36}$|^[\u4e00-\u9fa5][a-zA-Z\\d\u4e00-\u9fa5]{0,36}[\u4e00-\u9fa5]$',
|
||||
message: '不支持特殊字符、空格,长度不得超过36个字符,中文占2位',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'personStatus',
|
||||
component: 'NsSelect',
|
||||
label: '状态',
|
||||
componentProps: {
|
||||
options: [
|
||||
{
|
||||
label: '在职',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: '离职',
|
||||
value: 2,
|
||||
},
|
||||
],
|
||||
|
||||
labelField: 'label',
|
||||
valueField: 'value',
|
||||
immediate: false,
|
||||
// defaultValue: 1,
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '不能为空',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'personPicUuid',
|
||||
component: 'NsUpload',
|
||||
label: '员工图片',
|
||||
componentProps: {
|
||||
// 上传的地址
|
||||
url: '/api/parking_merchant/objs/sys/FileUpload',
|
||||
// 上传的图片大小
|
||||
maxSize: 5242880,
|
||||
// 上传的图片类型
|
||||
fileType: ['jpg', 'png', 'jpeg'],
|
||||
// 展示图片数量
|
||||
count: 1,
|
||||
// 上传的文件类型,0-证书,1-图片,2-身份证件
|
||||
uploadType: 1,
|
||||
fieldName: 'certificateUuid',
|
||||
baseImageUrl: personPicImageUrl,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'idCardPicUuid',
|
||||
component: 'NsUpload',
|
||||
label: '身份证扫描件',
|
||||
componentProps: {
|
||||
// 上传的地址
|
||||
url: '/api/parking_merchant/objs/sys/FileUpload',
|
||||
// 上传的图片大小
|
||||
maxSize: 5242880,
|
||||
// 上传的图片类型
|
||||
fileType: ['jpg', 'png', 'jpeg'],
|
||||
// 展示图片数量
|
||||
count: 1,
|
||||
// 上传的文件类型,0-证书,1-图片,2-身份证件
|
||||
uploadType: 2,
|
||||
baseImageUrl: idCardImageUrl,
|
||||
},
|
||||
// rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '请上传图片',
|
||||
// },
|
||||
// ],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'location',
|
||||
label: '其他信息',
|
||||
displayFormItem: false,
|
||||
class: 'ns-form-item-full',
|
||||
component: 'NsChildForm',
|
||||
componentProps: {
|
||||
title: '其他信息',
|
||||
schemas: [
|
||||
{
|
||||
field: 'maritalStatus',
|
||||
component: 'nsSelectApi',
|
||||
label: '婚姻状况',
|
||||
componentProps: {
|
||||
api: '/api/community/objs/DictItem',
|
||||
params: {
|
||||
code: 'HYZK',
|
||||
},
|
||||
resultField: 'data',
|
||||
labelField: 'dictName',
|
||||
valueField: 'dictValue',
|
||||
immediate: true,
|
||||
autoSelectFirst: false,
|
||||
},
|
||||
// rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '不能为空',
|
||||
// },
|
||||
// ],
|
||||
},
|
||||
{
|
||||
field: 'education',
|
||||
component: 'nsSelectApi',
|
||||
// type: 'WHCD',
|
||||
label: '文化程度',
|
||||
componentProps: {
|
||||
api: '/api/community/objs/DictItem',
|
||||
params: {
|
||||
code: 'WHCD',
|
||||
},
|
||||
resultField: 'data',
|
||||
labelField: 'dictName',
|
||||
valueField: 'dictValue',
|
||||
immediate: true,
|
||||
defaultValue: '4',
|
||||
autoSelectFirst: false,
|
||||
},
|
||||
// rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '不能为空',
|
||||
// },
|
||||
// ],
|
||||
},
|
||||
{
|
||||
field: 'entryTime',
|
||||
component: 'NsDatePicker',
|
||||
label: '入职日期',
|
||||
componentProps: {
|
||||
valueFormat: 'x',
|
||||
format: 'YYYY-MM-DD',
|
||||
},
|
||||
// rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '不能为空',
|
||||
// },
|
||||
// ],
|
||||
},
|
||||
{
|
||||
field: 'graduatedSchool',
|
||||
label: '毕业院校',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '毕业院校不能为空',
|
||||
// trigger: 'blur',
|
||||
// },
|
||||
{
|
||||
pattern:
|
||||
/^[a-zA-Z\\d\u4e00-\u9fa5]{0,24}$|^[\u4e00-\u9fa5][a-zA-Z\\d\u4e00-\u9fa5]{0,24}[\u4e00-\u9fa5]$/,
|
||||
message: '不支持特殊字符、空格,长度不得超过24个字符,中文占2位',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'major',
|
||||
label: '所属专业',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
{
|
||||
pattern:
|
||||
/^[a-zA-Z\\d\u4e00-\u9fa5]{0,24}$|^[\u4e00-\u9fa5][a-zA-Z\\d\u4e00-\u9fa5]{0,24}[\u4e00-\u9fa5]$/,
|
||||
message: '不支持特殊字符、空格,长度不得超过24个字符,中文占2位',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'email',
|
||||
label: '邮箱地址',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
{
|
||||
pattern: /^\w+@[a-z0-9]+\.[a-z]{2,4}$/,
|
||||
message: '邮箱格式不正确',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'residenceAddress',
|
||||
label: '户籍地址',
|
||||
component: 'NsInput',
|
||||
rules: [
|
||||
{
|
||||
pattern:
|
||||
/^[a-zA-Z\\d\u4e00-\u9fa5]{0,64}$|^[\u4e00-\u9fa5][a-zA-Z\\d\u4e00-\u9fa5]{0,64}[\u4e00-\u9fa5]$/,
|
||||
message: '不支持特殊字符、空格,长度不得超过64个字符,中文占2位',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'remarks',
|
||||
label: '备注',
|
||||
component: 'NsTextarea',
|
||||
rules: [
|
||||
{
|
||||
pattern: /^[\u4e00-\u9fa5]{0,120}$|^.{0,255}$/,
|
||||
message: '0-255个字符,中文占2位',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
return {
|
||||
formSchema,
|
||||
data,
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.top {
|
||||
border-bottom-color: #ecedef;
|
||||
border-bottom-style: solid;
|
||||
border-bottom-width: 1px;
|
||||
}
|
||||
</style>
|
||||
81
lib/saas/view/userManage/userList/index.ts
Normal file
81
lib/saas/view/userManage/userList/index.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
import { http } from '/nerv-lib/util/http';
|
||||
|
||||
let dictionary: any;
|
||||
let dicCodeValueMap: any;
|
||||
export function getDicCodeValue() {
|
||||
asyncLoadDictTree();
|
||||
return dicCodeValueMap;
|
||||
}
|
||||
export function getDictionary() {
|
||||
return dictionary;
|
||||
}
|
||||
export function asyncLoadDictTree(): Promise<any> {
|
||||
return http
|
||||
.get('/api/community/objs/DictTree')
|
||||
.then((res) => {
|
||||
if (res) {
|
||||
const response = res;
|
||||
if (response && response['success']) {
|
||||
const mainMap = {};
|
||||
const codeValueMap = {};
|
||||
transferData(response, 'data', mainMap);
|
||||
setCodeValueMap(response, 'data', codeValueMap);
|
||||
dicCodeValueMap = codeValueMap;
|
||||
dictionary = mainMap;
|
||||
return mainMap;
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
export function transferData(data, attri, mainMap): {} {
|
||||
const objs = data[attri];
|
||||
if (objs && objs instanceof Array && objs.length > 0) {
|
||||
objs.forEach((it) => {
|
||||
mainMap[it['dictCode']] = it;
|
||||
mainMap[it['dictCode'] + '_' + 'name'] = it['dictName'];
|
||||
if (it['subList'] && it['subList'] instanceof Array) {
|
||||
mainMap[it['dictCode'] + '_' + 'subList'] = it['subList'];
|
||||
transferData(it, 'subList', mainMap);
|
||||
} else {
|
||||
mainMap[it['dictCode'] + '_' + 'subList'] = [];
|
||||
return;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
export function setCodeValueMap(data: any, attri: any, map: any) {
|
||||
const objs = data[attri];
|
||||
if (objs && objs instanceof Array && objs.length > 0) {
|
||||
objs.forEach((it) => {
|
||||
map[it['dictParentCode'] + '_' + it['dictValue']] = it['dictName'];
|
||||
map[it['dictParentCode'] + '_' + it['dictCode']] = it['dictName'];
|
||||
if (it['subList'] && it['subList'] instanceof Array) {
|
||||
setCodeValueMap(it, 'subList', map);
|
||||
} else {
|
||||
// map[it['dictParentCode'] + '_' + it['dictCode']] = '';
|
||||
// map[it['dictParentCode'] + '_' + it['dictValue']] = '';
|
||||
return;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 根据code和value获取显示名
|
||||
* @param code 字典code
|
||||
* @param value 值
|
||||
*/
|
||||
export function getCodeNameFromValue(code, value): string {
|
||||
console.log(code, value, 'code, value');
|
||||
const name =
|
||||
getDicCodeValue() && getDicCodeValue()[code + '_' + value]
|
||||
? getDicCodeValue()[code + '_' + value]
|
||||
: '';
|
||||
return name;
|
||||
}
|
||||
218
lib/saas/view/userManage/userList/index.vue
Normal file
218
lib/saas/view/userManage/userList/index.vue
Normal file
@@ -0,0 +1,218 @@
|
||||
<template>
|
||||
<ns-view-list-table v-bind="tableConfig" rowKey="uuid" />
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent } from 'vue';
|
||||
export default defineComponent({
|
||||
name: 'NsViewUserList',
|
||||
setup() {
|
||||
const tableConfig = {
|
||||
title: '员工管理',
|
||||
api: '/api/parking_merchant/objs/person/pageList',
|
||||
params: {
|
||||
page: 0,
|
||||
pageSize: 10,
|
||||
},
|
||||
rowSelection: null,
|
||||
// scroll: { x: 1150 },
|
||||
columns: [
|
||||
{
|
||||
title: '姓名',
|
||||
dataIndex: 'personName',
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
title: '性别',
|
||||
dataIndex: 'sex',
|
||||
width: 100,
|
||||
customRender: (value) => {
|
||||
switch (value.text) {
|
||||
case 0:
|
||||
return '女';
|
||||
case 1:
|
||||
return '男';
|
||||
default:
|
||||
return '-';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '员工编号',
|
||||
dataIndex: 'personNum',
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
title: '手机号码',
|
||||
dataIndex: 'telNum',
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
title: '账号状态',
|
||||
dataIndex: 'accountState',
|
||||
width: 100,
|
||||
customRender: (value) => {
|
||||
switch (value.text) {
|
||||
case 1:
|
||||
return '启用';
|
||||
case 0:
|
||||
return '禁用';
|
||||
default:
|
||||
return '-';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '用户状态',
|
||||
width: 100,
|
||||
dataIndex: 'personStatus',
|
||||
customRender: (value) => {
|
||||
switch (value.text) {
|
||||
case 1:
|
||||
return '在职';
|
||||
case 2:
|
||||
return '离职';
|
||||
default:
|
||||
return '-';
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
columnActions: {
|
||||
title: '操作',
|
||||
// width: 250,
|
||||
|
||||
actions: [
|
||||
// {
|
||||
// label: '查看',
|
||||
// name: 'userDetail',
|
||||
// dynamicParams: 'personUuid',
|
||||
// route: '/userManage/user/detail',
|
||||
// },
|
||||
{
|
||||
label: '重置密码',
|
||||
dynamicParams: 'personUuid',
|
||||
name: 'UserReset',
|
||||
confirm: {
|
||||
title: '提示',
|
||||
content: `确认重置密码吗?`,
|
||||
},
|
||||
isReload: true,
|
||||
api: '/api/parking_merchant/objs/person/reset',
|
||||
},
|
||||
{
|
||||
label: '编辑',
|
||||
dynamicParams: 'personUuid',
|
||||
name: 'UserEdit',
|
||||
route: '/userManage/user/edit',
|
||||
},
|
||||
{
|
||||
label: '删除',
|
||||
dynamicParams: {
|
||||
personUuid: 'personUuid',
|
||||
},
|
||||
name: 'UserRemove',
|
||||
ifShow: (record: any) => {
|
||||
return record.personStatus !== 1;
|
||||
},
|
||||
confirm: true,
|
||||
isReload: true,
|
||||
api: '/api/parking_merchant/objs/person/delete',
|
||||
},
|
||||
{
|
||||
label: '删除',
|
||||
name: 'UserRemove',
|
||||
dynamicParams: {
|
||||
uuid: 'uuid',
|
||||
},
|
||||
ifShow: (record: any) => {
|
||||
return record.personStatus === 1;
|
||||
},
|
||||
confirm: {
|
||||
title: '警告',
|
||||
content: '在职员工不可删除!',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
headerActions: [
|
||||
{
|
||||
label: '新增用户',
|
||||
name: 'UserAdd',
|
||||
type: 'primary',
|
||||
route: '/userManage/user/add',
|
||||
},
|
||||
],
|
||||
formConfig: {
|
||||
schemas: [
|
||||
{
|
||||
field: 'accountState',
|
||||
label: '账号状态',
|
||||
component: 'NsSelect',
|
||||
componentProps: {
|
||||
placeholder: '请选择',
|
||||
options: [
|
||||
{
|
||||
label: '全部',
|
||||
value: '',
|
||||
},
|
||||
{
|
||||
label: '启用',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: '禁用',
|
||||
value: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'personStatus',
|
||||
label: '用户状态',
|
||||
component: 'NsSelect',
|
||||
componentProps: {
|
||||
placeholder: '请选择',
|
||||
options: [
|
||||
{
|
||||
label: '全部',
|
||||
value: '',
|
||||
},
|
||||
{
|
||||
label: '在职',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: '离职',
|
||||
value: 2,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'telNum',
|
||||
label: '手机号码',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
placeholder: '请输入手机号码',
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'personName',
|
||||
label: '用户姓名',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
placeholder: '请输入用户姓名',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
rowKey: 'personUuid',
|
||||
};
|
||||
|
||||
return {
|
||||
tableConfig,
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<style lang="less" scoped></style>
|
||||
Reference in New Issue
Block a user