123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- <template>
- <div>
- <el-table
- :data="tableData"
- class="plant-table"
- border>
- >
- <el-table-column
- v-for="item in tableColums"
- :key="item.label"
- :label="item.label"
- :width="item.widthsty"
- :min-width="item.minwidthsty"
- align="center"
- >
- <template #header>
- <span>
- {{item.label}}
- <el-tooltip :content="item.tip" placement="top">
- <i class="el-icon-warning" v-if="item.tip"></i>
- </el-tooltip>
- </span>
- </template>
- <template slot-scope="{row}">
- <template v-if="$route.query.type!=='look'">
- <!-- 地点 -->
- <span v-if="item.key==='address'">
- <v-distpicker
- :province="row.Province"
- :city="row.City"
- :province-source="province_sorce"
- :city-source="city_sorce"
- hide-area
- @selected="changeArea($event,row)"
- />
- </span>
- <!-- 工厂 -->
- <span v-else-if="item.key==='FactoryName'">
- <el-input
- v-model="row.FactoryName"
- class="large-sty"
- placeholder="请输入工厂"
- @change="saveHandle(row)"
- />
- </span>
- <!-- 装置 -->
- <span v-else-if="item.key==='PlantName'">
- <el-input
- v-model="row.PlantName"
- class="large-sty"
- placeholder="请输入装置/产线"
- @change="saveHandle(row)"
- />
- </span>
- <!-- 年产能 -->
- <span v-else-if="item.key==='AnnualCapacity'">
- <el-input
- v-model="row.AnnualCapacity"
- type="number"
- class="large-sty"
- placeholder="请输入年产能"
- @change="changeParams(row)"
- />
- </span>
- <!-- 检修日期 -->
- <span v-else-if="item.key==='MaintenanceDate'">
- <el-date-picker
- v-model="row.MaintenanceDate"
- type="date"
- value-format="yyyy-MM-dd"
- placeholder="检修日期"
- @change="changeDate(row)"
- style="width: 140px"
- />
- </span>
- <!-- 复产日期 -->
- <span v-else-if="item.key==='ResumptionDate'">
- <el-date-picker
- v-model="row.ResumptionDate"
- type="date"
- value-format="yyyy-MM-dd"
- placeholder="复产日期"
- style="width: 140px"
- @change="() => {row.IsStop=0;changeDate(row)} "
- />
- <el-checkbox v-model="row.IsStop" @change="changeStopStatus($event,row)" :true-label="1" :false-label="0">退市</el-checkbox>
- </span>
- <!-- 降负系数 -->
- <span v-else-if="item.key==='Coefficient'">
- <el-input
- v-model="row.Coefficient"
- type="number"
- placeholder="请输入降负系数"
- class="large-sty"
- @change="changeParams(row)"
- />
- </span>
- <!-- 日均产量 -->
- <span v-else-if="item.key==='AverageDailyCapacityReductionTon'">
- <el-input
- v-model="row.AverageDailyCapacityReductionTon"
- type="number"
- class="large-sty"
- placeholder="请输入日均产量减量"
- @change="()=> { row.AverageDailyCapacityReduction=row.AverageDailyCapacityReductionTon/10000;saveHandle(row)}"
- />
- </span>
- <span v-else-if="['Day','CapacityReduction'].includes(item.key)">
- {{(row.MaintenanceDate&&row.ResumptionDate&&!row.IsStop)?row[item.key]:'--'}}
- </span>
- <span v-else>{{row[item.key]}}</span>
- </template>
-
- <!-- 查看 -->
- <template v-else>
- <span v-if="item.key==='address'">{{row.Province===row.City?row.City:row.Province+row.City}}</span>
- <span v-else-if="item.key==='ResumptionDate'">{{row.IsStop?'停产':row.ResumptionDate}}</span>
- <span v-else-if="['Day','CapacityReduction'].includes(item.key)">
- {{(row.MaintenanceDate&&row.ResumptionDate&&!row.IsStop)?row[item.key] :'--'}}
- </span>
- <span v-else>{{row[item.key]}}</span>
- </template>
- </template>
- </el-table-column>
- <el-table-column label="操作" align="center" v-if="$route.query.type!=='look'" width="200">
- <template slot-scope="scope">
- <el-button type="text" @click="addRow(scope,'copy')">复制</el-button>
- <el-button type="text" @click="addRow(scope,'prev')">向上添加</el-button>
- <el-button type="text" @click="addRow(scope,'next')">向下添加</el-button>
- <span @click="delPlant(scope.row,scope.$index)" class="deletesty">删除</span>
- <el-button type="text" @click="addOtherPlantHandle(scope.row.VarietyPlantId)">添加其他装置</el-button>
- </template>
- </el-table-column>
- <div slot="empty" style="padding: 20px 0">
- <tableNoData text="暂无信息" size="mini"/>
- </div>
- </el-table>
- <!-- 添加其他装置 -->
- <addOtherPlantDia
- :isShow.sync="isAddOtherPlantDialog"
- :plantId="plantId"
- @success="$emit('getData')"
- />
- </div>
- </template>
- <script>
- import{province_sorce,city_sorce} from '@/utils/distpicker';
- import * as supplyApi from '@/api/modules/supplyApi.js';
- import addOtherPlantDia from './addOtherPlantDia.vue';
- import * as $calculate from '@/utils/calculate.js'
- export default {
- props: {
- data: Array
- },
- components: {addOtherPlantDia},
- watch: {
- data(nval) {
- this.tableData = nval.length ? nval : this.initTable;
- }
- },
- data() {
- return {
- province_sorce,
- city_sorce,
- tableData: this.data,
- tableColums: [
- {
- label: '地点',
- key: 'address',
- minwidthsty: '120px'
- },
- {
- label: '工厂',
- key: 'FactoryName'
- },
- {
- label: '装置/产线',
- key: 'PlantName'
- },
- {
- label: '年产能(万吨)',
- key: 'AnnualCapacity'
- },
- {
- label: '检修日期',
- key: 'MaintenanceDate',
- widthsty: '150px'
- },
- {
- label: '复产日期',
- key: 'ResumptionDate',
- tip: '默认检修结束日期为复产日期',
- widthsty: '220px'
- },
- {
- label: '降负系数',
- key: 'Coefficient',
- widthsty: '80px',
- tip: '1表示停产,0.1表示降负10%'
- },
- {
- label: '日均产量减量(吨)',
- key: 'AverageDailyCapacityReductionTon',
- widthsty: '100px',
- },
- {
- label: '时长',
- key: 'Day',
- widthsty: '80px',
- },
- {
- label: '期间减量(万吨)',
- key: 'CapacityReduction',
- widthsty: '80px',
- },
- ],
- initTable: [{
- VarietyPlantId: 0,
- Province: '',
- City: '',
- FactoryName: '',
- PlantName: '',
- MaintenanceDate: '',
- ResumptionDate: '',
- AnnualCapacity: 0,
- Coefficient: 1,
- AverageDailyCapacityReduction: 0,
- AverageDailyCapacityReductionTon: 0,
- Day: 0,
- CapacityReduction: 0,
- Button: {
- Edit: true,
- Delete: true
- }
- }],
-
- insertIndex: {
- PrevVarietyPlantId: 0,
- NextVarietyPlantId: 0
- },
- /* 添加其他装置弹窗 */
- isAddOtherPlantDialog: false,
- plantId: 0,
- }
- },
- methods: {
- async delPlant({VarietyPlantId},index) {
- if(VarietyPlantId) {
- await this.$confirm('删除后不可恢复,确认删除吗?','提示',{ type: 'warning' })
- const res = await supplyApi.delPlant({VarietyPlantId});
- if(res.Ret !== 200) return
-
- this.$message.success('删除成功');
- this.$emit('getData')
- }else {
- this.tableData.splice(index,1)
- }
- },
- /* 日期改变 */
- changeDate(row) {
- const { ResumptionDate,MaintenanceDate } = row;
- if(MaintenanceDate && ResumptionDate && new Date(ResumptionDate).getTime() <= new Date(MaintenanceDate).getTime()) {
- this.$message.warning('复产日期不得早于检修日期 ')
- row.ResumptionDate = '';
- return
- }
- this.saveHandle(row);
- },
- /* 地区改变 */
- changeArea(area,row) {
- row.City = area.city.value;
- row.Province = area.province.value;
- this.saveHandle(row);
- },
- /* 停产 */
- changeStopStatus(val,row) {
- if(val) row.ResumptionDate = '';
- this.saveHandle(row);
- },
- /* 产能改变 */
- changeParams(row) {
- const { Coefficient,AnnualCapacity } = row;
- row.AverageDailyCapacityReduction = AnnualCapacity/Number(this.$parent.varietyInfo.ProductionDay)*Coefficient;
- row.AverageDailyCapacityReductionTon = $calculate.multiply(row.AverageDailyCapacityReduction,10000);
- this.saveHandle(row);
- },
- /* 添加行 */
- addRow({row,$index},type) {
- const row_item = type === 'copy' ? {
- ...row,
- VarietyPlantId: 0
- } : {
- VarietyPlantId: 0,
- Province: '',
- City: '',
- FactoryName: '',
- PlantName: '',
- MaintenanceDate: '',
- ResumptionDate: '',
- AnnualCapacity: 0,
- Coefficient: 1,
- AverageDailyCapacityReduction: 0,
- AverageDailyCapacityReductionTon: 0,
- Day: 0,
- CapacityReduction: 0,
- Button: {
- Edit: true,
- Delete: true
- }
- }
-
- this.insertIndex = {
- PrevVarietyPlantId: type === 'prev' ? 0 : row.VarietyPlantId,
- NextVarietyPlantId: type === 'prev' ? row.VarietyPlantId : 0
- }
-
- type === 'prev' ? this.tableData.splice($index,0,row_item) : this.tableData.splice($index+1,0,row_item)
- this.saveHandle(row_item);
-
- },
- /* 保存 */
- saveHandle: _.debounce(async function(row) {
- const { VarietyPlantId,Province,City,FactoryName,PlantName,MaintenanceDate,ResumptionDate,AnnualCapacity,Coefficient,AverageDailyCapacityReduction,IsStop} = row;
- let params = {
- Province,
- City,
- FactoryName,
- PlantName,
- MaintenanceDate,
- ResumptionDate,
- AnnualCapacity: Number(AnnualCapacity),
- Coefficient: Number(Coefficient),
- AverageDailyCapacityReduction: Number(AverageDailyCapacityReduction),
- IsStop,
- }
- const res = VarietyPlantId
- ? await supplyApi.editPlant({ VarietyPlantId,...params})
- : await supplyApi.addPlant({VarietyId: Number(this.$route.query.id), ...params,...this.insertIndex})
- if(res.Ret !== 200) return
- // this.$message.success('保存成功');
- VarietyPlantId ? this.updatedData(row) : this.$emit('getData')
- },200),
- /* 添加其他装置 */
- addOtherPlantHandle(VarietyPlantId) {
- this.plantId = VarietyPlantId;
- this.isAddOtherPlantDialog = true;
- },
- /* 编辑完更新市场和期间减量 */
- updatedData(row) {
- if(row.MaintenanceDate&&row.ResumptionDate&&!row.IsStop&&row.AverageDailyCapacityReduction) {
- let day = this.$moment(row.ResumptionDate).diff(this.$moment(row.MaintenanceDate), 'day')+1;
- row.Day = day;
- row.CapacityReduction = (row.Day * row.AverageDailyCapacityReduction).toFixed(2);
- }
- }
- }
- }
- </script>
- <style lang="scss">
- .plant-table {
- .cell {
- padding: 0 5px;
- }
- .cell .large-sty .el-input__inner {
- padding: 0 4px;
- }
- .cell .distpicker-address-wrapper select {
- width: 120px;
- }
- }
- </style>
|