From f2593d3cf80998a831d07cc94ac49e4f51b04429 Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期二, 15 四月 2025 16:07:28 +0800 Subject: [PATCH] 接口对接 --- src/assets/styles/index.scss | 4 src/views/firework/humiture/index.vue | 167 ++------ src/views/firework/warehouse/components/addRoomDialog.vue | 231 +++++++++++++ src/views/firework/warehouse/components/warehouseDialog.vue | 218 ++++-------- src/views/firework/humiture/components/dataDialog.vue | 67 ++- src/views/firework/warehouse/index.vue | 46 +- src/api/company/warehouse.js | 85 +++++ src/views/firework/warehouse/components/roomDialog.vue | 168 +++++++++ src/components/Pagination/index.vue | 4 9 files changed, 686 insertions(+), 304 deletions(-) diff --git a/src/api/company/warehouse.js b/src/api/company/warehouse.js new file mode 100644 index 0000000..1d710de --- /dev/null +++ b/src/api/company/warehouse.js @@ -0,0 +1,85 @@ +import request from '@/utils/request' +import {getToken} from "@/utils/auth"; + +export function getWarehouse(params) { + return request({ + url: '/store/storePageList', + method: 'post', + data: params + }) +} + +export function getRoom(params) { + return request({ + url: '/store/storeroomPageList', + method: 'post', + data: params + }) +} +export function getRoomByCompany(params) { + return request({ + url: '/store/storeroomPageListV2', + method: 'post', + data: params + }) +} + +export function getDevice(params) { + return request({ + url: '/store/storeroomDeviceList', + method: 'post', + data: params + }) +} + + + +export function addWarehouse(data) { + return request({ + url: '/store/addOrUpdateStore', + method: 'post', + data: data + }) +} + +export function addRoom(data) { + return request({ + url: '/store/addOrUpdateStoreroom', + method: 'post', + data: data + }) +} + + + +export function delWarehouse(data) { + return request({ + url: `/store/deleteStore`, + method: 'post', + params: data + }) +} + +export function delRoom(data) { + return request({ + url: `/store/deleteStoreroom`, + method: 'post', + params: data + }) +} + +export function getHumidity(data) { + return request({ + url: `/store/humidityPageList`, + method: 'post', + data: data + }) +} + +export function getTemperature(data) { + return request({ + url: `/store/temperaturePageList`, + method: 'post', + data: data + }) +} diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss index c28ac66..b84ac11 100644 --- a/src/assets/styles/index.scss +++ b/src/assets/styles/index.scss @@ -132,7 +132,7 @@ } .pagination-container { - margin-top: 30px; + margin-top: 15px; } .text-center { @@ -196,4 +196,4 @@ .blueBg{ background: #385ca7; -} \ No newline at end of file +} diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue index 38de953..d4b31ad 100644 --- a/src/components/Pagination/index.vue +++ b/src/components/Pagination/index.vue @@ -33,7 +33,7 @@ pageSizes: { type: Array, default() { - return [10, 20, 30, 50] + return [5,10, 20, 30, 50] } }, // 移动端页码按钮的数量端默认值5 @@ -102,4 +102,4 @@ .pagination-container.hidden { display: none; } -</style> \ No newline at end of file +</style> diff --git a/src/views/firework/humiture/components/dataDialog.vue b/src/views/firework/humiture/components/dataDialog.vue index c5a2afc..4ed7971 100644 --- a/src/views/firework/humiture/components/dataDialog.vue +++ b/src/views/firework/humiture/components/dataDialog.vue @@ -10,17 +10,30 @@ > <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-column label="探测器" prop="deviceName" align="center" /> + <el-table-column label="浓度值" prop="realValue" align="center" > + <template #default="scope"> + <div>{{scope.row.realValue}}<span v-if="state.type == '温度'">℃</span><span v-else>%RH</span></div> + </template> + </el-table-column> + <el-table-column label="状态" prop="deviceWarning" align="center" > + <template #default="scope"> + <span v-if="scope.row.deviceWarning == 0" style="color: #42b983">正常</span> + <span v-else style="color: #ed5565">报警</span> + </template> + </el-table-column> + <el-table-column label="属性" align="center" > + <template #default="scope"> + <span>{{state.type}}</span> + </template> + </el-table-column> + <el-table-column label="时间" prop="createDate" align="center" width="120" /> </el-table> <pagination v-show="total > 0" :total="total" - v-model:page="queryParams.pageNum" + v-model:page="queryParams.pageIndex" v-model:limit="queryParams.pageSize" @pagination="getList" /> @@ -29,33 +42,53 @@ </template> <script setup> import {reactive, ref, toRefs} from "vue"; +import {getHumidity, getTemperature} from "@/api/company/warehouse"; const dialogVisible = ref(false); const emit = defineEmits(["getList"]); const loading = ref(false) const state = reactive({ + type: '', tableList: [], total: 0, queryParams: { - pageNum: 1, - pageSize: 5, + pageIndex: 1, + pageSize: 10, + filter: { + deviceId: null + } }, }) const { queryParams, total } = toRefs(state); const openDialog = async (type,value) => { + state.type = type + state.queryParams.filter.deviceId = value.deviceId + await getList() 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 + loading.value = true + if(state.type == '湿度'){ + const res = await getHumidity(state.queryParams) + if(res.code == 200){ + state.tableList = res.result.records + state.total = res.result.total + }else{ + ElMessage.warning(res.message) + } + loading.value = false + }else { + const res = await getTemperature(state.queryParams) + if(res.code == 200){ + state.tableList = res.result.records + state.total = res.result.total + }else{ + ElMessage.warning(res.message) + } + loading.value = false + } + } const handleClose = () => { dialogVisible.value = false; diff --git a/src/views/firework/humiture/index.vue b/src/views/firework/humiture/index.vue index dcb763b..01a985c 100644 --- a/src/views/firework/humiture/index.vue +++ b/src/views/firework/humiture/index.vue @@ -5,17 +5,13 @@ <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-column label="仓库" prop="storeName" align="center" /> + <el-table-column label="库房" prop="storeroomName" align="center" /> </el-table> <pagination v-show="total > 0" :total="total" - v-model:page="queryParams.pageNum" + v-model:page="queryParams.pageIndex" v-model:limit="queryParams.pageSize" @pagination="getListAll" /> @@ -24,20 +20,20 @@ <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"> + <div class="grid-container"> + <div v-for="(item,index) in state.dataList" :key="index" style="width: 365px;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"> + <div style="font-size: 18px;font-weight: 700;margin-bottom: 25px">{{item.storeName}}—{{item.storeroomName}}—{{item.deviceName}}</div> + <div style="display: flex;align-items: center;margin-bottom: 15px"> <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> + <div style="display: flex;justify-content: space-between;margin-bottom: 10px;align-items: center"> + <span>温度:{{item.temperatureValue}}℃</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> + <div style="display: flex;justify-content: space-between;align-items: center"> + <span>湿度:{{item.humidityValue}}%RH</span> <el-button type="primary" plain style="margin-left: 15px" @click="openData('湿度',item)">历史数据</el-button> </div> </div> @@ -50,7 +46,7 @@ <!-- </el-col>--> <!-- </el-row>--> </el-scrollbar> - <el-empty v-else></el-empty> + <el-empty v-else description="暂无设备数据" ></el-empty> <d-dialog ref="dialogRef" @getList="getListAll"></d-dialog> </div> </template> @@ -59,86 +55,56 @@ import {onMounted, reactive, ref, toRefs} from "vue"; import {ElMessage} from "element-plus"; import dDialog from './components/dataDialog.vue' +import {getDevice, getRoomByCompany} from "@/api/company/warehouse"; +import Cookies from "js-cookie"; const dialogRef = ref(null) const state = reactive({ queryParams: { - pageNum: 1, + pageIndex: 1, pageSize: 5, - warningType: '' + filter: { + companyName: '' + } }, cardQueryParams: { - warningType: '' + pageIndex: 1, + pageSize: 5, + filter: { + companyCode : '' + } }, 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°' - }, - ], + dataList: [], tableList: [] }); const { queryParams,cardQueryParams, total, dataList } = toRefs(state); const loading = ref(false); onMounted(()=>{ + const info = JSON.parse(Cookies.get('userInfo')) + state.queryParams.filter.companyName = info.company + state.cardQueryParams.filter.companyCode = info.companynumber 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 + loading.value = true + const res = await getRoomByCompany(state.queryParams) + if(res.code == 200){ + state.tableList = res.result.records + state.total = res.result.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 res = await getDevice(state.cardQueryParams) + if(res.code == 200){ + state.dataList = res.result + }else{ + ElMessage.warning(res.message) + } } const openData = (type,val) => { dialogRef.value.openDialog(type,val); @@ -159,6 +125,14 @@ margin-bottom: 10px; //min-width: 300px; } + .grid-container{ + display: grid; + grid-template-columns: repeat(auto-fill, minmax(385px, 1fr)); + gap: 0px; + justify-content: start; + padding: 15px; + background: #f7f7f7; + } .title-font{ display:flex; align-items: center; @@ -166,47 +140,6 @@ 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; diff --git a/src/views/firework/warehouse/components/addRoomDialog.vue b/src/views/firework/warehouse/components/addRoomDialog.vue new file mode 100644 index 0000000..0752a24 --- /dev/null +++ b/src/views/firework/warehouse/components/addRoomDialog.vue @@ -0,0 +1,231 @@ +<template> + <div class="notice"> + <el-dialog + v-model="dialogVisible" + width="750px" + :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="storeroomName" > + <el-input v-model="state.form.storeroomName" placeholder="请输入库房名称"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="仓库编号:" prop="storeNum" > + <el-input v-model="state.form.storeNum" disabled ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item label="核定药量:" prop="dosage" > + <el-input v-model="state.form.dosage" type="number" min="0" placeholder="请输入核定药量"> + <template #append>kg</template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="危险等级:" prop="dangerLevel" > + <el-select + v-model="state.form.dangerLevel" + 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-row> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item label="核定人员数量:" prop="personLimit" > + <el-input v-model="state.form.personLimit" placeholder="请输入核定人员数量" @input="state.form.personLimit= state.form.personLimit.replace(/[^\d]/g,'')"></el-input> + </el-form-item> + </el-col> + </el-row> + </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 {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 {addRoom, addWarehouse} from "@/api/company/warehouse"; + +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: '', + dangerLevel:null, + companyCode: '', + storeNum: '', + storeroomName: '', + personLimit: null, + dosage: null + }, + typeList: [ + { + id: 1, + name: '1.1级库房' + }, + { + id: 2, + name: '1.3级库房' + }, + { + id: 3, + name: '无药库房' + }, + ], + storeroomList: [], + formRules:{ + acreage: [{ required: true, trigger: "blur", message:'请输入面积' }], + dangerLevel: [{ required: true, trigger: "blur",message:'请选择危险等级' }], + dosage: [{ required: true, trigger: "blur", message:'请输入核定药量' }], + personLimit: [{ required: true, trigger: "blur", message:'请输入核定人员数量' }], + storeroomName: [{ required: true, trigger: "blur", message:'请输入库房名称' }], + storeNum: [{ required: true, trigger: "blur", message:'请输入仓库编号' }], + }, +}) + + +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] + } + }) + + state.form.dangerLevel = Number(state.form.dangerLevel) + } + state.form.storeNum = value.storeNum + 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 addRoom(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 addRoom(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: '', + dangerLevel:null, + companyCode: '', + storeNum: '', + storeroomName: '', + personLimit: null, + dosage: 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/warehouse/components/roomDialog.vue b/src/views/firework/warehouse/components/roomDialog.vue new file mode 100644 index 0000000..af04773 --- /dev/null +++ b/src/views/firework/warehouse/components/roomDialog.vue @@ -0,0 +1,168 @@ +<template> + <div class="notice"> + <el-dialog + v-model="dialogVisible" + width="750px" + :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" + > + + <div style=" width: 100%;font-size: 18px;font-weight: 600;margin-bottom: 20px"> + <span>库房列表</span> + <el-button type="primary" style="margin-left: 15px" @click="addProject('add',{})">新增库房</el-button> + </div> + + <!-- 表格数据 --> + <el-table v-loading="loading" :data="state.dataList" :border="true"> + <el-table-column label="序号" type="index" align="center" width="80" /> + <el-table-column label="库房名称" prop="storeroomName" align="center" /> + <el-table-column label="仓库编号" prop="storeNum" align="center" /> + <el-table-column label="危险等级" prop="dangerLevel" align="center" > + <template #default="scope"> + <span>{{scope.row.dangerLevel == 1 ? '1.1级库房' :scope.row.dangerLevel == 2? '1.3级库房' : '无药库房'}}</span> + </template> + </el-table-column> + <el-table-column label="核定药量" prop="dosage" align="center" /> + <el-table-column label="核定人员数量" prop="personLimit" align="center" width="120"/> + <el-table-column label="创建人" prop="createBy" align="center" /> + <el-table-column label="创建时间" prop="createDate" align="center" width="120"/> + <el-table-column label="修改人" prop="updateBy" align="center" /> + <el-table-column label="修改时间" prop="updateDate" align="center" width="120"/> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180"> + <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="state.total > 0" + :total="state.total" + v-model:page="state.queryParams.pageIndex" + v-model:limit="state.queryParams.pageSize" + @pagination="getList" + /> +<!-- <template #footer>--> +<!-- <span class="dialog-footer">--> +<!-- <el-button @click="handleClose" size="default">取 消</el-button>--> +<!-- </span>--> +<!-- </template>--> + </el-dialog> + <addRoomDia ref="dialogRef" @getList="getList"></addRoomDia> + </div> +</template> +<script setup> +import {reactive, ref, toRefs} from 'vue' +import {ElMessage, ElMessageBox} from "element-plus"; +import addRoomDia from './addRoomDialog.vue' +import Cookies from "js-cookie"; +import {addWarehouse, delRoom, delWarehouse, getRoom, getWarehouse} from "@/api/company/warehouse"; + +const { proxy } = getCurrentInstance(); +const dialogVisible = ref(false); +const title = ref(""); +const busRef = ref(); +const loading = ref(false); +const length = ref() +const dialogRef = ref(); +const emit = defineEmits(["getList"]); +const state = reactive({ + dataList: [], + total: 0, + queryParams: { + pageIndex: 1, + pageSize: 10, + filter: { + storeNum: '', + companyCode: '' + } + }, +}) + +const openDialog = async (value) => { + const info = JSON.parse(Cookies.get('userInfo')) + state.queryParams.filter.companyCode = info.companynumber + state.queryParams.filter.storeNum = value.storeNum + await getList() + dialogVisible.value = true; +} +const getList = async () => { + loading.value = true + const res = await getRoom(state.queryParams) + if(res.code == 200){ + state.dataList = res.result.records + state.total = res.result.total + }else{ + ElMessage.warning(res.message) + } + loading.value = false +} +const handleClose = () => { + reset(); + dialogVisible.value = false; + emit("getList") +} +const reset = () => { + state.queryParams = { + pageIndex: 1, + pageSize: 10, + filter: { + storeNum: '', + companyCode: '' + } + } + state.dataList = [] +} +const addProject = (type,value) => { + value.storeNum = state.queryParams.filter.storeNum + dialogRef.value.openDialog(type,value) +} +const handleDelete = (val) => { + ElMessageBox.confirm( + '确定删除此条数据?', + '提示', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then( async() => { + const param = { + id: val.id + } + const res = await delRoom(param) + if(res.code == 200){ + ElMessage.success('数据删除成功') + await getList() + }else{ + ElMessage.warning(res.message) + } + }) +} +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/components/warehouseDialog.vue b/src/views/firework/warehouse/components/warehouseDialog.vue index c21769b..11e4932 100644 --- a/src/views/firework/warehouse/components/warehouseDialog.vue +++ b/src/views/firework/warehouse/components/warehouseDialog.vue @@ -2,7 +2,7 @@ <div class="notice"> <el-dialog v-model="dialogVisible" - width="900px" + width="750px" :before-close="handleClose" :close-on-press-escape="false" :close-on-click-modal="false" @@ -18,33 +18,37 @@ </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 label="仓库名称:" prop="storeName" > + <el-input v-model="state.form.storeName" 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 label="仓库面积:" prop="acreage" > + <el-input v-model="state.form.acreage" type="number" min="0" placeholder="请输入仓库面积"> + <template #append>㎡</template> + </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 label="仓库编号:" prop="storeNum" > + <el-input v-model="state.form.storeNum" 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 label="核定药量:" prop="dosage" > + <el-input v-model="state.form.dosage" type="number" min="0" placeholder="请输入核定药量"> + <template #append>kg</template> + </el-input> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="12"> - <el-form-item label="危险等级:" prop="name" > + <el-form-item label="危险等级:" prop="dangerLevel" > <el-select - v-model="state.form.typeId" + v-model="state.form.dangerLevel" placeholder="请选择" style="width: 100%" > @@ -58,91 +62,12 @@ </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 label="核定人员数量:" prop="personLimit" > + <el-input v-model="state.form.personLimit" placeholder="请输入核定人员数量" @input="state.form.personLimit= state.form.personLimit.replace(/[^\d]/g,'')"></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> @@ -162,6 +87,8 @@ import {getInfo} from "@/api/login"; import {getToken} from "@/utils/auth"; import {verifyPhone} from "@/utils/validate"; +import Cookies from "js-cookie"; +import {addWarehouse} from "@/api/company/warehouse"; const uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload"); // 上传文件服务器地址 const { proxy } = getCurrentInstance(); @@ -171,66 +98,55 @@ 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: '', + acreage: '', + dangerLevel:null, + companyCode: '', + storeNum: '', + storeName: '', + personLimit: null, + dosage: null }, typeList: [ { id: 1, - name: '法定代表人' + name: '1.1级库房' }, { id: 2, - name: '主要负责人' + name: '1.3级库房' }, { id: 3, - name: '安全负责人' - }, - { - id: 4, - name: '保管员' - }, - { - id: 5, - name: '守护员' + name: '无药库房' }, ], storeroomList: [], formRules:{ - name: [{ required: true, trigger: "blur", message:'请输入姓名' }], - phone: [{ required: true, trigger: "blur", validator: validateUserPhone }], - typeId: [{ required: true, trigger: "blur", message:'请选择人员类型' }], + acreage: [{ required: true, trigger: "blur", message:'请输入面积' }], + dangerLevel: [{ required: true, trigger: "blur",message:'请选择危险等级' }], + dosage: [{ required: true, trigger: "blur", message:'请输入核定药量' }], + personLimit: [{ required: true, trigger: "blur", message:'请输入核定人员数量' }], + storeName: [{ required: true, trigger: "blur", message:'请输入仓库名称' }], + storeNum: [{ required: true, trigger: "blur", message:'请输入仓库编号' }], }, }) -const rules = { - name: [ - { required: true, message: "姓名不能为空", trigger: "blur" }, - ], -}; - const openDialog = async (type,value) => { title.value = type === 'add' ? '新增' : '编辑' + const info = JSON.parse(Cookies.get('userInfo')) + state.form.companyCode = info.companynumber if(type === 'edit') { - state.form = JSON.parse(JSON.stringify(value)) - startPhone.value = value.phone + const data = JSON.parse(JSON.stringify(value)) + Object.keys(state.form).forEach(key => { + if(data[key]){ + state.form[key] = data[key] + } + }) + state.form.dangerLevel = Number(state.form.dangerLevel) } dialogVisible.value = true; } @@ -242,30 +158,30 @@ 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) - // } + const res = await addWarehouse(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) - // } + const res = await addWarehouse(data) + if(res.code == 200){ + ElMessage({ + type: 'success', + message: '编辑成功' + }); + }else{ + ElMessage.warning(res.message) + } emit("getList") busRef.value.clearValidate(); reset(); @@ -304,9 +220,13 @@ const reset = () => { state.form = { id: '', - name: '', - typeId:null, - phone: '', + acreage: '', + dangerLevel:null, + companyCode: '', + storeNum: '', + storeName: '', + personLimit: null, + dosage: null } state.storeroomList = [] } diff --git a/src/views/firework/warehouse/index.vue b/src/views/firework/warehouse/index.vue index 52eaff2..d2cf442 100644 --- a/src/views/firework/warehouse/index.vue +++ b/src/views/firework/warehouse/index.vue @@ -9,7 +9,7 @@ icon="Plus" @click="addProject('add',{})" > - 新增 + 新增仓库 </el-button> </el-form-item> <!-- <el-form-item label="姓名:" >--> @@ -31,19 +31,24 @@ <!-- 表格数据 --> <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="storeName" align="center" /> + <el-table-column label="仓库编号" prop="storeNum" align="center" /> + <el-table-column label="面积" prop="acreage" align="center" /> + <el-table-column label="危险等级" prop="dangerLevel" align="center" > + <template #default="scope"> + <span>{{scope.row.dangerLevel == 1 ? '1.1级库房' :scope.row.dangerLevel == 2? '1.3级库房' : '无药库房'}}</span> + </template> + </el-table-column> + <el-table-column label="核定药量" prop="dosage" align="center" /> + <el-table-column label="核定人员数量" prop="personLimit" align="center" width="120"/> + <el-table-column label="创建人" prop="createBy" align="center" /> + <el-table-column label="创建时间" prop="createDate" align="center" width="120"/> <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" > + <el-table-column label="修改时间" prop="updateDate" align="center" width="120"/> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180"> <template #default="scope"> <el-button link type="primary" @click="addProject('edit',scope.row)">编辑</el-button> + <el-button link type="primary" @click="handleRoom(scope.row)">管理库房</el-button> <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button> </template> </el-table-column> @@ -56,6 +61,7 @@ @pagination="getList" /> <warehouseDialog ref="dialogRef" @getList="getList"></warehouseDialog> + <room-dialog ref="roomRef" @getList="getList"></room-dialog> </div> </template> @@ -63,12 +69,14 @@ 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 roomDialog from './components/roomDialog.vue' import Cookies from "js-cookie"; +import {delWarehouse, getWarehouse} from "@/api/company/warehouse"; +import {subPixelOptimize} from "zrender/lib/graphic/helper/subPixelOptimize"; const { proxy } = getCurrentInstance(); const loading = ref(false); const dialogRef = ref(); +const roomRef = ref() const createSignRef = ref(); const data = reactive({ queryParams: { @@ -100,7 +108,7 @@ } const getList = async () => { loading.value = true - const res = await getWarning(data.queryParams) + const res = await getWarehouse(data.queryParams) if(res.code == 200){ data.dataList = res.result.records data.total = res.result.total @@ -132,7 +140,10 @@ type: 'warning', }) .then( async() => { - const res = await delTemplate(val.id) + const param = { + id: val.id + } + const res = await delWarehouse(param) if(res.code == 200){ ElMessage.success('数据删除成功') await getList() @@ -142,8 +153,9 @@ }) } - - +const handleRoom = (val) => { + roomRef.value.openDialog(val) +} const getRowKeys = (row) => { return row.name } -- Gitblit v1.9.2