123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535 |
- <template>
- <!-- 保温箱管理 -->
- <div style="overflow-y: auto;">
- <actionBar :operateList="operateList" :formList="formList" :ruleForm="searchRuleForm" @openModel="openModel"
- @searchProtocol="searchProtocol"></actionBar>
- <div class="card_content">
- <!-- 表单 -->
- <tables :tableList="tableList" :tableData="tableData" @buttonData="buttonData"></tables>
- <!-- 分页 -->
- <div v-if="Total">
- <pagination :total="Total" :currentPage="Pagination.PageIndex" @changeSize="changeSize"
- @changeCurrent="changeCurrent">
- </pagination>
- </div>
- </div>
- <el-dialog :title="staffTitle" :visible.sync="staffDialogVisible" width="600px" :close-on-click-modal="false"
- @close="closeDialog">
- <forms ref="childRules" :formNewList="formRuleList" :ruleForm="ruleForm" labelWidth="100px"></forms>
- <span slot="footer" class="dialog-footer" v-if="operationType != 'logs'">
- <el-button plain @click="staffDialogVisible = false">取 消</el-button>
- <el-button type="primary" :loading="confirmLoading" @click="handleAdd">确 定</el-button>
- </span>
- </el-dialog>
- <div class="management_card">
- <el-dialog :visible.sync="importDialogVisible" width="500px" :close-on-click-modal="false" @close="closeDialogil">
- <div class="card_import">
- <div class="card_incubat">
- <forms ref="incubatorRules" labelPosition="left" :formNewList="stateRuleList" :ruleForm="stateRuleForm"
- labelWidth="80px"></forms>
- </div>
- <div class="card_search_input">
- <div class="title_search">名称:</div>
- <el-input v-model="nameTitle" placeholder="请输入内容" @input="incubatorInput"></el-input>
- </div>
- <!-- 表单 -->
- <tables ref="refIncubator" :tableList="incubatorList" :tableData="incubatorData"></tables>
- <!-- 分页 -->
- <div v-if="Total">
- <pagination :total="Total1" :currentPage="Paginationil.PageIndex" :pager-countnum="5"
- layout="sizes, prev, pager, next" @changeSize="changeSizeil" @changeCurrent="changeCurrentil">
- </pagination>
- </div>
- </div>
- <span slot="footer" class="dialog-footer">
- <el-button plain @click="importDialogVisible = false">取 消</el-button>
- <el-button type="primary" :loading="incubatorLoading" @click="incubatorAdd">导 入</el-button>
- </span>
- </el-dialog>
- </div>
- <el-dialog :visible.sync="dialogVisible" width="80%" @close="temperatureClose">
- <template slot="title">
- <div style="display: flex;align-items: center;">
- <span style="margin-right: 10px;font-size: 20px;">温湿度记录</span>
- <el-date-picker v-model="timeQuantum" value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange"
- :picker-options="pickerOptions" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
- align="center" @change="timeChange">
- </el-date-picker>
- </div>
- </template>
- <thermography ref="thermo" :waybillNo="waybillNo" :timeData="timeQuantum"></thermography>
- </el-dialog>
- <centerControl ref="control"></centerControl>
- </div>
- </template>
- <script>
- import {
- getSysUserBind
- } from '@/api/user'
- import {
- getCoolerBox,
- getCoolerBoxDetails,
- addCoolerBox,
- putCoolerBox,
- delCoolerBox,
- getDevice,
- addCoolerBoxImport
- } from '@/api/incubator'
- import actionBar from '@/components/actionBar'
- import tables from '@/components/tables'
- import pagination from '@/components/pagination'
- import forms from '@/components/forms'
- import thermography from '@/components/thermography'
- import centerControl from '@/components/centerControl'
- import {
- formRules,
- employee,
- incubator
- } from "./incubator.js";
- import {
- startStatus,
- iceraftStatus
- } from '@/assets/js/blockSort'
- export default {
- name: 'IncubatorManagement',
- components: {
- actionBar,
- tables,
- pagination,
- forms,
- thermography,
- centerControl
- },
- data() {
- return {
- pickerOptions: {
- shortcuts: [{
- text: '最近一周',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
- picker.$emit('pick', [start, end]);
- }
- }, {
- text: '最近一个月',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
- picker.$emit('pick', [start, end]);
- }
- }, {
- text: '最近三个月',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
- picker.$emit('pick', [start, end]);
- }
- }]
- },
- timeQuantum: [this.getTime(new Date(new Date().toLocaleDateString())), this.getTime(new Date())],
- operateList: [{
- type: 'add',
- title: '添加保温箱',
- icon: 'el-icon-plus',
- }, {
- type: 'import',
- title: '冷链平台导入',
- icon: 'el-icon-upload',
- }, {
- type: 'screen',
- title: '中控大屏',
- icon: 'el-icon-position',
- colour: 'success'
- }],
- formList: [{
- type: 'input',
- label: '名称',
- field: 'name',
- placeholder: '名称',
- }, {
- type: 'input',
- label: 'SN',
- field: 'sn',
- placeholder: 'SN',
- }, {
- type: 'select',
- label: '状态',
- field: 'status',
- placeholder: '请选择状态',
- options: iceraftStatus(),
- }],
- searchRuleForm: {
- name: '',
- sn: '',
- status: '',
- },
- searchValue: {},
- Pagination: {
- PageIndex: 1,
- PageSize: 10,
- },
- Total: 0,
- tableData: [],
- operationType: '',
- tableList: employee(),
- staffTitle: '添加',
- staffDialogVisible: false,
- formRuleList: [],
- ruleForm: {
- name: '',
- sn: '',
- status: '2',
- },
- confirmLoading: false,
- selectingData: {},
- importDialogVisible: false,
- incubatorList: incubator(),
- incubatorData: [],
- Total1: 0,
- Paginationil: {
- PageIndex: 1,
- PageSize: 10,
- },
- stateRuleList: [{
- field: 'status',
- label: '状态',
- placeholder: '状态',
- type: 'radio',
- colWidth: 24,
- rules: [{
- required: true,
- message: '选择状态',
- trigger: 'change'
- }],
- options: startStatus()
- }],
- stateRuleForm: {
- status: '2',
- },
- nameTitle: '',
- incubatorLoading: false,
- timer: null, //定时器名称
- dialogVisible: false,
- waybillNo: '',
- }
- },
- beforeDestroy() {
- clearInterval(this.timer); // 清除定时器
- this.timer = null;
- },
- mounted() {
- const dataList = formRules();
- this.formRuleList = dataList;
- this.getList()
- },
- methods: {
- getTime(time) {
- var date = new Date(time)
- var y = date.getFullYear()
- var m = date.getMonth() + 1
- m = m < 10 ? '0' + m : m
- var d = date.getDate()
- d = d < 10 ? '0' + d : d
- var h = date.getHours()
- h = h < 10 ? '0' + h : h
- var minute = date.getMinutes()
- minute = minute < 10 ? '0' + minute : minute
- var s = date.getSeconds()
- s = s < 10 ? '0' + s : s
- return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + s
- },
- // 搜索
- searchProtocol(value) {
- this.searchValue = value
- this.getList()
- },
- // 获取运单列表
- getList() {
- var params = {
- page: this.Pagination.PageIndex,
- pageSize: this.Pagination.PageSize,
- showTemp: true,
- ...this.searchValue
- }
- getCoolerBox(params).then(res => {
- if (res.code == 200) {
- this.tableData = res.data.list
- this.Total = res.data.count
- this.timer = setTimeout(() => {
- this.getList();
- }, 60000)
- }
- })
- },
- // 选项赋值
- optionMatching(value, field) {
- this.formRuleList.forEach((item, index) => {
- if (item.field == field) {
- item.options = value
- }
- })
- },
- // 弹窗表单添加
- handleAdd() {
- let flag = this.$refs['childRules'].validateForm();
- if (flag) {
- if (this.operationType == 'add') {
- this.confirmLoading = true
- var params = {
- ...this.ruleForm
- }
- addCoolerBox(params).then(res => {
- if (res.code == 200) {
- this.$message({
- message: '操作成功',
- type: 'success'
- });
- this.getList()
- this.staffDialogVisible = false
- }
- this.confirmLoading = false
- }).catch(() => {
- this.confirmLoading = false
- })
- } else if (this.operationType == 'edit') {
- this.confirmLoading = true
- var params = {
- id: this.selectingData.id,
- name: this.ruleForm.name,
- sn: this.ruleForm.sn,
- status: this.ruleForm.status,
- }
- putCoolerBox(params).then(res => {
- if (res.code == 200) {
- this.$message({
- message: '操作成功',
- type: 'success'
- });
- this.getList()
- }
- this.staffDialogVisible = false
- this.confirmLoading = false
- }).catch(() => {
- this.confirmLoading = false
- })
- }
- } else {
- this.$message.error('表单信息不完整,请继续填写完整');
- }
- },
- buttonData(row, type) {
- this.selectingData = row
- this.operationType = type
- if (type == 'edit') {
- this.staffTitle = '编辑'
- this.staffDialogVisible = true
- setTimeout(() => {
- this.$nextTick(() => {
- this.ruleForm = JSON.parse(JSON.stringify(row))
- })
- })
- } else if (type == 'del') {
- this.deleteUser(row.id)
- } else if (type == 'logs') {
- this.staffTitle = '详情'
- this.staffDialogVisible = true
- this.formRuleList.forEach((item, index) => {
- item.disabled = true
- })
- this.ruleForm = JSON.parse(JSON.stringify(row))
- } else if (type == 'record') {
- this.dialogVisible = true
- this.waybillNo = row.sn
- this.$nextTick(() => {
- this.$refs.thermo.getProbe()
- })
- }
- },
- // 选择时间
- timeChange() {
- this.$nextTick(() => {
- this.$refs.thermo.getTemperature()
- })
- },
- openModel(type) {
- if (type == 'add') {
- this.staffTitle = '添加'
- this.staffDialogVisible = true
- this.operationType = type
- } else if (type == 'import') {
- this.importDialogVisible = true
- this.getDeviceList()
- }else if(type == 'screen'){
- this.$refs.control.controlVisible = true
- this.$nextTick(() => {
- setTimeout(() => {
- this.$refs.control.keyUpSearch()
- }, 100)
- })
- }
- },
- // 获取设备列表
- getDeviceList() {
- var params = {
- page: this.Paginationil.PageIndex,
- pageSize: this.Paginationil.PageSize,
- name: this.nameTitle,
- }
- getDevice(params).then(res => {
- if (res.code == 200) {
- this.incubatorData = res.data.list
- this.Total1 = res.data.count
- }
- })
- },
- // 搜索保温箱
- incubatorInput(value) {
- this.nameTitle = value
- this.getDeviceList()
- },
- // 批量导入保温箱
- incubatorAdd() {
- const arrID = this.$refs.refIncubator.waybillIds
- let arr1 = []
- arrID.forEach(item => {
- let arr2 = {
- sn: item.T_sn,
- name: item.T_devName,
- }
- arr1.push(arr2)
- })
- let flag = this.$refs['incubatorRules'].validateForm();
- if (flag) {
- if (arr1.length > 0) {
- this.incubatorLoading = true
- let params = {
- list: arr1,
- ...this.stateRuleForm,
- }
- addCoolerBoxImport(params).then(res => {
- if (res.code == 200) {
- this.$message({
- message: '操作成功',
- type: 'success'
- });
- this.getList()
- this.importDialogVisible = false
- }
- this.incubatorLoading = false
- }).catch(() => {
- this.incubatorLoading = false
- })
- } else {
- this.$message.warning('请选择需要导入的保温箱');
- }
- } else {
- this.$message.error('表单信息不完整,请继续填写完整');
- }
- },
- // 删除保温箱
- deleteUser(id) {
- this.$confirm('此操作将永久删除该保温箱, 是否继续?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- delCoolerBox({
- id: id,
- }).then(res => {
- if (res.code == 200) {
- this.$message({
- message: '操作成功',
- type: 'success'
- });
- const precisePage = Math.ceil((this.Total - 1) / this.Pagination.PageSize)
- this.Pagination.PageIndex = this.Pagination.PageIndex > precisePage ? precisePage : this
- .Pagination.PageIndex
- this.Pagination.PageIndex = this.Pagination.PageIndex < 1 ? 1 : this.Pagination.PageIndex
- this.getList()
- }
- })
- }).catch(() => {});
- },
- changeSize(val) {
- this.Pagination.PageSize = val
- this.getList()
- },
- changeCurrent(val) {
- this.Pagination.PageIndex = val
- this.getList()
- },
- changeSizeil(val) {
- this.Paginationil.PageSize = val
- this.getDeviceList()
- },
- changeCurrentil(val) {
- this.Paginationil.PageIndex = val
- this.getDeviceList()
- },
- // 清空表单
- closeDialog() {
- this.formRuleList.forEach((item, index) => {
- item.disabled = false
- })
- this.ruleForm = {}
- this.$refs.childRules.resetCheck();
- },
- // 关闭温湿度记录
- temperatureClose() {
- this.timeQuantum = [this.getTime(new Date(new Date().toLocaleDateString())), this.getTime(new Date())]
- },
- closeDialogil() {
- this.$refs.incubatorRules.resetCheck();
- this.$refs.refIncubator.clearSelected();
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .card_check_title {
- display: flex;
- align-items: center;
- }
- .icon_import {
- margin-right: 5px;
- font-size: 20px;
- }
- .card_import {
- margin-top: 15px;
- box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
- margin-bottom: 20px;
- border-radius: 10px;
- }
- .management_card ::v-deep .el-dialog__body {
- padding: 0px 20px !important;
- }
- .card_incubat {
- padding-left: 15px;
- border-bottom: 1px solid #EBEEF5;
- padding-top: 15px;
- margin-bottom: 15px;
- }
- .card_search_input {
- display: flex;
- align-items: center;
- padding: 15px 20px 15px 20px;
- border-bottom: 1px solid #EBEEF5;
- }
- .title_search {
- flex: none;
- margin-right: 5px;
- }
- </style>
|