新增指挥体系等模块

This commit is contained in:
du 2024-02-29 17:27:05 +08:00
parent 9ad7a9e201
commit eb93ce4810
19 changed files with 1577 additions and 413 deletions

View File

@ -234,6 +234,17 @@ export function getListperformTree() {
});
}
/**
*
*/
export function performUserPage(params) {
return request({
url: `/admin/Sys/performUserPage`,
method: "GET",
params:params
});
}
/**
*
*/
@ -316,4 +327,15 @@ export function saveUser(data) {
params:params
});
}
/**
*-
*/
export function noticeAdd(params) {
return request({
url: `/admin/notice/noticeAdd`,
method: "POST",
data:params
});
}

View File

@ -18,4 +18,135 @@ export function deleteEquip(data) {
params: {},
data: data,
});
}
}
/**
*
*/
export function refugePage(params) {
return request({
url: `/admin/Othteam/refugePage`,
method: "GET",
params: params
});
}
/**
*
*/
export function refugeAdd(params) {
return request({
url: `/admin/Othteam/refugeAdd`,
method: "POST",
data: params
});
}
/**
*
*/
export function refugeDel(params) {
return request({
url: `/admin/Othteam/refugeDel/${params.othrefugeid}`,
method: "POST",
});
}
/**
*
*/
export function dutyList(params) {
return request({
url: `/admin/Othteam/dutyList`,
method: "GET",
params:params
});
}
/**
*
*/
export function dutyAdd(params) {
return request({
url: `/admin/Othteam/dutyAdd`,
method: "POST",
data:params
});
}
/**
*
*/
export function getOthplanPage(params) {
return request({
url: `/admin/Othplan/getOthplanPage`,
method: "GET",
params:params
});
}
/**
*
*/
export function getOthtypeList() {
return request({
url: `/admin/Othplan/getOthtypeList`,
method: "GET",
});
}
/**
*-
*/
export function saveOthplan(params) {
return request({
url: `/admin/Othplan/saveOthplan`,
method: "POST",
data:params,
});
}
/**
*
*/
export function delOthplan(params) {
return request({
url: `/admin/Othplan/delOthplan`,
method: "POST",
data:params,
});
}
/**
*
*/
export function riskPoolPage(params) {
return request({
url: `/admin/risk/riskPoolPage`,
method: "GET",
params:params,
});
}
/**
*
*/
export function riskTypeList() {
return request({
url: `/admin/risk/riskTypeList`,
method: "GET",
});
}
/**
*
*/
export function riskPoolAdd(params) {
return request({
url: `/admin/risk/riskPoolAdd`,
method: "POST",
data:params,
});
}
/**
*
*/
export function riskPoolDel(params) {
return request({
url: `/admin/risk/riskPoolDel/${params.poolId}`,
method: "POST",
});
}

View File

