7/4新增公安备案底部链接

This commit is contained in:
Zy
2026-07-04 15:40:37 +08:00
parent dff51dd4d4
commit 54d467ede7
16 changed files with 143 additions and 263 deletions

View File

@@ -16,7 +16,7 @@ VITE_APP_SNAILJOB_ADMIN = '/snail-job'
# 生产环境
# VITE_APP_BASE_API = 'https://wuyeapi.bugtc.com'
VITE_APP_BASE_API = 'http://wuyeapi.ckdzkj.com'
VITE_APP_BASE_API = 'https://wuyeapi.ckdzkj.com'
# 登录成功跳转地址
# VITE_LOGIN_BACK_URL = '/equipment/WaterDevice'

View File

@@ -2,7 +2,7 @@ export interface ComplaintTypeVO {
/**
* 投诉类型管理表id
*/
id: string | number;
id: string;
/**
* 投诉类型名称
@@ -13,43 +13,21 @@ export interface ComplaintTypeVO {
* 状态 0 启用 1停用
*/
status: string;
/**
* 创建人名称
*/
createNam: string;
/**
* 创建时间
*/
creaateTime: string;
}
export interface ComplaintTypeForm extends BaseEntity {
/**
* 投诉类型管理表id
*/
id?: string | number;
/**
* 投诉类型名称
*/
name?: string;
id?: string;
/**
* 状态 0 启用 1停用
*/
status?: string;
/**
* 创建人名称
* 投诉类型名称
*/
createNam?: string;
/**
* 创建时间
*/
creaateTime?: string;
name?: string;
}
export interface ComplaintTypeQuery extends PageQuery {
@@ -62,19 +40,4 @@ export interface ComplaintTypeQuery extends PageQuery {
* 状态 0 启用 1停用
*/
status?: string;
/**
* 创建人名称
*/
createNam?: string;
/**
* 创建时间
*/
creaateTime?: string;
/**
* 日期范围参数
*/
params?: any;
}

View File

@@ -23,7 +23,7 @@ export interface RepairProjectVO {
* 项目层级 01
*/
projectLevel: number;
children?: [];
children?: RepairProjectVO[];
/**
* 排序 (数越小越靠前)
*/
@@ -33,6 +33,9 @@ export interface RepairProjectVO {
* 状态 0启用 1停用
*/
status: string;
disabled?: boolean;
// children?: RepairProjectVO[];
}
export interface RepairProjectForm extends BaseEntity {

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -27,7 +27,7 @@
</el-form-item>
<div class="remberBox">
<el-checkbox v-model="loginForm.rememberMe" style="color: #fff">{{ proxy.$t('login.rememberPassword') }}</el-checkbox>
<!-- <el-button class="hoverbutn" text>忘记密码</el-button> -->
<!-- <el-button class="hoverboard" text>忘记密码</el-button> -->
</div>
<el-form-item style="width: 100%">
@@ -39,34 +39,30 @@
</el-form>
<footer class="footerBox" style="text-align: center; padding: 24px 16px; font-size: 14px; color: #666">
<p>&copy; 2026 山东橙空电子科技有限公司 版权所有</p>
<p style="margin-top: 10px">
<div style="margin-top: 10px" class="flex">
<a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank" style="color: #666; text-decoration: none">鲁ICP备2024131497号-3</a>
&nbsp;|&nbsp;
<a
href="https://www.beian.gov.cn/"
target="_blank"
style="color: #666; text-decoration: none; display: inline-flex; align-items: center; gap: 4px"
>
<!-- <img src="/static/beian.png" alt="公安备案图标" style="width: 16px; height: 16px" />-->
<!-- 鲁公网安备37110198765432号-->
</a>
</p>
<div>
<img alt="备案" :src="beiAnLogo" class="beianLogo" />
<a href="https://beian.mps.gov.cn/#/query/webSearch?code=37110202371495" rel="noreferrer" target="_blank">鲁公网安备37110202371495号</a>
</div>
</div>
</footer>
</div>
</template>
<script setup lang="ts">
import { authRouterUrl } from '@/api/system/social/auth';
import beiAnLogo from '@/assets/logo/备案图标.png';
// import { authRouterUrl } from '@/api/system/social/auth';
import { useUserStore } from '@/store/modules/user';
import { LoginData, TenantVO } from '@/api/types';
import { to } from 'await-to-js';
import { getCodeImg, getTenantList } from '@/api/login';
import { HttpStatus } from '@/enums/RespEnum';
// import { HttpStatus } from '@/enums/RespEnum';
import { useI18n } from 'vue-i18n';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const title = import.meta.env.VITE_APP_TITLE;
const userStore = useUserStore();
const router = useRouter();
const { t } = useI18n();
@@ -95,7 +91,6 @@ const captchaEnabled = ref(true);
const tenantEnabled = ref(true);
// 注册开关
const register = ref(false);
const redirect = ref('/');
const loginRef = ref<ElFormInstance>();
// 租户列表
@@ -110,7 +105,7 @@ watch(
);
const handleLogin = () => {
loginRef.value?.validate(async (valid: boolean, fields: any) => {
loginRef.value?.validate(async (valid: boolean) => {
if (valid) {
loading.value = true;
if (loginForm.value.rememberMe) {
@@ -178,21 +173,21 @@ const initTenantList = async () => {
}
}
};
/**
* 第三方登录
* @param type
*/
const doSocialLogin = (type: string) => {
authRouterUrl(type, loginForm.value.tenantId).then((res: any) => {
if (res.code === HttpStatus.SUCCESS) {
// 获取授权地址跳转
window.location.href = res.data;
} else {
ElMessage.error(res.msg);
}
});
};
//
// /**
// * 第三方登录
// * @param type
// */
// const doSocialLogin = (type: string) => {
// authRouterUrl(type, loginForm.value.tenantId).then((res: any) => {
// if (res.code === HttpStatus.SUCCESS) {
// // 获取授权地址跳转
// window.location.href = res.data;
// } else {
// ElMessage.error(res.msg);
// }
// });
// };
onMounted(() => {
getCode();
@@ -202,6 +197,13 @@ onMounted(() => {
</script>
<style lang="scss" scoped>
.beianLogo {
width: 16px;
height: 16px;
margin-right: 5px;
vertical-align: middle;
}
.footerBox {
position: absolute;
bottom: 0;

View File

@@ -44,7 +44,6 @@
active-value="0"
inactive-value="1"
></el-switch>
<!-- <dict-tag :options="com_repair_project_status" :value="scope.row.status"></dict-tag> -->
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
@@ -66,15 +65,12 @@
</template>
<script setup name="ComplaintType" lang="ts">
import { listComplaintType, delComplaintType } from '@/api/system/ComplainType/index';
import { listComplaintType, delComplaintType, updateComplaintType } from '@/api/system/ComplainType';
import { ComplaintTypeVO, ComplaintTypeQuery, ComplaintTypeForm } from '@/api/system/ComplainType/type';
import { checkPermi } from '@/utils/permission';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_repair_project_status } = toRefs<any>(proxy?.useDict('com_repair_project_status'));
const complaintTypeList = ref<ComplaintTypeVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
@@ -86,28 +82,21 @@ const queryFormRef = ref<ElFormInstance>();
const initFormData: ComplaintTypeForm = {
id: undefined,
name: undefined,
status: undefined,
createNam: undefined,
creaateTime: undefined
name: undefined
};
const data = reactive<PageData<ComplaintTypeForm, ComplaintTypeQuery>>({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
name: undefined,
status: undefined,
createNam: undefined,
creaateTime: undefined,
params: {}
name: undefined
},
rules: {
id: [{ required: true, message: '投诉类型管理表id不能为空', trigger: 'blur' }]
}
});
const { queryParams, form, rules } = toRefs(data);
const { queryParams } = toRefs(data);
/** 查询投诉类型管理列表 */
const getList = async () => {
@@ -149,16 +138,16 @@ const handleAdd = () => {
});
};
const handleChange = (val: string, row: ComplaintTypeVO) => {
// updateChargeType({
// id: row.id,
// status: val
// }).then(() => {
// proxy?.$modal.msgSuccess('操作成功');
// getList();
// });
updateComplaintType({
id: row.id,
status: val
}).then(() => {
proxy?.$modal.msgSuccess('操作成功');
getList();
});
};
/** 修改按钮操作 */
const handleUpdate = async (row?: ComplaintTypeVO) => {
const handleUpdate = (row?: ComplaintTypeVO) => {
const _id = row?.id || ids.value[0];
router.push({
path: '/system/addComplantType',

View File

@@ -5,11 +5,6 @@
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true">
<!-- <el-form-item label="月卡状态" prop="payMethod">
<el-select v-model="queryParams.parkingStatus" placeholder="请选择" clearable>
<el-option v-for="dict in com_month_card_status" :key="dict.value" :label="dict.label" :value="Number(dict.value)" />
</el-select>
</el-form-item> -->
<el-form-item label="月卡编号" prop="cardCode">
<el-input v-model="queryParams.cardCode" placeholder="请输入月卡编号" clearable @keyup.enter="handleQuery" />
</el-form-item>
@@ -25,19 +20,6 @@
<el-card class="flex-1" shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-has-permi="['carArea:add:monthcard']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-has-permi="['carArea:edit:monthcard']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-has-permi="['monthCard:monthCard:remove']"
>删除</el-button
>
</el-col> -->
<right-toolbar
:disable-delete="multiple"
:disable-edit="single"
@@ -71,11 +53,6 @@
<dict-tag :options="com_pay_method" :value="scope.row.payMethod" />
</template>
</el-table-column>
<!-- <el-table-column label="月卡状态" align="center" prop="payMethod">
<template #default="scope">
<dict-tag :options="com_pay_method" :value="scope.row.payMethod" />
</template>
</el-table-column> -->
<el-table-column label="备注" show-overflow-tooltip align="center" prop="remark"></el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
@@ -138,14 +115,13 @@
</template>
<script setup name="MonthCard" lang="ts">
import { listMonthCard, delMonthCard, addMonthCard, updateMonthCard } from '@/api/system/MonthCard/index';
import { listMonthCard, delMonthCard, addMonthCard, updateMonthCard } from '@/api/system/MonthCard';
import { MonthCardVO, MonthCardQuery, MonthCardForm } from '@/api/system/MonthCard/type';
import { checkPermi } from '@/utils/permission';
import { diffDays } from '@/utils/time';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_pay_method } = toRefs<any>(proxy?.useDict('com_pay_method'));
const { com_month_card_status } = toRefs<any>(proxy?.useDict('com_month_card_status'));
const router = useRouter();
const monthCardList = ref<MonthCardVO[]>([]);
@@ -255,7 +231,7 @@ const handleAdd = () => {
};
/** 修改按钮操作 */
const handleUpdate = async (row?: MonthCardVO) => {
const handleUpdate = (row?: MonthCardVO) => {
const _id = row?.id || ids.value[0];
// reset();
router.push({
@@ -292,17 +268,6 @@ const handleDelete = async (row?: MonthCardVO) => {
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'monthCard/monthCard/export',
{
...queryParams.value
},
`monthCard_${new Date().getTime()}.xlsx`
);
};
onMounted(() => {
getList();
});

View File

@@ -39,11 +39,11 @@
<ul v-if="activeTabs === 1">
<li
v-for="(item, index) in awaittoList"
v-for="(item, index) in awaitList"
:key="index"
@click="handleRead(item)"
:class="{
disable: !isdisable(item)
disable: !disable(item)
}"
>
<div class="subtitle">{{ item.title }}</div>
@@ -53,11 +53,11 @@
<ul v-else-if="activeTabs === 2">
<li
v-for="(item, index) in noticelist"
v-for="(item, index) in novelist"
:key="index"
@click="handleRead(item)"
:class="{
disable: !isdisable(item)
disable: !disable(item)
}"
>
<div class="subtitle">报修工单通知</div>
@@ -78,10 +78,10 @@ import { ref } from 'vue';
// 1 代办 2 通知
const activeTabs = ref(1);
const todonum = computed(() => {
return awaittoList.value.filter((item) => isdisable(item)).length;
return awaitList.value.filter((item) => disable(item)).length;
});
const noticnum = computed(() => {
return noticelist.value.filter((item) => isdisable(item)).length;
return novelist.value.filter((item) => disable(item)).length;
});
const total = ref(0);
const queryParams = ref({
@@ -93,14 +93,14 @@ function handleClick(tab: number) {
activeTabs.value = tab;
}
function isdisable(item) {
function disable(item) {
return item.repairIsCheck ? item.repairIsCheck === '1' : item.manageIsCheck === '1';
}
const noticelist = ref([]);
const awaittoList = ref<NotificationVo[]>([]);
const novelist = ref([]);
const awaitList = ref<NotificationVo[]>([]);
function init() {
getNotificationList(queryParams.value).then((res) => {
awaittoList.value = res.rows;
awaitList.value = res.rows;
total.value = res.total;
});
}

View File

@@ -101,7 +101,6 @@ interface ParkingCostType extends ParkingCostVO {
parkingName?: string;
}
const parkingCostList = ref<ParkingCostType[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
@@ -110,7 +109,6 @@ const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const parkingCostFormRef = ref<ElFormInstance>();
const initFormData: ParkingCostForm = {
id: undefined,
@@ -149,7 +147,7 @@ const data = reactive<PageData<ParkingCostForm, ParkingCostQuery>>({
}
});
const { queryParams, form, rules } = toRefs(data);
const { queryParams } = toRefs(data);
/** 查询停车缴费管理列表 */
const getList = async () => {
loading.value = true;
@@ -191,7 +189,7 @@ const handleAdd = () => {
};
/** 修改按钮操作 */
const handleUpdate = async (row?: ParkingCostVO) => {
const handleUpdate = (row?: ParkingCostVO) => {
const _id = row?.id || ids.value[0];
router.push({
path: '/carArea/editParkingCost',

View File

@@ -8,7 +8,7 @@
<el-row>
<el-col :span="11">
<el-form-item label="关联房屋" prop="houseId">
<el-cascader v-model="form.houseId" :options="treedata" @change="handleChangehouse" />
<el-cascader v-model="form.houseId" :options="treedata" @change="handleChangeHouse" />
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
@@ -22,7 +22,7 @@
v-model="form.maintenanceItemId"
placeholder="请选择维修项目"
:options="maintenanceItemTreeData"
@change="handleChangemaintenanceItem"
@change="handleChangeMaintenanceItem"
/>
</el-form-item>
</el-col>
@@ -47,7 +47,7 @@
<Holder :isMultiple="false" :userid="form.residentId ?? ''" ref="HolderRef" @change="handleChange">
<template #default>
<div class="residentBox" @click="choiceResidentFun">
<div class="defaultbox" v-if="form.residentId === '' || form.residentId === null">
<div class="defaultBox" v-if="form.residentId === '' || form.residentId === null">
<span>请选择</span>
<el-icon><Search /></el-icon>
</div>
@@ -114,14 +114,12 @@ import { gettreelistRepairProject } from '@/api/system/RepairProject';
import { useHouseStore } from '@/store/modules/house';
import { validator } from '@/utils/Reg';
import { Plus } from '@element-plus/icons-vue';
import { RepairProjectVO } from '@/api/system/RepairProject/type';
const houseStore = useHouseStore();
const { treedata } = storeToRefs(houseStore);
const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/repair/uploadImages';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_pay_method } = toRefs<any>(proxy?.useDict('com_pay_method'));
const router = useRouter();
const route = useRoute();
@@ -147,7 +145,7 @@ const rules = ref({
phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{
validator: (_, val) => validator(val, 'phone'),
validator: (_: any, val: string | number) => validator(val, 'phone'),
message: '请输入正确的手机号码',
trigger: 'blur'
}
@@ -155,8 +153,6 @@ const rules = ref({
problem: [{ required: true, message: '请输入问题描述', trigger: 'blur' }]
});
const userid = ref(null);
// 当前小区
const currentviliage = ref();
// 报修项目 tree 结构
const maintenanceItemTreeData = ref();
function init() {
@@ -186,19 +182,14 @@ function init() {
}
init();
function handleTreeDisable(TreeData) {
const arr = TreeData.map((item) => {
if (item.status === '1') {
item.disabled = true;
} else {
item.disabled = false;
}
function handleTreeDisable(TreeData: RepairProjectVO[]) {
return TreeData.map((item) => {
item.disabled = item.status === '1';
if (item && item.children && item.children.length > 0) {
item.children = handleTreeDisable(item.children);
}
return item;
});
return arr;
}
// ! 上传图片 =--==================================================================
@@ -235,14 +226,14 @@ function handleChange(pop) {
}
// !== 房屋 ===========================================================================
function handleChangehouse(val: (string | number)[]) {
function handleChangeHouse(val: (string | number)[]) {
if (val.length >= 3) {
form.value.houseId = val.pop() as number;
} else {
form.value.houseId = null;
}
}
function handleChangemaintenanceItem(val: (string | number)[]) {
function handleChangeMaintenanceItem(val: (string | number)[]) {
if (val.length >= 2) {
form.value.maintenanceItemId = val.pop() as number;
} else {
@@ -258,28 +249,28 @@ const submitForm = () => {
let str = '';
if (fileList.value.length > 0) {
// 有图片
const formdata = new FormData();
const formData = new FormData();
fileList.value.forEach((item) => {
if (item.raw && item.raw instanceof File) {
formdata.append('files', item.raw);
formData.append('files', item.raw);
} else {
str += item.url + ',';
}
});
if (!hasFormData(formdata)) return sendForm(str);
uploadRepairImages(formdata).then((res) => {
const successlist = res.data.success;
const errorlist = res.data.error;
if (successlist.length > 0) {
successlist.forEach((item) => {
if (!hasFormData(formData)) return sendForm(str);
uploadRepairImages(formData).then((res) => {
const successList = res.data.success;
const errorList = res.data.error;
if (successList.length > 0) {
successList.forEach((item: { url: string }) => {
str += item.url + ',';
});
}
if (errorlist.length > 0) {
errorlist.forEach((item) => {
if (errorList.length > 0) {
errorList.forEach((item: string) => {
fileList.value = fileList.value.filter((file) => file.name !== item);
});
ElMessage.error('图片上传失败: ' + errorlist.join(','));
ElMessage.error('图片上传失败: ' + errorList.join(','));
}
sendForm(str);
});
@@ -293,14 +284,13 @@ const submitForm = () => {
const sendForm = (str: string) => {
form.value.problemImageUrl = str;
if (userid.value) {
updateRepair(form.value).then((res) => {
updateRepair(form.value).then(() => {
ElMessage.success('编辑成功');
cancelForm();
});
} else {
addRepair(form.value).then((res) => {
addRepair(form.value).then(() => {
ElMessage.success('添加成功');
cancelForm();
});
}
@@ -367,7 +357,7 @@ const cancelForm = () => {
border: 1px solid #ccc;
border-radius: 5px;
padding: 0 10px;
.defaultbox {
.defaultBox {
display: flex;
align-items: center;
justify-content: space-between;

View File

@@ -60,6 +60,7 @@
import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { addRepairProject, getRepairProject, listRepairProject, updateRepairProject } from '@/api/system/RepairProject';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_repair_project_types } = toRefs<any>(proxy?.useDict('com_repair_project_types'));
const { com_repair_project_status } = toRefs<any>(proxy?.useDict('com_repair_project_status'));
@@ -87,14 +88,14 @@ const rules = ref({
const userid = ref(null);
const options = ref([]);
function handleChange(val) {
function handleChange(val: string) {
if (!val) return;
const find = options.value.find((item) => item.id === val);
if (find) {
form.value.projectType = find.projectType;
}
}
// != ==========================================
// != ==========================================8╬
async function init() {
form.value = {
@@ -106,8 +107,8 @@ async function init() {
status: '0' //状态
};
const res = await listRepairProject();
const arr = res.rows.filter((ite) => ite.projectLevel === 0);
options.value = arr;
options.value = res.rows.filter((ite) => ite.projectLevel === 0);
if (route.query.id) {
userid.value = route.query.id;
@@ -115,11 +116,7 @@ async function init() {
form.value = res.data;
form.value.status = res.data.status ?? '0' + '';
options.value = options.value.map((ite) => {
if (ite.id === res.data.id) {
ite.disabled = true;
} else {
ite.disabled = false;
}
ite.disabled = ite.id === res.data.id;
return ite;
});
handleChange(res.data.parentId);

View File

@@ -13,17 +13,17 @@
<span class="ml-20px color-blue cursor-pointer" @click="handleEdit">编辑</span>
</div>
</template>
<div class="w-full h-full CarinfoBox">
<div class="w-full h-full CarInfoBox">
<el-row class="mb-20px">
<el-col :span="10">
<div class="carinfo_item">
<div class="carInfo_Item">
<div class="label">报修房屋</div>
<div class="main">{{ form.houseName }}</div>
</div>
</el-col>
<el-col :span="4"></el-col>
<el-col :span="10">
<div class="carinfo_item">
<div class="carInfo_Item">
<div class="label">维修项目</div>
<div class="main">{{ form.maintenanceItemName }}</div>
</div>
@@ -32,14 +32,14 @@
<el-row class="mb-20px">
<el-col :span="10">
<div class="carinfo_item">
<div class="carInfo_Item">
<div class="label">报修人</div>
<div class="main">{{ form.residentName }}</div>
</div>
</el-col>
<el-col :span="4"></el-col>
<el-col :span="10">
<div class="carinfo_item">
<div class="carInfo_Item">
<div class="label">手机号码</div>
<div class="main">{{ form.phone }}</div>
</div>
@@ -47,7 +47,7 @@
</el-row>
<el-row class="mb-20px">
<el-col>
<div class="carinfo_item">
<div class="carInfo_Item">
<div class="label">预约日期</div>
<div class="main">{{ form.orderDate }}</div>
</div>
@@ -55,7 +55,7 @@
</el-row>
<el-row class="mb-20px">
<el-col>
<div class="carinfo_item">
<div class="carInfo_Item">
<div class="label">问题描述</div>
<div class="main">{{ form.problem }}</div>
</div>
@@ -63,7 +63,7 @@
</el-row>
<el-row v-if="form.problemImageUrl.trim() === ''">
<el-col :span="24">
<div class="carinfo_item">
<div class="carInfo_Item">
<div class="label">附件</div>
<div class="main fileImagebox">
<el-image
@@ -71,13 +71,13 @@
:zoom-rate="1.2"
:max-scale="7"
:min-scale="0.2"
:preview-src-list="form.problemImageUrl.split(',').filter((item) => item)"
:preview-src-list="form.problemImageUrl.split(',').filter(Boolean)"
show-progress
:initial-index="0"
v-for="(item, index) in form.problemImageUrl.split(',').filter((item) => item)"
v-for="(item, index) in form.problemImageUrl.split(',').filter(Boolean)"
:key="index"
:src="splitImages(item)"
class="carinfoImage"
class="carInfoImage"
></el-image>
</div>
</div>
@@ -92,7 +92,7 @@
<span>分配工单</span>
</div>
</template>
<div class="preivewBody w-full h-full flex flex-items-start mt-2">
<div class="repair w-full h-full flex flex-items-start mt-2">
<div class="title">维修师傅</div>
<div class="preivewBodybox flex-1 ml-5">
<repairUser :is-multiple="false" :username="form.repairName" :userid="form.repairUserId" @change="handleChange"> </repairUser>
@@ -260,7 +260,7 @@ if (route.query.id) {
init();
}
/** 派单 */
/** 派单 ╬>*/
function handleSend() {
// 已分配
form.value.problemStatus = '1';
@@ -307,15 +307,15 @@ function handleEdit() {
.ResidentMainBody {
margin-top: 20px;
flex: 1;
.CarinfoBox {
&.gridbox {
.CarInfoBox {
&.gridBox {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(4, 1fr);
gap: 20px;
row-gap: 40px;
}
.carinfo_item {
.carInfo_Item {
display: flex;
align-items: center;
font-size: 14px;
@@ -326,7 +326,7 @@ function handleEdit() {
padding-right: 10px;
white-space: nowrap;
}
.carinfoImage {
.carInfoImage {
margin: 10px;
width: 200px;
height: 150px;
@@ -337,7 +337,7 @@ function handleEdit() {
.subtitle {
font-size: 15px;
}
.preivewBody {
.repair {
font-size: 16px;
}
.repairBox {

View File

@@ -111,13 +111,13 @@
<el-table-column label="应缴金额" width="100" align="center" prop="amount" />
<el-table-column label="实缴金额" width="100" align="center" prop="amount" />
<el-table-column label="缴费人" align="center" prop="residentName" />
<el-table-column label="缴费时间" align="center" prop="" />
<el-table-column label="缴费时间" align="center" prop="payTime" />
<el-table-column label="操作" width="220" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" v-if="scope.row.payStatus === '0'" @click="handleIncome(scope.row)" v-has-permi="['bill:bill:edit']"
>收费</el-button
>
<el-button link type="primary" v-if="scope.row.payStatus === '1'" @click="printPIaoJuByOnly(scope.row)" v-has-permi="['bill:bill:query']"
<el-button link type="success" v-if="scope.row.payStatus === '1'" @click="printPIaoJuByOnly(scope.row)" v-has-permi="['bill:bill:query']"
>打印票据</el-button
>
</template>
@@ -482,6 +482,9 @@ function printPIaoJuByOnly(row: billlistType | false) {
'detailsIds': [row.detailsId]
};
} else {
if (ids.value.length <= 0) {
return ElMessage.warning('请选择账单!');
}
let residentId = null;
const set = new Set();
ids.value.forEach((item) => {

View File

@@ -8,8 +8,8 @@
<!-- <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 @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>
@@ -17,7 +17,7 @@
<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-option v-for="item in parkingList" :key="item.id" :label="item.parkingCode" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
@@ -82,7 +82,7 @@
<AppUser returnable="*" :isMultiple="false" ref="HolderRef" @change="handleChange">
<template #default>
<div class="residentBox" @click="choiceResidentFun">
<div class="defaultbox" v-if="form.residentId === '' || form.userId === ''">
<div class="defaultBox" v-if="form.residentId === '' || form.userId === ''">
<span>请选择</span>
<el-icon><Search /></el-icon>
</div>
@@ -120,7 +120,7 @@ import Holder from '@/components/Holder/index.vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { listArea } from '@/api/system/carArea';
import { listParking } from '@/api/system/parking';
import { UploadFiles, UploadProps, UploadRawFile } from 'element-plus';
import { UploadProps, UploadRawFile } from 'element-plus';
import { addCar, getCar, updateCar } from '@/api/system/cars';
import { useUserStore } from '@/store/modules/user';
import AppUser from '@/components/Holder/appUser.vue';
@@ -187,17 +187,17 @@ const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile: UploadRawFile)
}
};
const handleAvatarSuccess: UploadProps['onSuccess'] = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
const handleAvatarSuccess: UploadProps['onSuccess'] = (response: any) => {
form.value.carImageUrl = response.data.url;
};
// 车辆区域
const carArealist = ref([]);
const carAreaList = ref([]);
// 根据车辆区域 动态选择 车位
const parkinglist = ref([]);
const parkingList = ref([]);
function init() {
listArea().then((res) => {
carArealist.value = res.rows;
carAreaList.value = res.rows;
});
}
init();
@@ -210,17 +210,17 @@ if (route.query.id) {
...form.value,
...res.data
};
changeArealist(res.data.areaId);
changeAreaList(res.data.areaId);
});
}
function changeArealist(val: string) {
function changeAreaList(val: string) {
listParking({
areaId: val,
pageSize: 9999999,
pageNum: 1
}).then((res) => {
parkinglist.value = res.rows;
parkingList.value = res.rows;
});
}
@@ -282,27 +282,6 @@ function handleChange(pop) {
height: 178px;
display: block;
}
.avatar-uploader:deep(.el-upload) {
border: 1px dashed #ccc;
margin-right: 20px;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
.avatar-uploader .el-upload:hover {
border-color: var(--el-color-primary);
}
.el-icon.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
text-align: center;
}
</style>
<style scoped lang="scss">
.AddBuildingBox {
@@ -356,7 +335,7 @@ function handleChange(pop) {
border: 1px solid #ccc;
border-radius: 5px;
padding: 0 10px;
.defaultbox {
.defaultBox {
display: flex;
align-items: center;
justify-content: space-between;

View File

@@ -10,13 +10,12 @@
<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 v-model.trim="form.buildingName" placeholder="请输入楼栋名称">
<template #append>
<span></span>
</template>
</el-input>
</el-form-item>
<!-- <el-form-item label="楼栋类型" prop="buildingUse">
<el-select v-model="form.buildingUse" placeholder="选择楼栋类型">
<el-option v-for="(item, index) in com_build_use" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item> -->
<el-form-item label="楼栋朝向" prop="buildToward">
<el-input v-model.trim="form.buildToward" placeholder="请输入楼栋朝向" />
</el-form-item>
@@ -26,9 +25,6 @@
<el-form-item label="楼栋结构" prop="buildStructure">
<el-input v-model.trim="form.buildStructure" placeholder="请输入楼栋结构" />
</el-form-item>
<!-- <el-form-item label="单元数" prop="unitCount">
<el-input-number :min="1" v-model.trim="form.unitCount" placeholder="单元数" />
</el-form-item> -->
<el-form-item label="楼层" prop="floorCount">
<el-input-number :min="1" v-model.trim="form.floorCount" placeholder="楼层数" />
</el-form-item>
@@ -51,9 +47,6 @@ import { useHouseStore } from '@/store/modules/house';
const houseStore = useHouseStore();
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_build_use } = toRefs<any>(proxy?.useDict('com_build_use'));
const route = useRoute();
const router = useRouter();
const formRef = ref();
@@ -101,24 +94,24 @@ const submitForm = () => {
...form.value,
id: buildingId
})
.then((res) => {
.then(() => {
ElMessage.success('修改成功');
houseStore.updateHouse();
cancelForm();
})
.catch((err) => {
.catch(() => {
ElMessage.error('修改失败');
});
} else {
addBuildingApi({
...form.value
})
.then((res) => {
.then(() => {
ElMessage.success('添加成功');
houseStore.updateHouse();
cancelForm();
})
.catch((err) => {
.catch(() => {
ElMessage.error('添加失败');
});
}

View File

@@ -1,5 +1,4 @@
import vue from '@vitejs/plugin-vue';
import vueDevTools from 'vite-plugin-vue-devtools';
import createUnoCss from './unocss';
import createAutoImport from './auto-import';
@@ -14,7 +13,6 @@ import path from 'path';
export default (viteEnv: any, isBuild = false): [] => {
const vitePlugins: any = [];
vitePlugins.push(vue());
vitePlugins.push(vueDevTools());
vitePlugins.push(createUnoCss());
vitePlugins.push(createAutoImport(path));
vitePlugins.push(createComponents(path));