|
@@ -1,308 +1,347 @@
|
|
|
<template>
|
|
<template>
|
|
|
- <ContentWrap v-loading="formLoading">
|
|
|
|
|
|
|
+ <div v-loading="formLoading" class="maintain-detail-page">
|
|
|
|
|
+ <div class="detail-header">
|
|
|
|
|
+ <div class="detail-header__main">
|
|
|
|
|
+ <div class="detail-header__icon">
|
|
|
|
|
+ <Icon icon="ep:tools" />
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div>
|
|
|
|
|
+ <h2 class="detail-title">维修工单详情</h2>
|
|
|
|
|
+ <p class="detail-subtitle">查看设备故障、维修处理与关联物料信息</p>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <el-button size="default" @click="close">
|
|
|
|
|
+ <Icon icon="ep:arrow-left" class="mr-5px" />返回
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
<el-form
|
|
<el-form
|
|
|
ref="formRef"
|
|
ref="formRef"
|
|
|
:model="formData"
|
|
:model="formData"
|
|
|
:rules="formData.type === 'in' ? formRules : outFormRules"
|
|
:rules="formData.type === 'in' ? formRules : outFormRules"
|
|
|
- v-loading="formLoading"
|
|
|
|
|
- style="margin-right: 4em; margin-left: 0.5em; margin-top: 1em"
|
|
|
|
|
- label-width="130px"
|
|
|
|
|
- >
|
|
|
|
|
- <div class="base-expandable-content">
|
|
|
|
|
- <el-row>
|
|
|
|
|
- <el-col :span="8">
|
|
|
|
|
|
|
+ size="default"
|
|
|
|
|
+ label-width="112px"
|
|
|
|
|
+ class="detail-form">
|
|
|
|
|
+ <section class="detail-section">
|
|
|
|
|
+ <div class="section-heading"><span></span>基础信息</div>
|
|
|
|
|
+ <el-row :gutter="24">
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
<el-form-item :label="t('maintain.deviceName')" prop="deviceName">
|
|
<el-form-item :label="t('maintain.deviceName')" prop="deviceName">
|
|
|
- <el-select disabled v-model="formData.deviceName" />
|
|
|
|
|
|
|
+ <el-input v-model="formData.deviceName" disabled />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
<el-form-item :label="t('maintain.status')" prop="status">
|
|
<el-form-item :label="t('maintain.status')" prop="status">
|
|
|
- <el-select v-model="formData.status" clearable disabled>
|
|
|
|
|
|
|
+ <el-select v-model="formData.status" disabled>
|
|
|
<el-option
|
|
<el-option
|
|
|
v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_STATUS)"
|
|
v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_STATUS)"
|
|
|
:key="dict.value"
|
|
:key="dict.value"
|
|
|
:label="dict.label"
|
|
:label="dict.label"
|
|
|
- :value="dict.value"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ :value="dict.value" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
<el-form-item :label="t('iotMaintain.repairType')" prop="type">
|
|
<el-form-item :label="t('iotMaintain.repairType')" prop="type">
|
|
|
- <el-select disabled v-model="formData.type" clearable>
|
|
|
|
|
|
|
+ <el-select v-model="formData.type" disabled>
|
|
|
<el-option
|
|
<el-option
|
|
|
v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_TYPE)"
|
|
v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_TYPE)"
|
|
|
:key="dict.value"
|
|
:key="dict.value"
|
|
|
:label="dict.label"
|
|
:label="dict.label"
|
|
|
- :value="dict.value"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ :value="dict.value" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
<el-form-item :label="t('iotMaintain.shutDown')" prop="ifStop">
|
|
<el-form-item :label="t('iotMaintain.shutDown')" prop="ifStop">
|
|
|
- <el-select v-model="formData.ifStop" clearable disabled>
|
|
|
|
|
|
|
+ <el-select v-model="formData.ifStop" disabled>
|
|
|
<el-option
|
|
<el-option
|
|
|
v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
|
|
v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
|
|
|
:key="dict.value"
|
|
:key="dict.value"
|
|
|
:label="dict.label"
|
|
:label="dict.label"
|
|
|
- :value="dict.value"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ :value="dict.value" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
|
|
+ <el-form-item :label="t('iotMaintain.failureTime')" prop="failureTime">
|
|
|
|
|
+ <el-date-picker
|
|
|
|
|
+ v-model="formData.failureTime"
|
|
|
|
|
+ type="datetime"
|
|
|
|
|
+ value-format="x"
|
|
|
|
|
+ disabled />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
|
|
+ <el-form-item :label="t('iotMaintain.faultySystem')" prop="failureSystem">
|
|
|
|
|
+ <el-input v-model="formData.failureSystem" disabled />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
|
|
+ <el-form-item :label="t('iotMaintain.failureImpact')" prop="failureInfluence">
|
|
|
|
|
+ <el-input v-model="formData.failureInfluence" disabled />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+ </section>
|
|
|
|
|
+
|
|
|
|
|
+ <section class="detail-section">
|
|
|
|
|
+ <div class="section-heading"><span></span>维修处理</div>
|
|
|
|
|
+ <el-row :gutter="24">
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
<el-form-item
|
|
<el-form-item
|
|
|
:label="t('iotMaintain.startTime')"
|
|
:label="t('iotMaintain.startTime')"
|
|
|
prop="maintainStartTime"
|
|
prop="maintainStartTime"
|
|
|
- :rules="formData.type === 'in' ? startRule : []"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ :rules="formData.type === 'in' ? startRule : []">
|
|
|
<el-date-picker
|
|
<el-date-picker
|
|
|
- disabled
|
|
|
|
|
- style="width: 150%"
|
|
|
|
|
v-model="formData.maintainStartTime"
|
|
v-model="formData.maintainStartTime"
|
|
|
type="datetime"
|
|
type="datetime"
|
|
|
value-format="x"
|
|
value-format="x"
|
|
|
- />
|
|
|
|
|
|
|
+ disabled />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
<el-form-item
|
|
<el-form-item
|
|
|
:label="t('iotMaintain.endTime')"
|
|
:label="t('iotMaintain.endTime')"
|
|
|
prop="maintainEndTime"
|
|
prop="maintainEndTime"
|
|
|
- :rules="formData.type === 'in' ? endRule : []"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ :rules="formData.type === 'in' ? endRule : []">
|
|
|
<el-date-picker
|
|
<el-date-picker
|
|
|
- disabled
|
|
|
|
|
- style="width: 150%"
|
|
|
|
|
v-model="formData.maintainEndTime"
|
|
v-model="formData.maintainEndTime"
|
|
|
type="datetime"
|
|
type="datetime"
|
|
|
value-format="x"
|
|
value-format="x"
|
|
|
- />
|
|
|
|
|
|
|
+ disabled />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
<el-form-item :label="t('iotMaintain.PersonInCharge')" prop="maintainPerson">
|
|
<el-form-item :label="t('iotMaintain.PersonInCharge')" prop="maintainPerson">
|
|
|
- <el-select
|
|
|
|
|
- v-model="formData.maintainPerson"
|
|
|
|
|
- filterable
|
|
|
|
|
- clearable
|
|
|
|
|
- style="width: 100%"
|
|
|
|
|
- disabled
|
|
|
|
|
- >
|
|
|
|
|
- <el-option
|
|
|
|
|
- v-for="item in deptUsers"
|
|
|
|
|
- :key="item.id"
|
|
|
|
|
- :label="item.nickname"
|
|
|
|
|
- :value="item.id"
|
|
|
|
|
- />
|
|
|
|
|
- </el-select>
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </el-col>
|
|
|
|
|
- <el-col :span="8">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.failureTime')" prop="failureTime">
|
|
|
|
|
- <el-date-picker
|
|
|
|
|
- disabled
|
|
|
|
|
- style="width: 150%"
|
|
|
|
|
- v-model="formData.failureTime"
|
|
|
|
|
- type="datetime"
|
|
|
|
|
- value-format="x"
|
|
|
|
|
- />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </el-col>
|
|
|
|
|
- <el-col :span="8">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.failureImpact')" prop="failureInfluence">
|
|
|
|
|
- <el-input v-model="formData.failureInfluence" disabled />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </el-col>
|
|
|
|
|
- <el-col :span="8">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.faultySystem')" prop="failureSystem">
|
|
|
|
|
- <el-input v-model="formData.failureSystem" disabled />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </el-col>
|
|
|
|
|
- <el-col :span="8">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.picture')" prop="pics">
|
|
|
|
|
- <UploadImgs v-model="formData.pics" :disabled="true" height="55px" />
|
|
|
|
|
|
|
+ <el-input v-model="formData.maintainPerson" disabled />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
<el-form-item :label="t('maintain.maintainWay')" prop="maintainMethod">
|
|
<el-form-item :label="t('maintain.maintainWay')" prop="maintainMethod">
|
|
|
- <el-select v-model="formData.maintainMethod" clearable disabled>
|
|
|
|
|
|
|
+ <el-select v-model="formData.maintainMethod" disabled>
|
|
|
<el-option
|
|
<el-option
|
|
|
v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAINTAIN_METHOD)"
|
|
v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAINTAIN_METHOD)"
|
|
|
:key="dict.value"
|
|
:key="dict.value"
|
|
|
:label="dict.label"
|
|
:label="dict.label"
|
|
|
- :value="dict.value"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ :value="dict.value" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
|
|
+ <el-form-item
|
|
|
|
|
+ :label="t('iotMaintain.repairCosts')"
|
|
|
|
|
+ prop="maintainFee"
|
|
|
|
|
+ :rules="formData.type === 'out' ? feeRules : []">
|
|
|
|
|
+ <el-input-number
|
|
|
|
|
+ v-model="formData.maintainFee"
|
|
|
|
|
+ :min="0"
|
|
|
|
|
+ :precision="2"
|
|
|
|
|
+ :step="0.1"
|
|
|
|
|
+ controls-position="right"
|
|
|
|
|
+ disabled />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :span="24">
|
|
|
<el-form-item :label="t('maintain.methodDescription')" prop="methodDescription">
|
|
<el-form-item :label="t('maintain.methodDescription')" prop="methodDescription">
|
|
|
- <el-input v-model="formData.methodDescription" type="textarea" disabled />
|
|
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-model="formData.methodDescription"
|
|
|
|
|
+ type="textarea"
|
|
|
|
|
+ :rows="2"
|
|
|
|
|
+ resize="none"
|
|
|
|
|
+ disabled />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8" v-if="formData.type === 'out'">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.applyPerson')" prop="applyPersonId" :rules="formData.type==='out'?classifyRules:[]">
|
|
|
|
|
- <el-select v-model="formData.applyPersonId" :placeholder="t('iotMaintain.applyPersonHolder')" disabled clearable>
|
|
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+ </section>
|
|
|
|
|
+
|
|
|
|
|
+ <section v-if="formData.type === 'out'" class="detail-section">
|
|
|
|
|
+ <div class="section-heading"><span></span>外委信息</div>
|
|
|
|
|
+ <el-row :gutter="24">
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
|
|
+ <el-form-item
|
|
|
|
|
+ :label="t('iotMaintain.applyPerson')"
|
|
|
|
|
+ prop="applyPersonId"
|
|
|
|
|
+ :rules="classifyRules">
|
|
|
|
|
+ <el-select v-model="formData.applyPersonId" disabled>
|
|
|
<el-option
|
|
<el-option
|
|
|
v-for="person in applyPeoPle"
|
|
v-for="person in applyPeoPle"
|
|
|
:key="person.oaId"
|
|
:key="person.oaId"
|
|
|
:label="person.lastname"
|
|
:label="person.lastname"
|
|
|
- :value="person.oaId"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ :value="person.oaId" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8" v-if="formData.type === 'out'">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.maintainClassify')" prop="maintainClassify" :rules="formData.type==='out'?classifyRules:[]">
|
|
|
|
|
- <el-select v-model="formData.maintainClassify" :placeholder="t('iotMaintain.maintainClassifyHolder')" disabled clearable>
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
|
|
+ <el-form-item
|
|
|
|
|
+ :label="t('iotMaintain.maintainClassify')"
|
|
|
|
|
+ prop="maintainClassify"
|
|
|
|
|
+ :rules="classifyRules">
|
|
|
|
|
+ <el-select v-model="formData.maintainClassify" disabled>
|
|
|
<el-option
|
|
<el-option
|
|
|
v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_CLASSIFY)"
|
|
v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_CLASSIFY)"
|
|
|
:key="dict.value"
|
|
:key="dict.value"
|
|
|
:label="dict.label"
|
|
:label="dict.label"
|
|
|
- :value="dict.value"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ :value="dict.value" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8" v-if="formData.type === 'out'">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.kmHour')" prop="kmHour">
|
|
|
|
|
- <el-input v-model="formData.kmHour" :placeholder="t('iotMaintain.kmHourHolder')" disabled/>
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
|
|
+ <el-form-item :label="t('iotMaintain.kmHour')" prop="kmHour"
|
|
|
|
|
+ ><el-input v-model="formData.kmHour" disabled
|
|
|
|
|
+ /></el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8" v-if="formData.type === 'out'">
|
|
|
|
|
- <el-form-item :label="t('deviceForm.model')" prop="model" :rules="formData.type==='out'?modelRules:[]">
|
|
|
|
|
- <el-input v-model="formData.model" :placeholder="t('deviceForm.modelHolder')" disabled/>
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
|
|
+ <el-form-item :label="t('deviceForm.model')" prop="model" :rules="modelRules"
|
|
|
|
|
+ ><el-input v-model="formData.model" disabled
|
|
|
|
|
+ /></el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8" v-if="formData.type === 'out'">
|
|
|
|
|
- <el-form-item :label="t('deviceForm.enable')" prop="enableDate" :rules="formData.type==='out'?modelRules:[]">
|
|
|
|
|
- <el-date-picker
|
|
|
|
|
- disabled
|
|
|
|
|
- style="width: 150%"
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
|
|
+ <el-form-item :label="t('deviceForm.enable')" prop="enableDate" :rules="modelRules"
|
|
|
|
|
+ ><el-date-picker
|
|
|
v-model="formData.enableDate"
|
|
v-model="formData.enableDate"
|
|
|
type="date"
|
|
type="date"
|
|
|
value-format="YYYY-MM-DD"
|
|
value-format="YYYY-MM-DD"
|
|
|
- :placeholder="t('deviceForm.enableHolder')"
|
|
|
|
|
- />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </el-col>
|
|
|
|
|
- <el-col :span="8" v-if="formData.type === 'out'">
|
|
|
|
|
- <div style="display: flex;flex-direction: row">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.supplier')" prop="supplier" style="width: 86%" :rules="formData.type==='out'?supplierRules:[]">
|
|
|
|
|
- <el-input
|
|
|
|
|
- disabled
|
|
|
|
|
- clearable
|
|
|
|
|
- v-model="formData.supplier"
|
|
|
|
|
- :placeholder="t('iotMaintain.suppHolder')"
|
|
|
|
|
- />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </div>
|
|
|
|
|
- </el-col>
|
|
|
|
|
- <el-col :span="8" >
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.repairCosts')" prop="maintainFee" :rules="formData.type==='out'?feeRules:[]">
|
|
|
|
|
- <el-input-number
|
|
|
|
|
disabled
|
|
disabled
|
|
|
- v-model="formData.maintainFee"
|
|
|
|
|
- :min="0"
|
|
|
|
|
- :precision="2"
|
|
|
|
|
- :step="0.1"
|
|
|
|
|
- style="width: 100%"
|
|
|
|
|
- />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
|
|
+ /></el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8" v-if="formData.type === 'out'">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.projectManager')" prop="projectManager" :rules="formData.type==='out'?projectRules:[]">
|
|
|
|
|
- <el-select v-model="formData.projectManager" :placeholder="t('iotMaintain.projectManagerHolder')" disabled clearable filterable>
|
|
|
|
|
- <el-option
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
|
|
+ <el-form-item :label="t('iotMaintain.supplier')" prop="supplier" :rules="supplierRules"
|
|
|
|
|
+ ><el-input v-model="formData.supplier" disabled
|
|
|
|
|
+ /></el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
|
|
+ <el-form-item
|
|
|
|
|
+ :label="t('iotMaintain.projectManager')"
|
|
|
|
|
+ prop="projectManager"
|
|
|
|
|
+ :rules="projectRules">
|
|
|
|
|
+ <el-select v-model="formData.projectManager" disabled
|
|
|
|
|
+ ><el-option
|
|
|
v-for="person in projectManager"
|
|
v-for="person in projectManager"
|
|
|
:key="person.oaId"
|
|
:key="person.oaId"
|
|
|
:label="person.lastname"
|
|
:label="person.lastname"
|
|
|
:value="person.oaId"
|
|
:value="person.oaId"
|
|
|
- />
|
|
|
|
|
- </el-select>
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </el-col>
|
|
|
|
|
- <el-col :span="8" v-if="formData.type === 'out'">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.address')" prop="address">
|
|
|
|
|
- <el-input v-model="formData.address" disabled/>
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </el-col>
|
|
|
|
|
- <el-col :span="8" v-if="formData.type === 'out'">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.attachment')" prop="outFiles">
|
|
|
|
|
- <UploadFile v-model="formData.outFiles" :is-show-tip="false" class="min-w-80px" multiple :limit="2" disabled />
|
|
|
|
|
|
|
+ /></el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="16" v-if="formData.type === 'out'" >
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.maintainItem')" prop="maintainItem" :rules="formData.type==='out'?itemRules:[]">
|
|
|
|
|
- <el-input type="textarea" v-model="formData.maintainItem" disabled/>
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </el-col>
|
|
|
|
|
- <el-col :span="8">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.faultDescription')" prop="description">
|
|
|
|
|
- <el-input type="textarea" v-model="formData.description" disabled />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
|
|
+ <el-form-item :label="t('iotMaintain.address')" prop="address"
|
|
|
|
|
+ ><el-input v-model="formData.address" disabled
|
|
|
|
|
+ /></el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.repairDescription')" prop="maintainDescription">
|
|
|
|
|
- <el-input type="textarea" v-model="formData.maintainDescription" disabled />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
|
|
+ <el-col :xs="24" :sm="12" :xl="8">
|
|
|
|
|
+ <el-form-item :label="t('iotMaintain.attachment')" prop="outFiles"
|
|
|
|
|
+ ><UploadFile
|
|
|
|
|
+ v-model="formData.outFiles"
|
|
|
|
|
+ :is-show-tip="false"
|
|
|
|
|
+ multiple
|
|
|
|
|
+ :limit="2"
|
|
|
|
|
+ disabled
|
|
|
|
|
+ /></el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.solution')" prop="solution">
|
|
|
|
|
- <el-input type="textarea" v-model="formData.solution" disabled />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
|
|
+ <el-col :span="24">
|
|
|
|
|
+ <el-form-item
|
|
|
|
|
+ :label="t('iotMaintain.maintainItem')"
|
|
|
|
|
+ prop="maintainItem"
|
|
|
|
|
+ :rules="itemRules"
|
|
|
|
|
+ ><el-input
|
|
|
|
|
+ v-model="formData.maintainItem"
|
|
|
|
|
+ type="textarea"
|
|
|
|
|
+ :rows="2"
|
|
|
|
|
+ resize="none"
|
|
|
|
|
+ disabled
|
|
|
|
|
+ /></el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="12">
|
|
|
|
|
- <el-form-item :label="t('iotMaintain.remark')" prop="remark">
|
|
|
|
|
- <el-input v-model="formData.remark" type="textarea" disabled />
|
|
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+ </section>
|
|
|
|
|
+
|
|
|
|
|
+ <section class="detail-section">
|
|
|
|
|
+ <div class="section-heading"><span></span>故障描述</div>
|
|
|
|
|
+ <el-row :gutter="24">
|
|
|
|
|
+ <el-col :xs="24" :xl="8">
|
|
|
|
|
+ <el-form-item :label="t('iotMaintain.picture')" prop="pics">
|
|
|
|
|
+ <UploadImgs v-model="formData.pics" :disabled="true" height="72px" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
|
|
+ <el-col :xs="24" :xl="16"
|
|
|
|
|
+ ><el-form-item :label="t('iotMaintain.faultDescription')" prop="description"
|
|
|
|
|
+ ><el-input
|
|
|
|
|
+ v-model="formData.description"
|
|
|
|
|
+ type="textarea"
|
|
|
|
|
+ :rows="3"
|
|
|
|
|
+ resize="none"
|
|
|
|
|
+ disabled /></el-form-item
|
|
|
|
|
+ ></el-col>
|
|
|
|
|
+ <el-col :xs="24" :xl="12"
|
|
|
|
|
+ ><el-form-item :label="t('iotMaintain.repairDescription')" prop="maintainDescription"
|
|
|
|
|
+ ><el-input
|
|
|
|
|
+ v-model="formData.maintainDescription"
|
|
|
|
|
+ type="textarea"
|
|
|
|
|
+ :rows="3"
|
|
|
|
|
+ resize="none"
|
|
|
|
|
+ disabled /></el-form-item
|
|
|
|
|
+ ></el-col>
|
|
|
|
|
+ <el-col :xs="24" :xl="12"
|
|
|
|
|
+ ><el-form-item :label="t('iotMaintain.solution')" prop="solution"
|
|
|
|
|
+ ><el-input
|
|
|
|
|
+ v-model="formData.solution"
|
|
|
|
|
+ type="textarea"
|
|
|
|
|
+ :rows="3"
|
|
|
|
|
+ resize="none"
|
|
|
|
|
+ disabled /></el-form-item
|
|
|
|
|
+ ></el-col>
|
|
|
|
|
+ <el-col :span="24"
|
|
|
|
|
+ ><el-form-item :label="t('iotMaintain.remark')" prop="remark"
|
|
|
|
|
+ ><el-input
|
|
|
|
|
+ v-model="formData.remark"
|
|
|
|
|
+ type="textarea"
|
|
|
|
|
+ :rows="2"
|
|
|
|
|
+ resize="none"
|
|
|
|
|
+ disabled /></el-form-item
|
|
|
|
|
+ ></el-col>
|
|
|
</el-row>
|
|
</el-row>
|
|
|
- </div>
|
|
|
|
|
|
|
+ </section>
|
|
|
</el-form>
|
|
</el-form>
|
|
|
- </ContentWrap>
|
|
|
|
|
- <ContentWrap>
|
|
|
|
|
- <!-- 列表 -->
|
|
|
|
|
- <ContentWrap>
|
|
|
|
|
- <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
|
|
|
|
- <el-table-column :label="t('iotMaintain.deviceCode')" align="center" prop="deviceCode" />
|
|
|
|
|
- <el-table-column :label="t('iotMaintain.deviceName')" align="center" prop="deviceName" />
|
|
|
|
|
- <el-table-column :label="t('iotMaintain.repairItems')" align="center" prop="name" />
|
|
|
|
|
-
|
|
|
|
|
- <el-table-column :label="t('iotMaintain.operation')" align="center" min-width="120px">
|
|
|
|
|
|
|
+
|
|
|
|
|
+ <section class="detail-section material-section">
|
|
|
|
|
+ <div class="section-heading"><span></span>关联物料</div>
|
|
|
|
|
+ <ZmTable
|
|
|
|
|
+ :loading="formLoading"
|
|
|
|
|
+ :data="list"
|
|
|
|
|
+ :show-border="true"
|
|
|
|
|
+ settings-cache-key="pms-maintain-detail-material">
|
|
|
|
|
+ <ZmTableColumn
|
|
|
|
|
+ :label="t('iotMaintain.deviceCode')"
|
|
|
|
|
+ align="center"
|
|
|
|
|
+ prop="deviceCode"
|
|
|
|
|
+ fixed="left" />
|
|
|
|
|
+ <ZmTableColumn :label="t('iotMaintain.deviceName')" align="center" prop="deviceName" />
|
|
|
|
|
+ <ZmTableColumn :label="t('iotMaintain.repairItems')" align="center" prop="name" />
|
|
|
|
|
+ <ZmTableColumn :label="t('iotMaintain.operation')" align="center" width="120" fixed="right">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
- <div style="display: flex; justify-content: center; align-items: center; width: 100%">
|
|
|
|
|
- <div style="margin-left: 12px">
|
|
|
|
|
- <el-button
|
|
|
|
|
- link
|
|
|
|
|
- type="primary"
|
|
|
|
|
- @click="handleViewNew(scope.row.id, scope.row.bomNodeId)"
|
|
|
|
|
- >
|
|
|
|
|
- 物料详情
|
|
|
|
|
- </el-button>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ size="default"
|
|
|
|
|
+ link
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ @click="handleViewNew(scope.row.id, scope.row.bomNodeId)"
|
|
|
|
|
+ >物料详情</el-button
|
|
|
|
|
+ >
|
|
|
</template>
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
|
|
- </el-table>
|
|
|
|
|
- </ContentWrap>
|
|
|
|
|
- </ContentWrap>
|
|
|
|
|
- <ContentWrap>
|
|
|
|
|
- <el-form>
|
|
|
|
|
- <el-form-item style="float: right">
|
|
|
|
|
- <el-button type="info" @click="close">取 消</el-button>
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </el-form>
|
|
|
|
|
- </ContentWrap>
|
|
|
|
|
|
|
+ </ZmTableColumn>
|
|
|
|
|
+ </ZmTable>
|
|
|
|
|
+ </section>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="sticky-action-bar">
|
|
|
|
|
+ <el-button size="default" @click="close">返回</el-button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
<MaterialListDrawer
|
|
<MaterialListDrawer
|
|
|
:model-value="drawerVisible"
|
|
:model-value="drawerVisible"
|
|
|
@update:model-value="(val) => (drawerVisible = val)"
|
|
@update:model-value="(val) => (drawerVisible = val)"
|
|
|
:node-id="currentBomNodeId"
|
|
:node-id="currentBomNodeId"
|
|
|
:materials="materialList"
|
|
:materials="materialList"
|
|
|
- :detail="true"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ :detail="true" />
|
|
|
</template>
|
|
</template>
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
import { DICT_TYPE, getBoolDictOptions, getStrDictOptions } from '@/utils/dict'
|
|
import { DICT_TYPE, getBoolDictOptions, getStrDictOptions } from '@/utils/dict'
|
|
@@ -313,12 +352,13 @@ import { useTagsViewStore } from '@/store/modules/tagsView'
|
|
|
import { IotMaintainApi } from '@/api/pms/maintain'
|
|
import { IotMaintainApi } from '@/api/pms/maintain'
|
|
|
import MaterialListDrawer from '@/views/pms/iotmainworkorder/SelectedMaterialDrawer.vue'
|
|
import MaterialListDrawer from '@/views/pms/iotmainworkorder/SelectedMaterialDrawer.vue'
|
|
|
import { IotMaintainMaterialsApi } from '@/api/pms/maintain/materials'
|
|
import { IotMaintainMaterialsApi } from '@/api/pms/maintain/materials'
|
|
|
-import {CACHE_KEY, useCache} from "@/hooks/web/useCache";
|
|
|
|
|
|
|
+import { useTableComponents } from '@/components/ZmTable/useTableComponents'
|
|
|
|
|
|
|
|
/** 维修工单 表单 */
|
|
/** 维修工单 表单 */
|
|
|
defineOptions({ name: 'IotMaintainDetail' })
|
|
defineOptions({ name: 'IotMaintainDetail' })
|
|
|
|
|
|
|
|
const { t } = useI18n() // 国际化
|
|
const { t } = useI18n() // 国际化
|
|
|
|
|
+const { ZmTable, ZmTableColumn } = useTableComponents<IotMaintainMaterialVO>()
|
|
|
|
|
|
|
|
const projectRules = [{ required: true, message: '项目经理不能为空', trigger: 'blur' }]
|
|
const projectRules = [{ required: true, message: '项目经理不能为空', trigger: 'blur' }]
|
|
|
const itemRules = [{ required: true, message: '维修项目不能为空', trigger: 'blur' }]
|
|
const itemRules = [{ required: true, message: '维修项目不能为空', trigger: 'blur' }]
|
|
@@ -331,32 +371,26 @@ const applyPeoPle = ref([])
|
|
|
const projectManager = ref([])
|
|
const projectManager = ref([])
|
|
|
|
|
|
|
|
const props = defineProps<{ id?: number }>()
|
|
const props = defineProps<{ id?: number }>()
|
|
|
-const message = useMessage() // 消息弹窗
|
|
|
|
|
const { delView } = useTagsViewStore() // 视图操作
|
|
const { delView } = useTagsViewStore() // 视图操作
|
|
|
const { currentRoute, push } = useRouter()
|
|
const { currentRoute, push } = useRouter()
|
|
|
-const deptUsers = ref<UserApi.UserVO[]>([]) // 用户列表
|
|
|
|
|
-const dialogTitle = ref('') // 弹窗的标题
|
|
|
|
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
|
|
-const deviceLabel = ref('') // 表单的类型:create - 新增;update - 修改
|
|
|
|
|
const drawerVisible = ref<boolean>(false)
|
|
const drawerVisible = ref<boolean>(false)
|
|
|
-const showDrawer = ref()
|
|
|
|
|
const list = ref<IotMaintainMaterialVO[]>([]) // 列表的数据
|
|
const list = ref<IotMaintainMaterialVO[]>([]) // 列表的数据
|
|
|
-const { params, name } = useRoute() // 查询参数
|
|
|
|
|
|
|
+const { params } = useRoute() // 查询参数
|
|
|
const id = params.id || props.id
|
|
const id = params.id || props.id
|
|
|
const materialList = ref<any[]>([]) // 保养工单bom关联物料列表
|
|
const materialList = ref<any[]>([]) // 保养工单bom关联物料列表
|
|
|
-const { wsCache } = useCache()
|
|
|
|
|
const currentBomNodeId = ref<string>()
|
|
const currentBomNodeId = ref<string>()
|
|
|
const formData = ref({
|
|
const formData = ref({
|
|
|
methodDescription: undefined,
|
|
methodDescription: undefined,
|
|
|
maintainMethod: undefined,
|
|
maintainMethod: undefined,
|
|
|
- kmHour:undefined,
|
|
|
|
|
- maintainItem:undefined,
|
|
|
|
|
|
|
+ kmHour: undefined,
|
|
|
|
|
+ maintainItem: undefined,
|
|
|
enableDate: undefined,
|
|
enableDate: undefined,
|
|
|
- projectManager:undefined,
|
|
|
|
|
- applyPersonId:undefined,
|
|
|
|
|
|
|
+ projectManager: undefined,
|
|
|
|
|
+ applyPersonId: undefined,
|
|
|
maintainClassify: undefined,
|
|
maintainClassify: undefined,
|
|
|
- address:undefined,
|
|
|
|
|
- model:undefined,
|
|
|
|
|
|
|
+ address: undefined,
|
|
|
|
|
+ model: undefined,
|
|
|
id: undefined,
|
|
id: undefined,
|
|
|
failureCode: undefined,
|
|
failureCode: undefined,
|
|
|
failureName: undefined,
|
|
failureName: undefined,
|
|
@@ -369,8 +403,8 @@ const formData = ref({
|
|
|
failureSystem: undefined,
|
|
failureSystem: undefined,
|
|
|
description: undefined,
|
|
description: undefined,
|
|
|
pic: undefined,
|
|
pic: undefined,
|
|
|
- pics:undefined,
|
|
|
|
|
- outFiles:undefined,
|
|
|
|
|
|
|
+ pics: undefined,
|
|
|
|
|
+ outFiles: undefined,
|
|
|
solution: undefined,
|
|
solution: undefined,
|
|
|
maintainStartTime: undefined,
|
|
maintainStartTime: undefined,
|
|
|
maintainEndTime: undefined,
|
|
maintainEndTime: undefined,
|
|
@@ -384,7 +418,7 @@ const formData = ref({
|
|
|
supplier: undefined,
|
|
supplier: undefined,
|
|
|
maintainFee: undefined,
|
|
maintainFee: undefined,
|
|
|
outFile: undefined,
|
|
outFile: undefined,
|
|
|
- supplierName: undefined,
|
|
|
|
|
|
|
+ supplierName: undefined
|
|
|
})
|
|
})
|
|
|
const formRules = reactive({
|
|
const formRules = reactive({
|
|
|
// deviceName: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
|
|
// deviceName: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
|
|
@@ -437,13 +471,10 @@ const handleViewNew = (nodeId, bomId) => {
|
|
|
materialList.value = res.list
|
|
materialList.value = res.list
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
-const userId = ref('')
|
|
|
|
|
/** 提交表单 */
|
|
/** 提交表单 */
|
|
|
onMounted(async () => {
|
|
onMounted(async () => {
|
|
|
- const userInfo = wsCache.get(CACHE_KEY.USER)
|
|
|
|
|
- userId.value = userInfo.user.nickname;
|
|
|
|
|
|
|
+ formLoading.value = true
|
|
|
await IotMaintainApi.getIotMaintain(id).then((res) => {
|
|
await IotMaintainApi.getIotMaintain(id).then((res) => {
|
|
|
- debugger
|
|
|
|
|
formData.value = res
|
|
formData.value = res
|
|
|
if (res.outFile) {
|
|
if (res.outFile) {
|
|
|
formData.value.outFile = res.outFile.split(',')
|
|
formData.value.outFile = res.outFile.split(',')
|
|
@@ -462,10 +493,174 @@ onMounted(async () => {
|
|
|
applyPeoPle.value = resss
|
|
applyPeoPle.value = resss
|
|
|
})
|
|
})
|
|
|
IotMaintainApi.getProjectUsers(res.creator).then((ressss) => {
|
|
IotMaintainApi.getProjectUsers(res.creator).then((ressss) => {
|
|
|
- debugger
|
|
|
|
|
projectManager.value = ressss
|
|
projectManager.value = ressss
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
|
|
+ formLoading.value = false
|
|
|
})
|
|
})
|
|
|
</script>
|
|
</script>
|
|
|
|
|
+
|
|
|
|
|
+<style scoped>
|
|
|
|
|
+.maintain-detail-page {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ min-height: calc(
|
|
|
|
|
+ 100vh - 20px - var(--top-tool-height) - var(--tags-view-height) - var(--app-footer-height)
|
|
|
|
|
+ );
|
|
|
|
|
+ padding: 16px;
|
|
|
|
|
+ background: #f5f7fa;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.detail-header {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ padding: 16px 20px;
|
|
|
|
|
+ margin-bottom: 16px;
|
|
|
|
|
+ background: var(--el-bg-color);
|
|
|
|
|
+ border-radius: 8px;
|
|
|
|
|
+ box-shadow: 0 1px 4px rgb(0 0 0 / 8%);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.detail-header__main {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ min-width: 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.detail-header__icon {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ width: 42px;
|
|
|
|
|
+ height: 42px;
|
|
|
|
|
+ margin-right: 12px;
|
|
|
|
|
+ font-size: 20px;
|
|
|
|
|
+ color: var(--el-color-primary);
|
|
|
|
|
+ background: var(--el-color-primary-light-9);
|
|
|
|
|
+ border: 1px solid var(--el-color-primary-light-7);
|
|
|
|
|
+ border-radius: 8px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.detail-title {
|
|
|
|
|
+ margin: 0;
|
|
|
|
|
+ font-size: 18px;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ line-height: 26px;
|
|
|
|
|
+ color: var(--el-text-color-primary);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.detail-subtitle {
|
|
|
|
|
+ margin: 2px 0 0;
|
|
|
|
|
+ font-size: 13px;
|
|
|
|
|
+ line-height: 20px;
|
|
|
|
|
+ color: var(--el-text-color-secondary);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.detail-form,
|
|
|
|
|
+.detail-section {
|
|
|
|
|
+ min-width: 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.detail-section {
|
|
|
|
|
+ padding: 0 20px 4px;
|
|
|
|
|
+ margin-bottom: 16px;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+ background: var(--el-bg-color);
|
|
|
|
|
+ border: 1px solid var(--el-border-color-lighter);
|
|
|
|
|
+ border-radius: 8px;
|
|
|
|
|
+ box-shadow: 0 1px 4px rgb(0 0 0 / 5%);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.section-heading {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ height: 46px;
|
|
|
|
|
+ padding: 0 20px;
|
|
|
|
|
+ margin: 0 -20px 16px;
|
|
|
|
|
+ font-size: 16px;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ color: var(--el-text-color-primary);
|
|
|
|
|
+ background: var(--el-fill-color-extra-light);
|
|
|
|
|
+ border-bottom: 1px solid var(--el-border-color-lighter);
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.section-heading span {
|
|
|
|
|
+ width: 4px;
|
|
|
|
|
+ height: 18px;
|
|
|
|
|
+ margin-right: 10px;
|
|
|
|
|
+ background: var(--el-color-primary);
|
|
|
|
|
+ border-radius: 2px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.detail-form :deep(.el-select),
|
|
|
|
|
+.detail-form :deep(.el-date-editor),
|
|
|
|
|
+.detail-form :deep(.el-input-number) {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.detail-form :deep(.el-form-item) {
|
|
|
|
|
+ margin-bottom: 16px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.material-section {
|
|
|
|
|
+ padding-bottom: 20px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.sticky-action-bar {
|
|
|
|
|
+ position: sticky;
|
|
|
|
|
+ bottom: 0;
|
|
|
|
|
+ z-index: 20;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: flex-end;
|
|
|
|
|
+ gap: 10px;
|
|
|
|
|
+ min-height: 58px;
|
|
|
|
|
+ padding: 10px 20px;
|
|
|
|
|
+ margin-top: auto;
|
|
|
|
|
+ background: var(--el-bg-color);
|
|
|
|
|
+ border-top: 1px solid var(--el-border-color-lighter);
|
|
|
|
|
+ border-radius: 8px;
|
|
|
|
|
+ box-shadow: 0 -4px 12px rgb(0 0 0 / 8%);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.sticky-action-bar :deep(.el-button) {
|
|
|
|
|
+ margin-left: 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@media (width <= 768px) {
|
|
|
|
|
+ .maintain-detail-page {
|
|
|
|
|
+ padding: 12px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .sticky-action-bar {
|
|
|
|
|
+ padding-right: 12px;
|
|
|
|
|
+ padding-left: 12px;
|
|
|
|
|
+ margin-right: -12px;
|
|
|
|
|
+ margin-bottom: -12px;
|
|
|
|
|
+ margin-left: -12px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .detail-header,
|
|
|
|
|
+ .detail-section {
|
|
|
|
|
+ padding-right: 12px;
|
|
|
|
|
+ padding-left: 12px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .detail-subtitle {
|
|
|
|
|
+ display: none;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .section-heading {
|
|
|
|
|
+ padding-right: 12px;
|
|
|
|
|
+ padding-left: 12px;
|
|
|
|
|
+ margin-right: -12px;
|
|
|
|
|
+ margin-left: -12px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .detail-form {
|
|
|
|
|
+ --el-form-label-width: 96px;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+</style>
|