7/30 限制前端输入字数

This commit is contained in:
Zy
2026-07-30 17:59:32 +08:00
parent 903c92fef0
commit 2907f9202c
115 changed files with 2561 additions and 1213 deletions

View File

@@ -10,16 +10,16 @@
<div class="title">基本信息</div>
<div class="addBuildingFormBody">
<el-form-item label="小区名称" prop="villageName">
<el-input v-model.trim="form.villageName" placeholder="请输入小区名称" />
<el-input maxlength="25" v-model.trim="form.villageName" placeholder="请输入小区名称" />
</el-form-item>
<el-form-item label="小区编号" prop="villageCode">
<el-input v-model.trim="form.villageCode" placeholder="请输入小区编号" />
<el-input maxlength="20" v-model.trim="form.villageCode" placeholder="请输入小区编号" />
</el-form-item>
<el-form-item label="所在城市" prop="city">
<el-cascader :options="pcaTextArrlist" v-model="city" @change="cityChange"> </el-cascader>
<el-cascader :options="pcaTextArrList" v-model="city" @change="cityChange"> </el-cascader>
</el-form-item>
<el-form-item label="完整详细地址" prop="buildingArea">
<el-input v-model.trim="form.address" placeholder="请输入完整详细地址" />
<el-input type="textarea" :row="3" maxlength="100" show-word-limit v-model.trim="form.address" placeholder="请输入完整详细地址" />
</el-form-item>
<el-form-item label="建成时间" prop="buildingArea">
<el-date-picker v-model="builtTime" type="date" placeholder="选择建成时间" value-format="YYYY-MM-DD" @change="changeBuiltTime" />
@@ -30,19 +30,10 @@
</el-select>
</el-form-item>
<el-form-item label="小区面积" prop="villageArea">
<el-input v-model.trim.number="form.villageArea" placeholder="请输入小区面积"><template #append></template> </el-input>
<el-input maxlength="8" v-model.trim="form.villageArea" placeholder="请输入小区面积"><template #append></template> </el-input>
</el-form-item>
<!-- <el-form-item label="小区楼栋" prop="buildingArea">
<el-input v-model="form.buildingArea" placeholder="请输入小区楼栋"><template #append></template> </el-input>
</el-form-item>
<el-form-item label="小区房屋" prop="buildingArea">
<el-input v-model="form.buildingArea" placeholder="请输入小区房屋"><template #append></template> </el-input>
</el-form-item>
<el-form-item label="小区面积" prop="buildingArea">
<el-input v-model="form.buildingArea" placeholder="请输入小区面积"><template #append></template> </el-input>
</el-form-item> -->
<el-form-item label="车位数量" prop="parkingSpaceCount">
<el-input v-model.trim.number="form.parkingSpaceCount" placeholder="请输入车位数量">
<el-input maxlength="8" v-model.trim="form.parkingSpaceCount" placeholder="请输入车位数量">
<template #append></template>
</el-input>
</el-form-item>
@@ -50,11 +41,13 @@
<el-upload
accept=".jpg, .png"
ref="uploadRef"
:action="uploadfileurl"
:action="uploadFileUrl"
:headers="headerToken()"
list-type="picture-card"
:file-list="villageImg"
:auto-upload="false"
:limit="9"
:on-exceed="handleExceed"
@change="handleUploadChange"
@before-upload="handleBeforeUpload"
>
@@ -70,12 +63,12 @@
</div>
</template>
<template #tip>
<div class="el-upload__tip">支持jpg, png等格式文件上传文件大小不超过10MB可上传多张</div>
<div class="el-upload__tip">支持jpg, png等格式文件上传文件大小不超过10MB</div>
</template>
</el-upload>
</el-form-item>
<el-form-item style="width: 100%" label="小区简介">
<el-input v-model.trim="form.remark" :rows="5" type="textarea" placeholder="小区简介" />
<el-input maxlength="200" show-word-limit v-model.trim="form.remark" :rows="5" type="textarea" placeholder="小区简介" />
</el-form-item>
</div>
</div>
@@ -83,19 +76,19 @@
<div class="title">负责人信息</div>
<div class="addBuildingFormBody addBuildingForm_User_Body">
<el-form-item label="姓名">
<el-input v-model.trim="form.manageName" placeholder="请输入姓名" />
<el-input maxlength="20" v-model.trim="form.manageName" placeholder="请输入姓名" />
</el-form-item>
<el-form-item label="电话">
<el-form-item label="电话" prop="managePhone">
<el-input v-model.trim="form.managePhone" placeholder="请输入电话" />
</el-form-item>
<el-form-item label="微信">
<el-input v-model.trim="form.manageVx" placeholder="请输入微信"> </el-input>
<el-form-item label="微信" prop="manageVx">
<el-input maxlength="20" v-model.trim="form.manageVx" placeholder="请输入微信"></el-input>
</el-form-item>
<el-form-item label="QQ">
<el-input v-model.trim="form.manageQq" placeholder="请输入QQ"> </el-input>
<el-form-item label="QQ" prop="manageQq">
<el-input maxlength="20" v-model.trim="form.manageQq" placeholder="请输入QQ"> </el-input>
</el-form-item>
<el-form-item label="邮箱">
<el-input v-model.trim="form.manageEmail" placeholder="请输入邮箱"> </el-input>
<el-form-item label="邮箱" prop="manageEmail">
<el-input maxlength="30" v-model.trim="form.manageEmail" placeholder="请输入邮箱"> </el-input>
</el-form-item>
<div class="pl-100px">
<el-button type="primary" @click="submitForm">提交</el-button>
@@ -122,12 +115,11 @@ import { Delete, Plus } from '@element-plus/icons-vue';
const route = useRoute();
const router = useRouter();
const editId = ref(route.query.id as string);
const isedit = computed(() => Boolean(editId.value));
const apipriex = import.meta.env.VITE_APP_BASE_API;
const uploadfileurl = `${apipriex}/village/uploadImages`;
// 获取省 市 区
const pcaTextArrlist = ref<DataItem[]>(pcaTextArr);
const isEdit = computed(() => Boolean(editId.value));
const apiPrefix = import.meta.env.VITE_APP_BASE_API;
const uploadFileUrl = `${apiPrefix}/village/uploadImages`;
// 获取省 市 区╬╬╬╬╬╬╬
const pcaTextArrList = ref<DataItem[]>(pcaTextArr);
// 获取小区用途
const houseUserList = ref([
{
@@ -156,9 +148,9 @@ const form = ref<communitylist_rows_type>({
villageCode: '',
address: '',
houseUse: null,
villageArea: 0,
villageArea: '',
remark: '',
parkingSpaceCount: 0,
parkingSpaceCount: '',
villageImageUrl: '',
city: '',
status: '0',
@@ -177,12 +169,131 @@ const villageImg = ref([]);
// 表单验证
const rules = ref({
villageName: [{ required: true, message: '请输入小区名称', trigger: 'blur' }],
villageCode: [{ required: true, message: '请输入小区编号', trigger: 'blur' }],
city: [{ required: true, message: '请选择城市', trigger: 'blur' }]
villageArea: [
{ required: false, message: '请输入小区面积', trigger: 'blur' },
{
validator: (rule, value, callback) => {
const num = Number(value);
if (value === '' || value === null) {
return callback();
}
if (Number.isNaN(num)) {
return callback(new Error('请输入正确的小区面积'));
}
if (num < 0) {
return callback(new Error('小区面积不能小于0'));
}
callback();
}
}
],
parkingSpaceCount: [
{ required: false, message: '请输入车位数量', trigger: 'blur' },
{
validator: (rule, value, callback) => {
const num = Number(value);
if (value === '' || value === null) {
return callback();
}
if (Number.isNaN(num)) {
return callback(new Error('请输入正确的车位数量'));
}
if (num < 0) {
return callback(new Error('车位数量不能小于0'));
}
if (num % 1 !== 0) {
return callback(new Error('请输入正确的整数车位数量'));
}
callback();
}
}
],
villageCode: [
{ required: true, message: '请输入小区编号', trigger: 'blur' },
{
validator: (_, value, callback) => {
if (value === '' || value === null) {
return callback(new Error('请输入小区编号'));
}
if (!/^[a-zA-Z0-9_-]{1,20}$/.test(value)) {
callback(new Error('请输入正确的小区编号,只能包含字母、数字、_和-'));
} else {
callback();
}
}
}
],
city: [{ required: true, message: '请选择城市', trigger: 'blur' }],
managePhone: [
{ required: false, message: '请输入电话', trigger: 'blur' },
{
validator: (_, value, callback) => {
// 值为空直接放行(非必填)
if (value === '' || value === null) {
return callback();
}
if (!/^1[3456789]\d{9}$/.test(value)) {
callback(new Error('请输入正确的手机号'));
} else {
callback();
}
}
}
],
manageEmail: [
{ required: false, message: '请输入邮箱', trigger: 'blur' },
{
validator: (_, value, callback) => {
if (value === '' || value === null) {
return callback();
}
// 邮箱总长度不超过254个字符用户名不超过64个字符
if (value.length > 254 || value.split('@')[0].length > 64) {
callback(new Error('邮箱地址过长'));
} else if (!/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/.test(value)) {
callback(new Error('请输入正确的邮箱'));
} else {
callback();
}
}
}
],
manageVx: [
{ required: false, message: '请输入微信', trigger: 'blur' },
{
validator: (_, value, callback) => {
// 值为空直接放行(非必填)
if (value === '' || value === null) {
return callback();
}
if (!/^[a-zA-Z0-9_]{4,20}$/.test(value)) {
callback(new Error('请输入正确的微信'));
} else {
callback();
}
}
}
],
manageQq: [
{ required: false, message: '请输入QQ', trigger: 'blur' },
{
validator: (_, value, callback) => {
// 值为空直接放行(非必填)
if (value === '' || value === null) {
return callback();
}
if (!/^[1-9]\d{4,10}$/.test(value)) {
callback(new Error('请输入正确的QQ'));
} else {
callback();
}
}
}
]
});
/** 获取编辑小区的信息 */
function getCommunityinfo() {
function getCommunityInfo() {
const id = editId.value;
getVillageByIdAPI(id).then((res) => {
city.value = res.data.city ? res.data.city.split('/') : [];
@@ -206,9 +317,11 @@ function getCommunityinfo() {
};
});
}
if (isedit.value) {
getCommunityinfo();
if (isEdit.value) {
getCommunityInfo();
}
// 请求头
function headerToken() {
const useStore = useUserStore();
@@ -216,9 +329,11 @@ function headerToken() {
Authorization: 'Bearer ' + useStore.token
};
}
const allowImgSuffix = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'heic'];
/** 检测文件大小和格式 */
function handleBeforeUpload(file: UploadFile): Promise<boolean | { file: UploadFile; type: string }> {
const type = file.raw.type.split('/').pop();
return new Promise((resolve, reject) => {
const isLt10M = file.size / 1024 / 1024 < 10;
if (!isLt10M) {
@@ -226,11 +341,13 @@ function handleBeforeUpload(file: UploadFile): Promise<boolean | { file: UploadF
type: '文件大小错误',
file: file
});
} else if (!allowImgSuffix.includes(file.raw.type)) {
ElMessage.warning('图片大小超过10M,请重新上传');
} else if (!allowImgSuffix.includes(type)) {
reject({
type: '文件类型错误',
file: file
});
ElMessage.warning('图片格式不是 png/jpg/jpeg 格式, 请重新上传');
} else {
resolve(true);
}
@@ -238,15 +355,18 @@ function handleBeforeUpload(file: UploadFile): Promise<boolean | { file: UploadF
}
/** 上传狗子 */
async function handleUploadChange(file: UploadFile) {
const isupload = await handleBeforeUpload(file);
if (typeof isupload === 'object') {
ElMessage.error(isupload.type);
const isUpload = await handleBeforeUpload(file);
if (typeof isUpload === 'object') {
ElMessage.error(isUpload.type);
return;
} else if (typeof isupload === 'boolean' && isupload === true) {
} else if (typeof isUpload === 'boolean' && isUpload === true) {
villageImg.value.push(file.raw);
}
}
function handleExceed() {
ElMessage.error('最多上传9张图片');
}
/** 移除钩子 */
const handleRemove = (file: UploadFile) => {
villageImg.value = villageImg.value.filter((item) => item.uid !== file.uid);
@@ -256,6 +376,7 @@ const handleRemove = (file: UploadFile) => {
const changeBuiltTime = (value: string) => {
form.value.completDate = value;
};
const cityChange = (value: CascaderValue[]) => {
form.value.city = value.join('/');
};
@@ -299,7 +420,7 @@ const submitForm = () => {
// 3) 有新文件先上传新文件再与已有URL合并
const formdata = new FormData();
newFiles.forEach((file) => formdata.append('files', file));
console.log('newFiles', newFiles);
uploadVillageImageAPI(formdata).then((res) => {
const uploadedUrls = res.data.success.map((x) => x.url).filter(Boolean);
// 4) 最终图片 = 已有图片 + 新上传图片(避免覆盖)
@@ -336,18 +457,19 @@ function submitFormInfo() {
}
}
if (isedit.value) {
editVillageAPI<communitylist_rows_type>(form.value).then((res) => {
if (isEdit.value) {
editVillageAPI<communitylist_rows_type>(form.value).then(() => {
ElMessage.success('编辑成功');
cancelForm();
});
} else {
addVillageAPI<communitylist_rows_type>(form.value).then((res) => {
addVillageAPI<communitylist_rows_type>(form.value).then(() => {
ElMessage.success('添加成功');
cancelForm();
});
}
}
// 返回
const cancelForm = () => {
router.back();
};
@@ -368,7 +490,6 @@ const cancelForm = () => {
& > span {
padding-left: 20px;
font-size: 20px;
color: white;
color: #000;
}
}

View File

@@ -10,7 +10,7 @@
</div>
<el-form-item prop="username">
<el-input v-model.trim="loginForm.username" type="text" size="large" auto-complete="off" :placeholder="proxy.$t('login.username')">
<template #prefix><svg-icon icon-class="user" class="el-input__icon input-icon" /></template>
<template #prefix><svg-icon icon-class="user_login" class="el-input__icon input-icon" /></template>
</el-input>
</el-form-item>
<el-form-item prop="password">
@@ -255,7 +255,7 @@ onMounted(() => {
height: 393px;
padding: 30px;
border-radius: 10px;
background: linear-gradient(180deg, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0.3) 100%);
background: linear-gradient(180deg, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0.85) 60%, rgba(0, 0, 0, 0.55) 100%);
.input-icon {
height: 40px;
width: 23px;

View File

@@ -12,12 +12,12 @@
<el-row>
<el-col :span="13">
<el-form-item label="活动标题" prop="title">
<el-input v-model.trim="form.title" placeholder="请输入活动标题" />
<el-input maxlength="30" v-model.trim="form.title" placeholder="请输入活动标题" />
</el-form-item>
</el-col>
<el-col :span="11">
<el-form-item label="活动作者" prop="author">
<el-input v-model.trim="form.author" placeholder="请输入活动作者" />
<el-input maxlength="20" v-model.trim="form.author" placeholder="请输入活动作者" />
</el-form-item>
</el-col>
</el-row>
@@ -48,7 +48,7 @@
</el-col>
<el-col :span="11">
<el-form-item label="活动地点" prop="address">
<el-input v-model.trim="form.address" placeholder="请输入活动地点" />
<el-input maxlength="50" type="textarea" show-word-limit v-model.trim="form.address" placeholder="请输入活动地点" />
</el-form-item>
</el-col>
</el-row>
@@ -77,19 +77,19 @@
<el-row>
<el-col :span="12">
<el-form-item label="主办方" prop="organizer">
<el-input v-model.trim="form.organizer" placeholder="请输入主办方" />
<el-input maxlength="20" v-model.trim="form.organizer" placeholder="请输入主办方" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="联系人" prop="contactName">
<el-input v-model.trim="form.contactName" placeholder="请输入联系人" />
<el-input maxlength="20" v-model.trim="form.contactName" placeholder="请输入联系人" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系方式" prop="contactName">
<el-input v-model.trim="form.contactPhone" placeholder="请输入联系方式" />
<el-form-item label="联系方式" prop="contactPhone">
<el-input maxlength="20" v-model.trim="form.contactPhone" placeholder="请输入联系方式" />
</el-form-item>
</el-col>
</el-row>
@@ -97,8 +97,8 @@
<el-col :span="12">
<el-form-item label="活动名额" prop="quota">
<div class="flex items-center">
<el-input-number v-model.trim.number="form.quota" :min="0" placeholder="0代表无限" />
<span class="ml-2 text-gray-500 text-sm" style="font-size: 12px">(填 <b>0</b> 代表<u>不限制名额</u></span>
<el-input-number v-model.trim.number="form.quota" :min="0" :max="99999999" placeholder="0代表无限" />
<span class="ml-2 text-gray-500 text-sm" style="font-size: 12px">(填 <strong>0</strong> 代表 <u>不限制名额</u> </span>
</div>
</el-form-item>
</el-col>
@@ -124,14 +124,21 @@
</el-col>
<el-col :span="12">
<el-form-item label="招募要求">
<el-input :row="8" type="textarea" v-model.trim="form.requirements" placeholder="请输入招募要求" />
<el-input
maxlength="200"
show-word-limit
:row="8"
type="textarea"
v-model.trim="form.requirements"
placeholder="请输入招募要求"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col>
<el-form-item label="活动详情" prop="content">
<editor v-model="form.content" :height="500" :min-height="300" :read-only="false" :file-size="5" :type="'url'" />
<editor v-model="form.content" :height="500" :min-height="300" :read-only="false" :file-size="5" :type="'url'" />
</el-form-item>
</el-col>
</el-row>
@@ -296,6 +303,8 @@ const upload = ref<UploadInstance>();
const handleAvatarSuccess: UploadProps['onSuccess'] = (response) => {
if (response.data && response.data.url) {
form.value.coverImage = response.data.url;
} else {
ElMessage.warning('上传频繁,请稍后再试');
}
};

View File

@@ -44,6 +44,7 @@
v-if="scope.row.coverImage"
:src="scope.row.coverImage"
fit="cover"
style="width: 100px; height: 100px"
></el-image>
<span v-else style="color: grey">暂无</span>
</template>
@@ -71,7 +72,7 @@
<span v-else>{{ scope.row.quota }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="300px" fixed="right">
<el-table-column label="操作" align="center" width="200px" fixed="right">
<template #default="scope">
<el-button v-if="scope.row.status === '0'" link type="primary" @click="handleSend(scope.row)">发布</el-button>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['activity:activity:edit']">编辑</el-button>
@@ -84,7 +85,7 @@
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="activityFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="发布人姓名" prop="createName">
<el-input v-model="form.createName" placeholder="请输入发布人姓名" />
<el-input maxlength="20" v-model.trim="form.createName" placeholder="请输入发布人姓名" />
</el-form-item>
<el-form-item label="发布后状态" prop="status">
<el-radio-group v-model="form.status">
@@ -225,7 +226,7 @@ const handleUpdate = (row?: ActivityVO) => {
});
};
/** 提交按钮 */
/** 提交按钮 ╬╬╬╬╬╬2╬22╬2╬«2╬2▐2╬╬╬╬╬ */
const submitForm = () => {
activityFormRef.value?.validate(async (valid: boolean) => {
if (valid) {

View File

@@ -6,7 +6,7 @@
<div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="Banner名称" prop="name">
<el-input v-model.trim="form.name" placeholder="请输入" />
<el-input maxlength="20" show-word-limit v-model.trim="form.name" placeholder="请输入" />
</el-form-item>
<el-form-item label="Banner图" prop="url">
<el-upload
@@ -15,6 +15,7 @@
accept=".png, .jpg"
:action="uploadUrl"
name="file"
:limit="1"
:headers="headerToken()"
:show-file-list="false"
:on-success="handleAvatarSuccess"
@@ -85,7 +86,7 @@ const handleAvatarSuccess: UploadProps['onSuccess'] = (response: any) => {
}
};
const handleAvatarError: UploadProps['onError'] = (respones) => {};
const handleAvatarError: UploadProps['onError'] = () => {};
const formRef = ref();
const form = ref({

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -54,6 +54,7 @@
:key="index"
:src="item"
:preview-teleported="true"
:initial-index="index"
:preview-src-list="problemImageUrlList"
style="width: 120px; height: 120px; margin-right: 10px"
></el-image>
@@ -80,6 +81,7 @@
</el-form-item>
<el-form-item label="处理人员" prop="handleId">
<repairUser
title-name="选择处理人员"
:is-multiple="false"
:username="formInfo.handleName"
:userid="formInfo.handleId"
@@ -88,7 +90,7 @@
></repairUser>
</el-form-item>
<el-form-item label="处理描述" prop="handleContent">
<el-input type="textarea" :rows="5" v-model="form.handleContent"></el-input>
<el-input maxlength="200" show-word-limit type="textarea" :rows="5" v-model.trim="form.handleContent"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" v-if="form.status !== '0'" @click="submitForm">提交</el-button>
@@ -123,7 +125,7 @@ const formInfo = ref({
'complaintName': '',
'phone': '',
'problemImageUrl': '',
'status': '2', // 投诉状态 0待处理 1处理中 2已处理
'status': '1', // 投诉状态 0 待处理 1 已处理
'handleId': '',
'handleName': '',
'handleContent': '',
@@ -152,8 +154,13 @@ async function init() {
...formInfo.value,
...res.data
};
console.log(formInfo.value);
form.value = {
...form.value,
...res.data
};
// 处理照片
problemImageUrlList.value = res.data.problemImageUrl ? res.data.problemImageUrl.split(',') : [];
// 处理 投诉类型
const find = res2.rows.find((item) => item.id === formInfo.value.typeId);
if (find) {
formInfo.value.type = find.name;
@@ -172,7 +179,6 @@ function handleChange(pop: ResidentVO) {
}
// 提交
const formRef = ref();
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {

View File

@@ -4,7 +4,7 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" label-width="120px" :model="queryParams" :inline="true">
<el-form ref="queryFormRef" label-width="90px" label-position="left" :model="queryParams" :inline="true">
<el-form-item label="投诉类型" prop="typeId">
<el-select v-model="queryParams.typeId" placeholder="请选择投诉类型" style="width: 240px">
<el-option :disabled="item.status === '1'" v-for="item in complainTypeList" :key="item.id" :label="item.name" :value="item.id" />

View File

@@ -10,7 +10,7 @@
<div class="formbox">
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="投诉类型名称" prop="name">
<el-input v-model.trim="form.name" placeholder="请输入投诉类型名称" />
<el-input maxlength="20" show-word-limit v-model.trim="form.name" placeholder="请输入投诉类型名称" />
</el-form-item>
<el-form-item label="投诉类型状态" prop="status">
<el-radio-group v-model="form.status">

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" label-width="100px" :model="queryParams" :inline="true">
<el-form-item label="投诉类型名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入投诉类型名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model.trim="queryParams.name" placeholder="请输入投诉类型名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -17,7 +17,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="申请人" prop="applyName">
<el-input v-model.trim="form.applyName" placeholder="请输入申请人" />
<el-input maxlength="20" v-model.trim="form.applyName" placeholder="请输入申请人" />
</el-form-item>
</el-col>
</el-row>
@@ -25,12 +25,12 @@
<el-row>
<el-col :span="12">
<el-form-item label="装修公司" prop="decorationCompany">
<el-input v-model.trim="form.decorationCompany" placeholder="请输入装修公司" />
<el-input maxlength="20" v-model.trim="form.decorationCompany" placeholder="请输入装修公司" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="装修内容" prop="decorationContent">
<el-input v-model.trim="form.decorationContent" placeholder="请输入装修内容" />
<el-input maxlength="200" show-word-limit type="textarea" v-model.trim="form.decorationContent" placeholder="请输入装修内容" />
</el-form-item>
</el-col>
</el-row>
@@ -41,6 +41,7 @@
type="number"
min="0"
step="0.01"
maxlength="8"
placeholder="请输入装修押金最多保留2位小数"
v-model.trim.number="form.decorationDeposit"
/>
@@ -116,6 +117,9 @@ const rules = {
{ required: true, message: '请输入装修押金', trigger: 'blur' },
{
validator: (rule, val, callback) => {
if (val === '' || val === null) {
return callback(new Error('请输入装修押金'));
}
const msg = validator(val, 'money');
if (msg) callback(new Error(msg));
else callback();

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form label-width="120px" ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="申请人姓名" prop="applyName">
<el-input v-model="queryParams.applyName" placeholder="请输入申请人姓名" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.applyName" placeholder="请输入申请人姓名" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="装修验收结果" prop="inspectionResult">
<el-select v-model="queryParams.inspectionResult" placeholder="请选择装修验收结果" style="width: 240px">

View File

@@ -26,12 +26,12 @@
<el-row>
<el-col :span="12">
<el-form-item label="求助人姓名" prop="seekName">
<el-input v-model.trim="form.seekName" placeholder="请输入求助人姓名" />
<el-input maxlength="20" v-model.trim="form.seekName" placeholder="请输入求助人姓名" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系方式" prop="phone">
<el-input v-model.trim="form.phone" placeholder="请输入联系方式" />
<el-input maxlength="50" show-word-limit v-model.trim="form.phone" placeholder="请输入联系方式" />
</el-form-item>
</el-col>
</el-row>
@@ -49,7 +49,14 @@
</el-col>
<el-col :span="12">
<el-form-item label="办事地点" prop="handlePosition">
<el-input v-model.trim="form.handlePosition" placeholder="请输入办事地点" />
<el-input
maxlength="200"
type="textarea"
:rows="3"
show-word-limit
v-model.trim="form.handlePosition"
placeholder="请输入办事地点"
/>
</el-form-item>
</el-col>
</el-row>
@@ -62,6 +69,7 @@
:action="uploadUrl"
:multiple="true"
:auto-upload="false"
:limit="9"
ref="uploadRef"
:show-file-list="true"
name="files"

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="求助人" prop="seekName">
<el-input v-model="queryParams.seekName" placeholder="请输入求助人" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.seekName" placeholder="请输入求助人" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -6,7 +6,7 @@
<div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="房屋设施名称" prop="name">
<el-input v-model.trim="form.name" placeholder="请输入房屋设施名称" />
<el-input maxlength="20" show-word-limit v-model.trim="form.name" placeholder="请输入房屋设施名称" />
</el-form-item>
<el-form-item label="房屋设置状态" prop="status">
<el-radio-group v-model="form.status">

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="设施名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入设施名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model.trim="queryParams.name" placeholder="请输入设施名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -8,13 +8,13 @@
<el-row>
<el-col :span="11">
<el-form-item label="月卡编号" prop="cardCode">
<el-input v-model.trim="form.cardCode" placeholder="请输入月卡编号" />
<el-input maxlength="15" v-model.trim="form.cardCode" placeholder="请输入月卡编号" />
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="持卡人姓名" prop="cardName">
<el-input v-model.trim="form.cardName" placeholder="请输入持卡人姓名" />
<el-input maxlength="15" v-model.trim="form.cardName" placeholder="请输入持卡人姓名" />
</el-form-item>
</el-col>
</el-row>
@@ -22,20 +22,25 @@
<el-row>
<el-col :span="11">
<el-form-item label="手机号码" prop="phone">
<el-input v-model.number="form.phone" placeholder="请输入手机号码" />
<el-input maxlength="11" v-model.number="form.phone" placeholder="请输入手机号码" />
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="绑定车牌号" prop="carNum">
<LicensePlateInput ref="carNumInputRef" required v-model="form.carNum" @change="() => handleValidate()" />
<el-input
maxlength="10"
v-model.trim="form.carNum"
placeholder="请输入车牌号"
style="text-transform: uppercase; letter-spacing: 2px"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="办理人" prop="handleName">
<el-input v-model="form.handleName" placeholder="请输入办理人姓名" />
<el-input maxlength="15" v-model="form.handleName" placeholder="请输入办理人姓名" />
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
@@ -57,7 +62,7 @@
<el-row>
<el-col :span="11">
<el-form-item label="费用" prop="cost">
<el-input v-model.number="form.cost" placeholder="请输入费用">
<el-input maxlength="8" v-model.number.trim="form.cost" placeholder="请输入费用">
<template #suffix></template>
</el-input>
</el-form-item>
@@ -74,7 +79,7 @@
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
<el-input maxlength="200" show-word-limit type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
</el-form-item>
</el-col>
</el-row>
@@ -90,10 +95,11 @@
<script setup lang="ts">
import { ref } from 'vue';
import LicensePlateInput from '@/components/LicensePlateInput/index.vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { addMonthCard, getMonthCard, updateMonthCard } from '@/api/system/MonthCard';
import { LicensePlateValidator, validator } from '@/utils/Reg';
import { validator } from '@/utils/Reg';
import { LicensePlateValidator2 } from '@/utils/Reg2';
import { callback } from '@/api/login';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_pay_method } = toRefs<any>(proxy?.useDict('com_pay_method'));
@@ -150,32 +156,35 @@ const rules = ref({
{
validator: (_: any, value: string, callback: any) => {
if (!value) {
callback();
callback(new Error('请输入车牌号'));
return;
}
if (!LicensePlateValidator.isValidPlate(value)) {
callback();
if (!LicensePlateValidator2.isValidPlate(value)) {
callback(new Error('请输入正确的车牌号'));
return;
}
callback();
},
trigger: 'blur' // ✅ 只在失焦时验证
trigger: 'blur'
}
],
startTime: [{ required: true, message: '请选择有效日期', trigger: 'blur' }],
payMethod: [{ required: true, message: '请选择支付方式', trigger: 'blur' }],
cost: [
{ required: true, message: '请输入费用', trigger: 'blur' },
{
validator: (_: any, value: string | number) => validator(value, 'money'),
message: '请输入正确的金额,最多两位小数',
trigger: 'blur',
required: true
validator: (_: any, value: string | number, callback) => {
if (value === null || value === undefined || value === 0) {
return callback(new Error('请输入费用'));
}
if (!validator(value, 'money')) {
return callback(new Error('请输入正确的金额,最多两位小数'));
}
return callback();
}
}
]
});
function handleValidate() {
formRef.value.validateField('carNum');
}
const userid = ref(null);

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="月卡编号" prop="cardCode">
<el-input v-model="queryParams.cardCode" placeholder="请输入月卡编号" clearable @keyup.enter="handleQuery" />
<el-input maxlength="12" v-model="queryParams.cardCode" placeholder="请输入月卡编号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -12,7 +12,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="公告标题" prop="noticeTitle">
<el-input v-model.trim="form.noticeTitle" placeholder="请输入公告标题" />
<el-input maxlength="30" v-model.trim="form.noticeTitle" placeholder="请输入公告标题" />
</el-form-item>
</el-col>
<!-- <el-col :span="12">-->

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="公告标题" prop="noticeTitle">
<el-input v-model="queryParams.noticeTitle" placeholder="请输入公告标题" clearable @keyup.enter="handleQuery" />
<el-input maxlength="30" v-model="queryParams.noticeTitle" placeholder="请输入公告标题" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -34,15 +34,20 @@
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="缴费人" prop="payerName">
<el-input v-model.trim="form.payerName" placeholder="请输入缴费人姓名" />
<el-input maxlength="15" v-model.trim="form.payerName" placeholder="请输入缴费人姓名" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="车牌号" prop="carNum">
<!-- <el-input v-model.number.trim="form.carNum" placeholder="请输入车牌号" /> -->
<LicensePlateInput ref="carNumInputRef" required v-model="form.carNum" @change="() => handleValidate()" />
<el-input
maxlength="15"
v-model.trim="form.carNum"
placeholder="请输入车牌号"
@input="handleInput"
style="text-transform: uppercase; letter-spacing: 2px"
/>
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
@@ -66,7 +71,7 @@
<el-row>
<el-col :span="11">
<el-form-item label="费用" prop="cost">
<el-input v-model.number.trim="form.cost" placeholder="请输入费用">
<el-input maxlength="8" v-model.number.trim="form.cost" placeholder="请输入费用">
<template #suffix></template>
</el-input>
</el-form-item>
@@ -92,7 +97,7 @@
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
<el-input maxlength="200" show-word-limit type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
</el-form-item>
</el-col>
</el-row>
@@ -109,11 +114,11 @@
<script setup lang="ts">
import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue';
import LicensePlateInput from '@/components/LicensePlateInput/index.vue';
import { listArea } from '@/api/system/carArea';
import { addParkingCost, getParkingCost, updateParkingCost } from '@/api/system/ParkingCost';
import { listParking } from '@/api/system/parking';
import { LicensePlateValidator, validator } from '@/utils/Reg';
import { addParkingCost, getParkingCost, updateParkingCost, getParkingCostCarAreaApi } from '@/api/system/ParkingCost';
import { validator } from '@/utils/Reg';
import { LicensePlateValidator2 } from '@/utils/Reg2';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_pay_method } = toRefs<any>(proxy?.useDict('com_pay_method'));
const { com_parking_charge } = toRefs<any>(proxy?.useDict('com_parking_charge'));
@@ -135,7 +140,7 @@ const form = ref({
cost: null, // 费用
payMethod: '', // 支付方式
payerStatus: '0', // 缴纳人状态
remark: '' // 备注
remark: '' // 备注 最多200个字符
});
const checkDate = ref([]);
// 改变时间日期
@@ -160,16 +165,16 @@ const rules = ref({
{
validator: (_: any, value: string, callback: any) => {
if (!value) {
callback();
callback(new Error('请输入车牌号'));
return;
}
if (!LicensePlateValidator.isValidPlate(value)) {
callback(new Error('请输入正确的车牌号格式'));
if (!LicensePlateValidator2.isValidPlate(value)) {
callback(new Error('请输入正确的车牌号'));
return;
}
callback();
},
trigger: 'blur' // ✅ 只在失焦时验证╬N
trigger: 'blur'
}
],
startTime: [{ required: true, message: '请选择有效日期', trigger: 'blur' }],
@@ -177,15 +182,18 @@ const rules = ref({
cost: [
{ required: true, message: '请输入费用', trigger: 'blur' },
{
validator: (_: any, value: number) => validator(value, 'money'),
message: '请输入费用',
validator: (_: any, value: number, callback: any) => {
if (value === null || value === undefined || value === 0) {
return callback(new Error('请输入费用'));
}
return validator(value, 'money');
},
message: '请输入费用, 保留2位小数',
trigger: 'blur'
}
]
});
function handleValidate() {
formRef.value.validateField('carNum');
}
const userid = ref(null);
// 区域
@@ -205,6 +213,7 @@ function init() {
...res.data
};
checkDate.value = [form.value.startTime, form.value.endTime];
handleArea(form.value.areaId);
});
}
}
@@ -212,12 +221,8 @@ init();
// 选择区域后 动态车位
function handleArea(val: string) {
listParking({
areaId: val,
pageNum: 1,
pageSize: 999999999
}).then((res) => {
parkingList.value = res.rows;
getParkingCostCarAreaApi({ areaId: val }).then((res) => {
parkingList.value = res.data;
});
}
@@ -240,6 +245,9 @@ const submitForm = () => {
}
});
};
function handleInput(res: string) {
form.value.carNum = res.toUpperCase();
}
// 推出
const cancelForm = () => {
router.back();

View File

@@ -6,10 +6,10 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="缴费人" prop="payerName">
<el-input v-model="queryParams.payerName" placeholder="请输入缴费人" clearable @keyup.enter="handleQuery" />
<el-input maxlength="12" v-model="queryParams.payerName" placeholder="请输入缴费人" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="车牌号" prop="carNum">
<el-input v-model="queryParams.carNum" placeholder="请输入车牌号" clearable @keyup.enter="handleQuery" />
<el-input maxlength="8" v-model="queryParams.carNum" placeholder="请输入车牌号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -43,7 +43,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="备注" prop="remark">
<el-input :rows="5" type="textarea" placeholder="请输入" v-model="form.remark"></el-input>
<el-input :rows="5" maxlength="200" show-word-limit type="textarea" placeholder="请输入" v-model="form.remark"></el-input>
</el-form-item>
</el-col>
</el-row>

View File

@@ -36,8 +36,8 @@
</template>
<div class="question-title-area">
<el-input v-model="form.title" placeholder="请输入问卷标题" class="title-input" />
<el-input v-model="form.description" type="textarea" placeholder="请输入问卷描述(选填)" />
<el-input maxlength="20" show-word-limit v-model="form.title" placeholder="请输入问卷标题" class="title-input" />
<el-input maxlength="200" show-word-limit v-model="form.description" type="textarea" placeholder="请输入问卷描述(选填)" />
</div>
<draggable v-model="form.content" group="components" item-key="cid" class="question-list" @add="handleAddQuestion">

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="问卷标题" prop="title">
<el-input v-model="queryParams.title" placeholder="请输入问卷标题" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.title" placeholder="请输入问卷标题" clearable @keyup.enter="handleQuery" />
</el-form-item>
<!-- <el-form-item label="参与范围" prop="scope">
<el-input v-model="queryParams.scope" placeholder="请输入参与范围 0全体业主 1部分业主" clearable @keyup.enter="handleQuery" />

View File

@@ -30,14 +30,14 @@
<el-row>
<el-col :span="24">
<el-form-item label="报修标题" prop="item">
<el-input v-model.trim="form.item" placeholder="请输入报修标题" />
<el-input maxlength="30" v-model.trim="form.item" placeholder="请输入报修标题" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="问题描述" prop="problem">
<el-input type="textarea" :rows="5" v-model.trim="form.problem" placeholder="请输入问题描述" />
<el-input maxlength="200" show-word-limit type="textarea" :rows="5" v-model.trim="form.problem" placeholder="请输入问题描述" />
</el-form-item>
</el-col>
</el-row>
@@ -82,6 +82,7 @@
v-model:file-list="fileList"
:action="uploadUrl"
list-type="picture-card"
:limit="1"
:on-preview="handlePictureCardPreview"
:on-remove="handleRemove"
:before-upload="handleChangeFile"
@@ -109,7 +110,7 @@ import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { hasFormData } from '@/utils/house';
import Holder from '@/components/Holder/index.vue';
import { UploadFiles, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus';
import { UploadProps, UploadRawFile, UploadUserFile } from 'element-plus';
import { addRepair, getRepair, updateRepair, uploadRepairImages } from '@/api/system/Repair';
import { gettreelistRepairProject } from '@/api/system/RepairProject';
import { useHouseStore } from '@/store/modules/house';

View File

@@ -8,7 +8,7 @@
<el-row>
<el-col :span="11">
<el-form-item label="维修项目名" prop="projectName">
<el-input v-model.trim="form.projectName" placeholder="请输入维修项目名" />
<el-input maxlength="20" show-word-limit v-model.trim="form.projectName" placeholder="请输入维修项目名" />
</el-form-item>
</el-col>
<el-col :span="2"></el-col>

View File

@@ -30,7 +30,9 @@
<el-col :span="8">
<div class="carInfo_Item">
<div class="label">问题描述</div>
<div class="main">{{ form.problem }}</div>
<div class="main" style="font-size: small; max-width: 200px">
<span>{{ form.problem }}</span>
</div>
</div>
</el-col>
</el-row>
@@ -56,12 +58,6 @@
</el-col>
</el-row>
<el-row class="mb-20px">
<!-- <el-col :span="8">-->
<!-- <div class="carInfo_Item">-->
<!-- <div class="label">提交人</div>-->
<!-- <div class="main">{{ form.problem }}</div>-->
<!-- </div>-->
<!-- </el-col>-->
<el-col :span="8">
<div class="carInfo_Item">
<div class="label">提交时间:</div>
@@ -69,22 +65,23 @@
</div>
</el-col>
</el-row>
<el-row v-if="form.problemImageUrl.trim() === ''">
<el-row>
<el-col :span="24">
<div class="carInfo_Item">
<div class="label">附件:</div>
<div class="main fileImagebox">
<div class="main fileImagebox" v-if="form.problemImageUrlList.length > 0">
<el-image
:preview-teleported="true"
:zoom-rate="1.2"
:max-scale="7"
:min-scale="0.2"
:preview-src-list="form.problemImageUrl.split(',').filter(Boolean)"
:preview-src-list="form.problemImageUrlList"
show-progress
:initial-index="0"
v-for="(item, index) in form.problemImageUrl.split(',').filter(Boolean)"
v-for="(item, index) in form.problemImageUrlList"
:key="index"
:src="splitImages(item)"
:src="item"
lazy
class="carInfoImage"
></el-image>
</div>
@@ -106,6 +103,7 @@
<repairUser :is-multiple="false" :username="form.repairName" :userid="form.repairUserId" @change="handleChange"> </repairUser>
<div class="actions mt-5">
<el-button v-if="form.problemStatus === '0'" @click="handleSend" type="primary">确定派单</el-button>
<el-button v-if="form.problemStatus === '1'" @click="handleChangeRepairUser" type="primary">变更人员</el-button>
<el-button @click="backRouter">返回</el-button>
</div>
</div>
@@ -123,32 +121,6 @@
</div>
</template>
<div class="h-full w-full">
<!-- <el-steps space="108px" direction="vertical" :active="activeStop">-->
<!-- <el-step>-->
<!-- <template #title>-->
<!-- <span>完成维修 </span>-->
<!-- </template>-->
<!-- </el-step>-->
<!-- <el-step>-->
<!-- <template #title>-->
<!-- <span>{{ reviewInfo.completeStatus === '0' ? '待维修' : '已维修' }} </span>-->
<!-- </template>-->
<!-- <template #description> {{ reviewInfo.completeTime ?? '维修人员进行维修' }}</template>-->
<!-- </el-step>-->
<!-- <el-step>-->
<!-- <template #title>-->
<!-- <span>{{ reviewInfo.allocateStatus === '0' ? '待分配' : '已分配' }} </span>-->
<!-- </template>-->
<!-- <template #description>{{ reviewInfo.allocateTime ?? '等待物业派单中' }} </template>-->
<!-- </el-step>-->
<!-- <el-step>-->
<!-- <template #title>-->
<!-- <span>已提交维护信息</span>-->
<!-- </template>-->
<!-- <template #description> {{ reviewInfo.submitTime ?? '' }} </template>-->
<!-- </el-step>-->
<!-- </el-steps>-->
<StepTimeline :steps="stepList">
<template #title="{ item }">{{ item.title }}</template>
<template #subtitle="{ item }">{{ item.subtitle }}</template>
@@ -169,14 +141,10 @@ import PageHeader from '@/components/Pageheader/index.vue';
import { getRepair, updateRepair } from '@/api/system/Repair';
import { RepairVO } from '@/api/system/Repair/type';
import { listRepairProcess, updateRepairProcess } from '@/api/system/repairProcess';
import { splitImages } from '@/utils';
const route = useRoute();
const router = useRouter();
const active = ref(0);
const activeStop = ref(0);
interface formType extends RepairVO {
problemImageUrlList: string[];
}
@@ -249,13 +217,12 @@ async function init() {
pageNum: 1
}).then((info) => {
reviewInfo.value = info.rows[info.rows.length - 1] || null;
console.log(reviewInfo.value);
handleReview();
});
});
}
// 处理审核
// 处理审核╬╬
function handleReview() {
if (reviewInfo.value.submitStatus === '1') {
// 提交完成
@@ -269,7 +236,7 @@ function handleReview() {
// 分配完成
stepList.value[1].status = 'completed';
stepList.value[1].title = '已分配';
stepList.value[1].subtitle = `${form.value.repairName ?? '---'} ${form.value.repairPhone ?? '---'}`;
stepList.value[1].subtitle = `${form.value.repairName ?? ''} ${form.value.repairPhone ?? ''}`;
stepList.value[1].time = reviewInfo.value.allocateTime;
stepList.value[2].status = 'pending';
@@ -295,28 +262,43 @@ if (route.query.id) {
/** 派单 */
function handleSend() {
// 已分配
form.value.problemStatus = '1';
updateRepair(form.value).then(() => {
if (form.value.repairUserId && form.value.repairUserId.trim()) {
// 已分配
form.value.problemStatus = '1';
reviewInfo.value.allocateTime = new Date().toLocaleString().replaceAll('/', '-');
if (form.value.repairUserId) {
reviewInfo.value.allocateStatus = '1';
} else {
reviewInfo.value.allocateStatus = '0';
}
updateRepairProcess(reviewInfo.value).then(() => {
backRouter();
updateRepair(form.value).then(() => {
form.value.problemStatus = '1';
reviewInfo.value.allocateTime = new Date().toLocaleString().replaceAll('/', '-');
if (form.value.repairUserId) {
reviewInfo.value.allocateStatus = '1';
} else {
reviewInfo.value.allocateStatus = '0';
}
updateRepairProcess(reviewInfo.value).then(() => {
backRouter();
});
});
});
} else {
ElMessage.warning('请选择维修人员');
}
}
// 是否变更人员
const isChangeUse = ref(false);
/** 选择维修人员 */
function handleChange(row) {
const oldValue = form.value.repairUserId;
isChangeUse.value = oldValue !== '' && oldValue !== row;
form.value.repairUserId = row;
}
function handleChangeRepairUser() {
if (form.value.repairUserId && form.value.repairUserId.trim()) {
handleSend();
} else {
ElMessage.warning('请选择维修人员');
}
}
/** 返回 */
/** 返回╬╬╬╬╬╬*/
function backRouter() {
router.push({
path: '/repair/repairlist'
@@ -350,7 +332,7 @@ function handleEdit() {
}
.carInfo_Item {
display: flex;
align-items: center;
align-items: flex-start;
font-size: 14px;
.label {
font-weight: 600;
@@ -359,6 +341,9 @@ function handleEdit() {
padding-right: 10px;
white-space: nowrap;
}
.main {
word-break: break-word;
}
.carInfoImage {
margin: 10px;
width: 200px;

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :inline="true" label-width="100px" :model="queryParams">
<el-form-item label="维修项目名" prop="projectName">
<el-input v-model="queryParams.projectName" placeholder="请输入维修项目名" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model.trim="queryParams.projectName" placeholder="请输入维修项目名" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -6,7 +6,7 @@
<div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="项目名称" prop="itemName">
<el-input v-model.trim="form.itemName" placeholder="请输入项目名称" />
<el-input maxlength="20" v-model.trim="form.itemName" placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="收费类型" prop="typeId">
<el-select v-model="form.typeId">
@@ -38,7 +38,7 @@
</el-select>
</el-form-item>
<el-form-item label="费用单价" prop="fixedPrice">
<el-input v-model.trim="form.fixedPrice" :placeholder="placeHolderFun(form.typeId)" />
<el-input maxlength="10" v-model.trim="form.fixedPrice" :placeholder="placeHolderFun(form.typeId)" />
</el-form-item>
<el-form-item label="计算精度" prop="accuracy">
<el-select v-model="form.accuracy">
@@ -57,7 +57,7 @@
</el-radio-group>
</el-form-item> -->
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model.trim="form.remark" placeholder="请输入" />
</el-form-item>
<el-form-item style="margin-top: 30px">
<el-button type="primary" @click="submitForm">提交</el-button>
@@ -103,7 +103,25 @@ const rules = ref({
itemName: [{ required: true, message: '请输入 项目名称', trigger: 'blur' }],
typeId: [{ required: true, message: '请选择 收费类型', trigger: 'blur' }],
billingType: [{ required: true, message: '请输入 计费方式', trigger: 'blur' }],
fixedPrice: [{ required: true, message: '请输入 费用单价', trigger: 'blur' }],
fixedPrice: [
{ required: true, message: '请输入 费用单价', trigger: 'blur' },
{
validator: (_: any, value: string | number, callback: (arg0?: Error) => any) => {
if (value === '' || value === null) {
return callback(new Error('请输入费用单价'));
} else {
const val = Number(value);
if (Number.isNaN(val)) {
return callback(new Error('请输入数字'));
}
if (val <= 0) {
return callback(new Error('请输入大于0的数字'));
}
return callback();
}
}
}
],
formula: [{ required: true, message: '请选择 计费公式', trigger: 'blur' }],
unit: [{ required: true, message: '请选择 计费单位', trigger: 'blur' }],
accuracy: [{ required: true, message: '选择 计算精度', trigger: 'blur' }],

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" @submit.prevent="handleQuery">
<el-form-item label="项目名称" prop="itemName">
<el-input v-model="queryParams.itemName" placeholder="请输入项目名称" clearable @keyup.enter.prevent="handleQuery" />
<el-input maxlength="20" v-model="queryParams.itemName" placeholder="请输入项目名称" clearable @keyup.enter.prevent="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" label-width="120" :inline="true">
<el-form-item label="收费类型名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入收费类型名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model.trim="queryParams.name" placeholder="请输入收费类型名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -60,7 +60,7 @@
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="chargeTypeFormRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="收费类型名称" prop="name">
<el-input v-model="form.name" placeholder="请输入收费类型名称" />
<el-input maxlength="20" v-model.trim="form.name" placeholder="请输入收费类型名称" />
</el-form-item>
</el-form>
<template #footer>

View File

@@ -12,7 +12,14 @@
</el-radio-group>
</el-form-item>
<el-form-item label="抄表月份" prop="recordMonth">
<el-date-picker @update:model-value="handleMonth" v-model="form.recordMonth" value-format="YYYY-MM" format="YYYY-MM" type="month" />
<el-date-picker
@update:model-value="handleMonth"
placeholder="抄表月份"
v-model="form.recordMonth"
value-format="YYYY-MM"
format="YYYY-MM"
type="month"
/>
</el-form-item>
<el-form-item label="起止日期" prop="price">
<el-date-picker

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="仪表名称" prop="houseId">
<el-input v-model="queryParams.houseId" placeholder="请输入仪表名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.houseId" placeholder="请输入仪表名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -6,7 +6,7 @@
<div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="账单名称" prop="billName">
<el-input v-model.trim="form.billName" placeholder="请输入账单名称" />
<el-input maxlength="30" v-model.trim="form.billName" placeholder="请输入账单名称" />
</el-form-item>
<el-form-item label="收费项目" prop="chargeItemId">
<el-select v-model="form.chargeItemId" @change="(val: string) => handleChange(val, true)">
@@ -109,7 +109,7 @@
/>
</el-form-item> -->
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model.trim="form.remark" placeholder="请输入" />
</el-form-item>
<el-form-item style="margin-top: 30px">

View File

@@ -10,7 +10,6 @@
<el-option v-for="(item, index) in chargeItems" :key="index" :value="item.id" :label="item.itemName"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>
<el-button @click="resetQuery">重置</el-button>

File diff suppressed because it is too large Load Diff

View File

@@ -5,23 +5,11 @@
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" label-width="100px" @submit.prevent="handleQuery" :model="queryParams" :inline="true">
<!-- <el-form-item label="设备状态" prop="eleStatus">
<el-select v-model="queryParams.eleStatus">
<el-option v-for="(item, index) in com_waterdevice_on_status" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
<el-form-item label="设备编号" prop="deviceCode">
<el-input maxlength="25" v-model="queryParams.deviceCode" placeholder="请输入" clearable />
</el-form-item>
<el-form-item label="分合状态" prop="status">
<el-select v-model="queryParams.status">
<el-option
v-for="(item, index) in com_electricity_readrecord_status"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item> -->
<el-form-item label="房屋号" prop="houseName">
<el-input v-model="queryParams.houseName" placeholder="请输入" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.houseName" placeholder="请输入" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -16,10 +16,10 @@
</el-select>
</el-form-item> -->
<el-form-item label="设备编号" prop="deviceCode">
<el-input v-model="queryParams.deviceCode" placeholder="请输入" clearable />
<el-input maxlength="25" v-model="queryParams.deviceCode" placeholder="请输入" clearable />
</el-form-item>
<el-form-item label="房屋" prop="houseName">
<el-input clearable v-model="queryParams.houseName" placeholder="请输入" />
<el-input maxlength="20" clearable v-model="queryParams.houseName" placeholder="请输入" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -207,10 +207,10 @@
<!-- upload file -->
<el-form v-else-if="dialogType === 'Upload'" ref="UploadFileformRef" :model="UploadFileform" :rules="UploadFileformRules" label-width="140px">
<el-form-item label="LEN_A" prop="lenA">
<el-input v-model="UploadFileform.lenA"></el-input>
<el-input maxlength="40" v-model="UploadFileform.lenA"></el-input>
</el-form-item>
<el-form-item label="CRC32_HEX_A" prop="crcA">
<el-input v-model="UploadFileform.crcA"></el-input>
<el-input maxlength="40" v-model="UploadFileform.crcA"></el-input>
</el-form-item>
<el-form-item label="上传 A槽更新 文件" prop="urlA">
<el-upload
@@ -239,10 +239,10 @@
</el-form-item>
<el-form-item label="LEN_B" prop="lenB">
<el-input v-model="UploadFileform.lenB"></el-input>
<el-input maxlength="40" v-model="UploadFileform.lenB"></el-input>
</el-form-item>
<el-form-item label="CRC32_HEX_B" prop="crcB">
<el-input v-model="UploadFileform.crcB"></el-input>
<el-input maxlength="40" v-model="UploadFileform.crcB"></el-input>
</el-form-item>
<el-form-item label="上传 B槽更新 文件" prop="urlB">
<el-upload
@@ -624,7 +624,7 @@ function getTree() {
});
}
/** 水表 ╬«2222╬2╬22╬╬╬╬2╬22222╬ 启停*/
/** 水表 启停*/
const handleChangeWater = (val: string, row: WaterDeviceVO) => {};
function handleUpdate(id: string) {
@@ -649,13 +649,16 @@ function handleUpdate(id: string) {
// 解绑房屋
function handleUnbind(data: WaterDeviceVO) {
waterDeviceUnbind(data.deviceCode)
.then(() => {
ElMessage.success('解绑成功');
})
.finally(() => {
getList();
});
// 提示
proxy?.$modal.confirm('确认解绑房屋吗?').then(() => {
waterDeviceUnbind(data.deviceCode)
.then(() => {
ElMessage.success('解绑成功');
})
.finally(() => {
getList();
});
});
}
/** 提交按钮 */

View File

@@ -1,12 +0,0 @@
<template>
<div class="p-2 h-full flex flex-col">
<pageHeader title="水表管理"></pageHeader>
<div class="flex-1 color-gray flex h-full font-size-6 flex-center">系统还在维护中敬请期待...</div>
</div>
</template>
<script setup lang="ts">
import pageHeader from '@/components/Pageheader/index.vue';
</script>
<style scoped lang="scss"></style>

View File

@@ -8,20 +8,20 @@
<el-row>
<el-col :span="11">
<el-form-item label="区域名称" prop="areaName">
<el-input v-model.trim="form.areaName" placeholder="请输入区域名称" />
<el-input maxlength="8" show-word-limit v-model.trim="form.areaName" placeholder="请输入区域名称" />
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="区域编号" prop="areaCode">
<el-input v-model.trim="form.areaCode" placeholder="请输入区域编号" />
<el-input maxlength="8" v-model.trim="form.areaCode" placeholder="请输入区域编号" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="区域面积" prop="area">
<el-input v-model.number="form.area" placeholder="请输入区域面积">
<el-input maxlength="8" v-model.number.trim="form.area" placeholder="请输入区域面积">
<template #suffix></template>
</el-input>
</el-form-item>
@@ -29,14 +29,14 @@
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="车位数量" prop="parkingCount">
<el-input v-model.number="form.parkingCount" placeholder="请输入车位数量" />
<el-input maxlength="5" v-model.number.trim="form.parkingCount" placeholder="请输入车位数量" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model.trim="form.remark" placeholder="请输入" />
</el-form-item>
</el-col>
</el-row>
@@ -69,7 +69,25 @@ const form = ref({
});
const rules = ref({
areaName: [{ required: true, message: '请输入区域名称', trigger: 'blur' }],
areaCode: [{ required: true, message: '请输入区域编号', trigger: 'blur' }]
areaCode: [{ required: true, message: '请输入区域编号', trigger: 'blur' }],
area: [
{ required: true, message: '请输入区域面积', trigger: 'blur' },
{
validator: (_: any, value: string | number, callback: (arg0?: Error) => void) => {
if (value === '' || value === null) {
return callback(new Error('请输入区域面积'));
}
const val = Number(value);
if (Number.isNaN(val)) {
return callback(new Error('请输入数字'));
}
if (val <= 0) {
return callback(new Error('请输入大于0的数字'));
}
return callback();
}
}
]
});
const parking = ref(null);

View File

@@ -6,10 +6,10 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="区域名称" prop="areaName">
<el-input v-model="queryParams.areaName" placeholder="请输入区域名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.areaName" placeholder="请输入区域名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="区域编号" prop="areaCode">
<el-input v-model="queryParams.areaCode" placeholder="请输入区域编号" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.areaCode" placeholder="请输入区域编号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -5,49 +5,34 @@
<div class="title">基本信息</div>
<div class="addBuildingFormBody">
<el-form class="formBody" label-position="left" ref="formRef" :model="form" :rules="rules" label-width="130px">
<!-- <el-row>
<el-col :span="11">
<el-form-item label="车辆区域" prop="areaId">
<el-select @change="changeAreaList" v-model="form.areaId" placeholder="请选择车辆区域">
<el-option v-for="item in carAreaList" :key="item.id" :label="`${item.areaName}(${item.areaCode})`" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="车位编号" prop="parkingId">
<el-select v-model="form.parkingId" placeholder="请选择车位编号">
<el-option v-for="item in parkingList" :key="item.id" :label="item.parkingCode" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
</el-row> -->
<el-row>
<el-col :span="11">
<el-form-item label="车牌号" prop="carNum" :validate-event="false">
<!-- <el-input v-model.trim="form.carNum" placeholder="请输入车牌号" /> -->
<LicensePlateInput ref="carNumInputRef" required v-model="form.carNum" @change="() => handleValidate()" />
<el-input
maxlength="10"
v-model.trim="form.carNum"
placeholder="请输入车牌号"
style="text-transform: uppercase; letter-spacing: 2px"
/>
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="车辆品牌" prop="carBrand">
<el-input v-model.trim="form.carBrand" placeholder="请输入车辆品牌" />
<el-input maxlength="12" v-model.trim="form.carBrand" placeholder="请输入车辆品牌" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="车辆型号" prop="carModel">
<el-input v-model.trim="form.carModel" placeholder="请输入补充车辆型号" />
<el-input maxlength="12" v-model.trim="form.carModel" placeholder="请输入补充车辆型号" />
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="车身颜色" prop="carColor">
<el-input v-model.trim="form.carColor" placeholder="请输入车身颜色" />
<el-input maxlength="12" v-model.trim="form.carColor" placeholder="请输入车身颜色" />
</el-form-item>
</el-col>
</el-row>
@@ -62,6 +47,7 @@
name="file"
:headers="headerToken()"
:show-file-list="false"
:limit="1"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload"
>
@@ -98,7 +84,7 @@
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
<el-input maxlength="200" show-word-limit type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
</el-form-item>
</el-col>
</el-row>
@@ -114,7 +100,6 @@
<script setup lang="ts">
import { ref } from 'vue';
import LicensePlateInput from '@/components/LicensePlateInput/index.vue';
import Holder from '@/components/Holder/index.vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { listArea } from '@/api/system/carArea';
@@ -124,6 +109,7 @@ import { addCar, getCar, updateCar } from '@/api/system/cars';
import { useUserStore } from '@/store/modules/user';
import AppUser from '@/components/Holder/appUser.vue';
import { Plus } from '@element-plus/icons-vue';
import { LicensePlateValidator2 } from '@/utils/Reg2';
const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/car/uploadImage';
@@ -154,6 +140,20 @@ const rules = ref({
required: true,
message: '请输入车牌号码',
trigger: ['blur']
},
{
validator: (_: any, value: string, callback: any) => {
if (!value) {
callback(new Error('请输入车牌号'));
return;
}
if (!LicensePlateValidator2.isValidPlate(value)) {
callback(new Error('请输入正确的车牌号'));
return;
}
callback();
},
trigger: 'blur'
}
],
carBrand: [{ required: false, message: '请输入车辆品牌', trigger: 'blur' }]

View File

@@ -6,13 +6,13 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="车牌号" prop="carNum">
<el-input v-model.trim="queryParams.carNum" placeholder="请输入车牌号" clearable @keyup.enter="handleQuery" />
<el-input maxlength="12" v-model.trim="queryParams.carNum" placeholder="请输入车牌号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="车辆品牌" prop="carBrand">
<el-input v-model.trim="queryParams.carBrand" placeholder="请输入车辆品牌" clearable @keyup.enter="handleQuery" />
<el-input maxlength="12" v-model.trim="queryParams.carBrand" placeholder="请输入车辆品牌" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="车身颜色" prop="carColor">
<el-input v-model.trim="queryParams.carColor" placeholder="请输入车身颜色" clearable @keyup.enter="handleQuery" />
<el-input maxlength="12" v-model.trim="queryParams.carColor" placeholder="请输入车身颜色" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -11,16 +11,16 @@
</el-select>
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model.trim="form.deviceName" placeholder="请输入设备名称" />
<el-input maxlength="20" v-model.trim="form.deviceName" placeholder="请输入设备名称" />
</el-form-item>
<el-form-item label="设备唯一编号" prop="deviceCode">
<el-input v-model.trim="form.deviceCode" placeholder="请输入设备唯一编号" />
<el-input maxlength="20" v-model.trim="form.deviceCode" placeholder="请输入设备唯一编号" />
</el-form-item>
<el-form-item label="设备型号" prop="deviceModel">
<el-input v-model.trim="form.deviceModel" placeholder="请输入设备型号" />
<el-input maxlength="20" v-model.trim="form.deviceModel" placeholder="请输入设备型号" />
</el-form-item>
<el-form-item label="位置区域" prop="area">
<el-input type="textarea" :rows="2" v-model.trim="form.area" placeholder="请输入位置区域" />
<el-input maxlength="100" show-word-limit type="textarea" :rows="2" v-model.trim="form.area" placeholder="请输入位置区域" />
</el-form-item>
<el-form-item label="维护人员" prop="maintainUserIds">
<repairUser
@@ -56,10 +56,10 @@
</el-radio-group>
</el-form-item>
<el-form-item label="设备保质期" prop="shelfLife">
<el-input v-model.trim="form.shelfLife" placeholder="请输入" />
<el-input maxlength="20" v-model.trim="form.shelfLife" placeholder="请输入" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :row="5" v-model.trim="form.remark" placeholder="请输入" />
<el-input maxlength="200" show-word-limit type="textarea" :row="5" v-model.trim="form.remark" placeholder="请输入" />
</el-form-item>
<el-form-item style="margin-top: 30px">
<el-button type="primary" @click="submitForm">提交</el-button>

View File

@@ -7,10 +7,10 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="queryParams.deviceName" placeholder="请输入设备名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.deviceName" placeholder="请输入设备名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="设备编号" prop="deviceCode">
<el-input v-model="queryParams.deviceCode" placeholder="请输入设备编号" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.deviceCode" placeholder="请输入设备编号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" label-width="100" :model="queryParams" :inline="true">
<el-form-item label="设备分类名称" prop="categoryName">
<el-input v-model="queryParams.categoryName" placeholder="请输入设备分类名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.categoryName" placeholder="请输入设备分类名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -56,7 +56,7 @@
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="deviceCategoryFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="设备分类名称" prop="categoryName">
<el-input v-model="form.categoryName" placeholder="请输入设备分类名称" />
<el-input maxlength="20" show-word-limit v-model="form.categoryName" placeholder="请输入设备分类名称" />
</el-form-item>
<el-form-item label="设备分类状态" prop="status">
<el-radio-group v-model="form.status">

View File

@@ -17,16 +17,16 @@
</el-select>
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model.trim="form.deviceName" placeholder="请输入设备名称" />
<el-input maxlength="20" v-model.trim="form.deviceName" placeholder="请输入设备名称" />
</el-form-item>
<el-form-item label="设备编号" prop="deviceCode">
<el-input v-model.trim="form.deviceCode" placeholder="请输入设备编号" />
<el-input maxlength="20" v-model.trim="form.deviceCode" placeholder="请输入设备编号" />
</el-form-item>
<el-form-item label="设备型号" prop="deviceModel">
<el-input v-model.trim="form.deviceModel" placeholder="请输入设备型号" />
<el-input maxlength="20" v-model.trim="form.deviceModel" placeholder="请输入设备型号" />
</el-form-item>
<el-form-item label="位置区域" prop="area">
<el-input type="textarea" :rows="2" v-model.trim="form.area" placeholder="请输入位置区域" />
<el-input maxlength="100" show-word-limit type="textarea" :rows="2" v-model.trim="form.area" placeholder="请输入位置区域" />
</el-form-item>
<el-form-item label="维护人员" prop="maintainUserIds">
<repairUser
@@ -58,7 +58,7 @@
</repairUser>
</el-form-item>
<el-form-item label="故障描述" prop="faultDesc">
<el-input type="textarea" :rows="5" v-model.trim="form.faultDesc" placeholder="请输入" />
<el-input maxlength="100" show-word-limit type="textarea" :rows="2" v-model.trim="form.faultDesc" placeholder="请输入" />
</el-form-item>
<el-form-item label="维修结果" prop="repairResult">
<el-radio-group v-model.trim="form.repairResult">
@@ -66,7 +66,7 @@
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
<el-input maxlength="200" show-word-limit type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
</el-form-item>
<el-form-item style="margin-top: 30px">
@@ -136,7 +136,7 @@ function init() {
};
checkoutuser.value = [];
checkoutuser.value = res.data.maintainUserList??[];
checkoutuser.value = res.data.maintainUserList ?? [];
});
}
}

View File

@@ -6,10 +6,10 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" label-width="100" :model="queryParams" :inline="true">
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="queryParams.deviceName" placeholder="请输入设备名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.deviceName" placeholder="请输入设备名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="设备编号" prop="deviceCode">
<el-input v-model="queryParams.deviceCode" placeholder="请输入设备编号" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.deviceCode" placeholder="请输入设备编号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -10,23 +10,25 @@
<div class="addBuildingFormBody">
<el-form class="formBody" ref="formRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="楼栋名称" prop="buildingName">
<el-input v-model.trim="form.buildingName" placeholder="请输入楼栋名称">
<el-input maxlength="6" show-word-limit v-model.trim="form.buildingName" placeholder="请输入楼栋名称">
<template #append>
<span></span>
</template>
</el-input>
</el-form-item>
<el-form-item label="楼栋朝向" prop="buildToward">
<el-input v-model.trim="form.buildToward" placeholder="请输入楼栋朝向" />
<el-select v-model="form.buildToward" placeholder="请选择楼栋朝向">
<el-option v-for="item in houseFormat" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item label="楼高(m)" prop="buildTail">
<el-input v-model.trim="form.buildTall" placeholder="请输入楼高(m)" />
<el-input maxlength="4" v-model.trim="form.buildTall" placeholder="请输入楼高(m)" />
</el-form-item>
<el-form-item label="楼栋结构" prop="buildStructure">
<el-input v-model.trim="form.buildStructure" placeholder="请输入楼栋结构" />
<el-input maxlength="30" v-model.trim="form.buildStructure" placeholder="请输入楼栋结构" />
</el-form-item>
<el-form-item label="楼层" prop="floorCount">
<el-input-number :min="1" v-model.trim="form.floorCount" placeholder="楼层数" />
<el-input-number :max="200" :min="1" v-model.trim="form.floorCount" placeholder="楼层数" />
</el-form-item>
<el-form-item style="margin-top: 30px">
<el-button type="primary" @click="submitForm">确定</el-button>
@@ -46,7 +48,7 @@ import { useRouter } from 'vue-router';
import { useHouseStore } from '@/store/modules/house';
const houseStore = useHouseStore();
const houseFormat = ['北', '东北', '东', '东南', '南', '西南', '西', '西北'];
const route = useRoute();
const router = useRouter();
const formRef = ref();

View File

@@ -10,7 +10,7 @@
<el-option v-for="item in houseStore.currentBuildingInfoList" :key="item.id" :label="item.buildingName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="房屋用途" prop="houseUseTypeId">
<el-form-item label="房屋类型" prop="houseUseTypeId">
<el-select v-model="form.houseUseTypeId" placeholder="请选择">
<el-option v-for="item in houseUseTypeList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
@@ -25,40 +25,39 @@
<el-option v-for="item in floors" :key="item.no" :label="item.name" :value="item.no" />
</el-select>
</el-form-item>
<el-form-item label="房间号" prop="houseNo">
<el-input v-model.trim="form.houseNo" placeholder="请输入房间号" />
<el-input maxlength="15" v-model.trim="form.houseNo" placeholder="请输入房间号" />
</el-form-item>
<el-form-item label="建筑面积" prop="houseArea">
<div class="unitBox flex align-center">
<el-input v-model.trim="form.houseArea" placeholder="请输入建筑面积" />
<el-input maxlength="8" v-model.trim.number="form.houseArea" placeholder="请输入建筑面积" />
<span></span>
</div>
</el-form-item>
<el-form-item label="套内面积" prop="internalArea">
<div class="unitBox flex align-center">
<el-input v-model.trim="form.internalArea" placeholder="请输入套内面积" />
<el-input maxlength="8" v-model.trim.number="form.internalArea" placeholder="请输入套内面积" />
<span></span>
</div>
</el-form-item>
<el-form-item label="公摊面积" prop="shareArea">
<div class="unitBox flex align-center">
<el-input v-model.trim="form.shareArea" placeholder="请输入公摊面积" />
<el-input maxlength="8" v-model.trim.number="form.shareArea" placeholder="请输入公摊面积" />
<span></span>
</div>
</el-form-item>
<el-form-item label="房屋户型">
<div class="houseTypebox">
<el-input v-model.trim="housetype[0]" placeholder="房间" />
<el-input maxlength="3" v-model.trim="housetype[0]" placeholder="房间" @change="changeHouseType($event, 0)" />
<span></span>
<el-input v-model.trim="housetype[1]" placeholder="客厅" />
<el-input maxlength="3" v-model.trim="housetype[1]" placeholder="客厅" @change="changeHouseType($event, 1)" />
<span></span>
<el-input v-model.trim="housetype[2]" placeholder="卫生间" />
<el-input maxlength="3" v-model.trim="housetype[2]" placeholder="卫生间" @change="changeHouseType($event, 2)" />
<span></span>
</div>
</el-form-item>
<el-form-item label="车位号" prop="parkingIds">
<el-select @change="(val) => console.log(val)" multiple v-model="form.parkingIds" class="m-2" placeholder="请选择车位号">
<el-select multiple v-model="form.parkingIds" class="m-2" placeholder="请选择车位号">
<el-option v-for="(item, index) in parkinglist" :key="index" :label="item.parkingName" :value="item.id" />
</el-select>
</el-form-item>
@@ -97,7 +96,7 @@ const form = ref<addHouseType>({
houseUseTypeId: '', // 房屋用途
unitNoId: '',
floorNo: '',
houseNo: '', // 房
houseNo: '', // 房
houseArea: '', //建筑面积
internalArea: '', //套内面积
shareArea: '', // 公摊面积
@@ -110,12 +109,79 @@ const rules = ref({
unitNoId: [{ required: true, message: '请选择单元', trigger: 'blur' }],
floorNo: [{ required: true, message: '请选择楼层', trigger: 'blur' }],
houseUseTypeId: [{ required: true, message: '请选择房屋用途', trigger: 'blur' }],
houseArea: [{ required: true, message: '请输入建筑面积', trigger: 'blur' }],
buildingName: [{ required: true, message: '请输入房间号', trigger: 'blur' }],
houseNo: [{ required: true, message: '请输入房间号', trigger: 'blur' }],
buildingArea: [{ required: true, message: '请输入建筑面积', trigger: 'blur' }],
internalFloorArea: [{ required: true, message: '请输入套内面积', trigger: 'blur' }],
CommonArea: [{ required: true, message: '请输入公摊面积', trigger: 'blur' }]
CommonArea: [{ required: true, message: '请输入公摊面积', trigger: 'blur' }],
houseArea: [
{
required: true,
message: '请输入建筑面积',
trigger: 'blur'
},
{
validator: (_, value, callback) => {
if (value === '' || value === null) {
return callback(new Error('请输入建筑面积'));
} else {
const val = Number(value);
if (Number.isNaN(val)) {
return callback(new Error('请输入数字'));
}
if (val < 0 || val > 99999.99) {
ElMessage.error('房屋面积超出合法范围');
return;
}
return callback();
}
}
}
],
internalArea: [
{
required: false,
message: '请输入套内面积',
trigger: 'blur'
},
{
validator: (rule, value, callback) => {
if (value === '' || value === null) {
return callback();
}
const val = Number(value);
if (Number.isNaN(val)) {
return callback(new Error('请输入数字'));
}
if (val <= 0) {
return callback(new Error('请输入大于0的数字'));
}
return callback();
}
}
],
shareArea: [
{
required: false,
message: '请输入公摊面积',
trigger: 'blur'
},
{
validator: (rule, value, callback) => {
if (value === '' || value === null) {
return callback();
}
const val = Number(value);
if (Number.isNaN(val)) {
return callback(new Error('请输入数字'));
}
if (val <= 0) {
return callback(new Error('请输入大于0的数字'));
}
return callback();
}
}
]
});
const housetype = ref([]);
const units = ref([]);
@@ -168,7 +234,7 @@ async function geteditinfo() {
houseId: res.data.houseId, // 房屋id
unitNoId: res.data.unitNoId,
floorNo: res.data.floorNo,
houseNo: res.data.houseNo, // 房
houseNo: res.data.houseNo, // 房
houseArea: res.data.houseArea, //建筑面积
internalArea: res.data.internalArea, //套内面积
storeroomId: res.data.storeroomId, //储藏室
@@ -231,6 +297,16 @@ function getStoreRoomlist() {
});
}
// 客厅卫不能小于0个
function changeHouseType(val: string, index: number) {
const num = Number(val);
if (Number.isNaN(num)) {
housetype.value[index] = '0';
} else {
housetype.value[index] = num.toFixed(0);
}
}
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
@@ -259,6 +335,7 @@ const submitForm = () => {
}
});
};
const cancelForm = () => {
formRef?.value.resetFields();
router.back();

View File

@@ -3,7 +3,7 @@
<div class="TableBox p-5" v-if="houseStore.currentHouseInfoList !== null">
<el-checkbox-group @change="handleChangeCheckhouses" v-model="houseStore.checkoutHouses">
<el-table border :data="houseStore.currentFloorInfoList">
<el-table-column align="center" fixed label="楼层\单元" max-width="100">
<el-table-column align="center" fixed label="楼层\单元" min-width="90">
<template #default="{ row }">
<span>{{ row }}</span>
</template>

View File

@@ -1,20 +1,6 @@
<template>
<div class="UnitBox">
<div class="Unit_top flex align-center justify-between">
<!-- <div>
<span class="text-size-16px text-color-black text-widget-bold mr-30px">
<strong>{{ houseStore.currentBuildingInfo?.buildingName }}</strong>
</span>
<span class="mr-15px" v-if="houseStore.currentBuildingInfo && houseStore.currentBuildingInfo?.buildToward"
>楼栋朝向:{{ houseStore.currentBuildingInfo?.buildToward ? `${houseStore.currentBuildingInfo?.buildToward}(m)` : '--' }}</span
>
<span class="mr-15px" v-if="houseStore.currentBuildingInfo && houseStore.currentBuildingInfo?.buildTall"
>楼高{{ houseStore.currentBuildingInfo?.buildTall ? `${houseStore.currentBuildingInfo?.buildTall}(m)` : '--' }}</span
>
<span class="mr-15px" v-if="houseStore.currentBuildingInfo && houseStore.currentBuildingInfo?.buildStructure"
>楼栋结构{{ houseStore.currentBuildingInfo?.buildStructure ? `${houseStore.currentBuildingInfo?.buildStructure}(m)` : '--' }}
</span>
</div> -->
<div style="text-wrap: nowrap">
<span class="text-size-16px text-color-black text-widget-bold mr-30px">
<strong>{{ houseStore.currentBuildingInfo?.buildingName }}</strong>
@@ -36,7 +22,7 @@
<el-option v-for="item in houseUseTypeList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
<div class="searchbox flex flex-items-center">
<el-input v-model="housename" class="searchinput" placeholder="请输入房屋号"></el-input>
<el-input v-model="housename" maxlength="15" class="searchinput" placeholder="请输入房屋号"></el-input>
<el-button style="margin-left: 10px" type="primary" @click="handleSearchHouse">搜索</el-button>
<el-button @click="reset">重置</el-button>
</div>
@@ -49,10 +35,9 @@
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="unitNoFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="单元名称" prop="name">
<el-input v-model="form.name" placeholder="请输入单元名称" />
<el-input maxlength="6" show-word-limit v-model.trim="form.name" placeholder="请输入单元名称" />
</el-form-item>
<el-form-item label="楼栋" prop="buildingId">
<!-- <el-input v-model="form.buildingId" placeholder="请输入楼栋" /> -->
<el-select v-model="form.buildingId" placeholder="请选择">
<el-option v-for="item in houseStore.currentBuildingInfoList" :key="item.id" :label="item.buildingName" :value="item.id" />
</el-select>

View File

@@ -14,7 +14,7 @@
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="业主姓名" prop="rentalName">
<el-input :disabled="HasName" v-model="form.rentalName" placeholder="请输入业主姓名" />
<el-input maxlength="20" v-model.trim="form.rentalName" placeholder="请输入业主姓名" />
</el-form-item>
</el-col>
</el-row>
@@ -22,24 +22,24 @@
<el-row>
<el-col :span="11">
<el-form-item label="租赁状态" prop="rentalStatus">
<el-select v-model.number="form.rentalStatus" placeholder="请选择">
<el-select v-model="form.rentalStatus" placeholder="请选择">
<el-option v-for="(item, index) in com_rental_status" :key="index" :label="item.label" :value="Number(item.value)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="房屋用途" prop="houseUse">
<el-select v-model.number="form.houseUse" placeholder="请选择">
<el-option v-for="(item, index) in com_house_use" :key="index" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<!-- <el-form-item label="房屋用途" prop="houseUse">-->
<!-- <el-select v-model.trim="form.houseUse" placeholder="请选择">-->
<!-- <el-option v-for="(item, index) in houseUseTypeList" :key="index" :label="item.name" :value="item.id" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="租金" prop="rent">
<el-input v-model="form.rent" placeholder="请输入租金">
<el-input maxlength="8" v-model.number.trim="form.rent" placeholder="请输入租金">
<template #suffix></template>
</el-input>
</el-form-item>
@@ -57,7 +57,7 @@
<el-row>
<el-col :span="11">
<el-form-item label="房屋朝向" prop="type">
<el-select v-model.number="form.houseFace" placeholder="请选择">
<el-select v-model="form.houseFace" placeholder="请选择">
<el-option v-for="(item, index) in houseFormat" :key="index" :label="item" :value="item" />
</el-select>
</el-form-item>
@@ -65,7 +65,7 @@
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="房屋面积" prop="houseArea">
<el-input v-model.number="form.houseArea" placeholder="请输入房屋面积">
<el-input maxlength="8" v-model.trim="form.houseArea" placeholder="请输入房屋面积">
<template #suffix> </template>
</el-input>
</el-form-item>
@@ -74,7 +74,7 @@
<el-row>
<el-col :span="11">
<el-form-item label="房屋楼层" prop="floorNo">
<el-input-number v-model.number="form.floorNo" placeholder="请输入" />
<el-input-number :max="1000" v-model.number.trim="form.floorNo" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
@@ -125,6 +125,8 @@
:multiple="true"
:auto-upload="false"
list-type="picture-card"
:limit="9"
:on-exceed="handleExceed"
:on-preview="handlePictureCardPreview"
:on-remove="handleRemove"
:on-success="handleAvatarSuccess"
@@ -143,27 +145,27 @@
</el-row>
<el-form-item label="补充房屋信息" prop="remark">
<el-input type="textarea" :rows="5" v-model.number="form.supInfo" placeholder="请输入补充房屋信息" />
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model.trim="form.supInfo" placeholder="请输入补充房屋信息" />
</el-form-item>
<el-row>
<el-col :span="11">
<el-form-item label="手机号" prop="phone">
<el-input v-model.number="form.phone" placeholder="请输入手机号码" />
<el-input v-model.number.trim="form.phone" placeholder="请输入手机号码" />
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="微信" prop="vx">
<el-input v-model.number="form.vx" placeholder="请输入微信号码" />
<el-input maxlength="11" v-model.trim="form.vx" placeholder="请输入微信号码" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="邮箱" prop="email">
<el-input v-model.number="form.email" placeholder="请输入邮箱" />
</el-form-item>
<!-- <el-form-item label="邮箱" prop="email">-->
<!-- <el-input v-model.trim="form.email" placeholder="请输入邮箱" />-->
<!-- </el-form-item>-->
</el-col>
</el-row>
<el-form-item style="margin-top: 30px">
@@ -187,6 +189,7 @@ import { validator } from '@/utils/Reg';
import { useHouseStore } from '@/store/modules/house';
import { listHouseFacilities } from '@/api/system/HouseFacilities';
import { Plus } from '@element-plus/icons-vue';
import { listHouseUseType_add_house } from '@/api/system/houseUse';
const houseStore = useHouseStore();
@@ -194,13 +197,14 @@ const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/houseRental/uploadImages
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_rental_method } = toRefs<any>(proxy?.useDict('com_rental_method'));
const { com_rental_status } = toRefs<any>(proxy?.useDict('com_rental_status'));
const { com_house_use } = toRefs<any>(proxy?.useDict('com_house_use'));
// const { com_house_use } = toRefs<any>(proxy?.useDict('com_house_use'));&╬╬╥
const router = useRouter();
const route = useRoute();
const formRef = ref();
const houseFormat = ['东', '西', '南', '北'];
// 房屋朝向
const houseFormat = ['北', '东北', '东', '东南', '南', '西南', '西', '西北'];
const form = ref({
id: null,
houseId: null,
@@ -209,15 +213,15 @@ const form = ref({
houseFace: '', // 房屋朝向
rentalType: '0', // 整租合租
phone: null, //手机号
houseArea: null, // 房屋面积
floorNo: null, //楼层号
houseArea: 0, // 房屋面积
floorNo: 1, //楼层号
inTime: '', //入住时间
facilities: '', //房屋设施
houseImageUrl: '', //房屋图片
supInfo: '', //补充租房信息
vx: '', //微信
houseUse: '0', //房屋用途
rentalStatus: 0, //租赁状态
houseUse: '', //房屋用途
rentalStatus: 1, //租赁状态
buildingId: null, //楼栋id
unitNoId: null, //单元id
email: '' //邮箱
@@ -233,6 +237,59 @@ const rules = ref({
message: '请输入正确的手机号码',
trigger: 'blur'
}
],
email: [
{ required: false, message: '请输入邮箱', trigger: 'blur' },
{
validator: (_: any, val: string | number) => {
if (val === '') {
return true;
}
return validator(val, 'email');
},
message: '请输入正确的邮箱',
trigger: 'blur'
}
],
rent: [
{
required: false,
message: '请输入正确的租金',
trigger: 'blur'
},
{
validator: (_: any, val: string | number, callback: (arg0?: Error) => void) => {
if (val === '' || val === null) {
return callback();
}
if (validator(val, 'money')) {
return callback();
}
return callback(new Error('请输入正确的租金'));
}
}
],
houseArea: [
{
required: false,
message: '请输入房屋面积',
trigger: 'blur'
},
{
validator: (_: any, value: string | number, callback: (arg0?: Error) => void) => {
if (value === '' || value === null || value === 0) {
return callback(new Error('请输入房屋面积'));
}
const val = Number(value);
if (Number.isNaN(val)) {
return callback(new Error('请输入数字'));
}
if (val < 0) {
return callback(new Error('房屋面积不能小于0'));
}
return callback();
}
}
]
});
// ! 编辑租赁-=================================================================================
@@ -265,7 +322,14 @@ async function getTreeData() {
}
getTreeData();
const HasName = ref(false);
const houseUseTypeList = ref([]);
function getHouseUseType() {
listHouseUseType_add_house().then((res) => {
houseUseTypeList.value = res.data;
});
}
getHouseUseType();
// 获取房屋
function handleChange(val: CascaderValue) {
userHousePath.value = val;
@@ -273,11 +337,10 @@ function handleChange(val: CascaderValue) {
form.value.rentalName = '';
if (val[2]) {
getHouseOwnUser(val[2]).then((res) => {
if (res.msg) {
form.value.rentalName = res.msg;
HasName.value = true;
if (res.msg.trim()) {
form.value.rentalName = res.msg.trim();
} else {
HasName.value = false;
form.value.rentalName = '';
}
});
}
@@ -304,6 +367,9 @@ const handleChangeFile = (uploadFile: UploadFile, uploadFiles: UploadFiles) => {
}
fileList.value = uploadFiles;
};
const handleExceed = () => {
ElMessage.warning('最多上传9张图片');
};
const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile) => {
dialogImageUrl.value = uploadFile.url!;
dialogVisible.value = true;

View File

@@ -6,13 +6,13 @@
<el-card>
<div class="h-full flex flex-align-center">
<el-form label-width="120px" ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="房屋用途" prop="houseUse">
<el-select v-model="queryParams.houseUse" placeholder="选择房屋用途" style="width: 240px">
<el-option v-for="item in com_house_use" :key="item.value" :label="item.label" :value="item.value" />
<el-form-item label="房屋类型" prop="houseUse">
<el-select v-model="queryParams.houseUse" placeholder="选择房屋类型" style="width: 240px">
<el-option v-for="item in houseUseTypeList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="发布人" prop="rentalName">
<el-input v-model="queryParams.rentalName" placeholder="请输入" clearable @keyup.enter="handleQuery" />
<el-input maxlength="15" v-model="queryParams.rentalName" placeholder="请输入" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -51,9 +51,10 @@
<el-table-column label="发布人" align="center" prop="rentalName" />
<el-table-column label="联系方式" align="center" prop="phone" />
<el-table-column label="发布时间" align="center" prop="pubTime" />
<el-table-column label="房屋用途" align="center" prop="houseUse">
<el-table-column label="房屋类型" align="center" prop="houseUse">
<template #default="{ row }">
<DictTag :options="com_house_use" :value="row.houseUse"></DictTag>
<!-- <DictTag :options="com_house_use" :value="row.houseUse"></DictTag>-->
<span>{{ handleHouseUse(row.houseUse) }}</span>
</template>
</el-table-column>
<el-table-column label="租赁方式" align="center" prop="rentalType">
@@ -80,6 +81,7 @@ import Pageheader from '@/components/Pageheader/index.vue';
import { listHouseRental, delHouseRental } from '@/api/system/houseRental/index';
import { HouseRentalVO, HouseRentalQuery, HouseRentalForm } from '@/api/system/houseRental/type';
import { checkPermi } from '@/utils/permission';
import { listHouseUseType_add_house } from '@/api/system/houseUse';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_house_use } = toRefs<any>(proxy?.useDict('com_house_use'));
@@ -229,8 +231,19 @@ const handleDelete = async (row?: HouseRentalVO) => {
await getList();
};
const houseUseTypeList = ref([]);
function getHouseUseType() {
listHouseUseType_add_house().then((res) => {
houseUseTypeList.value = res.data;
});
}
function handleHouseUse(houseUser: string) {
const item = houseUseTypeList.value.find((item) => item.id === houseUser);
return item?.name || '';
}
onMounted(() => {
getList();
getHouseUseType();
});
</script>

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="用途名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入用途名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.name" placeholder="请输入用途名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -42,7 +42,7 @@
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="houseUseTypeFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="用途名称" prop="name">
<el-input v-model="form.name" placeholder="请输入用途名称" />
<el-input maxlength="20" show-word-limit v-model="form.name" placeholder="请输入用途名称" />
</el-form-item>
</el-form>
<template #footer>

View File

@@ -6,10 +6,10 @@
<div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="项目名称" prop="itemName">
<el-input v-model.trim="form.itemName" placeholder="请输入项目名称" />
<el-input maxlength="20" v-model.trim="form.itemName" placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="巡检标准" prop="inspectionStandard">
<el-input type="textarea" :rows="5" v-model.trim="form.inspectionStandard" placeholder="请输入巡检标准" />
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model.trim="form.inspectionStandard" placeholder="请输入巡检标准" />
</el-form-item>
<el-form-item style="margin-top: 30px">
<el-button type="primary" @click="submitForm">提交</el-button>

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="项目名称" prop="itemName">
<el-input v-model="queryParams.itemName" placeholder="请输入项目名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.itemName" placeholder="请输入项目名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -8,7 +8,7 @@
<div class="bodyBox">
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px" label-position="right">
<el-form-item label="巡检计划名称" prop="planName">
<el-input v-model="form.planName" placeholder="请输入"></el-input>
<el-input maxlength="20" v-model.trim="form.planName" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="任务时间">
@@ -30,9 +30,6 @@
</div>
</el-form-item>
<el-form-item label="任务时间段">
<!-- <el-select v-model="form.taskTime" placeholder="选择任务时间段" style="width: 100%">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select> -->
<div v-for="(_, index) in taskTime" :key="index" style="display: flex; align-items: center; margin-top: 10px">
<el-time-picker
v-model="taskTime[index]"
@@ -44,14 +41,6 @@
end-placeholder="结束时间"
style="width: 100%"
/>
<!-- <el-button v-if="taskTime.length > 1" icon="Minus" circle style="margin-left: 10px" @click="removeTaskTime(index)"></el-button>
<el-button
v-if="taskTime.length === index + 1 && taskTime.length <= 8"
icon="Plus"
circle
style="margin-left: 10px"
@click="addTaskTime"
></el-button> -->
</div>
</el-form-item>
@@ -84,9 +73,7 @@ import { ref } from 'vue';
import { addPlan, getPlan, updatePlan } from '@/api/system/InspectionPlan';
import { Check } from '@element-plus/icons-vue';
import MapWrapper from '@/components/Map/index.vue';
import { PointVO } from '@/api/system/InspectionPoint/type';
import { LngLat } from '@/components/Map/type';
import { PlanVO } from '@/api/system/InspectionPlan/type';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_inspection_remind_tiime } = toRefs<any>(proxy?.useDict('com_inspection_remind_tiime'));
@@ -186,7 +173,7 @@ function handleChangeMap(val: string) {
const find = playlist.value.find((item) => item.id === val);
if (!find) return;
if (find.points && find.points.length > 0) {
const pointMap = new Map(find.points.map((p) => [p.id, p]));
const pointMap = new Map<string, { location: string; pointName: string; id: string }>(find.points.map((p) => [p.id, p]));
const totalPointsList = find.totalPoints.split(',').filter(Boolean);
if (totalPointsList.length > 0) {
totalPointsList.forEach((item) => {

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" label-width="100px" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="巡检计划名称" prop="planName">
<el-input v-model="queryParams.planName" placeholder="请输入巡检计划名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.planName" placeholder="请输入巡检计划名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -6,7 +6,7 @@
<div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="巡检点名称" prop="pointName">
<el-input v-model.trim="form.pointName" placeholder="请输入巡检点名称" />
<el-input maxlength="20" v-model.trim="form.pointName" placeholder="请输入巡检点名称" />
</el-form-item>
<el-form-item label="巡检项目" prop="itemId">
<div class="itemBox">

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form label-width="100px" ref="queryFormRef" @submit.prevent="handleQuery" :model="queryParams" :inline="true">
<el-form-item label="巡检点名称" prop="pointName">
<el-input v-model="queryParams.pointName" placeholder="请输入巡检点名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.pointName" placeholder="请输入巡检点名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -21,7 +21,7 @@
/>
</el-form-item>
<el-form-item label="任务名称" prop="taskName">
<el-input v-model="queryParams.taskName" placeholder="请输入任务名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.taskName" placeholder="请输入任务名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -6,7 +6,7 @@
<div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="巡检路线名称" prop="routeName">
<el-input v-model.trim="form.routeName" placeholder="请输入巡检路线名称" />
<el-input maxlength="20" v-model.trim="form.routeName" placeholder="请输入巡检路线名称" />
</el-form-item>
<el-form-item label="巡检点">
<div class="itemBox">

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" label-width="120px" @submit.prevent="handleQuery" :model="queryParams" :inline="true">
<el-form-item label="巡检路线名称" prop="routeName">
<el-input v-model="queryParams.routeName" placeholder="请输入巡检路线名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.routeName" placeholder="请输入巡检路线名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -8,7 +8,7 @@
<div class="bodyBox">
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px" label-position="right">
<el-form-item label="任务名称" prop="taskName">
<el-input v-model="form.taskName" placeholder="请输入"></el-input>
<el-input maxlength="20" v-model="form.taskName" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="巡检人员" prop="inspectorId">
<div class="inspectorIdsBox">
@@ -18,7 +18,14 @@
<el-icon><Delete /></el-icon>
</i>
</div>
<RepairUser @change="handleUserChange" returnvalue="*" :is-multiple="true" user-type="inspection" ref="RepairUserRef">
<RepairUser
titleName="巡检人员"
@change="handleUserChange"
returnvalue="*"
:is-multiple="true"
user-type="inspection"
ref="RepairUserRef"
>
<template #default>
<div @click="handleAddUser" class="inspector_items add flex flex-items-center justify-center">
<el-icon><Plus /></el-icon>

View File

@@ -11,7 +11,7 @@
</el-select>
</el-form-item>
<el-form-item label="巡检任务名称" prop="taskName">
<el-input v-model="queryParams.taskName" placeholder="请输入巡检任务名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.taskName" placeholder="请输入巡检任务名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<!-- <el-form-item label="实际开始时间" prop="taskTime">
<el-date-picker

View File

@@ -16,7 +16,7 @@
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="车位编号" prop="parkingCode">
<el-input v-model.trim="form.parkingCode" placeholder="请输入车位编号" />
<el-input maxlength="20" v-model.trim="form.parkingCode" placeholder="请输入车位编号" />
</el-form-item>
</el-col>
</el-row>
@@ -24,13 +24,13 @@
<el-row>
<el-col :span="11">
<el-form-item label="车位面积" prop="parkingArea">
<el-input v-model.number="form.parkingArea" placeholder="请输入车位面积" />
<el-input maxlength="8" v-model.number="form.parkingArea" placeholder="请输入车位面积" />
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="所属楼层" prop="parkingFloor">
<el-input v-model.number="form.parkingFloor" placeholder="请输入所属楼层" />
<el-input maxlength="5" v-model.number="form.parkingFloor" placeholder="请输入所属楼层" />
</el-form-item>
</el-col>
</el-row>
@@ -64,13 +64,13 @@
<el-row v-if="form.contactType === 0">
<el-col :span="10">
<el-form-item label="联系人名称" prop="contactName">
<el-input v-model.trim="form.contactName"></el-input>
<el-input maxlength="20" v-model.trim="form.contactName"></el-input>
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="10">
<el-form-item label="联系人电话" prop="contactPhone">
<el-input v-model.trim="form.contactPhone"></el-input>
<el-input maxlength="11" v-model.trim="form.contactPhone"></el-input>
</el-form-item>
</el-col>
</el-row>
@@ -96,7 +96,7 @@
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model.trim="form.remark" placeholder="请输入" />
</el-form-item>
</el-col>
</el-row>
@@ -159,7 +159,25 @@ const rules = ref({
}
}
],
contactName: [{ required: true, message: '请输入联系人名称', trigger: 'blur' }]
contactName: [{ required: true, message: '请输入联系人名称', trigger: 'blur' }],
parkingArea: [
{ required: true, message: '请输入车位面积', trigger: 'blur' },
{
validator: (_: any, value: string | number, callback: (arg0?: Error) => void) => {
if (value === '' || value === null) {
return callback(new Error('请输入车位面积'));
}
const val = Number(value);
if (Number.isNaN(val)) {
return callback(new Error('请输入数字'));
}
if (val <= 0) {
return callback(new Error('请输入大于0的数字'));
}
return callback();
}
}
]
});
const userid = ref(null);

View File

@@ -16,7 +16,7 @@
</el-select>
</el-form-item>
<el-form-item label="车位编号" prop="parkingCode">
<el-input v-model="queryParams.parkingCode" placeholder="请输入车位编号" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.parkingCode" placeholder="请输入车位编号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -138,7 +138,7 @@
<div class="w-full h-full flex mt-2">
<div class="title">审批意见</div>
<div class="preivewBodybox flex-1 ml-5">
<el-input v-model="form.propertyReviewFeedback" type="textarea" :rows="5"></el-input>
<el-input maxlength="200" show-word-limit v-model="form.propertyReviewFeedback" type="textarea" :rows="5"></el-input>
<div class="actions mt-5">
<el-button :disabled="parkingReviewInfo.parking.checkStatus === '1'" type="primary" @click="handlePreview(1)">审核通过</el-button>
<el-button :disabled="parkingReviewInfo.parking.checkStatus === '1'" type="danger" @click="handlePreview(2)"
@@ -163,20 +163,20 @@
</template>
<div class="w-full h-50%">
<el-steps space="200px" direction="vertical" :active="activeStop">
<el-step :description="parkingReviewInfo.parkingReviewProcess.submitTime">
<el-step :description="active <= 0 ? '' : parkingReviewInfo.parkingReviewProcess.submitTime">
<template #title>
<span v-if="active === 0">未提交信息</span>
<span v-if="active >= 1">已提交信息</span>
</template>
</el-step>
<el-step :description="parkingReviewInfo.parkingReviewProcess.propertyTime">
<el-step :description="active <= 2 ? '' : parkingReviewInfo.parkingReviewProcess.propertyTime">
<template #title>
<span v-if="active <= 2">待审核</span>
<span v-if="active === 3">物业审核不通过</span>
<span v-if="active >= 4">物业审核通过</span>
</template>
</el-step>
<el-step :description="parkingReviewInfo.parkingReviewProcess.certificationTime">
<el-step :description="active <= 5 ? '' : parkingReviewInfo.parkingReviewProcess.certificationTime">
<template #title>
<span v-if="active <= 5">未认证</span>
<span v-if="active === 6">已认证</span>

View File

@@ -24,7 +24,7 @@
</div>
<div class="userinfo_item">
<div class="title_item">证件类型</div>
<span> 身份证 </span>
<DictTag :options="com_id_card_type" :value="userInfo.idCardType"></DictTag>
</div>
<div class="userinfo_item">
<div class="title_item">住户类型</div>
@@ -145,7 +145,7 @@ import { ResidentVO } from '@/api/system/residentReviewProcess/resident/type';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_review } = toRefs<any>(proxy?.useDict('com_review'));
const { com_sub_status } = toRefs<any>(proxy?.useDict('com_sub_status'));
const { com_resident_relationship } = toRefs<any>(proxy?.useDict('com_resident_relationship'));
const { com_resident_relationship, com_id_card_type } = toRefs<any>(proxy?.useDict('com_resident_relationship', 'com_id_card_type'));
const { com_certification_status } = toRefs<any>(proxy?.useDict('com_certification_status'));
const userInfo = ref<ResidentVO>({
@@ -155,6 +155,7 @@ const userInfo = ref<ResidentVO>({
userId: null,
nickName: '',
unitNoId: '',
idCardType: '0',
'id': null,
'name': '',
'type': '0',

View File

@@ -8,13 +8,13 @@
<el-row>
<el-col :span="11">
<el-form-item label="楼栋房屋" prop="houseId">
<el-cascader v-model="userHousepath" :options="treedata" @change="handleChange" />
<el-cascader v-model="userHousePath" :options="treeData" @change="handleChange" />
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="住户姓名" prop="name">
<el-input v-model="form.name" placeholder="请输入住户姓名" />
<el-input maxlength="15" show-word-limit v-model.trim="form.name" placeholder="请输入住户姓名" />
</el-form-item>
</el-col>
</el-row>
@@ -28,9 +28,26 @@
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11"> </el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="身份证号码" prop="idCard">
<el-input v-model="form.idCard" placeholder="请输入证件号码" />
<el-form-item label="证件类型" prop="idCardType">
<el-select @change="handleChangeIdCardType" v-model="form.idCardType" placeholder="请选择证件">
<el-option v-for="item in com_id_card_type" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="身份证号码" prop="idCard" v-if="form.idCardType === '0'">
<el-input maxlength="20" v-model="form.idCard" placeholder="请输入证件号码" />
</el-form-item>
<el-form-item label="护照号码" prop="idCard" v-if="form.idCardType === '1'">
<el-input maxlength="30" v-model="form.idCard" placeholder="请输入证件号码" />
</el-form-item>
<el-form-item label="港澳通行证号码" prop="idCard" v-if="form.idCardType === '2'">
<el-input maxlength="20" v-model="form.idCard" placeholder="请输入证件号码" />
</el-form-item>
</el-col>
</el-row>
@@ -62,7 +79,7 @@
:on-success="handleAvatarSuccess"
:on-exceed="handleExceed"
:on-error="handleError"
:before-upload="handleBeforUpload"
:before-upload="handleBeforeUpload"
:limit="1"
>
<img alt="身份证正面照" v-if="form.cardImageFront" :src="form.cardImageFront" class="avatar" />
@@ -82,7 +99,7 @@
:on-exceed="handleExceed2"
:on-success="handleAvatar2Success"
:on-error="handleError2"
:before-upload="handleBeforUpload"
:before-upload="handleBeforeUpload"
>
<img alt="身份证背面照" v-if="form.cardImageBack" :src="form.cardImageBack" class="avatar" />
<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
@@ -92,7 +109,7 @@
</el-row>
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :row="5" v-model.number="form.remark" placeholder="请输入备注" />
<el-input type="textarea" maxlength="200" show-word-limit :row="5" v-model.trim="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item style="margin-top: 30px">
<el-button type="primary" @click="submitForm">确定</el-button>
@@ -106,9 +123,8 @@
<script setup lang="ts">
import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { getHousePathById } from '@/utils/house';
import { ResidentForm } from '@/api/system/residentReviewProcess/resident/type';
import { CascaderValue, UploadFiles, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
import { CascaderValue, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
import { genFileId } from 'element-plus';
import { addResident, getResident, updateResident } from '@/api/system/residentReviewProcess/resident';
import { validator } from '@/utils/Reg';
@@ -120,7 +136,7 @@ const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/resident/uploadImage';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_user_sex } = toRefs<any>(proxy?.useDict('sys_user_sex'));
const { com_resident_relationship } = toRefs<any>(proxy?.useDict('com_resident_relationship'));
const { com_resident_relationship, com_id_card_type } = toRefs<any>(proxy?.useDict('com_resident_relationship', 'com_id_card_type'));
const router = useRouter();
const route = useRoute();
@@ -134,21 +150,31 @@ const form = ref<ResidentForm>({
ownerRelationship: '0', // 与业主关系
phone: null, //手机号
cardImageFront: '',
idCardType: '0', // 证件类型
cardImageBack: '',
remark: '' //备注
remark: '' //备注╬╬╬.╬╬╬╬╬
});
const userHousepath = ref<CascaderValue>([]);
const userHousePath = ref<CascaderValue>([]);
const rules = ref({
houseId: [{ required: true, message: '请选择房屋', trigger: 'blur' }],
name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
gender: [{ required: true, message: '请选择性别', trigger: 'blur' }],
cardImageFront: [{ required: true, message: '请上传身份证照片', trigger: 'blur' }],
cardImageBack: [{ required: true, message: '请上传身份证照片', trigger: 'blur' }],
idCardType: [{ required: true, message: '请选择证件类型', trigger: 'blur' }],
idCard: [
{ required: true, message: '请输入身份证号', trigger: 'blur' },
{
validator: (_, value) => validator(value, 'idCard'),
message: '请输入正确的18位身份证号码',
validator: (_: any, value: string | number, callback: (arg0?: Error) => void) => {
if (form.value.idCardType === '0') {
return validator(value, 'idCard') ? callback() : callback(new Error('请输入正确的18位身份证号码'));
} else if (form.value.idCardType === '1') {
return validator(value, 'passport') ? callback() : callback(new Error('请输入正确的护照号码'));
} else if (form.value.idCardType === '2') {
return validator(value, 'hongkongPassport') ? callback() : callback(new Error('请输入正确的港澳通行证号码'));
}
return callback();
},
required: true,
trigger: 'blur'
}
],
@@ -156,24 +182,29 @@ const rules = ref({
phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{
validator: (_, value) => validator(value, 'phone'),
message: '请输入正确的手机号码',
validator: (_: any, value: string | number, callback: (arg0?: Error) => void) => {
return validator(value, 'phone') ? callback() : callback(new Error('请输入正确的手机号码'));
},
trigger: 'blur'
}
]
});
const treedata = ref([]);
// 切换证件类型
function handleChangeIdCardType() {
form.value.idCard = '';
}
// 总房屋 树状结构
const treeData = ref([]);
function getTree() {
houseStore.getCurrentVilageTreeHouse().then((res) => {
treedata.value = res;
gettreedata();
treeData.value = res;
getTreeData();
});
}
getTree();
// !== 楼栋房屋 =============================================================================
const userid = ref(null);
function gettreedata() {
function getTreeData() {
// !== 编辑用户 =============================================================================
if (route.query.id) {
userid.value = route.query.id;
@@ -181,13 +212,13 @@ function gettreedata() {
form.value = {
...res.data
};
userHousepath.value = [form.value.buildingId, form.value.unitNoId, form.value.houseId];
userHousePath.value = [form.value.buildingId, form.value.unitNoId, form.value.houseId];
});
}
}
function handleChange(val: CascaderValue) {
userHousepath.value = val;
userHousePath.value = val;
form.value.buildingId = val[0];
form.value.houseId = val[2];
}
@@ -196,12 +227,12 @@ function handleChange(val: CascaderValue) {
// 上传文件成功
const upload = ref<UploadInstance>();
const upload2 = ref<UploadInstance>();
const handleAvatarSuccess: UploadProps['onSuccess'] = (response, uploadFile) => {
const handleAvatarSuccess: UploadProps['onSuccess'] = (response) => {
if (response.data && response.data.url) {
form.value.cardImageFront = response.data.url;
}
};
const handleAvatar2Success: UploadProps['onSuccess'] = (response, uploadFile) => {
const handleAvatar2Success: UploadProps['onSuccess'] = (response) => {
if (response.code === 500 && response.msg == '不允许重复提交,请稍候再试') {
ElMessage.error('上传频率过快,稍后再试');
return;
@@ -224,16 +255,12 @@ const handleExceed2: UploadProps['onExceed'] = (files) => {
upload2.value!.handleStart(file);
upload2.value?.submit();
};
const handleError: UploadProps['onError'] = (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
console.log(error);
};
const handleError2: UploadProps['onError'] = (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
console.log(error);
};
const blockedExts = ['.exe', '.bat', '.cmd', '.msi'];
const handleBeforUpload = (uploadFile: UploadRawFile) => {
const handleError: UploadProps['onError'] = () => {};
const handleError2: UploadProps['onError'] = () => {};
const blockedExits = ['.exe', '.bat', '.cmd', '.msi'];
const handleBeforeUpload = (uploadFile: UploadRawFile) => {
const ext = uploadFile.name.toLowerCase().slice(uploadFile.name.lastIndexOf('.'));
if (blockedExts.includes(ext)) {
if (blockedExits.includes(ext)) {
ElMessage.warning(`禁止上传 ${ext} 文件`);
return false;
}

View File

@@ -12,7 +12,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="公告标题" prop="noticeTitle">
<el-input v-model.trim="form.noticeTitle" placeholder="请输入公告标题" />
<el-input maxlength="20" v-model.trim="form.noticeTitle" placeholder="请输入公告标题" />
</el-form-item>
</el-col>
<!-- <el-col :span="12">-->

View File

@@ -6,17 +6,8 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="公告标题" prop="noticeTitle">
<el-input v-model="queryParams.noticeTitle" placeholder="请输入公告标题" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.noticeTitle" placeholder="请输入公告标题" clearable @keyup.enter="handleQuery" />
</el-form-item>
<!-- <el-form-item label="作者" prop="author">-->
<!-- <el-input v-model="queryParams.author" placeholder="请输入作者" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="发布人" prop="publishBy">-->
<!-- <el-input v-model="queryParams.publishBy" placeholder="请输入发布人" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="发布日期" prop="publishTime">-->
<!-- <el-date-picker clearable v-model="queryParams.publishTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择发布日期" />-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -29,13 +20,12 @@
<el-card shadow="never" class="flex-1">
<template #header>
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">-->
<!-- <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['system:revenueNotice:export']">导出</el-button>-->
<!-- </el-col>-->
<right-toolbar
:show-edit="checkPermi(['revenue:revenueNotice:edit'])"
:show-delete="checkPermi(['revenue:revenueNotice:remove'])"
:showAdd="checkPermi(['revenue:revenueNotice:add'])"
:disable-delete="multiple"
:disable-edit="single"
@update:add="handleAdd"
@update:edit="handleUpdate()"
@update:delete="handleDelete()"
@@ -46,19 +36,6 @@
<el-table v-loading="loading" border :data="revenueNoticeList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="公告标题" align="center" prop="noticeTitle" />
<!-- <el-table-column label="公告内容" align="center" prop="noticeContent" />-->
<!-- <el-table-column label="作者" align="center" prop="author" />-->
<!-- <el-table-column label="发布状态" align="center" prop="publishStatus">-->
<!-- <template #default="scope">-->
<!-- <dict-tag :options="com_publish_status" :value="scope.row.publishStatus"></dict-tag>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="发布人" align="center" prop="publishBy" />-->
<!-- <el-table-column label="发布日期" align="center" prop="publishTime" width="180">-->
<!-- <template #default="scope">-->
<!-- <span>{{ parseTime(scope.row.publishTime, '{y}-{m}-{d}') }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['revenue:revenueNotice:edit']">修改</el-button>
@@ -113,18 +90,17 @@ import { listRevenueNotice, delRevenueNotice, addRevenueNotice, updateRevenueNot
import { RevenueNoticeVO, RevenueNoticeQuery, RevenueNoticeForm } from '@/api/system/revenueNotice/type';
import { checkPermi } from '@/utils/permission';
import { NoticeVO } from '@/api/system/NoticePc/type';
import RightToolbar from '@/components/RightToolbar/index.vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
// const { com_publish_status } = toRefs<any>(proxy?.useDict('com_publish_status'));
const revenueNoticeList = ref<RevenueNoticeVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const total = ref(0);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const revenueNoticeFormRef = ref<ElFormInstance>();

View File

@@ -6,18 +6,27 @@
<div class="addBuildingFormBody formBody">
<el-form ref="roleFormRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="角色名称" prop="roleName">
<el-input v-model="form.roleName" placeholder="请输入角色名称" />
<el-input v-model.trim="form.roleName" placeholder="请输入角色名称" />
</el-form-item>
<el-form-item prop="roleKey">
<template #label>
<span>
<el-tooltip content="控制器中定义的权限字符" placement="top">
<el-icon><question-filled /></el-icon>
<template #content>
<div>权限字符用于标识角色的唯一字符串不能重复</div>
<div>内置权限字符</div>
<div>superadmin超级管理员</div>
<div>manage物业管理员</div>
<div>repair维修人员</div>
<div>complainUser投诉处理人员</div>
<div>inspection 巡检人员</div>
</template>
</el-tooltip>
权限字符
</span>
</template>
<el-input v-model="form.roleKey" placeholder="请输入权限字符" />
<el-input v-model.trim="form.roleKey" placeholder="请输入权限字符" />
</el-form-item>
<el-form-item label="角色顺序" prop="roleSort">
<el-input-number v-model="form.roleSort" controls-position="right" :min="0" />
@@ -44,7 +53,7 @@
</el-tree>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
<el-input maxlength="200" show-word-limit v-model.trim="form.remark" type="textarea" placeholder="请输入内容"></el-input>
</el-form-item>
</el-form>
<div class="dialog-footer text-center">

View File

@@ -19,9 +19,9 @@
<div class="cardbox">
<div>收入来源</div>
<div class="card_InfoAll">
<div>应缴费用{{ formatMoneyWithUnit(sourceFrom.totalPayable, 3) }}</div>
<div>已收{{ formatMoneyWithUnit(sourceFrom.totalReceived, 3) }}</div>
<div>待收{{ formatMoneyWithUnit(sourceFrom.totalPending, 3) }}</div>
<div>应缴费用{{ sourceFrom.totalPayable }}</div>
<div>已收{{ sourceFrom.totalReceived }}</div>
<div>待收{{ sourceFrom.totalPending }}</div>
</div>
<div class="cardBody" style="display: flex; flex-wrap: wrap" v-if="sourceFromIsComputed">
<RingProgress name="停车费" color="#1a75ff" :value="sourceFrom.parkingFeePercent"></RingProgress>

View File

@@ -1,6 +1,6 @@
<template>
<div class="AddBuildingBox">
<PageHeader :title="storeRoomid ? '编辑储藏室' : '添加储藏室'"></PageHeader>
<PageHeader :title="storeRoomId ? '编辑储藏室' : '添加储藏室'"></PageHeader>
<div class="AddBuildingBody">
<div class="title">基本信息</div>
<div class="addBuildingFormBody">
@@ -9,7 +9,7 @@
<el-col :span="11">
<el-form-item label="楼栋" prop="buildingId">
<el-select @change="handleChangeBuild" v-model="form.buildingId" placeholder="请选择楼栋">
<el-option v-for="item in Buildinglists" :key="item.id" :label="item.buildingName" :value="item.id" />
<el-option v-for="item in BuildingLists" :key="item.id" :label="item.buildingName" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
@@ -25,32 +25,43 @@
<el-row>
<el-col :span="11">
<el-form-item label="储藏室号" prop="storeroomNo">
<el-input v-model="form.storeroomNo" placeholder="请输入储藏室号" />
<el-input maxlength="15" v-model.trim="form.storeroomNo" placeholder="请输入储藏室号" />
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="建筑面积" prop="houseArea">
<el-input v-model="form.houseArea" placeholder="请输入建筑面积" />
<el-input maxlength="8" v-model="form.houseArea" placeholder="请输入建筑面积">
<template #append>
<span></span>
</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="公摊面积" prop="shareArea">
<el-input v-model="form.shareArea" placeholder="请输入公摊面积" />
<el-input maxlength="8" v-model="form.shareArea" placeholder="请输入公摊面积" >
<template #append>
<span></span>
</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="实用面积" prop="internalArea">
<el-input v-model="form.internalArea" placeholder="请输入实用面积" />
<el-input maxlength="8" v-model="form.internalArea" placeholder="请输入实用面积" >
<template #append>
<span></span>
</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model="form.remark" placeholder="请输入备注" />
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item style="margin-top: 30px">
<el-button type="primary" @click="submitForm">提交</el-button>
@@ -89,15 +100,69 @@ const form = ref<StoreroomVO>({
const rules = ref({
buildingId: [{ required: true, message: '请选择楼栋', trigger: 'blur' }],
unitNoId: [{ required: true, message: '请选择单元', trigger: 'blur' }],
storeroomNo: [{ required: true, message: '请输入储藏室号', trigger: 'blur' }]
storeroomNo: [{ required: true, message: '请输入储藏室号', trigger: 'blur' }],
houseArea: [
{ required: true, message: '请输入建筑面积', trigger: 'blur' },
{
validator: (_: any, value: string, callback: (arg0?: Error) => void) => {
if (value === '' || value === null) {
return callback(new Error('请输入建筑面积'));
}
const val = Number(value);
if (Number.isNaN(val)) {
return callback(new Error('请输入数字'));
}
if (val <= 0) {
return callback(new Error('请输入大于0的数字'));
}
return callback();
}
}
],
shareArea: [
{ required: false, message: '请输入公摊面积', trigger: 'blur' },
{
validator: (_: any, value: string | number, callback: (arg0?: Error) => void) => {
if (value === '' || value === null) {
return callback();
}
const val = Number(value);
if (Number.isNaN(val)) {
return callback(new Error('请输入数字'));
}
if (val <= 0) {
return callback(new Error('请输入大于0的数字'));
}
return callback();
}
}
],
internalArea: [
{ required: false, message: '请输入实用面积', trigger: 'blur' },
{
validator: (_: any, value: string | number, callback: (arg0?: Error) => void) => {
if (value === '' || value === null) {
return callback();
}
const val = Number(value);
if (Number.isNaN(val)) {
return callback(new Error('请输入数字'));
}
if (val <= 0) {
return callback(new Error('请输入大于0的数字'));
}
return callback();
}
}
]
});
const storeRoomid = ref(null);
const storeRoomId = ref(null);
const units = ref([]);
const Buildinglists = ref([]);
const BuildingLists = ref([]);
// 获取储藏室信息
function getStoreRoominfo(id: string) {
function getStoreRoomInfo(id: string) {
getStoreroom(id).then((res) => {
form.value = {
...form.value,
@@ -114,14 +179,14 @@ function getStoreRoominfo(id: string) {
// 根据小区id获取楼栋单元
function init() {
getBuildinglists().then((res) => {
Buildinglists.value = res.rows;
BuildingLists.value = res.rows;
});
}
init();
onMounted(() => {
if (route.query.id) {
storeRoomid.value = route.query.id;
getStoreRoominfo(storeRoomid.value);
storeRoomId.value = route.query.id;
getStoreRoomInfo(storeRoomId.value);
}
});
// 根据楼栋id获取单元
@@ -137,7 +202,7 @@ const submitForm = () => {
const data = {
...form.value
};
if (storeRoomid.value !== null) {
if (storeRoomId.value !== null) {
updateStoreroom(data).then(() => {
ElMessage.success('修改成功');
cancelForm();

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form label-width="100" ref="queryFormRef" @submit.prevent="handleQuery" :model="queryParams" :inline="true">
<el-form-item label="储藏室号" prop="storeroomNo">
<el-input v-model="queryParams.storeroomNo" placeholder="请输入储藏室号" clearable @keyup.enter="handleQuery" />
<el-input maxlength="15" v-model="queryParams.storeroomNo" placeholder="请输入储藏室号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -6,10 +6,10 @@
<div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="员工姓名" prop="nickName">
<el-input v-model.trim="form.nickName" placeholder="请输入员工姓名" />
<el-input maxlength="30" show-word-limit v-model.trim="form.nickName" placeholder="请输入员工姓名" />
</el-form-item>
<el-form-item label="登录账号" v-if="form.userId == undefined" prop="userName">
<el-input v-model.trim="form.userName" placeholder="请输入登录账号" />
<el-input maxlength="16" show-word-limit v-model.trim="form.userName" placeholder="请输入登录账号" />
</el-form-item>
<el-form-item label="登录密码" v-if="form.userId == undefined" prop="password">
<el-input type="password" clearable v-model.trim="form.password" placeholder="请输入" />
@@ -36,13 +36,13 @@
</el-select>
</el-form-item>
<el-form-item label="手机号" prop="phonenumber">
<el-input v-model.trim="form.phonenumber" placeholder="请输入" />
<el-input maxlength="11" v-model.trim="form.phonenumber" placeholder="请输入" />
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model.trim="form.email" placeholder="请输入" />
<el-input maxlength="35" v-model.trim="form.email" placeholder="请输入" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
<el-input maxlength="200" show-word-limit type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" />
</el-form-item>
<el-form-item style="margin-top: 30px">
<el-button type="primary" @click="submitForm">提交</el-button>
@@ -73,11 +73,11 @@ const formRef = ref();
const userid = ref(null);
const form = ref({
'userId': null,
'userName': '', // >= 6 && <= 16 账号
'nickName': '', // >= 0 && <= 30 昵称
'userName': '', // >= 4 && <= 16 账号
'nickName': '', // >= 1 && <= 30 昵称
// 'userType': '', // 用户类型sys_user系统用户
'villageIds': '', // 管理小区id串
'email': '', // >= 0 && <= 50
'email': '', // >= 0 && <= 50 邮箱
'phonenumber': '', // 手机号码
'sex': '0', // 0男 1女 2未知
'status': '0', // 0正常 1停用
@@ -94,7 +94,7 @@ const rules = ref({
// 登录账号:必填,长度限制,通常建议增加唯一性校验(需后端配合或异步校验)
userName: [
{ required: true, message: '请输入登录账号', trigger: 'blur' },
{ min: 1, max: 16, message: '长度在 1 到 16 个字符', trigger: 'blur' }
{ min: 4, max: 16, message: '长度在 4 到 16 个字符', trigger: 'blur' }
],
// 登录密码:必填,新增时必填,编辑时可选(通常逻辑),这里暂按必填处理,建议长度限制
password: [
@@ -111,9 +111,20 @@ const rules = ref({
}
],
villageIds: [{ required: true, message: '请选择管理小区', trigger: 'blur' }],
email: [{ type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur' }]
email: [
{ required: false, type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur' },
{
validator: (_: any, val: string | number, callback: (arg0?: Error) => any) => {
if (val === '' || val === null || val === undefined) {
return callback();
}
return validator(val, 'email') ? callback() : callback(new Error('请输入正确的邮箱地址'));
},
trigger: 'blur'
}
]
});
// 选择小区
// 选择小区╬222╬╬╬╬╬╬n╬
const checkvillage = ref([]);
// 角色列表
const roleOptions = ref([]);

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="员工姓名" prop="nickName">
<el-input v-model="queryParams.nickName" placeholder="请输入员工姓名" clearable @keyup.enter="handleQuery" />
<el-input maxlength="30" v-model="queryParams.nickName" placeholder="请输入员工姓名" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -7,8 +7,7 @@
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="应用名称" prop="channel">
<el-select v-model="queryParams.channel" placeholder="请选择">
<el-option label="花开物业App" value="resident"></el-option>
<el-option label="花开管家App" value="butler"></el-option>
<el-option v-for="(item, index) in com_app_list" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="应用类型" prop="platform">
@@ -18,10 +17,10 @@
</el-select>
</el-form-item>
<el-form-item label="版本号" prop="versionCode">
<el-input v-model="queryParams.versionCode" placeholder="请输入版本号" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model.trim="queryParams.versionCode" placeholder="请输入版本号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="版本名称" prop="versionName">
<el-input v-model="queryParams.versionName" placeholder="请输入版本名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model.trim="queryParams.versionName" placeholder="请输入版本名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -51,8 +50,7 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="应用名称" sortable align="center" prop="appChannel">
<template #default="scope">
<span v-if="scope.row.appChannel === 'resident'">花开物业App</span>
<span v-else-if="scope.row.appChannel === 'butler'">花开管家App</span>
<dict-tag :options="com_app_list" :value="scope.row.appChannel"></dict-tag>
</template>
</el-table-column>
<el-table-column label="版本类型" align="center" prop="platform">
@@ -86,8 +84,7 @@
<el-form ref="versionFormRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="App端" prop="appChannel">
<el-select @change="handleGetVersionlast" v-model="form.appChannel" placeholder="请选择">
<el-option label="花开管家App" value="butler"></el-option>
<el-option label="花开物业App" value="resident"></el-option>
<el-option v-for="(item, index) in com_app_list" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="App类型" prop="platform">
@@ -97,7 +94,7 @@
</el-radio-group>
</el-form-item>
<el-form-item label="版本名称" prop="versionName">
<el-input v-model="form.versionName" placeholder="请输入版本名称例如1.2.0" />
<el-input maxlength="20" v-model.trim="form.versionName" placeholder="请输入版本名称例如1.2.0" />
</el-form-item>
<el-form-item label="最低支持版本" prop="minVersionCode">
<el-select v-if="getlastVersionlist.length > 0" v-model="form.minVersionCode" placeholder="请输入最低支持版本">
@@ -120,7 +117,7 @@
</el-form-item>
<el-form-item label="更新日志" prop="releaseNotes">
<el-input v-model="form.releaseNotes" type="textarea" placeholder="请输入内容" />
<el-input maxlength="200" show-word-limit :rows="5" v-model="form.releaseNotes" type="textarea" placeholder="请输入内容" />
</el-form-item>
<!-- <el-form-item label="低版本强制更新">-->
<!-- <div>-->
@@ -147,7 +144,7 @@
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<el-form-item label="上传安装包地址" prop="downloadUrl">
<el-input v-model="form.downloadUrl" placeholder="请输入更新地址" />
<el-input maxlength="20" v-model.trim="form.downloadUrl" placeholder="请输入更新地址" />
</el-form-item>
<!-- </div>-->
</el-form>
@@ -166,7 +163,7 @@ import { listVersion, addVersion, getPastVersion, switchVersion } from '@/api/sy
import { VersionVO, VersionQuery, VersionForm } from '@/api/system/version/type';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_app_list } = toRefs<any>(proxy?.useDict('com_app_list'));
const versionList = ref<VersionVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);

View File

@@ -6,13 +6,13 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="品牌名称" prop="brand">
<el-input v-model="queryParams.brand" placeholder="请输入品牌" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.brand" placeholder="请输入品牌" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="型号名称" prop="model">
<el-input v-model="queryParams.model" placeholder="请输入型号" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.model" placeholder="请输入型号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="物料名称" prop="materialName">
<el-input v-model="queryParams.materialName" placeholder="请输入物料名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.materialName" placeholder="请输入物料名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -37,10 +37,10 @@
</el-radio-group>
</el-form-item>
<el-form-item label="领用人" prop="leader">
<el-input v-model.trim="form.leader" placeholder="请输入领用人" />
<el-input maxlength="20" v-model.trim="form.leader" placeholder="请输入领用人" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入备注" />
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model.trim="form.remark" placeholder="请输入备注" />
</el-form-item>
</div>
</div>
@@ -62,12 +62,12 @@
<el-table-column label="出库价" align="center">
<template #default="scope">
<!-- <el-input v-model.trim.number="scope.row.outPrice"></el-input> -->
<el-input-number v-model="scope.row.outPrice" :min="0" placeholder="价格" />
<el-input-number maxlength="7" v-model="scope.row.outPrice" :min="0" placeholder="价格" />
</template>
</el-table-column>
<el-table-column label="数量" align="center" prop="inNo">
<template #default="scope">
<el-input-number v-model="scope.row.outNum" :min="0" placeholder="个数" />
<el-input-number maxlength="7" v-model="scope.row.outNum" :min="0" placeholder="个数" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark">

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="出库单号" prop="outNo">
<el-input v-model="queryParams.outNo" placeholder="请输入出库单号" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.outNo" placeholder="请输入出库单号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -6,19 +6,19 @@
<div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="物料名称" prop="materialName">
<el-input v-model.trim="form.materialName" placeholder="请输入物料名称" />
<el-input maxlength="20" v-model.trim="form.materialName" placeholder="请输入物料名称" />
</el-form-item>
<el-form-item label="品牌" prop="brand">
<el-input v-model.trim="form.brand" placeholder="请输入品牌" />
<el-input maxlength="20" v-model.trim="form.brand" placeholder="请输入品牌" />
</el-form-item>
<el-form-item label="规格型号" prop="model">
<el-input v-model.trim="form.model" placeholder="请输入规格型号" />
<el-input maxlength="20" v-model.trim="form.model" placeholder="请输入规格型号" />
</el-form-item>
<el-form-item label="计量单位" prop="unit">
<el-input v-model.trim="form.unit" placeholder="请输入计量单位" />
<el-input maxlength="20" v-model.trim="form.unit" placeholder="请输入计量单位" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入备注" />
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model.trim="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item style="margin-top: 30px">
<el-button type="primary" @click="submitForm">提交</el-button>

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="物料名称" prop="materialName">
<el-input v-model="queryParams.materialName" placeholder="请输入物料名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.materialName" placeholder="请输入物料名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -37,10 +37,10 @@
</el-radio-group>
</el-form-item>
<el-form-item label="制单人" prop="leader">
<el-input v-model.trim="form.leader" placeholder="请输入制单人" />
<el-input maxlength="20" v-model.trim="form.leader" placeholder="请输入制单人" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入备注" />
<el-input maxlength="200" show-word-limit type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入备注" />
</el-form-item>
</div>
</div>
@@ -61,12 +61,12 @@
<el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="成本价" align="center" prop="inNo">
<template #default="scope">
<el-input v-model.trim.number="scope.row.costPrice" placeholder="请输入"></el-input>
<el-input maxlength="7" v-model.trim.number="scope.row.costPrice" placeholder="请输入"></el-input>
</template>
</el-table-column>
<el-table-column label="数量" align="center" prop="inNo">
<template #default="scope">
<el-input v-model.trim.number="scope.row.inNum" placeholder="请输入"></el-input>
<el-input maxlength="7" v-model.trim.number="scope.row.inNum" placeholder="请输入"></el-input>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark">

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<el-form-item label="入库单号" prop="inNo">
<el-input v-model="queryParams.inNo" placeholder="请输入入库单号" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.inNo" placeholder="请输入入库单号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -6,22 +6,22 @@
<div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="供应商名称" prop="supplierName">
<el-input v-model.trim="form.supplierName" placeholder="请输入供应商名称" />
<el-input maxlength="20" v-model.trim="form.supplierName" placeholder="请输入供应商名称" />
</el-form-item>
<el-form-item label="联系人">
<el-input v-model.trim="form.contactPerson" placeholder="请输入联系人" />
<el-form-item label="联系人" prop="contactPerson">
<el-input maxlength="20" v-model.trim="form.contactPerson" placeholder="请输入联系人" />
</el-form-item>
<el-form-item label="联系电话">
<el-input v-model.trim="form.contactPhone" placeholder="请输入联系电话" />
<el-form-item label="联系电话" prop="contactPhone">
<el-input maxlength="11" v-model.trim="form.contactPhone" placeholder="请输入联系电话" />
</el-form-item>
<el-form-item label="邮箱">
<el-input v-model.trim="form.email" placeholder="请输入邮箱" />
<el-form-item label="邮箱" props="email">
<el-input maxlength="30" v-model.trim="form.email" placeholder="请输入邮箱" />
</el-form-item>
<el-form-item label="地址" prop="address">
<el-input v-model.trim="form.address" placeholder="请输入地址" />
<el-input type="textarea" maxlength="100" show-word-limit :rows="2" v-model.trim="form.address" placeholder="请输入地址" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入备注" />
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model.trim="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item style="margin-top: 30px">
<el-button type="primary" @click="submitForm">提交</el-button>
@@ -54,13 +54,24 @@ const form = ref({
});
const rules = ref({
supplierName: [{ required: true, message: '请输入供应商名称', trigger: 'blur' }],
contactPhone: [{ required: true, message: '请输入 联系电话', trigger: 'blur' }],
contactPerson: [{ required: true, message: '请输入 联系', trigger: 'blur' }],
contactPhone: [
{ required: false, message: '请输入 联系电话', trigger: 'blur' },
{
validator: (_, value) => {
if (value === '') {
return true;
}
return validator(value, 'phone');
},
message: '请输入正确的联系电话',
trigger: 'blur'
}
],
contactPerson: [{ required: false, message: '请输入 联系人', trigger: 'blur' }],
email: [
{ required: true, message: '请输入 邮箱', trigger: 'blur' },
{ required: false, message: '请输入 邮箱', trigger: 'blur' },
{
validator: (_, value) => validator(value, 'email'),
required: false,
message: '请输入正确的邮箱格式',
trigger: 'blur'
}

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" label-width="100px" @submit.prevent="handleQuery" :model="queryParams" :inline="true">
<el-form-item label="供应商名称" prop="supplierName">
<el-input v-model="queryParams.supplierName" placeholder="请输入供应商名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.supplierName" placeholder="请输入供应商名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>

View File

@@ -6,24 +6,24 @@
<div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="仓库名称" prop="warehouseName">
<el-input v-model.trim="form.warehouseName" placeholder="请输入仓库名称" />
<el-input maxlength="20" v-model.trim="form.warehouseName" placeholder="请输入仓库名称" />
</el-form-item>
<el-form-item label="归属小区" prop="villageId">
<el-select v-model="form.villageId" placeholder="请选择归属小区">
<el-option v-for="(item, index) in communityList" :key="index" :label="item.villageName" :value="item.villageId" />
</el-select>
</el-form-item>
<el-form-item label="联系人">
<el-input v-model.trim="form.contactPerson" placeholder="请输入联系人" />
<el-form-item label="联系人" prop="contactPerson">
<el-input maxlength="20" v-model.trim="form.contactPerson" placeholder="请输入联系人" />
</el-form-item>
<el-form-item label="联系电话">
<el-input v-model.trim="form.contactPhone" placeholder="请输入联系电话" />
<el-form-item label="联系电话" prop="contactPhone">
<el-input maxlength="11" v-model.trim="form.contactPhone" placeholder="请输入联系电话" />
</el-form-item>
<el-form-item label="地址" prop="address">
<el-input v-model.trim="form.address" placeholder="请输入地址" />
<el-input type="textarea" maxlength="100" show-word-limit :rows="2" v-model.trim="form.address" placeholder="请输入地址" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入备注" />
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model.trim="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item style="margin-top: 30px">
<el-button type="primary" @click="submitForm">提交</el-button>
@@ -59,14 +59,19 @@ const form = ref({
const rules = ref({
warehouseName: [{ required: true, message: '请输入 仓库名称', trigger: 'blur' }],
contactPhone: [
{ required: true, message: '请输入 联系电话', trigger: 'blur' },
{ required: false, message: '请输入 联系电话', trigger: 'blur' },
{
validator: (_: any, value: string | number) => validator(value, 'phone'),
validator: (_: any, value: string | number) => {
if (value === '') {
return true;
}
return validator(value, 'phone');
},
message: '请输入正确的电话号码',
trigger: 'blur'
}
],
contactPerson: [{ required: true, message: '请输入 联系人姓名', trigger: 'blur' }],
contactPerson: [{ required: false, message: '请输入 联系人姓名', trigger: 'blur' }],
villageId: [{ required: true, message: '请选择 仓库归属', trigger: 'blur' }]
});
const userid = ref(null);

View File

@@ -6,7 +6,7 @@
<el-card shadow="hover">
<el-form ref="queryFormRef" label-width="100px" @submit.prevent="handleQuery" :model="queryParams" :inline="true">
<el-form-item label="仓库名称" prop="warehouseName">
<el-input v-model="queryParams.warehouseName" placeholder="请输入仓库名称" clearable @keyup.enter="handleQuery" />
<el-input maxlength="20" v-model="queryParams.warehouseName" placeholder="请输入仓库名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -43,7 +43,7 @@
<el-table v-loading="loading" border :data="warehouseList" @selection-change="handleSelectionChange">
<el-table-column type="selection" align="center" />
<!-- <el-table-column label="隶属小区" align="center" prop="villageName" />-->
<!-- <el-table-column label="隶属小区" align="center" prop="villageName" />-->
<el-table-column label="仓库名称" align="center" prop="warehouseName" />
<el-table-column label="联系人" width="100" align="center" prop="contactPerson" />
<el-table-column label="联系电话" width="120" align="center" prop="contactPhone" />
@@ -144,7 +144,7 @@ const data = reactive<PageData<WarehouseForm, WarehouseQuery>>({
contactPerson: undefined,
contactPhone: undefined,
address: undefined,
status: undefined,
status: undefined
},
rules: {
id: [{ required: true, message: '仓库ID不能为空', trigger: 'blur' }],

View File

@@ -32,6 +32,7 @@
:multiple="true"
ref="uploadRef"
name="files"
:limit="9"
:headers="headerToken()"
:show-file-list="true"
:on-remove="handleAvatarRemove"