@ -292,18 +292,18 @@ const getFileType = (fileName) => {
const setFiles = () => {
fileList.value = [];
props.listPic.forEach((item: any) => {
item.url = item.filepath;
item.url = baseUrl.value + item.filepath;
item.fileType = getFileType(item.url);
fileList.value.push(item);
});
};
// watch(
// () => props.listPic,
// () => {
// setFiles();
// }
// );
watch(
() => props.listPic,
() => {
setFiles();
}
);
onMounted(() => {
setFiles();

View File

@ -100,7 +100,18 @@ export default {
meta: {
icon: 'point',
auth: "emer.plan",
title: '隐患点位',
title: '风险点',
breadcrumb: true, //是否显示面包屑
}
},
{
path: 'command',
name: 'command',
component: () => import('@/views/emergency/command-system/index.vue'),
meta: {
icon: 'point',
auth: "emer.command",
title: '指挥体系',
breadcrumb: true, //是否显示面包屑
}
}

View File

@ -89,10 +89,12 @@
<svg-icon name="edit" class="icon"></svg-icon>
<span class="edit">编辑</span>
</span>
<span class="operate" @click="del(scope.row, '删除')">
<!-- <span class="operate" @click="del(scope.row, '删除')">
<svg-icon name="delete" class="icon"></svg-icon>
<span class="func">删除</span>
</span>
</span> -->
</template>
</el-table-column>
</el-table>

View File

@ -0,0 +1,255 @@
<template>
<BaseDialog
:dialogVisible="props.visible"
@close="onclone"
:titleName="props.form.othplanid ? '编辑应急预案' : '新增应急预案'"
width="50%"
@onSubmit="handleSubmit"
:footerclosed="true"
:diafooter="true"
:footerkeepnaem="props.readonly ? false : true"
>
<div class="detailForm-content">
<el-form
ref="formRef"
label-position="right"
label-width="120px"
:rules="ruleForm"
:model="addPostFactorForm"
>
<el-form-item label="预案名称:" prop="planname">
<el-input
placeholder="请输入预案名称"
v-model="addPostFactorForm.planname"
:readonly="props.readonly"
>
</el-input>
</el-form-item>
<el-form-item label="预案类型:" prop="othtypeid">
<el-select
placeholder="请选择预案类型:"
v-model="addPostFactorForm.othtypeid"
:disabled="props.readonly"
>
<el-option
v-for="item in option"
:key="item.othtypeid"
:label="item.othtypename"
:value="item.othtypeid"
></el-option>
</el-select>
</el-form-item>
<el-form-item prop="areaCode" label="所属区域">
<el-cascader
ref="cascader"
v-model="addPostFactorForm.areaCode"
placeholder="请选择地区"
:options="orgList"
:props="{
checkStrictly: true,
label: 'orgname',
value: 'orgcode',
}"
clearable
></el-cascader>
</el-form-item>
<el-form-item label="预案简介:" style="width: 100%;">
<el-input
type="textarea"
:rows="3"
placeholder="请输入预案简介"
v-model="addPostFactorForm.introduction"
:readonly="props.readonly"
>
</el-input>
</el-form-item>
<el-form-item label="文件" style="width: 100%;" class="inline-block">
<CustomUpload
:listPic="fileList"
:OTCType="FileType.EmergencyFile"
:uuid="addPostFactorForm.othplanid || uuid"
:userId="userId"
:baseUrl="baseUrl"
:max="9"
@onUpdate="updateFile"
:readonly="props.readonly"
></CustomUpload>
</el-form-item>
</el-form>
</div>
</BaseDialog>
</template>
<script setup lang="ts" >
import { reactive, ref, onMounted, watch } from "vue";
import useUserStore from "@/store/modules/user";
import { ElMessage, FormInstance, FormRules } from "element-plus";
import { getYears, getUUID, FileType } from "@/utils/common";
import { areaTree } from "@/api/account";
import { saveOthplan, getOthtypeList } from "@/api/emergency";
import { uploadFile, getFile, delFile } from "@/api/file";
const formRef = ref<FormInstance>();
const userStore = useUserStore();
const user = ref(JSON.parse(userStore.userInfo));
const userId = ref(user.value.userId);
const uuid = ref("");
const baseUrl = ref(import.meta.env.VITE_UPLOAD_URL);
const unitList = ref([]);
const fileList = ref([]);
const chartFileList = ref([]);
const chartFile = ref([]);
const ruleForm = reactive<FormRules>({
planname: [{ required: true, message: "请输入预案名称", trigger: "blur" }],
othtypeid: [{ required: true, message: "请选择预案类型", trigger: "blur" }],
areaCode: [{ required: true, message: "请选择所属地区", trigger: "blur" }],
});
const props = defineProps({
visible: {
type: Boolean,
default: false,
},
form: Object,
readonly: {
type: Boolean,
default: false,
},
id: String,
});
const listperformid = ref(props.id);
const addPostFactorForm = ref(<any>{});
const emits = defineEmits(["close", "onSubmit"]);
//退
const handleSubmit = () => {
formRef.value?.validate((valid) => {
if (valid) {
let params = {
...addPostFactorForm.value,
areaCode: "",
userId: addPostFactorForm.value.userId || userId.value,
othplanid: addPostFactorForm.value.othplanid || uuid.value,
};
if (addPostFactorForm.value.areaCode instanceof Array) {
params.areaCode =
addPostFactorForm.value.areaCode[addPostFactorForm.value.areaCode.length - 1];
} else {
params.areaCode = addPostFactorForm.value.areaCode;
};
saveOthplan(params).then((res: any) => {
if (res.code == 1) {
ElMessage.success({
message: "保存成功",
// type: "success",
});
onclone();
} else {
ElMessage.error({
message: res.message,
type: "error",
});
}
});
}
return false;
});
};
const option = ref([]);
//
const OthtypeList = () => {
getOthtypeList().then((res: any) => {
option.value = res.data;
});
};
//
const orgList = ref([]);
const getareaTree = () => {
areaTree(userId.value).then((res: any) => {
orgList.value = res.data;
});
};
/**
* 文件列表更新
*/
const updateFile = (files: any) => {
fileList.value = files;
};
const chartupdateFile = (files: any) => {
chartFileList.value = files;
};
//
const upload = ref();
const beforeAvatarUpload = () => {
upload.value.submit();
return true;
};
//
const getFiles = (FileType) => {
getFile(addPostFactorForm.value.othplanid || uuid.value, FileType).then(
(res: any) => {
if (FileType == "Files") {
//
fileList.value = res.data;
} else {
//
chartFileList.value = res.data;
}
}
);
};
//
const onclone = () => {
emits("close");
fileList.value = [];
chartFileList.value = [];
};
onMounted(() => {
OthtypeList();
getareaTree();
});
watch(
() => props.form,
(val) => {
uuid.value = getUUID();
if (val) {
if (!props.visible) return;
addPostFactorForm.value = val;
getFiles(FileType.EmergencyFile);
}
}
);
// watch(
// () => props.form.othplanid,
// (val) => {
// uuid.value = getUUID();
// if (val) {
// addPostFactorForm.value = props.form;
// getFiles(FileType.EmergencyFile);
// }
// // if (val) {
// // if (!props.visible) return;
// // addPostFactorForm.value = val;
// // getFiles(FileType.EmergencyFile);
// // }
// }
// );
</script>
<style lang="scss" scoped>
.detailForm-content {
margin-right: 30px;
}
:deep(.el-form) {
display: flex;
flex-wrap: wrap;
// justify-content: space-around;
justify-content: space-between;
}
:deep(.el-form-item) {
width: 47%;
}
</style>

View File

@ -0,0 +1,271 @@
<template>
<div class="percentage-content">
<div class="content">
<!-- <div style="margin-bottom: 16px;" class="h-layout space-between h-center">
<div>
<div class="h-layout">
<div
class="tool-item"
@click="(dialogVisible = true), (form = {}), (readonly = false)"
>
<svg-icon name="add" class="icon" />
<span>新增</span>
</div>
<div class="tool-item" @click="getCompanyList">
<svg-icon name="refurbish" class="icon" />
<span>刷新</span>
</div>
</div>
</div>
<div style="width: 30%;">
<div>
<el-input
v-model="search"
@keydown.enter.native="getCompanyList"
placeholder="输入仓库名称"
class="search-input"
>
<template #append>
<span @click="getCompanyList" class="search-bottom">
<svg-icon name="search" class="icon_class" />
<span>搜索</span>
</span>
</template>
</el-input>
</div>
</div>
</div> -->
<div class="table_div">
<div>
<el-tree
:data="treeData"
:props="defaultProps"
accordion
@node-click="handleNodeClick"
/>
</div>
<div>
<el-table
ref="loading"
v-loading="tableDataloading"
:data="tableData"
header-row-class-name="el-one-header"
border
>
<!-- @selection-change="handleSelectionChange" -->
<!-- <el-table-column
type="selection"
align="center"
width="55"
></el-table-column> -->
<el-table-column
type="index"
align="center"
label="序列"
width="60"
></el-table-column>
<el-table-column
prop="chinaname"
:resizable="true"
align="center"
label="姓名"
></el-table-column>
<el-table-column
prop="mobiletel"
:resizable="true"
align="center"
label="联系方式"
></el-table-column>
<el-table-column
prop="unitName"
:resizable="true"
align="center"
label="部门名称"
>
</el-table-column>
<el-table-column
prop="performName"
:resizable="true"
align="center"
label="职务名"
></el-table-column>
<el-table-column
prop="roleName"
:resizable="true"
align="center"
label="角色名称"
></el-table-column>
<!-- <el-table-column
:resizable="true"
align="center"
width="180"
label="操作"
>
<template #default="scope">
<span
class="operate"
@click="
(dialogVisible = true), (form = scope.row), (readonly = false)
"
>
<svg-icon name="edit" class="icon"></svg-icon>
<span class="edit">编辑</span>
</span>
<span
class="operate"
@click="
(dialogVisible = true), (form = scope.row), (readonly = true)
"
>
<svg-icon name="detail" class="icon"></svg-icon>
<span class="detail">详情</span>
</span>
</template>
</el-table-column> -->
</el-table>
<!-- 分页 -->
<el-pagination
class="pagination"
@size-change="getCompanyList"
@current-change="getCompanyList"
v-model:current-page.sync="currentPage"
:page-sizes="[10, 15, 20, 30]"
v-model:page-size.sync="pageSize"
layout="->, total, sizes, prev, pager, next, jumper"
:total="total"
background
>
</el-pagination>
</div>
</div>
<!-- 新增 -->
<!-- <Adddetails
:visible="dialogVisible"
:form="form"
:readonly="readonly"
@close="onclone"
/> -->
</div>
</div>
</template>
<script lang='ts' setup>
import { onMounted, reactive, ref } from "vue";
import { getListperformTree, performUserPage } from "@/api/Sys";
// import Adddetails from "./details.vue";
import useUserStore from "@/store/modules/user";
const userStore = useUserStore();
const user = ref(JSON.parse(userStore.userInfo));
const userId = ref(user.value.userId);
const search = ref([]);
const tableData = ref([]);
const currentPage = ref(1);
const pageSize = ref(10);
const total = ref(0);
const dialogVisible = ref(false);
const form = ref({});
const readonly = ref(false);
//id
const post = ref("");
//
// const tableCheckBoxs = ref([]);
// const handleSelectionChange = (val: any) => {
// tableCheckBoxs.value = [];
// for (let index = 0; index < val.length; index++) {
// const element = val[index];
// tableCheckBoxs.value.push(element.houseId);
// }
// };
//
const tableDataloading = ref(false);
const getCompanyList = () => {
tableDataloading.value = true;
let params = {
userId: userId.value,
limit: pageSize.value,
page: currentPage.value,
listperformid: post.value,
};
performUserPage(params).then((res: any) => {
tableData.value = res.data.list;
total.value = res.data.total;
tableDataloading.value = false;
});
};
//
const onclone = () => {
dialogVisible.value = false;
form.value = {};
getCompanyList();
};
//
interface Tree {
listperformid: string;
label: string;
children?: Tree[];
}
const handleNodeClick = (data: Tree) => {
currentPage.value = 1;
pageSize.value = 10;
post.value = data.listperformid;
getCompanyList();
};
const treeData = ref([]);
const defaultProps = {
children: "children",
label: "performclassname",
id: "listperformid",
};
const listperformTree = () => {
getListperformTree().then((res: any) => {
treeData.value = res.data;
});
};
onMounted(() => {
listperformTree();
setTimeout(() => {
post.value = treeData.value[0].listperformid;
getCompanyList();
}, 1000);
});
</script>
<style lang="scss" scoped>
.content {
width: 100%;
// flex: auto;
background: #fff;
border-radius: 0.26042vw;
box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
height: 100%;
padding: 0.83333vw;
overflow-y: auto;
overflow-x: hidden !important;
/* stylelint-disable-next-line property-no-vendor-prefix */
-moz-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-webkit-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-o-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-ms-box-sizing: border-box;
box-sizing: border-box;
}
.table_div {
display: flex;
height: 100%;
> div:nth-child(1) {
width: 30%;
height: 100%;
margin: 0 auto;
border: 1px solid #ccc;
overflow: hidden;
}
> div:nth-child(2) {
width: 80%;
}
}
.el-table {
margin-left: 10px;
}
</style>

View File

@ -2,7 +2,7 @@
<BaseDialog
:dialogVisible="props.visible"
@close="onclone"
:titleName="titleName + '隐患点'"
:titleName="titleName + '风险点'"
width="50%"
@onSubmit="handleSubmit"
:footerclosed="true"
@ -16,38 +16,61 @@
:model="formData"
class="center-form"
>
<el-form-item label="点位名称" prop="name">
<el-input placeholder="请输入" type="input" v-model="formData.name" />
<el-form-item label="风险名" prop="name">
<el-input
placeholder="请输入风险名"
type="input"
v-model="formData.name"
/>
</el-form-item>
<el-form-item label="点位类型" prop="type">
<el-form-item label="风险类型" prop="typeId">
<el-select
v-model="type"
@change="getList"
v-model="formData.typeId"
clearable
placeholder="请选择"
placeholder="请选择风险类型"
>
<el-option
v-for="item in types"
:key="item.value"
:label="item.label"
:value="item.value"
:key="item.typeId"
:label="item.typeName"
:value="item.typeId"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="详细地址" prop="address" style="width: 94%">
<el-form-item label="详细地址" prop="address">
<el-input
placeholder="请输入"
type="input"
v-model="formData.address"
/>
</el-form-item>
<el-form-item label="简介/备注" prop="remarks" style="width: 94%">
<el-form-item prop="areaCode" label="所属区域">
<el-cascader
ref="cascader"
v-model="formData.areaCode"
placeholder="请选择地区"
:options="orgList"
:props="{
checkStrictly: true,
label: 'orgname',
value: 'orgcode',
}"
clearable
></el-cascader>
</el-form-item>
<el-form-item label="经度" prop="lon">
<el-input placeholder="请输入" type="input" v-model="formData.lon" />
</el-form-item>
<el-form-item label="纬度" prop="lat">
<el-input placeholder="请输入" type="input" v-model="formData.lat" />
</el-form-item>
<el-form-item label="风险描述" prop="poolDesc" style="width: 94%;">
<el-input
placeholder="请输入"
placeholder="请输入风险描述"
:rows="4"
type="textarea"
v-model="formData.remarks"
v-model="formData.poolDesc"
/></el-form-item>
</el-form>
</div>
@ -56,11 +79,12 @@
<script setup lang='ts'>
import { reactive, ref, onMounted, watch } from "vue";
import { ElMessage, FormInstance, FormRules } from "element-plus";
import { getUUID } from "@/utils/common";
const uuid = ref(getUUID());
import { inListAdd } from "@/api/industry";
import { riskTypeList, riskPoolAdd } from "@/api/emergency";
import { areaTree } from "@/api/account";
import useUserStore from "@/store/modules/user";
const userStore = useUserStore();
const user = ref(JSON.parse(userStore.userInfo));
const userId = ref(user.value.userId);
const props = defineProps({
visible: {
type: Boolean,
@ -74,38 +98,42 @@ const titleName = ref("新增");
//
const formRef = ref<FormInstance>();
const ruleForm = reactive<FormRules>({
name: [{ required: true, message: "请输入名字", trigger: "blur" }],
type: [{ required: true, message: "请选择类型", trigger: "blur" }],
address: [{ required: true, message: "请输入地址", trigger: "blur" }],
remarks: [{ required: true, message: "请输入简介/备注", trigger: "blur" }],
name: [{ required: true, message: "请输入风险名", trigger: "blur" }],
typeId: [{ required: true, message: "请选择风险类型", trigger: "blur" }],
address: [{ required: true, message: "请输入详细地址", trigger: "blur" }],
poolDesc: [{ required: true, message: "请输入风险描述", trigger: "blur" }],
areaCode: [{ required: true, message: "请选择所属地区", trigger: "blur" }],
lon: [{ required: true, message: "请输入经度", trigger: "blur" }],
lat: [{ required: true, message: "请输入纬度", trigger: "blur" }],
});
const formData = ref<any>({});
const types = ref([
{ label: "防汛", value: 1 },
{ label: "火灾", value: 2 },
{ label: "治安", value: 3 },
{ label: "安全生产", value: 4 },
]);
const types = ref([]);
//退
const handleSubmit = () => {
formRef.value?.validate((valid) => {
if (valid) {
formData.value.sortId = formData.value.sortId || 1;
formData.value.industryId = props.id;
formData.value.delState = formData.value.delState || 1;
inListAdd(formData.value).then((res: any) => {
let params = {
...formData.value,
areaCode: "",
poolId:formData.value.poolId?formData.value.poolId:'',
};
if (formData.value.areaCode instanceof Array) {
params.areaCode =
formData.value.areaCode[formData.value.areaCode.length - 1];
} else {
params.areaCode = formData.value.areaCode;
};
riskPoolAdd(params).then((res: any) => {
if (res.code == 1) {
ElMessage.success({
message: "操作成功",
type: "success",
});
onclone();
} else {
ElMessage.error({
message: res.message,
type: "error",
});
}
});
@ -120,14 +148,31 @@ const onclone = () => {
formData.value = {};
emits("close");
};
onMounted(() => {});
//
const getRiskTypeList = () => {
riskTypeList().then((res: any) => {
types.value = res.data;
});
};
//
const orgList = ref([]);
const getareaTree = () => {
areaTree(userId.value).then((res: any) => {
orgList.value = res.data;
});
};
onMounted(() => {
getRiskTypeList();
getareaTree();
});
watch(
() => props.form,
(val: any) => {
titleName.value = val.id ? "编辑" : "新增";
titleName.value = val.poolId ? "编辑" : "新增";
formData.value = JSON.parse(JSON.stringify(val));
}
);
</script>
<style scoped></style>
<style scoped lang="scss">
</style>

View File

@ -1,8 +1,8 @@
<!-- 应急值守 -->
<!-- 风险点 -->
<template>
<div class="percentage-content">
<div class="content">
<div style="margin-bottom: 16px" class="h-layout space-between h-center">
<div style="margin-bottom: 16px;" class="h-layout space-between h-center">
<div>
<div class="h-layout h-center">
<div
@ -26,16 +26,16 @@
>
<el-option
v-for="item in types"
:key="item.value"
:label="item.label"
:value="item.value"
:key="item.typeId"
:label="item.typeName"
:value="item.typeId"
>
</el-option>
</el-select>
</div>
</div>
</div>
<div style="width: 30%">
<div style="width: 30%;">
<div>
<el-input
v-model="search"
@ -74,18 +74,17 @@
label="点位名称"
></el-table-column>
<el-table-column
prop="address"
prop="typeName"
:resizable="true"
align="center"
label="点位类型"
></el-table-column>
<el-table-column
prop="phone"
prop="address"
:resizable="true"
align="center"
label="详细地址"
></el-table-column>
<el-table-column
:resizable="true"
align="center"
@ -102,7 +101,7 @@
<svg-icon name="edit" class="icon"></svg-icon>
<span class="edit">编辑</span>
</span>
<span
<!-- <span
class="operate"
@click="
(dialogVisible = true), (form = scope.row), (readonly = true)
@ -110,8 +109,8 @@
>
<svg-icon name="detail" class="icon"></svg-icon>
<span class="detail">详情</span>
</span>
<span class="operate" @click="deletelist(scope.row.othequipmentid)">
</span> -->
<span class="operate" @click="deletelist(scope.row.poolId)">
<svg-icon name="delete" class="icon"></svg-icon>
<span class="func">删除</span>
</span>
@ -140,7 +139,7 @@
<script lang='ts' setup>
import { onMounted, reactive, ref } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import { getOthequipmentPage, delOthequipment } from "@/api/Othteam";
import { riskPoolPage, riskTypeList, riskPoolDel } from "@/api/emergency";
import AddEdit from "./dialog/add-edit.vue";
import useUserStore from "@/store/modules/user";
@ -148,15 +147,10 @@ const userStore = useUserStore();
const user = ref(JSON.parse(userStore.userInfo));
const userId = ref(user.value.userId);
const types = ref([
{ label: "防汛", value: 1 },
{ label: "火灾", value: 2 },
{ label: "治安", value: 3 },
{ label: "安全生产", value: 4 },
]);
const type = ref();
const types = ref([]);
const type = ref("");
const search = ref([]);
const search = ref("");
const tableData = ref([]);
const currentPage = ref(1);
const pageSize = ref(10);
@ -172,13 +166,13 @@ const tableDataloading = ref(false);
const getList = () => {
tableDataloading.value = true;
let params = {
equname: search.value,
equtype: null,
houseId: null,
condition: search.value,
typeId: type.value,
userId: userId.value,
limit: pageSize.value,
page: currentPage.value,
};
getOthequipmentPage(params).then((res: any) => {
riskPoolPage(params).then((res: any) => {
tableData.value = res.data.list;
total.value = res.data.total;
tableDataloading.value = false;
@ -191,46 +185,59 @@ const deletelist = (id) => {
cancelButtonText: "否",
type: "warning",
}).then(() => {
delOthequipment(id, userId.value).then((res: any) => {
let params = {
poolId: id,
};
riskPoolDel(params).then((res: any) => {
if (res.code == 1) {
ElMessage.success({
message: "删除成功",
type: "success",
});
} else {
ElMessage.error({
message: res.message,
type: "error",
});
}
getList();
});
});
};
//
const getRiskTypeList = () => {
riskTypeList().then((res: any) => {
types.value = res.data;
});
};
//
const onclone = () => {
dialogVisible.value = false;
form.value = {};
getList();
};
onMounted(() => {
getList();
getRiskTypeList();
});
</script>
<style lang="scss" scoped>
<style lang="scss" scoped>
.content {
width: 100%;
background: #fff;
border-radius: 0.26042vw;
box-shadow: 0 0 0.41667vw 0 rgba(8, 33, 85, 0.1);
height: 100%;
padding: 0.83333vw;
overflow-y: auto;
overflow-x: hidden !important;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-o-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
width: 100%;
background: #fff;
border-radius: 0.26042vw;
box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
height: 100%;
padding: 0.83333vw;
overflow-y: auto;
overflow-x: hidden !important;
/* stylelint-disable-next-line property-no-vendor-prefix */
-moz-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-webkit-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-o-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-ms-box-sizing: border-box;
box-sizing: border-box;
}
</style>

View File

@ -16,24 +16,44 @@
:model="formData"
class="center-form"
>
<el-form-item label="" prop="name">
<el-input placeholder="请输入" type="input" v-model="formData.name" />
<el-form-item label="值守员姓名" prop="name">
<el-input placeholder="请输入值守员姓名" type="input" v-model="formData.name" />
</el-form-item>
<el-form-item label="联系电话" prop="phone">
<el-form-item label="值守员联系电话" prop="mobile">
<el-input
placeholder="请输入"
placeholder="值守员联系电话"
type="input"
v-model="formData.phone"
v-model="formData.mobile"
/>
</el-form-item>
<el-form-item label="值班时间" prop="time">
<el-date-picker placeholder="请选择" v-model="formData.time" />
<el-form-item prop="areaCode" label="所属区域">
<el-cascader
ref="cascader"
v-model="formData.areaCode"
placeholder="请选择地区"
:options="orgList"
:props="{
checkStrictly: true,
label: 'orgname',
value: 'orgcode',
}"
clearable
></el-cascader>
</el-form-item>
<el-form-item label="值班地点" prop="address">
<el-form-item label="岗位名" prop="postName">
<el-input
placeholder="请输入"
placeholder="请输入岗位名"
type="input"
v-model="formData.address"
v-model="formData.postName"
/>
</el-form-item>
<el-form-item label="值班时间" prop="dutyTime">
<el-date-picker
v-model="formData.dutyTime"
type="date"
placeholder="请选择时间"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
</el-form-item>
</el-form>
@ -44,9 +64,14 @@
import { reactive, ref, onMounted, watch } from "vue";
import { ElMessage, FormInstance, FormRules } from "element-plus";
import { getUUID } from "@/utils/common";
import { areaTree } from "@/api/account";
import { dutyAdd } from "@/api/emergency";
import useUserStore from "@/store/modules/user";
const userStore = useUserStore();
const user = ref(JSON.parse(userStore.userInfo));
const userId = ref(user.value.userId);
const uuid = ref(getUUID());
import { inListAdd } from "@/api/industry";
const props = defineProps({
visible: {
@ -65,29 +90,23 @@ const ruleForm = reactive<FormRules>({
});
const formData = ref<any>({});
const tags = ref([
{ label: "流动人口", value: 1 },
{ label: "常住人口", value: 2 },
]);
const types = ref([
{ label: "新生儿", value: 1 },
{ label: "在校生", value: 2 },
{ label: "残疾人", value: 3 },
{ label: "低保户", value: 4 },
{ label: "五保户", value: 5 },
{ label: "党员", value: 6 },
{ label: "村组干部", value: 7 },
{ label: "其他", value: 8 },
]);
//退
const handleSubmit = () => {
formRef.value?.validate((valid) => {
if (valid) {
formData.value.sortId = formData.value.sortId || 1;
formData.value.industryId = props.id;
formData.value.delState = formData.value.delState || 1;
inListAdd(formData.value).then((res: any) => {
let params = {
...formData.value,
areaCode: "",
};
if (formData.value.areaCode instanceof Array) {
params.areaCode =
formData.value.areaCode[formData.value.areaCode.length - 1];
} else {
params.areaCode = formData.value.areaCode;
}
console.log(params, "params===>");
dutyAdd(params).then((res: any) => {
if (res.code == 1) {
ElMessage.success({
message: "操作成功",
@ -105,6 +124,13 @@ const handleSubmit = () => {
return false;
});
};
//
const orgList = ref([]);
const getareaTree = () => {
areaTree(userId.value).then((res: any) => {
orgList.value = res.data;
});
};
//
const onclone = () => {
@ -112,7 +138,9 @@ const onclone = () => {
formData.value = {};
emits("close");
};
onMounted(() => {});
onMounted(() => {
getareaTree();
});
watch(
() => props.form,

View File

@ -2,7 +2,7 @@
<template>
<div class="percentage-content">
<div class="content">
<div style="margin-bottom: 16px" class="h-layout space-between h-center">
<div style="margin-bottom: 16px;" class="h-layout space-between h-center">
<div>
<div class="h-layout">
<div
@ -18,7 +18,7 @@
</div>
</div>
</div>
<div style="width: 30%">
<div style="width: 30%;">
<div>
<el-input
v-model="search"
@ -36,99 +36,162 @@
</div>
</div>
</div>
<el-table
ref="loading"
v-loading="tableDataloading"
:data="tableData"
header-row-class-name="el-one-header"
@selection-change="handleSelectionChange"
border
>
<el-table-column
type="index"
align="center"
label="序列"
width="60"
></el-table-column>
<el-table-column
prop="name"
:resizable="true"
align="center"
label="姓名"
></el-table-column>
<el-table-column
prop="phone"
:resizable="true"
align="center"
label="联系电话"
></el-table-column>
<el-table-column
prop="time"
:resizable="true"
align="center"
label="值班时间"
></el-table-column>
<el-table-column
prop="address"
:resizable="true"
align="center"
label="值班地点"
></el-table-column>
<el-table-column
:resizable="true"
align="center"
width="260"
label="操作"
<div class="table_div">
<div id="calendar">
<!-- 年份 月份 -->
<div class="month">
<ul>
<li class="arrow" @click="pickPre(currentYear, currentMonth)">
</li>
<li class="year-month">
<span class="choose-month"
>{{ currentYear }}{{ currentMonth }}</span
>
</li>
<li class="arrow" @click="pickNext(currentYear, currentMonth)">
</li>
</ul>
</div>
<!-- 星期 -->
<ul class="weekdays">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<!-- 日期 -->
<ul class="days">
<li v-for="(dayobject, index) in days" :key="index">
<span
v-if="dayobject.day.getMonth() + 1 != currentMonth"
class="other-month"
>
{{ dayobject.day.getDate() }}
</span>
<span v-else>
<!-- <span
v-if="
dayobject.day.getFullYear() == new Date().getFullYear() &&
dayobject.day.getMonth() == new Date().getMonth() &&
dayobject.day.getDate() == new Date().getDate()
"
class="active"
>{{ dayobject.day.getDate() }}</span
> -->
<!-- v-else -->
<span
@click="selectedDate(dayobject.day.getDate())"
:class="dateTime == dayobject.day.getDate() ? 'active' : ''"
>{{ dayobject.day.getDate() }}</span
>
</span>
</li>
</ul>
</div>
<el-table
ref="loading"
v-loading="tableDataloading"
:data="tableData"
header-row-class-name="el-one-header"
@selection-change="handleSelectionChange"
border
>
<template #default="scope">
<span
class="operate"
@click="
(dialogVisible = true), (form = scope.row), (readonly = false)
"
>
<svg-icon name="edit" class="icon"></svg-icon>
<span class="edit">编辑</span>
</span>
<span
class="operate"
@click="
(dialogVisible = true), (form = scope.row), (readonly = true)
"
>
<svg-icon name="detail" class="icon"></svg-icon>
<span class="detail">详情</span>
</span>
<span class="operate" @click="deletelist(scope.row.othequipmentid)">
<svg-icon name="delete" class="icon"></svg-icon>
<span class="func">删除</span>
</span>
</template>
</el-table-column>
</el-table>
<el-table-column
type="index"
align="center"
label="序列"
width="60"
></el-table-column>
<el-table-column
prop="areaName"
:resizable="true"
align="center"
label="值班地点"
></el-table-column>
<el-table-column
prop="name"
:resizable="true"
align="center"
label="值班人员"
></el-table-column>
<el-table-column
prop="mobile"
:resizable="true"
align="center"
label="联系电话"
></el-table-column>
<el-table-column
prop="dutyTime"
:resizable="true"
align="center"
label="值班时间"
></el-table-column>
<el-table-column
:resizable="true"
align="center"
width="150"
label="操作"
>
<template #default="scope">
<span
class="operate"
@click="
(dialogVisible = true), (form = scope.row), (readonly = false)
"
>
<svg-icon name="edit" class="icon"></svg-icon>
<span class="edit">编辑</span>
</span>
<!-- <span
class="operate"
@click="
(dialogVisible = true), (form = scope.row), (readonly = true)
"
>
<svg-icon name="detail" class="icon"></svg-icon>
<span class="detail">详情</span>
</span> -->
<!-- <span
class="operate"
@click="deletelist(scope.row.othequipmentid)"
>
<svg-icon name="delete" class="icon"></svg-icon>
<span class="func">删除</span>
</span> -->
</template>
</el-table-column>
</el-table>
</div>
<!-- 分页 -->
<el-pagination
<!-- <el-pagination
class="pagination"
@size-change="getList"
@current-change="getList"
v-model:current-page.sync="currentPage"
:page-sizes="[10, 15, 20, 30]"
v-model:page-size.sync="pageSize"
layout="total, sizes, prev, pager, next, jumper"
layout="->, total, sizes, prev, pager, next, jumper"
:total="total"
background
>
</el-pagination>
</el-pagination> -->
<!-- 新增 -->
<AddEdit :visible="dialogVisible" :form="form" @close="onclone" />
</div>
</div>
</template>
<script lang='ts' setup>
import { onMounted, reactive, ref } from "vue";
import { computed, onMounted, reactive, ref, toRaw, toRefs } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import { getOthequipmentPage, delOthequipment } from "@/api/Othteam";
import { dutyList } from "@/api/emergency";
import AddEdit from "./dialog/add-edit.vue";
import useUserStore from "@/store/modules/user";
@ -152,14 +215,20 @@ const tableDataloading = ref(false);
const getList = () => {
tableDataloading.value = true;
let params = {
equname: search.value,
equtype: null,
houseId: null,
limit: pageSize.value,
page: currentPage.value,
dutyTime: '',
userId:userId.value,
};
getOthequipmentPage(params).then((res: any) => {
tableData.value = res.data.list;
if (currentMonth.value.toString().length == 1) {
params.dutyTime = currentYear.value + '-' + 0 + currentMonth.value + '-' + dateTime.value
}
console.log(currentMonth.value.toString().length);
console.log(params,'params===>');
dutyList(params).then((res: any) => {
console.log(res,'res===>');
tableData.value = res.data;
total.value = res.data.total;
tableDataloading.value = false;
});
@ -171,46 +240,209 @@ const deletelist = (id) => {
cancelButtonText: "否",
type: "warning",
}).then(() => {
delOthequipment(id, userId.value).then((res: any) => {
if (res.code == 1) {
ElMessage.success({
message: "删除成功",
type: "success",
});
} else {
ElMessage.error({
message: res.message,
type: "error",
});
}
getList();
});
// delOthequipment(id, userId.value).then((res: any) => {
// if (res.code == 1) {
// ElMessage.success({
// message: "",
// type: "success",
// });
// } else {
// ElMessage.error({
// message: res.message,
// type: "error",
// });
// }
// getList();
// });
});
};
//
const onclone = () => {
dialogVisible.value = false;
form.value = {};
getList()
};
//
const currentDay = ref(1);
const currentMonth = ref(1);
const currentYear = ref(1970);
const currentWeek = ref(1);
const days = ref([]);
const dateTime = ref(1);
const initData = (cur) => {
let date;
if (cur) {
date = new Date(cur);
} else {
let now = new Date();
date = new Date(formatDate(now.getFullYear(), now.getMonth() + 1, 1));
}
currentDay.value = date.getDate();
currentYear.value = date.getFullYear();
currentMonth.value = date.getMonth() + 1;
currentWeek.value = date.getDay();
let str = formatDate(currentYear.value, currentMonth.value, currentDay.value);
days.value.length = 0;
for (let i = currentWeek.value - 1; i >= 0; i--) {
let d = new Date(str);
d.setDate(d.getDate() - i);
let dayobject = {};
dayobject.day = d;
days.value.push(dayobject);
}
//
for (let i = 1; i <= 35 - currentWeek.value; i++) {
let d = new Date(str);
d.setDate(d.getDate() + i);
let dayobject = {};
dayobject.day = d;
days.value.push(dayobject);
}
};
//
const pickPre = (year, month) => {
let d = new Date(year, month - 1, 0);
initData(formatDate(d.getFullYear(), d.getMonth() + 1, 1));
dateTime.value = 0;
// console.log(currentYear.value, currentMonth.value);
};
//
const pickNext = (year, month) => {
let d = new Date(year, month + 1, 0);
initData(formatDate(d.getFullYear(), d.getMonth() + 1, 1));
dateTime.value = 0;
// console.log(currentYear.value, currentMonth.value);
};
//
const selectedDate = (day) => {
dateTime.value = day;
// console.log(dateTime.value, "dateTime==>");
getList();
};
const formatDate = (year, month, day) => {
let y = year;
let m = month;
let d = day;
if (m < 10) m = "0" + m;
if (d < 10) d = "0" + d;
return `${y}-${m}-${d}`;
};
onMounted(() => {
initData(null);
dateTime.value = new Date().getDate();
getList();
});
</script>
<style lang="scss" scoped>
.content {
width: 100%;
background: #fff;
border-radius: 0.26042vw;
box-shadow: 0 0 0.41667vw 0 rgba(8, 33, 85, 0.1);
height: 100%;
padding: 0.83333vw;
overflow-y: auto;
overflow-x: hidden !important;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-o-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
width: 100%;
background: #fff;
border-radius: 0.26042vw;
box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
height: 100%;
padding: 0.83333vw;
overflow-y: auto;
overflow-x: hidden !important;
/* stylelint-disable-next-line property-no-vendor-prefix */
-moz-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-webkit-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-o-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-ms-box-sizing: border-box;
box-sizing: border-box;
}
//
ul {
list-style-type: none;
}
#calendar {
width: 30%;
margin: 0 auto;
border: 1px solid #ccc;
border-radius: 15px;
overflow: hidden;
}
.month {
width: 100%;
}
.month ul {
margin: 0;
padding: 0;
display: flex;
justify-content: space-between;
}
.year-month {
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-around;
}
.choose-month {
text-align: center;
font-size: 1.5rem;
}
.arrow {
padding: 30px;
}
.arrow:hover {
background: rgb(242 242 242);
}
.month ul li {
font-size: 20px;
text-transform: uppercase;
letter-spacing: 3px;
}
.weekdays {
margin: 0;
padding: 10px 0;
background-color: rgb(242 242 242);
display: flex;
flex-wrap: wrap;
justify-content: space-around;
}
.weekdays li {
display: inline-block;
width: 13.6%;
text-align: center;
}
.days {
padding: 0;
background: #fff;
margin: 0;
display: flex;
flex-wrap: wrap;
justify-content: space-around;
}
.days li {
list-style-type: none;
display: inline-block;
width: 14.2%;
text-align: center;
padding: 15px 0;
font-size: 1rem;
color: #000;
}
.days li .active {
padding: 6px 10px;
border: 2px solid #00b8ec;
}
.days li .other-month {
padding: 5px;
color: gainsboro;
}
.days li span span:hover {
padding: 6px 10px;
border: 1px solid #00b8ec;
}
.table_div {
display: flex;
}
.el-table {
margin-left: 10px;
}
</style>

View File

@ -25,11 +25,11 @@
v-model="addPostFactorForm.houseName"
></el-input>
</el-form-item>
<el-form-item label="管理员:" prop="name">
<el-form-item label="管理员:" prop="nameId">
<el-input
:readonly="props.readonly"
placeholder="请输入管理员"
v-model="addPostFactorForm.name"
v-model="addPostFactorForm.nameId"
></el-input>
</el-form-item>
<el-form-item label="联系方式:" prop="telephone">
@ -39,9 +39,9 @@
v-model="addPostFactorForm.telephone"
></el-input>
</el-form-item>
<el-form-item label="所属地区:" prop="orgCode">
<el-form-item label="所属地区:" prop="areaCode">
<el-cascader
v-model="addPostFactorForm.orgCode"
v-model="addPostFactorForm.areaCode"
placeholder="请选择所属地区"
@change="handleAreaChange"
:options="orgList"
@ -67,7 +67,7 @@
v-model="addPostFactorForm.lat"
></el-input>
</el-form-item>
<el-form-item label="所属单位:" prop="possession" style="width: 100%">
<el-form-item label="所属单位:" prop="possession" style="width: 100%;">
<el-input
:readonly="props.readonly"
placeholder="请输入所属单位"
@ -75,7 +75,7 @@
></el-input>
</el-form-item>
<el-form-item label="地址:" prop="address" style="width: 100%">
<el-form-item label="地址:" prop="address" style="width: 100%;">
<el-input
:readonly="props.readonly"
placeholder="请输入详细地址"
@ -111,7 +111,7 @@ const ruleForm = reactive<FormRules>({
trigger: "blur",
},
],
orgCode: [
areaCode: [
{ required: true, message: "请选择仓库所属地区", trigger: "change" },
],
possession: [
@ -149,7 +149,18 @@ const handleSubmit = () => {
addPostFactorForm.value.houseId =
addPostFactorForm.value.houseId || uuid.value;
addPostFactorForm.value.userId = userId.value;
saveOtheWareHouse(addPostFactorForm.value).then((res: any) => {
let params = {
...addPostFactorForm.value,
areaCode:"",
}
if (addPostFactorForm.value.areaCode instanceof Array) {
params.areaCode = addPostFactorForm.value.areaCode[addPostFactorForm.value.areaCode.length - 1];
}else{
params.areaCode = addPostFactorForm.value.areaCode;
};
console.log(params,'params===>');
saveOtheWareHouse(params).then((res: any) => {
if (res.code == 1) {
ElMessage.success({
message: "保存成功",
@ -180,10 +191,10 @@ const getareaTree = () => {
});
};
const handleAreaChange = (val) => {
addPostFactorForm.value.orgCode =
addPostFactorForm.value.orgCode[addPostFactorForm.value.orgCode.length - 1];
addPostFactorForm.value.streetCode = val[1] || "";
addPostFactorForm.value.communityCode = val[2] || "";
// addPostFactorForm.value.areaCode =
// addPostFactorForm.value.areaCode[addPostFactorForm.value.areaCode.length - 1];
// addPostFactorForm.value.streetCode = val[1] || "";
// addPostFactorForm.value.communityCode = val[2] || "";
};
//
@ -219,15 +230,15 @@ watch(
<style lang="scss" scoped>
.detailForm-content {
margin-right: 30px;
margin-right: 30px;
}
:deep(.el-form) {
display: flex;
flex-wrap: wrap;
// justify-content: space-around;
justify-content: space-between;
display: flex;
flex-wrap: wrap;
// justify-content: space-around;
justify-content: space-between;
}
:deep(.el-form-item) {
width: 47%;
width: 47%;
}
</style>

View File

@ -60,13 +60,14 @@
label="仓库名称"
></el-table-column>
<el-table-column
prop="nameText"
prop="nameId"
:resizable="true"
align="center"
label="管理员"
width="150"
>
<template #default="scope">
{{ scope.row.nameText || "-" }}
{{ scope.row.nameId || "-" }}
</template>
</el-table-column>
<el-table-column
@ -74,6 +75,13 @@
:resizable="true"
align="center"
label="联系方式"
width="180"
></el-table-column>
<el-table-column
prop="areaName"
:resizable="true"
align="center"
label="所属地区"
></el-table-column>
<el-table-column
prop="address"
@ -81,7 +89,7 @@
align="center"
label="地址"
></el-table-column>
<el-table-column align="center" label="操作">
<el-table-column align="center" label="操作" width="300">
<template #default="scope">
<span
class="operate"

View File

@ -3,7 +3,7 @@
<BaseDialog
:dialogVisible="props.visible"
@close="onclone"
:titleName="props.form?.opInstructionId ? '编辑应急预案' : '新增应急预案'"
:titleName="props.form.othplanid ? '编辑应急预案' : '新增应急预案'"
width="50%"
@onSubmit="handleSubmit"
:footerclosed="true"
@ -26,21 +26,35 @@
>
</el-input>
</el-form-item>
<el-form-item label="预案类型:" prop="accidenttype">
<el-form-item label="预案类型:" prop="othtypeid">
<el-select
placeholder="请选择任务类型"
v-model="addPostFactorForm.accidenttype"
placeholder="请选择预案类型:"
v-model="addPostFactorForm.othtypeid"
:disabled="props.readonly"
>
<el-option
v-for="(item, index) in props.typeList"
:value="item.othtypeid"
v-for="item in option"
:key="item.othtypeid"
:label="item.othtypename"
:key="index"
:value="item.othtypeid"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="预案简介:" style="width: 100%">
<el-form-item prop="areaCode" label="所属区域">
<el-cascader
ref="cascader"
v-model="addPostFactorForm.areaCode"
placeholder="请选择地区"
:options="orgList"
:props="{
checkStrictly: true,
label: 'orgname',
value: 'orgcode',
}"
clearable
></el-cascader>
</el-form-item>
<el-form-item label="预案简介:" style="width: 100%;">
<el-input
type="textarea"
:rows="3"
@ -50,7 +64,7 @@
>
</el-input>
</el-form-item>
<el-form-item label="文件" style="width: 100%" class="inline-block">
<el-form-item label="文件" style="width: 100%;" class="inline-block">
<CustomUpload
:listPic="fileList"
:OTCType="FileType.EmergencyFile"
@ -71,7 +85,8 @@ import { reactive, ref, onMounted, watch } from "vue";
import useUserStore from "@/store/modules/user";
import { ElMessage, FormInstance, FormRules } from "element-plus";
import { getYears, getUUID, FileType } from "@/utils/common";
import { saveOthplan } from "@/api/Othteam";
import { areaTree } from "@/api/account";
import { saveOthplan, getOthtypeList } from "@/api/emergency";
import { uploadFile, getFile, delFile } from "@/api/file";
const formRef = ref<FormInstance>();
@ -79,17 +94,15 @@ const userStore = useUserStore();
const user = ref(JSON.parse(userStore.userInfo));
const userId = ref(user.value.userId);
const uuid = ref("");
const baseUrl = ref(import.meta.env.VITE_UPLOAD_IMG_URL);
const baseUrl = ref(import.meta.env.VITE_UPLOAD_URL);
const unitList = ref([]);
const fileList = ref([]);
const chartFileList = ref([]);
const chartFile = ref([]);
const ruleForm = reactive<FormRules>({
planname: [{ required: true, message: "请输入预案名称", trigger: "blur" }],
accidenttype: [
{ required: true, message: "请选择预案类型", trigger: "blur" },
],
sysunitid: [{ required: true, message: "请选择部门", trigger: "blur" }],
othtypeid: [{ required: true, message: "请选择预案类型", trigger: "blur" }],
areaCode: [{ required: true, message: "请选择所属地区", trigger: "blur" }],
});
const props = defineProps({
visible: {
@ -102,10 +115,6 @@ const props = defineProps({
default: false,
},
id: String,
typeList: {
type: Array,
default: false,
},
});
const listperformid = ref(props.id);
const addPostFactorForm = ref(<any>{});
@ -114,22 +123,51 @@ const emits = defineEmits(["close", "onSubmit"]);
const handleSubmit = () => {
formRef.value?.validate((valid) => {
if (valid) {
addPostFactorForm.value.othplanid =
addPostFactorForm.value.othplanid || uuid.value;
addPostFactorForm.value.userId = userId.value;
saveOthplan(addPostFactorForm.value).then((res: any) => {
let params = {
...addPostFactorForm.value,
areaCode: "",
userId: addPostFactorForm.value.userId || userId.value,
othplanid: addPostFactorForm.value.othplanid || uuid.value,
};
if (addPostFactorForm.value.areaCode instanceof Array) {
params.areaCode =
addPostFactorForm.value.areaCode[addPostFactorForm.value.areaCode.length - 1];
} else {
params.areaCode = addPostFactorForm.value.areaCode;
};
saveOthplan(params).then((res: any) => {
if (res.code == 1) {
ElMessage.success({
message: "保存成功",
type: "success",
// type: "success",
});
onclone();
} else {
ElMessage.error({
message: res.message,
type: "error",
});
}
});
}
return false;
});
};
const option = ref([]);
//
const OthtypeList = () => {
getOthtypeList().then((res: any) => {
option.value = res.data;
});
};
//
const orgList = ref([]);
const getareaTree = () => {
areaTree(userId.value).then((res: any) => {
orgList.value = res.data;
});
};
/**
* 文件列表更新
*/
@ -165,9 +203,11 @@ const getFiles = (FileType) => {
const onclone = () => {
emits("close");
fileList.value = [];
chartFileList.value = [];
};
onMounted(() => {
// SysunitList();
OthtypeList();
getareaTree();
});
watch(
() => props.form,
@ -177,23 +217,39 @@ watch(
if (!props.visible) return;
addPostFactorForm.value = val;
getFiles(FileType.EmergencyFile);
getFiles(FileType.EmergencyImg);
}
}
);
// watch(
// () => props.form.othplanid,
// (val) => {
// uuid.value = getUUID();
// if (val) {
// addPostFactorForm.value = props.form;
// getFiles(FileType.EmergencyFile);
// }
// // if (val) {
// // if (!props.visible) return;
// // addPostFactorForm.value = val;
// // getFiles(FileType.EmergencyFile);
// // }
// }
// );
</script>
<style lang="scss" scoped>
.detailForm-content {
margin-right: 30px;
margin-right: 30px;
}
:deep(.el-form) {
display: flex;
flex-wrap: wrap;
// justify-content: space-around;
justify-content: space-between;
display: flex;
flex-wrap: wrap;
// justify-content: space-around;
justify-content: space-between;
}
:deep(.el-form-item) {
width: 47%;
width: 47%;
}
</style>

View File

@ -1,7 +1,7 @@
<template>
<div class="percentage-content">
<div class="content">
<div style="margin-bottom: 16px" class="h-layout space-between h-center">
<div style="margin-bottom: 16px;" class="h-layout space-between h-center">
<div>
<div class="h-layout h-center">
<div
@ -15,10 +15,10 @@
<svg-icon name="refurbish" class="icon" />
<span>刷新</span>
</div>
<div class="tool-item" @click="getList">
<!-- <div class="tool-item" @click="getList">
<svg-icon name="export" class="icon" />
<span>导出</span>
</div>
</div> -->
<div class="label-select filter-tab">
<label>预案类型</label>
@ -39,7 +39,7 @@
</div>
</div>
</div>
<div style="width: 30%">
<div style="width: 30%;">
<div>
<el-input
v-model="search"
@ -99,7 +99,7 @@
<svg-icon name="edit" class="icon"></svg-icon>
<span class="edit">编辑</span>
</span>
<span
<!-- <span
class="operate"
@click="
(dialogVisible = true), (form = scope.row), (readonly = true)
@ -107,7 +107,14 @@
>
<svg-icon name="detail" class="icon"></svg-icon>
<span class="detail">详情</span>
</span>
</span> -->
<span
class="operate"
@click="del(scope.row.othplanid)"
>
<svg-icon name="delete" class="icon"></svg-icon>
<span class="func">删除</span>
</span>
</template>
</el-table-column>
</el-table>
@ -137,8 +144,9 @@
</template>
<script lang='ts' setup>
import { onMounted, reactive, ref } from "vue";
import { getOthplanPage, getOthtypeList } from "@/api/Othteam";
import { getOthplanPage, getOthtypeList, delOthplan } from "@/api/emergency";
import Adddetails from "./details.vue";
import { ElMessage, ElMessageBox } from "element-plus";
import useUserStore from "@/store/modules/user";
const userStore = useUserStore();
const user = ref(JSON.parse(userStore.userInfo));
@ -172,7 +180,7 @@ const getList = () => {
tableDataloading.value = false;
});
};
//
//
const OthtypeList = () => {
getOthtypeList().then((res: any) => {
option.value = res.data;
@ -184,6 +192,33 @@ const onclone = () => {
form.value = {};
getList();
};
//
const del = (id) => {
ElMessageBox.confirm("是否确认删除?", "提示", {
confirmButtonText: "是",
cancelButtonText: "否",
type: "warning",
}).then(() => {
let params = {
userId:userId.value,
othplanid:id
}
delOthplan(params).then((res: any) => {
if (res.code == 1) {
ElMessage.success({
message: "删除成功",
type: "success",
});
} else {
ElMessage.error({
message: res.message,
type: "error",
});
}
getList();
});
});
};
onMounted(() => {
getList();
OthtypeList();
@ -191,19 +226,15 @@ onMounted(() => {
</script>
<style lang="scss" scoped>
.content {
width: 100%;
// flex: auto;
background: #fff;
border-radius: 0.26042vw;
box-shadow: 0 0 0.41667vw 0 rgba(8, 33, 85, 0.1);
height: 100%;
padding: 0.83333vw;
overflow-y: auto;
overflow-x: hidden !important;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-o-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
width: 100%;
// flex: auto;
background: #fff;
border-radius: 0.26042vw;
box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
height: 100%;
padding: 0.83333vw;
overflow-y: auto;
overflow-x: hidden !important;
box-sizing: border-box;
}
</style>

View File

@ -17,17 +17,21 @@
class="center-form"
>
<el-form-item label="场所名称" prop="name">
<el-input placeholder="请输入" type="input" v-model="formData.name" />
<el-input placeholder="请输入场所名称" type="input" v-model="formData.name" />
</el-form-item>
<el-form-item label="占地面积" prop="area">
<el-input placeholder="请输入" type="input" v-model="formData.area" />
</el-form-item>
<el-form-item label="容纳人数" prop="number">
<el-input
placeholder="请输入"
type="input"
v-model="formData.number"
/>
<el-form-item prop="areaCode" label="所属区域">
<el-cascader
ref="cascader"
v-model="formData.areaCode"
placeholder="请选择地区"
:options="orgList"
:props="{
checkStrictly: true,
label: 'orgname',
value: 'orgcode',
}"
clearable
></el-cascader>
</el-form-item>
<el-form-item label="详细地址" prop="address">
<el-input
@ -36,6 +40,32 @@
v-model="formData.address"
/>
</el-form-item>
<el-form-item label="面积" prop="space">
<el-input-number
v-model="formData.space"
:min="1"
></el-input-number>
</el-form-item>
<el-form-item label="维护单位" prop="maintainunit">
<el-input placeholder="请输入维护单位" type="input" v-model="formData.maintainunit" />
</el-form-item>
<el-form-item label="产权单位" prop="propertyunit">
<el-input placeholder="请输入产权单位" type="input" v-model="formData.propertyunit" />
</el-form-item>
<el-form-item label="建设单位" prop="buildunit">
<el-input placeholder="请输入建设单位" type="input" v-model="formData.buildunit" />
</el-form-item>
<el-form-item label="建成时间" prop="buildtime">
<el-date-picker
v-model="formData.buildtime"
type="date"
placeholder="请输入建成时间"
size="default"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
</el-form-item>
</el-form>
</div>
</BaseDialog>
@ -44,7 +74,13 @@
import { reactive, ref, onMounted, watch } from "vue";
import { ElMessage, FormInstance, FormRules } from "element-plus";
import { getUUID } from "@/utils/common";
import { refugeAdd } from "@/api/emergency";
import { areaTree } from "@/api/account";
import useUserStore from "@/store/modules/user";
const uuid = ref(getUUID());
const userStore = useUserStore();
const user = ref(JSON.parse(userStore.userInfo));
const userId = ref(user.value.userId);
import { inListAdd } from "@/api/industry";
@ -61,33 +97,35 @@ const titleName = ref("新增");
//
const formRef = ref<FormInstance>();
const ruleForm = reactive<FormRules>({
itemTitle: [{ required: true, message: "请输入内容", trigger: "blur" }],
name: [{ required: true, message: "请输入场所名字", trigger: "blur" }],
address: [{ required: true, message: "请输入详细地址", trigger: "blur" }],
areaCode: [{ required: true, message: "请选择地区", trigger: "blur" }],
});
const formData = ref<any>({});
const tags = ref([
{ label: "流动人口", value: 1 },
{ label: "常住人口", value: 2 },
]);
const types = ref([
{ label: "新生儿", value: 1 },
{ label: "在校生", value: 2 },
{ label: "残疾人", value: 3 },
{ label: "低保户", value: 4 },
{ label: "五保户", value: 5 },
{ label: "党员", value: 6 },
{ label: "村组干部", value: 7 },
{ label: "其他", value: 8 },
]);
//退
const handleSubmit = () => {
formRef.value?.validate((valid) => {
if (valid) {
formData.value.sortId = formData.value.sortId || 1;
formData.value.industryId = props.id;
formData.value.delState = formData.value.delState || 1;
inListAdd(formData.value).then((res: any) => {
let params = {
address:formData.value.address,
areaCode:'',
buildtime:formData.value.buildtime,
buildunit:formData.value.buildunit,
maintainunit:formData.value.maintainunit,
name:formData.value.name,
othrefugeid:formData.value.othrefugeid?formData.value.othrefugeid:null,
propertyunit:formData.value.propertyunit,
space:formData.value.space,
};
if (formData.value.areaCode instanceof Array) {
params.areaCode = formData.value.areaCode[formData.value.areaCode.length - 1];
}else{
params.areaCode = formData.value.areaCode;
};
refugeAdd(params).then((res: any) => {
console.log(res,'res===>');
if (res.code == 1) {
ElMessage.success({
message: "操作成功",
@ -112,8 +150,16 @@ const onclone = () => {
formData.value = {};
emits("close");
};
onMounted(() => {});
//
const orgList = ref([]);
const getareaTree = () => {
areaTree(userId.value).then((res: any) => {
orgList.value = res.data;
});
};
onMounted(() => {
getareaTree();
});
watch(
() => props.form,
(val: any) => {

View File

@ -2,7 +2,7 @@
<template>
<div class="percentage-content">
<div class="content">
<div style="margin-bottom: 16px" class="h-layout space-between h-center">
<div style="margin-bottom: 16px;" class="h-layout space-between h-center">
<div>
<div class="h-layout">
<div
@ -22,7 +22,7 @@
</div> -->
</div>
</div>
<div style="width: 30%">
<div style="width: 30%;">
<div>
<el-input
v-model="search"
@ -61,16 +61,16 @@
label="场所名称"
></el-table-column>
<el-table-column
prop="area"
prop="space"
:resizable="true"
align="center"
label="占地面积"
></el-table-column>
<el-table-column
prop="number"
prop="areaName"
:resizable="true"
align="center"
label="容纳人数"
label="所属地区"
></el-table-column>
<el-table-column
prop="address"
@ -82,7 +82,7 @@
<el-table-column
:resizable="true"
align="center"
width="260"
width="300"
label="操作"
>
<template #default="scope">
@ -104,7 +104,7 @@
<svg-icon name="detail" class="icon"></svg-icon>
<span class="detail">详情</span>
</span>
<span class="operate" @click="deletelist(scope.row.othequipmentid)">
<span class="operate" @click="deletelist(scope.row.othrefugeid)">
<svg-icon name="delete" class="icon"></svg-icon>
<span class="func">删除</span>
</span>
@ -132,7 +132,7 @@
<script lang='ts' setup>
import { onMounted, reactive, ref } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import { getOthequipmentPage, delOthequipment } from "@/api/Othteam";
import { refugePage, refugeDel } from "@/api/emergency";
import AddEdit from "./dialog/add-edit-dialog.vue";
import useUserStore from "@/store/modules/user";
@ -140,7 +140,7 @@ const userStore = useUserStore();
const user = ref(JSON.parse(userStore.userInfo));
const userId = ref(user.value.userId);
const search = ref([]);
const search = ref("");
const tableData = ref([]);
const currentPage = ref(1);
const pageSize = ref(10);
@ -156,13 +156,13 @@ const tableDataloading = ref(false);
const getList = () => {
tableDataloading.value = true;
let params = {
equname: search.value,
equtype: null,
houseId: null,
limit: pageSize.value,
page: currentPage.value,
condition:search.value
};
getOthequipmentPage(params).then((res: any) => {
refugePage(params).then((res: any) => {
console.log(res,'res====>');
tableData.value = res.data.list;
total.value = res.data.total;
tableDataloading.value = false;
@ -175,7 +175,10 @@ const deletelist = (id) => {
cancelButtonText: "否",
type: "warning",
}).then(() => {
delOthequipment(id, userId.value).then((res: any) => {
let params = {
othrefugeid:id
}
refugeDel(params).then((res: any) => {
if (res.code == 1) {
ElMessage.success({
message: "删除成功",
@ -195,6 +198,7 @@ const deletelist = (id) => {
const onclone = () => {
dialogVisible.value = false;
form.value = {};
getList();
};
onMounted(() => {
getList();
@ -203,18 +207,22 @@ onMounted(() => {
<style lang="scss" scoped>
.content {
width: 100%;
background: #fff;
border-radius: 0.26042vw;
box-shadow: 0 0 0.41667vw 0 rgba(8, 33, 85, 0.1);
height: 100%;
padding: 0.83333vw;
overflow-y: auto;
overflow-x: hidden !important;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-o-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
width: 100%;
background: #fff;
border-radius: 0.26042vw;
box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
height: 100%;
padding: 0.83333vw;
overflow-y: auto;
overflow-x: hidden !important;
/* stylelint-disable-next-line property-no-vendor-prefix */
-moz-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-webkit-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-o-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-ms-box-sizing: border-box;
box-sizing: border-box;
}
</style>

View File

@ -33,23 +33,23 @@
class="qedit"
:value="addMessageForm.content"
@updateValue="getMsg"
:id="uuid"
:id="addMessageForm.govNoticeId || uuid"
:userId="userId"
:FileType="FileType.message"
/>
</div>
</el-form-item>
<el-form-item label="封面:" prop="content" style="width: 100%;">
<CustomUpload
:listPic="fileList"
:OTCType="FileType.messageCover"
:uuid="uuid"
:userId="userId"
:baseUrl="baseUrl"
:max="9"
@onUpdate="updateFile"
></CustomUpload>
<!-- :readonly="readonly" -->
<el-form-item label="封面:" prop="coverImg" style="width: 100%;">
<CustomUpload
:listPic="fileList"
:OTCType="FileType.messageCover"
:uuid="addMessageForm.govNoticeId || uuid"
:userId="userId"
:baseUrl="baseUrl"
:max="1"
@onUpdate="updateFile"
:readonly="props.readonly"
></CustomUpload>
</el-form-item>
</el-form>
</div>
@ -62,6 +62,7 @@ import useUserStore from "@/store/modules/user";
import { getYears, getUUID, FileType } from "@/utils/common";
import { ElMessage, FormInstance, FormRules } from "element-plus";
import { uploadFile, getFile, delFile } from "@/api/file";
import { noticeAdd } from "@/api/Sys";
const formRef = ref<FormInstance>();
const userStore = useUserStore();
@ -95,18 +96,20 @@ const getMsg = (val) => {
const handleSubmit = () => {
formRef.value?.validate((valid) => {
if (valid) {
console.log(addMessageForm.value);
// const params = JSON.parse(JSON.stringify(addMessageForm.value));
// performAdd(params).then((res: any) => {
// if (res.code == 1) {
// ElMessage.success({
// message: "",
// type: "success",
// });
// onclone();
// }
// });
let params = {
...addMessageForm.value,
coverImg:fileList.value[0].filepath,
}
console.log(params,'params===>');
noticeAdd(params).then((res: any) => {
if (res.code == 1) {
ElMessage.success({
message: "保存成功",
type: "success",
});
onclone();
}
});
}
return false;
});
@ -114,27 +117,26 @@ const handleSubmit = () => {
//
const fileList = ref([]);
//
const baseUrl = ref(import.meta.env.VITE_UPLOAD_URL);
const getFiles = () => {
let otcid = props.govNoticeId;
let otctype = FileType.messageCover;
getFile(otcid, otctype).then((res: any) => {
fileList.value = res.data;
console.log( fileList.value,'res==>');
});
};
/**
* 文件列表更新
*/
const updateFile = (files: any) => {
const updateFile = (files: any) => {
fileList.value = files;
};
//
const getFiles = (FileType) => {
console.log(FileType,'FileType==>');
console.log(addMessageForm.value.govNoticeId,'addMessageForm.value.govNoticeId===>');
getFile(addMessageForm.value.govNoticeId || uuid.value, FileType).then(
(res: any) => {
console.log(res,'图片查询res==>');
fileList.value = res.data;
}
);
};
//
const onclone = () => {
@ -145,7 +147,10 @@ watch(
() => props.visible,
() => {
uuid.value = getUUID();
getFiles();
addMessageForm.value = props.form;
console.log(addMessageForm.value,'addMessageForm===>');
getFiles(FileType.messageCover);
}
);

View File

@ -127,20 +127,15 @@
<script lang='ts' setup>
import { onMounted, reactive, ref } from "vue";
import { useRouter } from "vue-router";
const router = useRouter();
import { noticePage } from "@/api/Sys";
import { ElMessage, ElMessageBox } from "element-plus";
import AddModifyMessage from "./add-modify-message.vue";
import useUserStore from "@/store/modules/user";
const userStore = useUserStore();
const user = ref(JSON.parse(userStore.userInfo));
const userId = ref(user.value.userId);
const search = ref([]);
const search = ref('');
const tableData = ref([]);
const currentPage = ref(1);
const pageSize = ref(10);