廖井涛
7 天以前 a660db06773007b1be690e0674829c00a57aeb7b
north-glass-erp/northglass-erp/src/views/pp/machine/MaintenanceAndRepair.vue
@@ -4,26 +4,40 @@
import {useRouter} from 'vue-router'
import {changeFilterEvent, filterChanged} from "@/hook"
import {useI18n} from 'vue-i18n'
import deepClone from "@/utils/deepClone";
import {ElMessage} from "element-plus";
import {ElDatePicker, ElMessage} from "element-plus";
import request from "@/utils/request";
import {Search} from "@element-plus/icons-vue";
import  useUserInfoStore from '@/stores/userInfo'
//语言获取
const {t} = useI18n()
const userStore = useUserInfoStore()
let router = useRouter()
//定义数据返回结果
let produceList = ref([])
const getTableRow = (row, type) => {
  switch (type) {
    case 'edit' : {
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/reportingWorks/ReportingWorkDetail', query: {id: row.id}})
      request.post(`/maintenance/openSelectId/${row.id}`).then((res) => {
        if (res.code == 200) {
          getBasicData.value = res.data.data[0]
          dialogTableVisible.value=true
        } else {
          ElMessage.warning(res.msg)
        }
      })
      break
    }
    case 'delete': {
      let startTime = form.date1[0]
      let endTime = form.date1[1]
      request.post(`/maintenance/deleteMaintenance/${row.id}`).then((res) => {
        if (res.code === 200) {
        if (res.code == 200) {
          ElMessage.success(t('workOrder.deleteOk'))
          router.push({path: '/main/machine/MaintenanceAndRepair', query: {random:Math.random()}})
          router.push({path: '/main/machine/MaintenanceAndRepair', query: {startTime:startTime,endTime:endTime,random:Math.random()}})
        } else {
          ElMessage.warning(res.msg)
@@ -33,7 +47,6 @@
      break
    }
    case  'setType': {
      alert('我接收到子组件传送的反审状态')
      break
    }
  }
@@ -48,16 +61,75 @@
  return count.toFixed(2)
}
//定义接收加载表头下拉数据
const titleSelectJson = ref({
  processType: [],
})
//定义接收加载弹窗的值
const getBasicData = ref({
  device_name: '',
  type: '',
  fault_time: '',
  fault_reason: '',
  maintenance_time: '',
  maintenance_illustrate: '',
  start_time: '',
  stop_time: '',
  process: '',
  personnel: '',
  cost: '',
})
//获取3天前到当前时间
function getNowTime() {
  const start = new Date(new Date().getTime() - 3600 * 1000 * 24 * 3)
      .toISOString()
      .replace('T', ' ')
      .slice(0, 10) //默认开始时间7天前
  const end = new Date(new Date().getTime()+3600 * 1000 * 24)
      .toISOString()
      .replace('T', ' ')
      .slice(0, 10)//默认结束时间当前时间
  return [start, end]
}
const form = reactive({
  date1: '',
})
//第一次加载获取近3天时间和默认状态
form.date1 = getNowTime()
let startTime = form.date1[0]
let endTime = form.date1[1]
//首次加载
request.post(`/maintenance/selectMaintenance`).then((res) => {
  if (res.code === 200) {
    produceList = produceList.value.concat(deepClone(res.data.data))
    xGrid.value.reloadData(produceList)
request.post(`/maintenance/selectMaintenance/${startTime}/${endTime}`).then((res) => {
  if (res.code == 200) {
    xGrid.value.loadData(res.data.data)
    titleSelectJson.value.processType = res.data.process;
    gridOptions.loading = false
  } else {
    ElMessage.warning(res.msg)
  }
})
const getWorkOrder = () => {
  let startTime = form.date1[0]
  let endTime = form.date1[1]
  request.post(`/maintenance/selectMaintenance/${startTime}/${endTime}`).then((res) => {
    if (res.code == 200) {
      xGrid.value.loadData(res.data.data)
      gridOptions.loading = false
    } else {
      ElMessage.warning(res.msg)
    }
  })
}
//子组件接收参数
const xGrid = ref()
@@ -91,38 +163,38 @@
  },//表头参数
  columns: [
    {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50},
    {title: '操作', width: 140, slots: {default: 'button_slot'}, fixed: "left"},
    {title: t('basicData.operate'), width: 140, slots: {default: 'button_slot'}, fixed: "left"},
    {
      field: 'id', width: 130, title: 'Id'
    },
    {
      field: 'deviceName', width: 130, title: '设备名称', filters: [{data: ''}],
      field: 'deviceName', width: 130, title: t('machine.basicName'), filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged
    },
    {
      field: 'type', width: 120, title: '类型', filters: [{data: ''}],
      field: 'type', width: 120, title: t('machine.type'), filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged
    },
    {field: 'faultTime', width: 100, title: '故障日期', showOverflow: "ellipsis"},
    {field: 'faultTime', width: 100, title: t('machine.faultTime'), showOverflow: "ellipsis"},
    {
      field: 'faultReason', width: 100, title: '故障原因', filters: [{data: ''}],
      field: 'faultReason', width: 100, title: t('machine.faultReason'), filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged
    },
    {field: 'maintenanceTime', width: 100, title: '保养日期'},
    {field: 'maintenanceIllustrate', width: 120, title: '保养说明', showOverflow: "ellipsis"},
    {field: 'startTime', width: 160, title: '维修/保养开始时间'},
    {field: 'stopTime', width: 160, title: '维修/保养结束时间'},
    {field: 'maintenanceTime', width: 100, title: t('machine.maintenanceTime')},
    {field: 'maintenanceIllustrate', width: 120, title: t('machine.maintenanceIllustrate'), showOverflow: "ellipsis"},
    {field: 'startTime', width: 160, title: t('machine.startTime')},
    {field: 'stopTime', width: 160, title: t('machine.stopTime')},
    {
      field: 'process', width: 120, title: '所在工艺', filters: [{data: ''}],
      field: 'process', width: 120, title: t('machine.process'), filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged
    },
    {field: 'personnel', width: 150, title: '维修/保养人员'},
    {field: 'cost', width: 120, title: '费用'},
    {field: 'personnel', width: 150, title: t('machine.personnel')},
    {field: 'cost', width: 120, title: t('machine.cost')},
  ],//表头按钮
  toolbarConfig: {
@@ -138,11 +210,11 @@
  data: [],//table body实际数据
  //脚部求和
  footerMethod({columns, data}) {//页脚函数
    let footList = ['费用']
    let footList = ['']
    return [
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计:'
          return t('basicData.total')
        }
        if (footList.includes(column.field)) {
          return sumNum(data, column.field)
@@ -157,159 +229,200 @@
const size = ref<'default' | 'large' | 'small'>('default')
const value1 = ref('')
const dialogFormVisible = ref(false)
const dialogTableVisible = ref(false)
const formLabelWidth = '140px'
const form = reactive({
  name: '',
  region: '',
  date1: '',
  date2: '',
  delivery: false,
  type: [],
  resource: '',
  desc: '',
})
const updateBasic = () => {
  let machineData = ref({
    machine: getBasicData.value
  })
  request.post(`/maintenance/updateMaintenance`,machineData.value).then((res) => {
    if (res.code == 200 && res.data===true) {
      ElMessage.success(t('processCard.modifySuccessfully'))
      router.push({path: '/main/machine/MaintenanceAndRepair', query: {random:Math.random()}})
    } else {
      ElMessage.warning(res.msg)
    }
  })
}
</script>
<template>
  <div class="main-div-customer">
    <vxe-grid
        ref="xGrid"
        class="mytable-scrollbar"
        max-height="100%"
        v-bind="gridOptions"
        @filter-change="filterChanged"
  <div  style="width: 100%;height: 100%">
    <div class="head">
        <el-date-picker
            v-model="form.date1"
            type="daterange"
            format="YYYY/MM/DD"
            value-format="YYYY-MM-DD"
            :start-placeholder="$t('basicData.startDate')"
            :end-placeholder="$t('basicData.endDate')"
            :default-time="defaultTime"
    >
      <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
      <!--      下拉显示所有信息插槽-->
      <template #content="{ row}">
        <ul class="expand-wrapper">
          <li v-for="(item,key,index) in row">
            <span style="font-weight: bold">{{ key + ':  ' }}</span>
            <span>{{ item }}</span>
          </li>
        </ul>
      </template>
        />
        &nbsp;&nbsp;
        <el-button
            @click="getWorkOrder()"
            id="select"
            type="primary" :icon="Search">{{$t('basicData.search')}}
        </el-button>
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button link size="small" type="primary" @click="dialogFormVisible = true">编辑</el-button>
        <el-button link size="small" type="primary" @click="getTableRow(row,'delete')">删除</el-button>
      </template>
    </div>
    <div class="main-table">
      <vxe-grid
          ref="xGrid"
          class="mytable-scrollbar"
          height="100%"
          v-bind="gridOptions"
      <template #num1_filter="{ column, $panel }">
        <div>
          <div v-for="(option, index) in column.filters" :key="index">
            <input v-model="option.data" type="text" @input="changeFilterEvent($event, option, $panel)"/>
      >
        <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
        <!--      下拉显示所有信息插槽-->
        <template #content="{ row}">
          <ul class="expand-wrapper">
            <li v-for="(item,key,index) in row">
              <span style="font-weight: bold">{{ key + ':  ' }}</span>
              <span>{{ item }}</span>
            </li>
          </ul>
        </template>
        <!--左边固定显示的插槽-->
        <template #button_slot="{ row }">
          <!--        <el-button @click="getTableRow(row,'edit');" link type="primary" size="small">{{$t('basicData.edit')}}</el-button>-->
          <el-button @click="getTableRow(row,'edit')"
                     v-if="userStore.user.permissions.indexOf('maintenanceAndRepair.edit') > -1"
                     link
                     type="primary"
                     size="small">
            {{ $t('basicData.edit') }}
          </el-button>
          <el-button link size="small" type="primary" @click="getTableRow(row,'delete')">{{$t('basicData.delete')}}</el-button>
        </template>
        <template #num1_filter="{ column, $panel }">
          <div>
            <div v-for="(option, index) in column.filters" :key="index">
              <input v-model="option.data" type="text"
                     @keyup.enter.native="$panel.confirmFilter()"
                     @input="changeFilterEvent($event, option, $panel)"/>
            </div>
          </div>
        </div>
      </template>
        </template>
    </vxe-grid>
    <el-dialog v-model="dialogFormVisible" title="保养与维修编辑">
      </vxe-grid>
    </div>
    <el-dialog v-model="dialogTableVisible" :title="$t('machine.maintenanceAndRepairEdit')">
      <el-form :model="form">
        <el-row>
          <el-col :span="12">
            <el-form-item :label-width="formLabelWidth" label="设备名称">
              <el-input v-model="form.name" autocomplete="off" style="width: 220px"/>
            <el-form-item :label-width="formLabelWidth" :label="$t('machine.basicName')">
              <el-input v-model="getBasicData.device_name" autocomplete="off" style="width: 220px"/>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item :label-width="formLabelWidth" label="类型">
              <el-select v-model="form.region" placeholder="维修" style="width: 220px">
                <el-option label="保养" value="shanghai"/>
                <el-option label="维修" value="mobian"/>
            <el-form-item :label-width="formLabelWidth" :label="$t('machine.type')">
              <el-select v-model="getBasicData.type" :placeholder="$t('machine.service')" style="width: 220px">
                <el-option :label="$t('machine.maintain')" value="1"/>
                <el-option :label="$t('machine.service')" value="2"/>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item :label-width="formLabelWidth" label="故障日期">
            <el-form-item :label-width="formLabelWidth" :label="$t('machine.faultTime')">
              <el-date-picker
                  v-model="value1"
                  v-model="getBasicData.fault_time"
                  :size="size"
                  placeholder="2023-01-01"
                  type="date"
                  format="YYYY/MM/DD"
                  value-format="YYYY-MM-DD"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item :label-width="formLabelWidth" label="故障原因">
              <el-input v-model="form.name" autocomplete="off" style="width: 220px"/>
            <el-form-item :label-width="formLabelWidth" :label="$t('machine.faultReason')">
              <el-input v-model="getBasicData.fault_reason" autocomplete="off" style="width: 220px"/>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item :label-width="formLabelWidth" label="保养日期">
            <el-form-item :label-width="formLabelWidth" :label="$t('machine.maintenanceTime')">
              <el-date-picker
                  v-model="value1"
                  v-model="getBasicData.maintenance_time"
                  :size="size"
                  placeholder="2023-02-01"
                  type="date"
                  format="YYYY/MM/DD"
                  value-format="YYYY-MM-DD"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item :label-width="formLabelWidth" label="保养说明">
              <el-input v-model="form.name" autocomplete="off" style="width: 220px"/>
            <el-form-item :label-width="formLabelWidth" :label="$t('machine.maintenanceIllustrate')">
              <el-input v-model="getBasicData.maintenance_illustrate" autocomplete="off" style="width: 220px"/>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item :label-width="formLabelWidth" label="保养/维修开始时间">
            <el-form-item :label-width="formLabelWidth" :label="$t('machine.startTime')">
              <el-date-picker
                  v-model="value1"
                  :size="size"
                  placeholder="2023-02-01"
                  v-model="getBasicData.start_time"
                  type="date"
                  format="YYYY/MM/DD"
                  value-format="YYYY-MM-DD"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item :label-width="formLabelWidth" label="保养/维修完成时间">
            <el-form-item :label-width="formLabelWidth" :label="$t('machine.stopTime')">
              <el-date-picker
                  v-model="value1"
                  v-model="getBasicData.stop_time"
                  :size="size"
                  placeholder="2023-02-01"
                  type="date"
                  format="YYYY/MM/DD"
                  value-format="YYYY-MM-DD"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item :label-width="formLabelWidth" label="所在工艺">
              <el-select v-model="form.region" placeholder="钢化" style="width: 220px">
                <el-option label="切割" value="shanghai"/>
                <el-option label="磨边" value="mobian"/>
                <el-option label="钢化" value="ganghua"/>
            <el-form-item :label-width="formLabelWidth" :label="$t('machine.process')">
              <el-select  v-model="getBasicData.process" clearable placeholder="" style="width: 220px"
              >
                <el-option
                    v-for="item in titleSelectJson['processType']"
                    :key="item.id"
                    :label="item.basic_name"
                    :value="item.basic_name"
                />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item :label-width="formLabelWidth" label="保养/维修人员">
              <el-input v-model="form.name" autocomplete="off" style="width: 220px"/>
            <el-form-item :label-width="formLabelWidth" :label="$t('machine.personnel')">
              <el-input v-model="getBasicData.personnel" autocomplete="off" style="width: 220px"/>
            </el-form-item>
          </el-col>
        </el-row>
        <el-form-item :label-width="formLabelWidth" label="费用">
          <el-input v-model="form.name" autocomplete="off" style="width: 220px"/>
        <el-form-item :label-width="formLabelWidth" :label="$t('machine.cost')">
          <el-input v-model="getBasicData.cost" autocomplete="off" style="width: 220px"/>
        </el-form-item>
      </el-form>
      <template #footer>
      <span class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取消</el-button>
        <el-button type="primary" @click="dialogFormVisible = false">
          确认
        <el-button @click="dialogTableVisible = false">{{$t('basicData.cancelButtonText')}}</el-button>
        <el-button type="primary" @click="updateBasic">
          {{$t('basicData.update')}}
        </el-button>
      </span>
      </template>
@@ -318,8 +431,13 @@
</template>
<style scoped>
.main-div-customer {
  width: 99%;
  height: 100%;
.head{
  width: 100%;
  height: 35px;
}
.main-table{
  width: 100%;
  height: calc(100% - 35px);
}
</style>