From 0eb20ecb8d06fb2dbc0741566ebbfc1160e33ecb Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期一, 14 四月 2025 15:01:05 +0800 Subject: [PATCH] 接口对接 --- src/api/company/peopleCar.js | 30 src/views/firework/alarm/index.vue | 239 ++++++ src/store/modules/user.js | 2 src/views/firework/humiture/index.vue | 218 +++++ src/views/firework/peopleCar/components/peopleCarDialog.vue | 163 ++++ src/views/firework/warehouse/components/warehouseDialog.vue | 338 +++++++++ src/api/company/alarm.js | 18 src/views/firework/humiture/components/dataDialog.vue | 72 + src/views/firework/warehouse/index.vue | 153 +++ src/api/company/people.js | 30 src/views/firework/people/index.vue | 158 ++++ src/views/firework/warning/components/feedbackDialog.vue | 148 ++++ src/api/company/warning.js | 26 src/utils/request.js | 6 .env.development | 2 src/api/area.js | 3 src/views/firework/people/components/peopleDialog.vue | 212 +++++ src/views/firework/warning/index.vue | 207 +++++ src/views/firework/peopleCar/index.vue | 141 +++ src/views/firework/permit/index.vue | 1 20 files changed, 2,124 insertions(+), 43 deletions(-) diff --git a/.env.development b/.env.development index a0c49bb..737903e 100644 --- a/.env.development +++ b/.env.development @@ -7,7 +7,7 @@ # 烟花爆竹批发企业仓库安全监测预警/开发环境 #贺哥 -VITE_APP_BASE_API = 'http://192.168.2.11:8100' +VITE_APP_BASE_API = 'http://192.168.2.58:8100' #线上 #VITE_APP_BASE_API = 'http://47.108.222.15:8185/signature' diff --git a/src/api/area.js b/src/api/area.js index 368886e..4abee95 100644 --- a/src/api/area.js +++ b/src/api/area.js @@ -10,4 +10,5 @@ method: 'get', params: params }) -} \ No newline at end of file +} + diff --git a/src/api/company/alarm.js b/src/api/company/alarm.js new file mode 100644 index 0000000..477a828 --- /dev/null +++ b/src/api/company/alarm.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' +import {getToken} from "@/utils/auth"; + +export function getAlarm(params) { + return request({ + url: '/originalAlarm/pageList', + method: 'post', + data: params + }) +} + +export function editAlarm(params) { + return request({ + url: '/originalAlarm/editAlarmInfo', + method: 'get', + params: params + }) +} diff --git a/src/api/company/people.js b/src/api/company/people.js new file mode 100644 index 0000000..6b4125a --- /dev/null +++ b/src/api/company/people.js @@ -0,0 +1,30 @@ +import request from '@/utils/request' +import {getToken} from "@/utils/auth"; + +export function getPeople(params) { + return request({ + url: '/originalPerson/pageList', + method: 'post', + data: params + }) +} + + + +export function addPeople(data) { + return request({ + url: '/originalPerson/addOrUpdate', + method: 'post', + data: data + }) +} + + + +export function delPeople(data) { + return request({ + url: `/originalPerson/delete`, + method: 'post', + params: data + }) +} diff --git a/src/api/company/peopleCar.js b/src/api/company/peopleCar.js new file mode 100644 index 0000000..9732c08 --- /dev/null +++ b/src/api/company/peopleCar.js @@ -0,0 +1,30 @@ +import request from '@/utils/request' +import {getToken} from "@/utils/auth"; + +export function getPeopleCar(params) { + return request({ + url: '/originalPerson/selectOriginalPersonCar', + method: 'post', + data: params + }) +} + + + +export function addPeopleCar(data) { + return request({ + url: '/originalPerson/addOrUpdateCar', + method: 'post', + data: data + }) +} + + + +export function delPeopleCar(data) { + return request({ + url: `/originalPerson/delOriginalCarPerson`, + method: 'post', + params: data + }) +} diff --git a/src/api/company/warning.js b/src/api/company/warning.js new file mode 100644 index 0000000..46b93ab --- /dev/null +++ b/src/api/company/warning.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' +import {getToken} from "@/utils/auth"; + +export function getWarning(params) { + return request({ + url: '/originalAlarm/earlyPushPageList', + method: 'post', + data: params + }) +} + +export function pushWarning(params) { + return request({ + url: '/originalAlarm/editEarlyPush', + method: 'post', + data: params + }) +} + +export function delWarning(data) { + return request({ + url: `/originalAlarm/delEarlyPush`, + method: 'post', + params: data + }) +} diff --git a/src/store/modules/user.js b/src/store/modules/user.js index 64c4016..fe3d953 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -22,7 +22,7 @@ const identity = userInfo.identity return new Promise( (resolve, reject) => { login(username, password).then( async res => { - setToken(res.token) + setToken(res.result.token) this.token = res.token const user = res.result const avatar = (user.avatar == "" || user.avatar == null) ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar; diff --git a/src/utils/request.js b/src/utils/request.js index d1d37bb..d7d05aa 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -117,7 +117,11 @@ } else if (code != 200 && code != 100) { ElNotification.error({ title: msg }) return Promise.reject('error') - } else { + } else if(msg == '用户不存在'){ + ElNotification.error({ title: msg }) + return Promise.reject('error') + } + else { return Promise.resolve(res.data) } }, diff --git a/src/views/firework/alarm/index.vue b/src/views/firework/alarm/index.vue index 762e8b7..3e6b437 100644 --- a/src/views/firework/alarm/index.vue +++ b/src/views/firework/alarm/index.vue @@ -1,11 +1,236 @@ -<script setup> - -</script> - <template> - + <div class="app-container"> + <div style="display: flex;justify-content: space-between;margin-bottom: 10px"> + <el-form :inline="true" style="display: flex;align-items: center;flex-wrap: wrap;" > + <el-form-item> + <el-date-picker + v-model="data.dateRange" + value-format="YYYY-MM-DD" + type="daterange" + range-separator="-" + start-placeholder="开始日期" + end-placeholder="结束日期" + style="width: 300px" + ></el-date-picker> + </el-form-item> + <el-form-item label="状态:" > + <el-select + v-model="data.queryParams.filter.alarmStatus" + placeholder="请选择" + style="width: 100%" + > + <el-option + v-for="item in data.statusList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + <el-form-item > + <el-button + type="primary" + @click="getList" + >查询</el-button> + <el-button + type="primary" + plain + @click="reset" + >重置</el-button> + </el-form-item> + </el-form> + </div> + <!-- 表格数据 --> + <el-table v-loading="loading" :data="dataList" :border="true"> + <el-table-column label="序号" type="index" align="center" width="80" /> + <el-table-column label="企业" prop="companyName" align="center" /> + <el-table-column label="仓库" prop="storeName" align="center" /> + <el-table-column label="库房" prop="storeroomName" align="center" /> + <el-table-column label="报警类型" prop="alarmType" align="center" > + <template #default="scope"> + <span>{{scope.row.alarmType == 1 ? '超员作业' : scope.row.alarmType == 2?'堵塞通道':scope.row.alarmType == 3?'超高超量':scope.row.alarmType == 4?'非法入侵':scope.row.alarmType == 5?'摄像头遮挡偏移':scope.row.alarmType == 6?'温度':scope.row.alarmType == 7?'湿度':'--'}}</span> + </template> + </el-table-column> + <el-table-column label="报警状态" prop="alarmStatus" align="center" > + <template #default="scope"> + <span>{{scope.row.alarmStatus == 1 ? '已消警' : '未消警'}}</span> + </template> + </el-table-column> + <el-table-column label="报警图片" prop="alarmFile" align="center" > + <template #default="scope"> + <div class="demo-image__preview" v-if="scope.row.alarmFile"> + <el-image + style="width: 100px; height: 100px" + :src="scope.row.alarmFile" + :zoom-rate="1.2" + :max-scale="7" + :min-scale="0.2" + :preview-src-list="[scope.row.alarmFile]" + :initial-index="0" + fit="cover" + :preview-teleported= true + /> + </div> + </template> + </el-table-column> + <el-table-column label="报警时间" prop="warningDate" align="center" width="120" /> + <el-table-column label="消警时间" prop="clearDate" align="center" width="120" > + <template #default="scope"> + <span v-if="scope.row.clearDate">{{scope.row.clearDate}}</span> + <span v-else>—</span> + </template> + </el-table-column> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" > + <template #default="scope"> + <el-button link type="primary" v-if="scope.row.alarmStatus == 0" @click="handelAlarm(scope.row)">消警</el-button> + <span v-else>—</span> + </template> + </el-table-column> + </el-table> + <pagination + v-show="total > 0" + :total="total" + v-model:page="queryParams.pageIndex" + v-model:limit="queryParams.pageSize" + @pagination="getList" + /> + </div> </template> -<style scoped lang="scss"> +<script setup> +import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue"; +import {ElMessage, ElMessageBox} from "element-plus"; +import {delTemplate, getTemplate} from "@/api/signAgreement/template"; +import {editAlarm, getAlarm} from "@/api/company/alarm"; +import Cookies from "js-cookie"; +const { proxy } = getCurrentInstance(); +const loading = ref(false); +const dialogRef = ref(); +const createSignRef = ref(); +const data = reactive({ + queryParams: { + pageIndex: 1, + pageSize: 10, + filter: { + alarmStartTime: '', + alarmEndTime: '', + alarmStatus: null, + companyCode: '', + } + }, + total: 0, + dataList: [], + statusList: [ + { + id: 1, + name: '已消警' + }, + { + id: 0, + name: '未消警' + }, + ], + dateRange:[] +}); -</style> +const { queryParams, total, dataList } = toRefs(data); +const classHourRef = ref(); +onMounted(()=>{ + const info = JSON.parse(Cookies.get('userInfo')) + data.queryParams.filter.companyCode = info.companynumber + getList() +}) + +onUnmounted(()=>{ + +}) + +const addProject = (type,value) => { + dialogRef.value.openDialog(type,value) +} + +const getList = async () => { + loading.value = true + data.queryParams.filter.alarmStartTime = data.dateRange[0] + data.queryParams.filter.alarmEndTime = data.dateRange[1] + const res = await getAlarm(data.queryParams) + if(res.code == 200){ + data.dataList = res.result.records + // .map(item => { + // return { + // ...item, + // alarmFile: '' + // } + // }) + data.total = res.result.total + }else{ + ElMessage.warning(res.message) + } + loading.value = false +} + + + +/** 重置新增的表单以及其他数据 */ +function reset() { + data.queryParams = { + pageIndex: 1, + pageSize: 10, + filter: { + alarmStartTime: '', + alarmEndTime: '', + alarmStatus: null, + companyCode: '', + } + } + data.dateRange = [] + getList() +} +const handleDelete = (val) => { + ElMessageBox.confirm( + '确定删除此条数据?', + '提示', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then( async() => { + const res = await delTemplate(val.id) + if(res.code == 200){ + ElMessage.success('数据删除成功') + await getList() + }else{ + ElMessage.warning(res.message) + } + }) +} + +const handelAlarm = (val) => { + ElMessageBox.confirm( + '确定对此条数据消警?', + '提示', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then( async() => { + const param = { + id: val.id + } + const res = await editAlarm(param) + if(res.code == 200){ + ElMessage.success('消警成功') + await getList() + }else{ + ElMessage.warning(res.message) + } + }) +} + + +const getRowKeys = (row) => { + return row.name +} +</script> diff --git a/src/views/firework/humiture/components/dataDialog.vue b/src/views/firework/humiture/components/dataDialog.vue new file mode 100644 index 0000000..c5a2afc --- /dev/null +++ b/src/views/firework/humiture/components/dataDialog.vue @@ -0,0 +1,72 @@ +<template> + <div class="notice"> + <el-dialog + v-model="dialogVisible" + title="历史记录" + width="50%" + :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" + > + <el-table v-loading="loading" :data="state.tableList" :border="true"> + <el-table-column label="序号" type="index" align="center" width="80" /> + <el-table-column label="探测器" prop="createTime" align="center" /> + <el-table-column label="浓度值" prop="basicName" align="center" /> + <el-table-column label="状态" prop="tabooBasicName" align="center" /> + <el-table-column label="属性" prop="tabooBasicName" align="center" /> + <el-table-column label="时间" prop="updateBy" align="center" /> + + </el-table> + <pagination + v-show="total > 0" + :total="total" + v-model:page="queryParams.pageNum" + v-model:limit="queryParams.pageSize" + @pagination="getList" + /> + </el-dialog> + </div> +</template> +<script setup> +import {reactive, ref, toRefs} from "vue"; + +const dialogVisible = ref(false); +const emit = defineEmits(["getList"]); +const loading = ref(false) +const state = reactive({ + tableList: [], + total: 0, + queryParams: { + pageNum: 1, + pageSize: 5, + }, + +}) +const { queryParams, total } = toRefs(state); +const openDialog = async (type,value) => { + dialogVisible.value = true; +} +const getList = async () => { + // loading.value = true + // const res = await getAvoidInfoPage(state.queryParams) + // if(res.code == 200){ + // state.tableList = res.data.list + // state.total = res.data.total + // }else{ + // ElMessage.warning(res.message) + // } + // loading.value = false +} +const handleClose = () => { + dialogVisible.value = false; + emit("getList") +} +defineExpose({ + openDialog +}); + +</script> + +<style scoped lang="scss"> + +</style> diff --git a/src/views/firework/humiture/index.vue b/src/views/firework/humiture/index.vue index 762e8b7..dcb763b 100644 --- a/src/views/firework/humiture/index.vue +++ b/src/views/firework/humiture/index.vue @@ -1,11 +1,221 @@ +<template> + <div class="app-container"> + <!-- 表格部分--> +<!-- <div style="font-weight: 600;font-size: 20px;">最近报警记录</div>--> + <div style="margin-top: 10px"> + <el-table v-loading="loading" :data="state.tableList" :border="true"> + <el-table-column label="序号" type="index" align="center" width="80" /> + <el-table-column label="仓库" prop="createTime" align="center" /> + <el-table-column label="库房" prop="basicName" align="center" /> + <el-table-column label="温度值" prop="tabooBasicName" align="center" /> + <el-table-column label="同步时间" prop="updateBy" align="center" /> + <el-table-column label="湿度值" prop="tabooBasicName" align="center" /> + <el-table-column label="同步时间" prop="updateBy" align="center" /> + </el-table> + <pagination + v-show="total > 0" + :total="total" + v-model:page="queryParams.pageNum" + v-model:limit="queryParams.pageSize" + @pagination="getListAll" + /> + </div> + <!-- 卡片部分--> + <el-scrollbar max-height="420px" style="padding-right: 10px;overflow-x: hidden;" v-if="state.dataList && state.dataList.length >0"> +<!-- <el-row :gutter="20" style="margin-top: 5px;margin-left: 5px">--> +<!-- <el-col v-for="(item,index) in state.dataList" :key="index" :span="8">--> + <div style="display: flex;align-items: center;flex-wrap: wrap"> + <div v-for="(item,index) in state.dataList" :key="index" style="width: 350px;margin: 20px 30px"> + <el-card class="card-item " shadow="always"> + <div style="display: flex;flex-direction: column"> + <div style="font-size: 18px;font-weight: 700;margin-bottom: 15px">{{item.room}}—{{item.stock}}—{{item.device}}</div> + <div style="display: flex;align-items: center"> + <img src="@/assets/images/device.png" /> + <div style="display: flex;flex-direction: column"> + <div style="display: flex;justify-content: space-between;margin-bottom: 10px"> + <span>温度:{{item.warm}}</span> + <el-button type="primary" plain style="margin-left: 15px" @click="openData('温度',item)">历史数据</el-button> + </div> + <div style="display: flex;justify-content: space-between"> + <span>湿度:{{item.humidity}}</span> + <el-button type="primary" plain style="margin-left: 15px" @click="openData('湿度',item)">历史数据</el-button> + </div> + </div> + </div> + </div> + </el-card> + </div> + </div> + +<!-- </el-col>--> +<!-- </el-row>--> + </el-scrollbar> + <el-empty v-else></el-empty> + <d-dialog ref="dialogRef" @getList="getListAll"></d-dialog> + </div> +</template> + <script setup> +import {onMounted, reactive, ref, toRefs} from "vue"; +import {ElMessage} from "element-plus"; +import dDialog from './components/dataDialog.vue' + +const dialogRef = ref(null) +const state = reactive({ + queryParams: { + pageNum: 1, + pageSize: 5, + warningType: '' + }, + cardQueryParams: { + warningType: '' + }, + total: 0, + dataList: [ + { + id: 1, + room: '仓库名称', + stock: '库存名称', + device: '设备1', + humidity: '18%RH', + warm: '18°' + }, + { + id: 1, + room: '仓库名称', + stock: '库存名称', + device: '设备1', + humidity: '18%RH', + warm: '18°' + }, + { + id: 1, + room: '仓库名称', + stock: '库存名称', + device: '设备1', + humidity: '18%RH', + warm: '18°' + }, + { + id: 1, + room: '仓库名称', + stock: '库存名称', + device: '设备1', + humidity: '18%RH', + warm: '18°' + }, + { + id: 1, + room: '仓库名称', + stock: '库存名称', + device: '设备1', + humidity: '18%RH', + warm: '18°' + }, + ], + tableList: [] +}); +const { queryParams,cardQueryParams, total, dataList } = toRefs(state); +const loading = ref(false); +onMounted(()=>{ + getListPage() + getList() +}) +const getListPage = async () => { + // loading.value = true + // const res = await getAvoidInfoPage(state.queryParams) + // if(res.code == 200){ + // state.tableList = res.data.list + // state.total = res.data.total + // }else{ + // ElMessage.warning(res.message) + // } + // loading.value = false +} +const getList = async () => { + // const res = await getAvoidList(state.cardQueryParams) + // if(res.code == 200){ + // state.dataList = res.data + // }else{ + // ElMessage.warning(res.message) + // } +} +const openData = (type,val) => { + dialogRef.value.openDialog(type,val); + +} + +const getListAll = () => { + getListPage() + getList() +} </script> -<template> - -</template> - <style scoped lang="scss"> +.app-container{ + .card-item{ + //height: 160px; + margin-bottom: 10px; + //min-width: 300px; + } + .title-font{ + display:flex; + align-items: center; + padding: 3px 15px; + font-size: 14px; + margin-right: 10px; + border-radius: 5px + } + .card-item-red{ + cursor: pointer; + color: #f56c6c; + background-color: rgb(254, 240.3, 240.3); + border: 1px solid rgb(253, 225.6, 225.6); + } + .card-item-red-title{ + cursor: pointer; + color: #f56c6c; + background-color: rgb(254, 240.3, 240.3); + border: 1px solid rgb(253, 225.6, 225.6); + } + .card-item-red-titleChoose{ + color: #f6d1d1; + background-color: #f55d5d; + } + .card-item-yellow{ + color: #e6a23c; + background-color: rgb(252.5, 245.7, 235.5); + border: 1px solid rgb(250, 236.4, 216); + } + .card-item-yellow-title{ + cursor: pointer; + color: #f1950b; + background-color: rgb(252.5, 245.7, 235.5); + border: 1px solid rgb(250, 236.4, 216); + } + .card-item-yellow-titleChoose{ + color: #f6e7d1; + background-color: #f1a902; + } + .card-item-blue-title{ + cursor: pointer; + color: #409eff; + background-color: rgb(235.9, 245.3, 255); + border: 1px solid rgb(216.8, 235.6, 255); + } + .card-item-blue-titleChoose{ + color: #d7e6f6; + background-color: #2da0ef; + } + :deep(.is-horizontal) { + height: 0; + left: 0; + display: none; + } + :deep(.el-scrollbar__wrap) { + overflow-x: hidden; + } +} </style> diff --git a/src/views/firework/people/components/peopleDialog.vue b/src/views/firework/people/components/peopleDialog.vue new file mode 100644 index 0000000..c52d394 --- /dev/null +++ b/src/views/firework/people/components/peopleDialog.vue @@ -0,0 +1,212 @@ +<template> + <div class="notice"> + <el-dialog + v-model="dialogVisible" + :title="title" + width="500px" + :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" + > + <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="150px" > + <el-form-item label="姓名:" prop="personName" > + <el-input v-model="state.form.personName" placeholder="请输入姓名"></el-input> + </el-form-item> + <el-form-item label="人员类型:" prop="personType"> + <el-select + v-model="state.form.personType" + placeholder="请选择" + style="width: 100%" + > + <el-option + v-for="item in state.typeList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + <el-form-item label="联系方式:" prop="mb" > + <el-input v-model="state.form.mb" placeholder="请输入联系方式"></el-input> + </el-form-item> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="handleClose" size="default">取 消</el-button> + <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> +<script setup> +import {onMounted, reactive, ref, toRefs} from 'vue' +import {ElMessage} from "element-plus"; +import {listDept} from "@/api/system/dept"; +import {listUser} from "@/api/system/user"; +import {addTemplate, editTemplate} from "@/api/signAgreement/template"; +import {addType, editType, getSignType} from "@/api/signAgreement/signType"; +import {getInfo} from "@/api/login"; +import {getToken} from "@/utils/auth"; +import {verifyPhone} from "@/utils/validate"; +import Cookies from "js-cookie"; +import {addPeople} from "@/api/company/people"; + +const uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload"); // 上传文件服务器地址 +const { proxy } = getCurrentInstance(); +const dialogVisible = ref(false); +const title = ref(""); +const busRef = ref(); +const length = ref() +const emit = defineEmits(["getList"]); +const startPhone = ref(''); +const validateUserPhone = (rule, value, callback)=>{ + if(value === ''){ + callback(new Error('请输入手机号')) + }else if(state.title == '编辑' && value == startPhone.value){ + callback() + } else{ + if(!verifyPhone(value)){ + callback(new Error('手机号格式有误')) + }else{ + callback() + } + } +} +const state = reactive({ + form: { + id: '', + personName: '', + companyCode: '', + personType:null, + mb: '', + }, + typeList: [ + { + id: 1, + name: '法定代表人' + }, + { + id: 2, + name: '主要负责人' + }, + { + id: 3, + name: '安全负责人' + }, + { + id: 4, + name: '保管员' + }, + { + id: 5, + name: '守护员' + }, + ], + formRules:{ + personName: [{ required: true, trigger: "blur", message:'请输入姓名' }], + mb: [{ required: true, trigger: "blur", validator: validateUserPhone }], + personType: [{ required: true, trigger: "blur", message:'请选择人员类型' }], + }, +}) +onMounted(()=>{ + +}) + + +const openDialog = async (type,value) => { + title.value = type === 'add' ? '新增' : '编辑' + const info = JSON.parse(Cookies.get('userInfo')) + state.form.companyCode = info.companynumber + if(type === 'edit') { + const data = JSON.parse(JSON.stringify(value)) + Object.keys(state.form).forEach(key => { + if(data[key]){ + state.form[key] = data[key] + } + }) + startPhone.value = value.phone + } + dialogVisible.value = true; +} + +const onSubmit = async () => { + console.log('form',state.form) + const valid = await busRef.value.validate(); + if(valid){ + if(title.value === '新增'){ + const {id, ...data} = JSON.parse(JSON.stringify(state.form)) + const res = await addPeople(data) + if(res.code == 200){ + ElMessage({ + type: 'success', + message: '新增成功' + }); + }else{ + ElMessage.warning(res.message) + } + emit("getList") + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + }else if(title.value === '编辑'){ + const {...data} = JSON.parse(JSON.stringify(state.form)) + const res = await addPeople(data) + if(res.code == 200){ + ElMessage({ + type: 'success', + message: '编辑成功' + }); + }else{ + ElMessage.warning(res.message) + } + emit("getList") + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + } + + } +} + +const handleClose = () => { + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + emit("getList") +} +const reset = () => { + state.form = { + id: '', + personName: '', + companyCode: '', + personType:null, + mb: '', + } +} +defineExpose({ + openDialog +}); + +</script> + +<style scoped lang="scss"> +.notice{ + :deep(.el-form .el-form-item__label) { + font-size: 15px; + } + :deep(.el-form-item__content) { + width: 100%; + } + .file { + display: flex; + flex-direction: column; + align-items: flex-start; + } + .custom-iframe { + border: 1px solid #9b9999; + /* 隐藏原生滚动条 */ + overflow: hidden; + } +} +</style> diff --git a/src/views/firework/people/index.vue b/src/views/firework/people/index.vue index 32d05de..4451873 100644 --- a/src/views/firework/people/index.vue +++ b/src/views/firework/people/index.vue @@ -1,11 +1,155 @@ -<script setup> - -</script> - <template> - <div>1</div> + <div class="app-container"> + <div style="display: flex;justify-content: space-between;margin-bottom: 10px"> + <el-form :inline="true" style="display: flex;align-items: center;flex-wrap: wrap;" > + <el-form-item> + <el-button + type="primary" + plain + icon="Plus" + @click="addProject('add',{})" + > + 新增 + </el-button> + </el-form-item> + <el-form-item label="姓名:" > + <el-input v-model="data.queryParams.filter.companyName" placeholder="请输入姓名"></el-input> + </el-form-item> + <el-form-item > + <el-button + type="primary" + @click="getList" + >查询</el-button> + <el-button + type="primary" + plain + @click="reset" + >重置</el-button> + </el-form-item> + </el-form> + </div> + <!-- 表格数据 --> + <el-table v-loading="loading" :data="dataList" :border="true"> + <el-table-column label="序号" type="index" align="center" width="80" /> + <el-table-column label="姓名" prop="personName" align="center" /> + <el-table-column label="人员类型" prop="personType" align="center" > + <template #default="scope"> + <span>{{scope.row.personType == 1 ? '法定代表人' : scope.row.personType == 2?'主要负责人':scope.row.personType == 3?'安全负责人':scope.row.personType == 4?'保管员':scope.row.personType == 5?'守护员':''}}</span> + + </template> + </el-table-column> + <el-table-column label="联系方式" prop="mb" align="center" /> + <el-table-column label="创建人" prop="createBy" align="center" /> + <el-table-column label="修改人" prop="updateBy" align="center" /> + <el-table-column label="创建时间" prop="createDate" align="center" width="110" /> + <el-table-column label="修改时间" prop="updateDate" align="center" width="110"/> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="250" > + <template #default="scope"> + <el-button link type="primary" @click="addProject('edit',scope.row)">编辑</el-button> + <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <pagination + v-show="total > 0" + :total="total" + v-model:page="queryParams.pageIndex" + v-model:limit="queryParams.pageSize" + @pagination="getList" + /> + <peopleDialog ref="dialogRef" @getList="getList"></peopleDialog> + </div> </template> -<style scoped lang="scss"> +<script setup> +import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue"; +import {ElMessage, ElMessageBox} from "element-plus"; +import peopleDialog from './components/peopleDialog.vue' +import Cookies from "js-cookie"; +import {delTemplate, getTemplate} from "@/api/signAgreement/template"; +import {delPeople, getPeople} from "@/api/company/people"; +const { proxy } = getCurrentInstance(); +const loading = ref(false); +const dialogRef = ref(); +const createSignRef = ref(); +const data = reactive({ + queryParams: { + pageIndex: 1, + pageSize: 10, + filter: { + companyName: '', + companyCode: '' + } + }, + total: 0, + dataList: [] +}); -</style> +const { queryParams, total, dataList } = toRefs(data); +const classHourRef = ref(); +onMounted(()=>{ + const info = JSON.parse(Cookies.get('userInfo')) + data.queryParams.filter.companyCode = info.companynumber + getList() +}) + +onUnmounted(()=>{ + +}) + +const addProject = (type,value) => { + dialogRef.value.openDialog(type,value) +} +const getList = async () => { + loading.value = true + const res = await getPeople(data.queryParams) + if(res.code == 200){ + data.dataList = res.result.records + data.total = res.result.total + }else{ + ElMessage.warning(res.message) + } + loading.value = false +} + +/** 重置新增的表单以及其他数据 */ +function reset() { + data.queryParams = { + pageIndex: 1, + pageSize: 10, + filter: { + companyName: '', + companyCode: '' + } + } + getList() +} +const handleDelete = (val) => { + ElMessageBox.confirm( + '确定删除此条数据?', + '提示', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then( async() => { + const param = { + id:val.id + } + const res = await delPeople(param) + if(res.code == 200){ + ElMessage.success('数据删除成功') + await getList() + }else{ + ElMessage.warning(res.message) + } + }) +} + + + +const getRowKeys = (row) => { + return row.name +} +</script> diff --git a/src/views/firework/peopleCar/components/peopleCarDialog.vue b/src/views/firework/peopleCar/components/peopleCarDialog.vue new file mode 100644 index 0000000..17af073 --- /dev/null +++ b/src/views/firework/peopleCar/components/peopleCarDialog.vue @@ -0,0 +1,163 @@ +<template> + <div class="notice"> + <el-dialog + v-model="dialogVisible" + :title="title" + width="500px" + :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" + > + <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="150px" > + <el-form-item label="人员数量:" prop="personCount" > + <el-input v-model="state.form.personCount" placeholder="请输入人员数量" @input="state.form.personCount= state.form.personCount.replace(/[^\d]/g,'')"></el-input> + </el-form-item> + <el-form-item label="车辆数量:" prop="carCount" > + <el-input v-model="state.form.carCount" placeholder="请输入车辆数量" @input="state.form.carCount= state.form.carCount.replace(/[^\d]/g,'')"></el-input> + </el-form-item> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="handleClose" size="default">取 消</el-button> + <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> +<script setup> +import {onMounted, reactive, ref, toRefs} from 'vue' +import {ElMessage} from "element-plus"; +import {listDept} from "@/api/system/dept"; +import {listUser} from "@/api/system/user"; +import {addTemplate, editTemplate} from "@/api/signAgreement/template"; +import {addType, editType, getSignType} from "@/api/signAgreement/signType"; +import {getInfo} from "@/api/login"; +import {getToken} from "@/utils/auth"; +import {verifyPhone} from "@/utils/validate"; +import Cookies from "js-cookie"; +import {addPeople} from "@/api/company/people"; +import {addPeopleCar} from "@/api/company/peopleCar"; + +const uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload"); // 上传文件服务器地址 +const { proxy } = getCurrentInstance(); +const dialogVisible = ref(false); +const title = ref(""); +const busRef = ref(); +const length = ref() +const emit = defineEmits(["getList"]); +const startPhone = ref(''); + +const state = reactive({ + form: { + id: '', + carCount: null, + companyCode: '', + personCount:null, + }, + + formRules:{ + carCount: [{ required: true, trigger: "blur", message:'请输入车辆数量' }], + personCount: [{ required: true, trigger: "blur", message:'请选择人员数量' }], + }, +}) +onMounted(()=>{ + +}) + + +const openDialog = async (type,value) => { + title.value = type === 'add' ? '新增' : '编辑' + const info = JSON.parse(Cookies.get('userInfo')) + state.form.companyCode = info.companynumber + if(type === 'edit') { + const data = JSON.parse(JSON.stringify(value)) + Object.keys(state.form).forEach(key => { + if(data[key]){ + state.form[key] = data[key] + } + }) + startPhone.value = value.phone + } + dialogVisible.value = true; +} + +const onSubmit = async () => { + console.log('form',state.form) + const valid = await busRef.value.validate(); + if(valid){ + if(title.value === '新增'){ + const {id, ...data} = JSON.parse(JSON.stringify(state.form)) + const res = await addPeopleCar(data) + if(res.code == 200){ + ElMessage({ + type: 'success', + message: '新增成功' + }); + }else{ + ElMessage.warning(res.message) + } + emit("getList") + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + }else if(title.value === '编辑'){ + const {...data} = JSON.parse(JSON.stringify(state.form)) + const res = await addPeopleCar(data) + if(res.code == 200){ + ElMessage({ + type: 'success', + message: '编辑成功' + }); + }else{ + ElMessage.warning(res.message) + } + emit("getList") + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + } + + } +} + +const handleClose = () => { + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + emit("getList") +} +const reset = () => { + state.form = { + id: '', + carCount: null, + companyCode: '', + personCount:null, + } +} +defineExpose({ + openDialog +}); + +</script> + +<style scoped lang="scss"> +.notice{ + :deep(.el-form .el-form-item__label) { + font-size: 15px; + } + :deep(.el-form-item__content) { + width: 100%; + } + .file { + display: flex; + flex-direction: column; + align-items: flex-start; + } + .custom-iframe { + border: 1px solid #9b9999; + /* 隐藏原生滚动条 */ + overflow: hidden; + } +} +</style> diff --git a/src/views/firework/peopleCar/index.vue b/src/views/firework/peopleCar/index.vue index 762e8b7..b14f94f 100644 --- a/src/views/firework/peopleCar/index.vue +++ b/src/views/firework/peopleCar/index.vue @@ -1,11 +1,138 @@ -<script setup> - -</script> - <template> - + <div class="app-container"> + <div style="display: flex;justify-content: space-between;margin-bottom: 10px"> + <el-form :inline="true" style="display: flex;align-items: center;flex-wrap: wrap;" > + <el-form-item> + <el-button + type="primary" + plain + icon="Plus" + @click="addProject('add',{})" + > + 新增 + </el-button> + </el-form-item> + </el-form> + </div> + <!-- 表格数据 --> + <el-table v-loading="loading" :data="dataList" :border="true"> + <el-table-column label="序号" type="index" align="center" width="80" /> + <el-table-column label="企业" prop="companyName" align="center" /> + <el-table-column label="人员数量" prop="personCount" align="center" /> + <el-table-column label="车辆数量" prop="carCount" align="center" /> + <el-table-column label="数据采集时间" prop="collectTime" align="center" /> + <el-table-column label="创建人" prop="createBy" align="center" /> + <el-table-column label="修改人" prop="updateBy" align="center" /> + <el-table-column label="创建时间" prop="createDate" align="center" width="110" /> + <el-table-column label="修改时间" prop="updateDate" align="center" width="110"/> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="250" > + <template #default="scope"> + <el-button link type="primary" @click="addProject('edit',scope.row)">编辑</el-button> + <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <pagination + v-show="total > 0" + :total="total" + v-model:page="queryParams.pageIndex" + v-model:limit="queryParams.pageSize" + @pagination="getList" + /> + <peopleDialog ref="dialogRef" @getList="getList"></peopleDialog> + </div> </template> -<style scoped lang="scss"> +<script setup> +import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue"; +import {ElMessage, ElMessageBox} from "element-plus"; +import peopleDialog from './components/peopleCarDialog.vue' +import Cookies from "js-cookie"; +import {delTemplate, getTemplate} from "@/api/signAgreement/template"; +import {delPeople, getPeople} from "@/api/company/people"; +import {delPeopleCar, getPeopleCar} from "@/api/company/peopleCar"; +const { proxy } = getCurrentInstance(); +const loading = ref(false); +const dialogRef = ref(); +const createSignRef = ref(); +const data = reactive({ + queryParams: { + pageIndex: 1, + pageSize: 10, + filter: { + companyName: '', + companyCode: '' + } + }, + total: 0, + dataList: [] +}); -</style> +const { queryParams, total, dataList } = toRefs(data); +const classHourRef = ref(); +onMounted(()=>{ + const info = JSON.parse(Cookies.get('userInfo')) + data.queryParams.filter.companyCode = info.companynumber + getList() +}) + +onUnmounted(()=>{ + +}) + +const addProject = (type,value) => { + dialogRef.value.openDialog(type,value) +} +const getList = async () => { + loading.value = true + const res = await getPeopleCar(data.queryParams) + if(res.code == 200){ + data.dataList = res.result.records + data.total = res.result.total + }else{ + ElMessage.warning(res.message) + } + loading.value = false +} + +/** 重置新增的表单以及其他数据 */ +function reset() { + data.queryParams = { + pageIndex: 1, + pageSize: 10, + filter: { + companyName: '', + companyCode: '' + } + } + getList() +} +const handleDelete = (val) => { + ElMessageBox.confirm( + '确定删除此条数据?', + '提示', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then( async() => { + const param = { + id:val.id + } + const res = await delPeopleCar(param) + if(res.code == 200){ + ElMessage.success('数据删除成功') + await getList() + }else{ + ElMessage.warning(res.message) + } + }) +} + + + +const getRowKeys = (row) => { + return row.name +} +</script> diff --git a/src/views/firework/permit/index.vue b/src/views/firework/permit/index.vue index 762e8b7..bd5adfa 100644 --- a/src/views/firework/permit/index.vue +++ b/src/views/firework/permit/index.vue @@ -9,3 +9,4 @@ <style scoped lang="scss"> </style> + diff --git a/src/views/firework/warehouse/components/warehouseDialog.vue b/src/views/firework/warehouse/components/warehouseDialog.vue new file mode 100644 index 0000000..c21769b --- /dev/null +++ b/src/views/firework/warehouse/components/warehouseDialog.vue @@ -0,0 +1,338 @@ +<template> + <div class="notice"> + <el-dialog + v-model="dialogVisible" + width="900px" + :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" + > + <template #header> + <div style="text-align: center; width: 100%;font-size: 18px;font-weight: 600"> + <span>{{title}}仓库</span> + </div> + </template> + <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="117px" > + <el-form-item> + <div style="font-size: 16px;font-weight: 600;margin-top: -25px;margin-left: -110px;margin-bottom: -15px">仓库基本信息</div> + </el-form-item> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item label="仓库名称:" prop="name" > + <el-input v-model="state.form.name" placeholder="请输入仓库名称"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="仓库面积:" prop="name" > + <el-input v-model="state.form.name" placeholder="请输入仓库面积"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item label="仓库编号:" prop="name" > + <el-input v-model="state.form.name" placeholder="请输入仓库编号"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="核定药量:" prop="name" > + <el-input v-model="state.form.name" placeholder="请输入核定药量"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item label="危险等级:" prop="name" > + <el-select + v-model="state.form.typeId" + placeholder="请选择" + style="width: 100%" + > + <el-option + v-for="item in state.typeList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="核定人员数量:" prop="name" > + <el-input v-model="state.form.name" placeholder="请输入核定人员数量"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div style="display: flex;align-items: center"> + <div style="font-size: 16px;font-weight: 600;margin: 10px">库房列表</div> + <el-button style="margin-left: 10px" type="primary" @click="addRoom">新增库房</el-button> + </div> + <el-table :data="state.storeroomList" style="width: 100%;margin-top: 15px" border> + <el-table-column label="序号" type="index" align="center" width="80" /> + <el-table-column prop="name" label="库房名称" align="center"> + <template #default="{ row }"> + <el-form :model="row" :rules="rules"> + <el-form-item prop="name"> + <el-input + v-model="row.name" + /> + </el-form-item> + </el-form> + </template> + </el-table-column> + <el-table-column prop="code" label="库房编号" align="center"> + <template #default="{ row }"> + <el-form :model="row" :rules="rules"> + <el-form-item prop="code"> + <el-input + v-model="row.code" + /> + </el-form-item> + </el-form> + </template> + </el-table-column> + <el-table-column prop="area" label="面积" align="center"> + <template #default="{ row }"> + <el-form :model="row" :rules="rules"> + <el-form-item prop="area"> + <el-input + v-model="row.area" + /> + </el-form-item> + </el-form> + </template> + </el-table-column> + <el-table-column prop="level" label="危险等级" align="center"> + <template #default="{ row }"> + <el-form :model="row" :rules="rules"> + <el-form-item prop="level"> + <el-input + v-model="row.level" + /> + </el-form-item> + </el-form> + </template> + </el-table-column> + <el-table-column prop="level" label="核定药量" align="center"> + <template #default="{ row }"> + <el-form :model="row" :rules="rules"> + <el-form-item prop="level"> + <el-input + v-model="row.level" + /> + </el-form-item> + </el-form> + </template> + </el-table-column> + <el-table-column prop="num" label="核定人员" align="center"> + <template #default="{ row }"> + <el-form :model="row" :rules="rules" > + <el-form-item prop="num" > + <el-input + v-model="row.num" + + /> + </el-form-item> + </el-form> + </template> + </el-table-column> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" > + <template #default="scope"> + <el-button link type="danger" @click="delRoom(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <template #footer> + <span class="dialog-footer"> + <el-button @click="handleClose" size="default">取 消</el-button> + <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> +<script setup> +import {reactive, ref, toRefs} from 'vue' +import {ElMessage} from "element-plus"; +import {listDept} from "@/api/system/dept"; +import {listUser} from "@/api/system/user"; +import {addTemplate, editTemplate} from "@/api/signAgreement/template"; +import {addType, editType, getSignType} from "@/api/signAgreement/signType"; +import {getInfo} from "@/api/login"; +import {getToken} from "@/utils/auth"; +import {verifyPhone} from "@/utils/validate"; + +const uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload"); // 上传文件服务器地址 +const { proxy } = getCurrentInstance(); +const dialogVisible = ref(false); +const title = ref(""); +const busRef = ref(); +const length = ref() +const emit = defineEmits(["getList"]); +const startPhone = ref(''); +const validateUserPhone = (rule, value, callback)=>{ + if(value === ''){ + callback(new Error('请输入手机号')) + }else if(state.title == '编辑' && value == startPhone.value){ + callback() + } else{ + if(!verifyPhone(value)){ + callback(new Error('手机号格式有误')) + } + } +} +const state = reactive({ + form: { + id: '', + name: '', + typeId:null, + phone: '', + }, + typeList: [ + { + id: 1, + name: '法定代表人' + }, + { + id: 2, + name: '主要负责人' + }, + { + id: 3, + name: '安全负责人' + }, + { + id: 4, + name: '保管员' + }, + { + id: 5, + name: '守护员' + }, + ], + storeroomList: [], + formRules:{ + name: [{ required: true, trigger: "blur", message:'请输入姓名' }], + phone: [{ required: true, trigger: "blur", validator: validateUserPhone }], + typeId: [{ required: true, trigger: "blur", message:'请选择人员类型' }], + }, +}) +const rules = { + name: [ + { required: true, message: "姓名不能为空", trigger: "blur" }, + ], +}; + + + +const openDialog = async (type,value) => { + title.value = type === 'add' ? '新增' : '编辑' + if(type === 'edit') { + state.form = JSON.parse(JSON.stringify(value)) + startPhone.value = value.phone + } + dialogVisible.value = true; +} + +const onSubmit = async () => { + console.log('form',state.form) + const valid = await busRef.value.validate(); + + if(valid){ + if(title.value === '新增'){ + const {id,fileList, ...data} = JSON.parse(JSON.stringify(state.form)) + // const res = await addTemplate(data) + // if(res.code === 200){ + // ElMessage({ + // type: 'success', + // message: '新增成功' + // }); + // }else{ + // ElMessage.warning(res.message) + // } + emit("getList") + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + }else if(title.value === '编辑'){ + const {...data} = JSON.parse(JSON.stringify(state.form)) + const res = await editTemplate(data) + // if(res.code === 200){ + // ElMessage({ + // type: 'success', + // message: '编辑成功' + // }); + // }else{ + // ElMessage.warning(res.message) + // } + emit("getList") + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + } + + } +} + +const addRoom = () => { + state.storeroomList.push({}) +} + +const delRoom = (val) => { + console.log('val',val) + if(Object.keys(val).length === 0){ + const index = state.storeroomList.findIndex(item => Object.keys(item).length === 0) + if(index != -1){ + state.storeroomList.splice(index,1) + } + }else { + const index = state.storeroomList.findIndex(item => item == val) + if(index != -1){ + state.storeroomList.splice(index,1) + } + } + +} + +const handleClose = () => { + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + emit("getList") +} +const reset = () => { + state.form = { + id: '', + name: '', + typeId:null, + phone: '', + } + state.storeroomList = [] +} +defineExpose({ + openDialog +}); + +</script> + +<style scoped lang="scss"> +.notice{ + :deep(.el-form .el-form-item__label) { + font-size: 15px; + } + :deep(.el-form-item__content) { + width: 100%; + } + .file { + display: flex; + flex-direction: column; + align-items: flex-start; + } + .custom-iframe { + border: 1px solid #9b9999; + /* 隐藏原生滚动条 */ + overflow: hidden; + } +} +</style> diff --git a/src/views/firework/warehouse/index.vue b/src/views/firework/warehouse/index.vue index 762e8b7..52eaff2 100644 --- a/src/views/firework/warehouse/index.vue +++ b/src/views/firework/warehouse/index.vue @@ -1,11 +1,150 @@ -<script setup> - -</script> - <template> - + <div class="app-container"> + <div style="display: flex;justify-content: space-between;"> + <el-form :inline="true" style="display: flex;align-items: center;flex-wrap: wrap;" > + <el-form-item> + <el-button + type="primary" + plain + icon="Plus" + @click="addProject('add',{})" + > + 新增 + </el-button> + </el-form-item> + <!-- <el-form-item label="姓名:" >--> + <!-- <el-input v-model="data.queryParams.name" placeholder="请输入姓名"></el-input>--> + <!-- </el-form-item>--> + <!-- <el-form-item >--> + <!-- <el-button--> + <!-- type="primary"--> + <!-- @click="getList"--> + <!-- >查询</el-button>--> + <!-- <el-button--> + <!-- type="primary"--> + <!-- plain--> + <!-- @click="reset"--> + <!-- >重置</el-button>--> + <!-- </el-form-item>--> + </el-form> + </div> + <!-- 表格数据 --> + <el-table v-loading="loading" :data="dataList" :border="true"> + <el-table-column label="序号" type="index" align="center" width="80" /> + <el-table-column label="仓库名称" prop="name" align="center" /> + <el-table-column label="仓库编号" prop="type" align="center" /> + <el-table-column label="面积" prop="phone" align="center" /> + <el-table-column label="危险等级" prop="createBy" align="center" /> + <el-table-column label="核定药量" prop="createBy" align="center" /> + <el-table-column label="核定人员" prop="updateBy" align="center" /> + <el-table-column label="创建人" prop="createTime" align="center" /> + <el-table-column label="创建时间" prop="updateTime" align="center" /> + <el-table-column label="修改人" prop="updateBy" align="center" /> + <el-table-column label="修改时间" prop="updateTime" align="center" /> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" > + <template #default="scope"> + <el-button link type="primary" @click="addProject('edit',scope.row)">编辑</el-button> + <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <pagination + v-show="total > 0" + :total="total" + v-model:page="queryParams.pageIndex" + v-model:limit="queryParams.pageSize" + @pagination="getList" + /> + <warehouseDialog ref="dialogRef" @getList="getList"></warehouseDialog> + </div> </template> -<style scoped lang="scss"> +<script setup> +import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue"; +import {ElMessage, ElMessageBox} from "element-plus"; +import warehouseDialog from './components/warehouseDialog.vue' +import {delTemplate, getTemplate} from "@/api/signAgreement/template"; +import {getWarning} from "@/api/company/warning"; +import Cookies from "js-cookie"; +const { proxy } = getCurrentInstance(); +const loading = ref(false); +const dialogRef = ref(); +const createSignRef = ref(); +const data = reactive({ + queryParams: { + pageIndex: 1, + pageSize: 10, + filter: { + companyName: '', + companyCode: '' + } + }, + total: 0, + dataList: [] +}); -</style> +const { queryParams, total, dataList } = toRefs(data); +const classHourRef = ref(); +onMounted(()=>{ + const info = JSON.parse(Cookies.get('userInfo')) + data.queryParams.filter.companyCode = info.companynumber + getList() +}) + +onUnmounted(()=>{ + +}) + +const addProject = (type,value) => { + dialogRef.value.openDialog(type,value) +} +const getList = async () => { + loading.value = true + const res = await getWarning(data.queryParams) + if(res.code == 200){ + data.dataList = res.result.records + data.total = res.result.total + }else{ + ElMessage.warning(res.message) + } + loading.value = false +} + +/** 重置新增的表单以及其他数据 */ +function reset() { + data.queryParams = { + pageIndex: 1, + pageSize: 10, + filter: { + companyName: '', + companyCode: '' + } + } + getList() +} +const handleDelete = (val) => { + ElMessageBox.confirm( + '确定删除此条数据?', + '提示', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then( async() => { + const res = await delTemplate(val.id) + if(res.code == 200){ + ElMessage.success('数据删除成功') + await getList() + }else{ + ElMessage.warning(res.message) + } + }) +} + + + +const getRowKeys = (row) => { + return row.name +} +</script> diff --git a/src/views/firework/warning/components/feedbackDialog.vue b/src/views/firework/warning/components/feedbackDialog.vue new file mode 100644 index 0000000..ff61449 --- /dev/null +++ b/src/views/firework/warning/components/feedbackDialog.vue @@ -0,0 +1,148 @@ +<template> + <div class="notice"> + <el-dialog + v-model="dialogVisible" + title="提交反馈" + width="500px" + :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" + > + <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="77px" > + <el-form-item label="企业名:" prop="name" > + <span>{{ state.form.companyName }}</span> + </el-form-item> +<!-- <el-row :gutter="12">--> +<!-- <el-col :span="10">--> +<!-- <el-form-item label="仓库:" prop="name" >--> +<!-- <span>{{ state.form.companyName }}</span>--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="库房:" prop="name" >--> +<!-- <span>{{ state.form.companyName }}</span>--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + <el-form-item label="风险等级:" prop="phone" > + <span>{{ state.form.riskLevel == 1 ? '重大' : state.form.riskLevel == 2?'较大': state.form.riskLevel == 3?'一般': state.form.riskLevel == 4 ? '低': ''}}</span> + </el-form-item> + </el-form> + <div> + <span style="font-size: 15px;font-weight: 700;">反馈意见:</span> + <el-input v-model='state.form.feedBack' type="textarea" :rows="5" style="margin-top: 10px"></el-input> + </div> + <template #footer> + <span class="dialog-footer"> + <el-button @click="handleClose" size="default">取 消</el-button> + <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> +<script setup> +import {reactive, ref, toRefs} from 'vue' +import {ElMessage} from "element-plus"; +import {listDept} from "@/api/system/dept"; +import {listUser} from "@/api/system/user"; +import {addTemplate, editTemplate} from "@/api/signAgreement/template"; +import {addType, editType, getSignType} from "@/api/signAgreement/signType"; +import {getInfo} from "@/api/login"; +import {getToken} from "@/utils/auth"; +import {verifyPhone} from "@/utils/validate"; +import {pushWarning} from "@/api/company/warning"; + +const { proxy } = getCurrentInstance(); +const dialogVisible = ref(false); +const title = ref(""); +const busRef = ref(); +const length = ref() +const emit = defineEmits(["getList"]); + +const state = reactive({ + form: { + id: '', + feedBack: '', + + }, + formRules:{ + feedBack: [{ required: true, trigger: "blur", message:'请输入反馈内容' }], + }, +}) + + + +const openDialog = async (type,value) => { + if(type === 'edit') { + state.form = JSON.parse(JSON.stringify(value)) + } + dialogVisible.value = true; +} + +const onSubmit = async () => { + const valid = await busRef.value.validate(); + if(valid){ + if(!state.form.feedBack){ + ElMessage.warning('请输入反馈意见') + return + } + const { ...data} = JSON.parse(JSON.stringify(state.form)) + const param = { + id: data.id, + feedBack: data.feedBack + } + const res = await pushWarning(param) + if(res.code == 200){ + ElMessage({ + type: 'success', + message: '提交成功' + }); + }else{ + ElMessage.warning(res.message) + } + emit("getList") + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + } +} + +const handleClose = () => { + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + emit("getList") +} +const reset = () => { + state.form = { + id: '', + feedBack: '', + } +} +defineExpose({ + openDialog +}); + +</script> + +<style scoped lang="scss"> +.notice{ + :deep(.el-form .el-form-item__label) { + font-size: 15px; + } + :deep(.el-form-item__content) { + width: 100%; + } + .file { + display: flex; + flex-direction: column; + align-items: flex-start; + } + .custom-iframe { + border: 1px solid #9b9999; + /* 隐藏原生滚动条 */ + overflow: hidden; + } +} +</style> diff --git a/src/views/firework/warning/index.vue b/src/views/firework/warning/index.vue index 762e8b7..a5c482a 100644 --- a/src/views/firework/warning/index.vue +++ b/src/views/firework/warning/index.vue @@ -1,11 +1,204 @@ -<script setup> - -</script> - <template> - + <div class="app-container"> + <div style="display: flex;justify-content: space-between;"> + <el-form :inline="true" style="display: flex;align-items: center;flex-wrap: wrap;" > + <el-form-item> + <el-date-picker + v-model="data.dateRange" + value-format="YYYY-MM-DD" + type="daterange" + range-separator="-" + start-placeholder="开始日期" + end-placeholder="结束日期" + style="width: 300px" + ></el-date-picker> + </el-form-item> + <el-form-item label="状态:" > + <el-select + v-model="data.queryParams.filter.pushType" + placeholder="请选择" + style="width: 100%" + > + <el-option + v-for="item in data.statusList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + <el-form-item > + <el-button + type="primary" + @click="getList" + >查询</el-button> + <el-button + type="primary" + plain + @click="reset" + >重置</el-button> + </el-form-item> + </el-form> + </div> + <!-- 表格数据 --> + <el-table v-loading="loading" :data="dataList" :border="true"> + <el-table-column label="序号" type="index" align="center" width="80" /> + <el-table-column label="企业名称" prop="companyName" align="center" /> + <el-table-column label="市(地、州)" prop="type" align="center" width="120" > + <template #default="scope"> + <span>{{scope.row.provinceName}}-{{scope.row.cityName}}</span> + </template> + </el-table-column> + <el-table-column label="区县" prop="areaName" align="center" /> + <el-table-column label="风险等级" prop="riskLevel" align="center" > + <template #default="scope"> + <span>{{scope.row.riskLevel == 1 ? '重大' :scope.row.riskLevel == 2?'较大':scope.row.riskLevel == 3?'一般':scope.row.riskLevel == 4 ? '低': ''}}</span> + </template> + </el-table-column> + <el-table-column label="推送状态" prop="pushType" align="center" > + <template #default="scope"> + <span>{{scope.row.pushType == 0 ? '未下发' :scope.row.pushType == 1 ? '已下发' : '已反馈' }}</span> + </template> + </el-table-column> + <el-table-column label="推送内容" prop="pushContent" align="center" /> + <el-table-column label="反馈意见" prop="feedback" align="center" > + <template #default="scope"> + <span v-if="scope.row.feedback">{{scope.row.feedback}}</span> + <span v-else>--</span> + </template> + </el-table-column> + <el-table-column label="创建时间" prop="createDate" align="center" width="120" /> + <el-table-column label="创建人" prop="createBy" align="center" /> + <el-table-column label="更新时间" prop="updateDate" align="center" width="120" /> + <el-table-column label="更新者" prop="updateBy" align="center" /> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150" > + <template #default="scope"> + <el-button link type="primary" v-if="scope.row.pushType != 2" @click="addProject('edit',scope.row)">提交反馈</el-button> + <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <pagination + v-show="total > 0" + :total="total" + v-model:page="queryParams.pageIndex" + v-model:limit="queryParams.pageSize" + @pagination="getList" + /> + <feedback ref="dialogRef" @getList="getList"></feedback> + </div> </template> -<style scoped lang="scss"> +<script setup> +import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue"; +import {ElMessage, ElMessageBox} from "element-plus"; +import feedback from './components/feedbackDialog.vue' +import {delTemplate, getTemplate} from "@/api/signAgreement/template"; +import {delWarning, getWarning} from "@/api/company/warning"; +import Cookies from "js-cookie"; +const { proxy } = getCurrentInstance(); +const loading = ref(false); +const dialogRef = ref(); +const createSignRef = ref(); +const data = reactive({ + queryParams: { + pageIndex: 1, + pageSize: 10, + filter: { + companyName: '', + companyCode: '', + createDateStart: '', + createDateEnd: '', + pushType: null, + } + }, + total: 0, + dataList: [], + dateRange: [], + statusList: [ + { + id: 1, + name: '已下发' + }, + { + id: 2, + name: '已反馈' + }, -</style> + ], +}); + +const { queryParams, total, dataList } = toRefs(data); +const classHourRef = ref(); +onMounted(()=>{ + const info = JSON.parse(Cookies.get('userInfo')) + data.queryParams.filter.companyCode = info.companynumber + getList() +}) + +onUnmounted(()=>{ + +}) + +const addProject = (type,value) => { + dialogRef.value.openDialog(type,value) +} +const getList = async () => { + loading.value = true + data.queryParams.filter.alarmStartTime = data.dateRange[0] + data.queryParams.filter.alarmEndTime = data.dateRange[1] + const res = await getWarning(data.queryParams) + if(res.code == 200){ + data.dataList = res.result.records + data.total = res.result.total + }else{ + ElMessage.warning(res.message) + } + loading.value = false +} + +/** 重置新增的表单以及其他数据 */ +function reset() { + data.queryParams = { + pageIndex: 1, + pageSize: 10, + filter: { + companyName: '', + companyCode: '', + createDateStart: '', + createDateEnd: '', + pushType: null, + } + } + data.dateRange = [] + getList() +} +const handleDelete = (val) => { + ElMessageBox.confirm( + '确定删除此条数据?', + '提示', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then( async() => { + const param = { + id:val.id + } + const res = await delWarning(param) + if(res.code == 200){ + ElMessage.success('数据删除成功') + await getList() + }else{ + ElMessage.warning(res.message) + } + }) +} + + + +const getRowKeys = (row) => { + return row.name +} +</script> -- Gitblit v1.9.2