7/4新增公安备案底部链接
This commit is contained in:
@@ -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'
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ export interface RepairProjectVO {
|
||||
* 项目层级 0,1
|
||||
*/
|
||||
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 {
|
||||
|
||||
BIN
src/assets/logo/备案图标.png
Normal file
BIN
src/assets/logo/备案图标.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
@@ -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>© 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>
|
||||
|
|
||||
<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;
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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('添加失败');
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user