Commit 50365532 authored by 赵伟庚's avatar 赵伟庚

fix some bugs

parent 3feed9b4
......@@ -176,6 +176,10 @@ export default {
},
handleExceed(file, fileList) {
console.log(file, fileList);
if (fileList && fileList.length == this.limit) {
this.$message.error(`最多只允许上传${this.limit}个文件`)
return false
}
},
handlePreview(val) {
let a = document.createElement("a"); // 生成一个a元素
......
......@@ -103,6 +103,16 @@
<el-form-item label="名称" prop="name">
<el-input
v-model="formData.name"
show-word-limit
:maxlength="
nodeClassifyId == 'eb9c7d70-c123-42b7-8e61-dde1b022b669'
? 6
: nodeClassifyId == 'efd9ec3b-7f18-49e2-9d88-bcca022243bb'
? 4
: nodeClassifyId == '949a1138-4995-464e-97a9-424d097eb271'
? 2
: 20
"
placeholder="请输入名称"
></el-input>
</el-form-item>
......@@ -232,8 +242,7 @@ const state = reactive({
},
rules: {
name: [
{ required: true, message: "请输入名称", trigger: "blur" },
{ max: 20, message: "名称最大为20字", trigger: "blur"}
{ required: true, message: "请输入名称", trigger: "blur" }
],
describe: [
{ required: true, message: "请输入描述", trigger: "blur" },
......
......@@ -17,7 +17,7 @@
<el-input v-model="contactForm.contact_email"/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="3" v-model="contactForm.remark" />
<el-input type="textarea" :rows="3" v-model="contactForm.remark" show-word-limit maxlength="300"/>
</el-form-item>
</el-form>
</template>
......@@ -44,37 +44,47 @@ const props = defineProps({
});
const checkPhone = (rule, value, callback) => {
var phone_ruler = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/;
setTimeout(() => {
if (!phone_ruler.test(value)&&value.length!==0) {
callback(new Error("请输入正确的手机号码"));
} else {
callback();
}
});
var phone_ruler = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/;
setTimeout(() => {
if (!phone_ruler.test(value)&&value.length!==0) {
callback(new Error("请输入正确的手机号码"));
} else {
callback();
}
});
};
const checkPhoneRepet = (rule, value, callback) => {
let params = null;
if (props.id){
params = {id: parseInt(props.id),contact_phone: value,}
}else {
params = {id: 0,contact_phone: value}
}
let params = null;
if (props.id){
params = {id: parseInt(props.id),contact_phone: value,}
}else {
params = {id: 0,contact_phone: value}
}
$axios.post(`/apaas/system/v5/org/check`,params)
.then((res) => {
if (res.data.code == 200) {
callback()
}else {
callback(new Error(res.data.data))
}
})
}
$axios.post(`/apaas/system/v5/org/check`,params)
.then((res) => {
if (res.data.code == 200) {
callback()
}else {
callback(new Error(res.data.data))
}
})
}
const checkName = (rule, value, callback) => {
var reg = /^[a-zA-Z0-9\u4e00-\u9fa5]+$/
if (!reg.test(value)) {
callback(new Error("只能输入字母、数字和汉字"))
}else {
callback()
}
}
const contactFormRules = reactive({
contact_name: [
{ required: true, message: '请输入联系人姓名', trigger: 'blur' },
{ max: 50, message: "联系人姓名最大长度为50个字符", trigger: "blur"},
{ validator: checkName, trigger: 'blur' },
],
contact_phone: [
{ required: true, message: '请输入联系人手机号', trigger: 'blur' },
......@@ -83,6 +93,7 @@ const contactFormRules = reactive({
],
contact_email: [
{ type: 'email', message: '请输入正确的邮箱', trigger: 'blur' },
{ max: 100, message: "邮箱最大长度为100个字符", trigger: "blur"},
]
})
const contactRef = ref(null)
......
......@@ -191,7 +191,7 @@ const getDetail = () => {
systemFormRef.value.setForm({
organization_id: form.organization_id,
system_role_id: form.system_role_id,
logo: [{url:form.logo}],
logo: form.logo ? [{url:form.logo}] : [],
business_code: form.business_code,
business_name: form.business_name,
business_desc: form.business_desc,
......
......@@ -29,7 +29,7 @@
<bg-upload-image v-model="systemForm.logo" :showTips="true" :limit="1" :fileSize="500" :fileSizeUnit="'KB'" listType="picture-card" :accept="['.jpg','.jpeg','.png']" customTips="请选择图片上传:大小120 * 120像素支持jpg、png等格式,图片需小于500KB"></bg-upload-image>
</el-form-item>
<el-form-item label="业务系统概述" prop="business_desc">
<el-input type="textarea" :rows="3" v-model="systemForm.business_desc" />
<el-input type="textarea" :rows="3" v-model="systemForm.business_desc" show-word-limit maxlength="300" />
</el-form-item>
<el-form-item label="角色" prop="system_role_id" v-if="!formType">
<el-select v-model="systemForm.system_role_id" placeholder="请选择角色" :disabled="true" style="width: 100%">
......@@ -118,39 +118,49 @@ const validatePass = (rule, value, callback) => {
}
}
const validateBusinessName = (rule, value, callback) => {
let params = null;
if (props.id){
params = {id: parseInt(props.id),business_name: value,organization_id: systemForm.organization_id}
}else {
params = {business_name: value,organization_id: systemForm.organization_id}
}
$axios.post(`/apaas/system/v5/user/check/business`,params)
.then((res) => {
if (res.data.code == 200) {
callback()
}else {
let reg = /^[a-zA-Z0-9\u4e00-\u9fa5]+$/
if (!reg.test(value)) {
callback(new Error("只能输入字母、数字和汉字"))
}else {
let params = null;
if (props.id){
params = {id: parseInt(props.id),business_name: value,organization_id: systemForm.organization_id}
}else {
params = {business_name: value,organization_id: systemForm.organization_id}
}
$axios.post(`/apaas/system/v5/user/check/business`,params)
.then((res) => {
if (res.data.code == 200) {
callback()
}else {
callback(new Error(res.data.data))
}
})
}
})
}
}
const validateSystemAccount = (rule, value, callback) => {
let params = null;
if (props.id){
params = {id: parseInt(props.id),system_account: value,}
}else {
params = {system_account: value}
}
$axios.post(`/apaas/system/v5/user/check/account`,params)
.then((res) => {
if (res.data.code == 200) {
callback()
}else {
let reg = /^[a-zA-Z0-9]+$/
if (!reg.test(value)) {
callback(new Error("只能输入字母和数字"))
}else {
let params = null;
if (props.id){
params = {id: parseInt(props.id),system_account: value,}
}else {
params = {system_account: value}
}
$axios.post(`/apaas/system/v5/user/check/account`,params)
.then((res) => {
if (res.data.code == 200) {
callback()
}else {
callback(new Error(res.data.data))
}
})
}
})
}
}
const formRules = reactive({
......@@ -159,6 +169,7 @@ const formRules = reactive({
],
business_name: [
{ required: true, message: '请输入业务系统名称', trigger: 'blur' },
{ max: 50, message: '业务系统名称最大长度为50个字符', trigger: 'blur' },
{ validator: validateBusinessName, trigger: 'blur' },
],
system_role_id: [
......@@ -166,16 +177,24 @@ const formRules = reactive({
],
system_account: [
{ required: true, message: '请输入账号', trigger: 'blur' },
{ min: 4,message: '帐号长度不得低于4个字符',trigger: 'blur' },
{ max: 20,message: '帐号最大长度为20个字符',trigger: 'blur' },
{ validator: validateSystemAccount, trigger: 'blur' },
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{min: 8,message: '密码长度不得低于8位',trigger: 'blur'}
{ min: 8,message: '密码长度不得低于8位',trigger: 'blur' }
],
confirm_password: [
{ required: true, message: '请确认密码', trigger: 'blur' },
{ validator: validatePass, trigger: 'blur' }
],
access_address: [
{ max: 500,message: '访问地址最大长度为500个字符',trigger: 'blur' },
],
develop_id: [
{ required: true, message: "请选择开发厂商", trigger: "change"}
]
})
const systemRef = ref(null)
......@@ -258,14 +277,13 @@ const getRoleList = () => {
const getFirmList = () => {
$axios.get(`/apaas/system/v5/dictionary/developer/list`)
.then((res) => {
.then((res) => {
if (res.data.code == 200) {
firmList.value = res.data.data;
firmList.value = res.data.data || [];
}else {
$message.error(res.data.data)
}
})
})
}
onBeforeMount(() =>{
......
......@@ -26,13 +26,13 @@
<el-input v-model="orgForm.organization_code" />
</el-form-item>
<el-form-item label="组织介绍" prop="description">
<el-input type="textarea" :rows="3" v-model="orgForm.description" />
<el-input type="textarea" :rows="3" v-model="orgForm.description" maxlength="300" show-word-limit />
</el-form-item>
<el-form-item label="组织附件" prop="logo">
<bg-upload
v-model="orgForm.attachment"
customTips
:limit="3"
:limit="3"
:fileTypes="['doc','docx','xls','xlsx','pdf','jpg','jpeg','png','zip','rar']"
:otherInfo="'最多可上传三个附件,可上传zip,rar,doc,docx,xlsx,xls,png,jpg,可上传营业执照和相关协议文件等'"
>
......@@ -44,105 +44,119 @@
<script setup>
import { reactive, ref, onMounted, onBeforeMount, getCurrentInstance } from 'vue'
const props = defineProps({
const props = defineProps({
formType: {
type: String,
default: 'create', //false 新建 true 编辑
},
});
const { proxy } = getCurrentInstance()
const { $axios,$message } = proxy
const orgForm = reactive({
p_organization_id: '',
level: false,
name: '',
organization_code: '',
description: '',
attachment: []
})
const formRules = reactive({
p_organization_id: [
{ required: true, message: '输入上级目录', trigger: 'blur' },
],
name: [
{ required: true, message: '请输入机构名称', trigger: 'blur' },
],
organization_code: [
{ required: true, message: '请输入组织机构代码', trigger: 'blur' },
],
})
type: String,
default: 'create', //false 新建 true 编辑
},
});
const { proxy } = getCurrentInstance()
const { $axios,$message } = proxy
const orgForm = reactive({
p_organization_id: '',
level: false,
name: '',
organization_code: '',
description: '',
attachment: []
})
const orgRef = ref(null)
const emit = defineEmits(['action'])
const checkCode = (rule, value, callback) => {
var reg = /^[a-zA-Z0-9]+$/
if (!reg.test(value)) {
callback(new Error("只能输入字母和数字"))
}else {
callback()
}
}
const submitForm = async () => {
if (!orgRef) return
await orgRef.value.validate((valid, fields) => {
if (valid) {
emit('action', orgForm)
} else {
emit('action',null)
}
})
const checkName = (rule, value, callback) => {
var reg = /^[a-zA-Z\u4e00-\u9fa5]+$/
if (!reg.test(value)) {
callback(new Error("只能输入字母和汉字"))
}else {
callback()
}
}
const clearForm = () => {
if (!orgRef) return
orgRef.value.resetFields()
}
const formRules = reactive({
p_organization_id: [
{ required: true, message: '输入上级目录', trigger: 'blur' },
],
name: [
{ required: true, message: '请输入机构名称', trigger: 'blur' },
{ max: 50, message: '机构名称最大长度为50位', trigger: 'blur' },
{ validator: checkName, trigger: 'blur' }
],
organization_code: [
{ required: true, message: '请输入组织机构代码', trigger: 'blur' },
{ max: 18, message: '组织机构代码最大长度为18位', trigger: 'blur' },
{ validator: checkCode, trigger: 'blur' }
],
})
const setForm = (data) => {
Object.assign(orgForm, data);
}
const orgRef = ref(null)
const emit = defineEmits(['action'])
const orgData = ref([])
const treeProps = {
label: 'name',
children: 'Child',
value: 'organization_id',
disabled: 'disabled'
}
const getOrgTree = () => {
$axios.get(`/apaas/system/v5/org/tree`)
.then((res) => {
const submitForm = async () => {
if (!orgRef) return
await orgRef.value.validate((valid, fields) => {
if (valid) {
emit('action', orgForm)
} else {
emit('action',null)
}
})
}
const clearForm = () => {
if (!orgRef) return
orgRef.value.resetFields()
}
const setForm = (data) => {
Object.assign(orgForm, data);
}
const orgData = ref([])
const treeProps = {
label: 'name',
children: 'Child',
value: 'organization_id',
disabled: 'disabled'
}
const getOrgTree = () => {
$axios.get(`/apaas/system/v5/org/tree`)
.then((res) => {
if (res.data.code == 200) {
const orgDataTemp = res.data.data || []
orgDataTemp.shift()
orgData.value = filterOrg(orgDataTemp);
const orgDataTemp = res.data.data || []
orgDataTemp.shift()
orgData.value = filterOrg(orgDataTemp);
}else {
$message.error(res.data.data)
$message.error(res.data.data)
}
})
}
const filterOrg = (data) => {
if(data.length > 0) {
data.forEach(item => {
item.disabled = item.data_type === 0 ? false : true;
})
}
if(item.Child){
filterOrg(item.Child)
}else {
return
}
})
const filterOrg = (data) => {
if(data.length > 0) {
data.forEach(item => {
item.disabled = item.data_type === 0 ? false : true;
if(item.Child){
filterOrg(item.Child)
}else {
return
}
return data;
}
const isTop = (data) => {
orgForm.p_organization_id = data ? ' ' : ''; //空格绕过表单非空校验
})
}
return data;
}
onBeforeMount(() => {
getOrgTree()
})
onMounted(() => {
})
const isTop = (data) => {
orgForm.p_organization_id = data ? ' ' : ''; //空格绕过表单非空校验
}
onBeforeMount(() => {
getOrgTree()
})
onMounted(() => {})
defineExpose({ submitForm, clearForm, setForm })
</script>
\ No newline at end of file
......@@ -4,7 +4,7 @@
<el-breadcrumb separator="/">
<el-breadcrumb-item> 组织管理 </el-breadcrumb-item>
<el-breadcrumb-item :to="{ path: '/system/organization' }"> 组织管理 </el-breadcrumb-item>
<el-breadcrumb-item> 新增组织管理员 </el-breadcrumb-item>
<el-breadcrumb-item> {{route.query.id ? '编辑组织用户':'新增组织管理员'}} </el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="page_content flex_cloumn">
......@@ -192,7 +192,7 @@ const getDetail = () => {
orgAccountRef.value.setForm({
organization_id: form.organization_id,
select_role: form.select_role,
logo: [{url:form.logo}],
logo: form.logo ? [{url:form.logo}] : [],
system_account: form.system_account,
contact_phone: form.contact_phone,
state: form.state,
......
......@@ -4,7 +4,7 @@
<el-breadcrumb separator="/">
<el-breadcrumb-item> 组织管理 </el-breadcrumb-item>
<el-breadcrumb-item :to="{ path: '/system/organization' }"> 组织管理 </el-breadcrumb-item>
<el-breadcrumb-item> 新增平台用户 </el-breadcrumb-item>
<el-breadcrumb-item> {{route.query.id ? '编辑平台用户':'新增平台用户'}} </el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="page_content flex_cloumn">
......@@ -217,7 +217,7 @@ const getDetail = () => {
if (res.data.code == 200) {
const form = res.data.data;
platformAccountFormRef.value.setForm({
logo: [{url:form.logo}],
logo: form.logo ? [{url:form.logo}] : [],
system_account: form.system_account,
contact_phone: form.contact_phone,
state: form.state,
......
<template>
<div class="page_container">
<div class="bg-breadcrumb">
<el-breadcrumb separator="/">
<el-breadcrumb-item> 组织管理 </el-breadcrumb-item>
<el-breadcrumb-item :to="{ path: '/system/organization' }"> 组织管理 </el-breadcrumb-item>
<el-breadcrumb-item> 用户详情 </el-breadcrumb-item>
</el-breadcrumb>
<div class="bg-breadcrumb">
<el-breadcrumb separator="/">
<el-breadcrumb-item> 组织管理 </el-breadcrumb-item>
<el-breadcrumb-item :to="{ path: '/system/organization' }"> 组织管理 </el-breadcrumb-item>
<el-breadcrumb-item> 用户详情 </el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="page_content apaas_scroll">
<div class="info_row">
<div class="title">
<div><span class="icon_box"></span> 账号信息</div>
<div class="dashed_line">
</div>
</div>
<div class="page_content apaas_scroll">
<div class="info_row">
<div class="title">
<div><span class="icon_box"></span> 账号信息</div>
<div class="dashed_line">
</div>
</div>
<div class="info_content">
<div class="img_box">
<img v-if="logo" :src="logo" style="height: 96px;width: 96px;border-radius: 99px" alt="">
<img v-else src="/src/assets/imgs/home_ic_user.png" style="height: 96px;width: 96px;border-radius: 99px" alt="">
</div>
<div class="info_box">
<bg-info :data="accountInfo"></bg-info>
</div>
</div>
<div class="info_content">
<div class="img_box">
<img v-if="logo" :src="logo" style="height: 96px;width: 96px;border-radius: 99px" alt="">
<img v-else src="/src/assets/imgs/home_ic_user.png" style="height: 96px;width: 96px;border-radius: 99px" alt="">
</div>
<div>
<div class="title">
<div><span class="icon_box"></span> 个人信息</div>
<div class="dashed_line">
</div>
</div>
<div class="info_content">
<div class="img_box"></div>
<div class="info_box">
<bg-info v-if="accountType === 2" :data="personInfo"></bg-info>
<bg-info v-if="accountType === 3" :data="personInfo2"></bg-info>
</div>
</div>
<div class="info_box">
<bg-info :data="accountInfo"></bg-info>
</div>
</div>
</div>
<div>
<div class="title">
<div><span class="icon_box"></span> 个人信息</div>
<div class="dashed_line">
</div>
</div>
<div class="info_content">
<div class="img_box"></div>
<div class="info_box">
<bg-info v-if="accountType === 2" :data="personInfo"></bg-info>
<bg-info v-if="accountType === 3" :data="personInfo2"></bg-info>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
......@@ -52,159 +52,152 @@ const { proxy } = getCurrentInstance()
const { $axios,$message } = proxy
const route = useRoute();
const accountInfo = reactive(
[
{
name: "手机号",
value: "",
nameWidth: 130
},
{
name: "账号",
value: "",
nameWidth: 130
},
{
name: "角色",
value: "",
nameWidth: 130
},
{
name: "所属组织",
value: "",
nameWidth: 130
},
{
name: "创建人",
value: "",
nameWidth: 130
},
{
name: "创建账号",
value: "",
nameWidth: 130
},
{
name: "最后编辑时间",
value: "",
nameWidth: 130
},
{
name: "创建时间",
value: "",
nameWidth: 130
},
]
)
const personInfo = reactive(
[{
name: "姓名",
value: "",
nameWidth: 130
},
{
name: "邮箱",
value: "",
nameWidth: 130
},
{
name: "证据类型",
value: "",
nameWidth: 130
},
{
name: "身份证号",
value: "",
idCard: true,
nameWidth: 130
},
{
name: "备注",
value: "",
full: true,
nameWidth: 130
},
])
const personInfo2 = reactive(
[{
name: "姓名",
value: "",
nameWidth: 130
},
{
name: "邮箱",
value: "",
nameWidth: 130
},
{
name: "备注",
value: "",
full: true,
nameWidth: 130
},
])
const logo = ref('')
const accountType = ref(2); //1.业务系统账号 2.组织管理员账号 3.平台用户账号
const getDetail = () => {
$axios.get(`/apaas/system/v5/org/user/${route.query.id}`)
.then((res) => {
if (res.data.code == 200) {
const detail = res.data.data;
accountInfo[0].value = detail.contact_phone;
accountInfo[1].value = detail.system_account;
accountInfo[2].value = detail.system_role && detail.system_role.length > 0 ? detail.system_role.join('') : '';
accountInfo[3].value = detail.organization;
accountInfo[4].value = detail.created_by;
accountInfo[5].value = detail.created_by_account;
accountInfo[6].value = detail.updated_time;
accountInfo[7].value = detail.created_time;
personInfo[0].value = detail.contact_name;
personInfo[1].value = detail.contact_email;
personInfo[2].value = detail.document_type === 1 ? '身份证' : '';
personInfo[3].value = detail.document_number;
personInfo[4].value = detail.remark;
personInfo2[0].value = detail.contact_name;
personInfo2[1].value = detail.contact_email;
personInfo2[2].value = detail.remark;
logo.value = detail.logo;
accountType.value = detail.is_admin;
const accountInfo = reactive([
{
name: "手机号",
value: "",
nameWidth: 130
},
{
name: "账号",
value: "",
nameWidth: 130
},
{
name: "角色",
value: "",
nameWidth: 130
},
{
name: "所属组织",
value: "",
nameWidth: 130
},
{
name: "创建人",
value: "",
nameWidth: 130
},
{
name: "创建账号",
value: "",
nameWidth: 130
},
{
name: "最后编辑时间",
value: "",
nameWidth: 130
},
{
name: "创建时间",
value: "",
nameWidth: 130
},
])
const personInfo = reactive([
{
name: "姓名",
value: "",
nameWidth: 130
},
{
name: "邮箱",
value: "",
nameWidth: 130
},
{
name: "证据类型",
value: "",
nameWidth: 130
},
{
name: "身份证号",
value: "",
idCard: true,
nameWidth: 130
},
{
name: "备注",
value: "",
full: true,
nameWidth: 130
},
])
const personInfo2 = reactive([
{
name: "姓名",
value: "",
nameWidth: 130
},
{
name: "邮箱",
value: "",
nameWidth: 130
},
{
name: "备注",
value: "",
full: true,
nameWidth: 130
},
])
const logo = ref('')
const accountType = ref(2); //1.业务系统账号 2.组织管理员账号 3.平台用户账号
const getDetail = () => {
$axios.get(`/apaas/system/v5/org/user/${route.query.id}`)
.then((res) => {
if (res.data.code == 200) {
const detail = res.data.data;
accountInfo[0].value = detail.contact_phone;
accountInfo[1].value = detail.system_account;
accountInfo[2].value = detail.system_role && detail.system_role.length > 0 ? detail.system_role.join('') : '';
accountInfo[3].value = detail.organization;
accountInfo[4].value = detail.created_by;
accountInfo[5].value = detail.created_by_account;
accountInfo[6].value = detail.updated_time;
accountInfo[7].value = detail.created_t
personInfo[0].value = detail.contact_name;
personInfo[1].value = detail.contact_email;
personInfo[2].value = detail.document_type === 1 ? '身份证' : '';
personInfo[3].value = detail.document_number;
personInfo[4].value = detail.rem
personInfo2[0].value = detail.contact_name;
personInfo2[1].value = detail.contact_email;
personInfo2[2].value = detail.rem
logo.value = detail.logo;
accountType.value = detail.is_ad
}else {
$message.error(res.data.data)
}
})
}
}else {
$message.error(res.data.data)
}
})
onBeforeMount(() => {
if(route.query.id) {
getDetail()
}
onBeforeMount(() => {
if(route.query.id) {
getDetail()
}
})
})
</script>
<style scoped>
.page_content {
padding: 15px;
overflow: auto;
padding: 15px;
overflow: auto;
}
.info_content {
display: flex;
display: flex;
}
.info_row {
margin-bottom: 40px;
margin-bottom: 40px;
}
.img_box {
width: 120px;
width: 120px;
}
.info_box {
width: 60%;
width: 60%;
}
.title {
......@@ -216,19 +209,19 @@ const accountInfo = reactive(
align-items: center;
}
.dashed_line {
flex: 1;
height: 1px;
margin: 0 10px;
flex: 1;
height: 1px;
margin: 0 10px;
border-bottom: dashed 1px #dadee7;
}
.icon_box {
display: inline-block;
width: 4px;
display: inline-block;
width: 4px;
height: 14px;
background-color: #3759be;
border-radius: 2px;
margin-right: 5px;
margin-right: 5px;
}
</style>
\ No newline at end of file
......@@ -146,7 +146,7 @@
</template>
</el-cascader>
<el-input
v-model="userFilter.search"
v-model.trim="userFilter.search"
placeholder="请输入内容"
style="width: 200px"
:prefix-icon="Search"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment