|
@@ -2,7 +2,8 @@
|
|
|
import { ref, unref, onMounted } from 'vue';
|
|
|
import { NDrawer, NDrawerContent, NForm, NSelect, NFormItem, NDatePicker, useMessage, NScrollbar } from 'naive-ui';
|
|
|
import { SvgIcon, BaseNumberInput } from '@/components';
|
|
|
-import { BaseCard, BaseStep, BaseTable, BasePanel, BaseDatePicker } from './index';
|
|
|
+import { BaseCard, BaseStep, BaseTable, BasePanel } from './index';
|
|
|
+import zhCn from 'element-plus/es/locale/lang/zh-cn'
|
|
|
import { useTable } from '@/composables/useTable';
|
|
|
import { inputConfig } from './config';
|
|
|
import { inputHasBorderThemeOverrides } from '../tools/resetTheme';
|
|
@@ -11,6 +12,13 @@ import { carbonApi } from '@/api/carbon'
|
|
|
import dayjs from 'dayjs';
|
|
|
|
|
|
const emit = defineEmits(['on-submit']);
|
|
|
+const isVisibleDrawer = defineModel();
|
|
|
+const props = defineProps({
|
|
|
+ allMonth: {
|
|
|
+ type: String,
|
|
|
+ default: () => []
|
|
|
+ }
|
|
|
+})
|
|
|
|
|
|
const BASE_RULES = { required: true, type: 'number' };
|
|
|
|
|
@@ -21,9 +29,9 @@ const inpConfig = ref(inputConfig);
|
|
|
|
|
|
const spliceInpData = ref([]);
|
|
|
|
|
|
+const elementDatePicker = ref(null);
|
|
|
const disabledMonth = ref(null);
|
|
|
|
|
|
-const isVisibleDrawer = defineModel();
|
|
|
const formValue = ref({});
|
|
|
const selectCodeSet = ref({});
|
|
|
const selectValue = ref({});
|
|
@@ -36,6 +44,9 @@ const rules = {
|
|
|
provinceId: [
|
|
|
{ required: true, type: 'number' }
|
|
|
],
|
|
|
+ addYearMonth: [
|
|
|
+ { required: true }
|
|
|
+ ],
|
|
|
wsSjclCh4Clsl: [
|
|
|
{ required: true, type: 'number' }
|
|
|
],
|
|
@@ -49,26 +60,55 @@ const rules = {
|
|
|
wsTdN2oCsTn: [{ required: true, type: 'number' }],
|
|
|
|
|
|
nyyjDlxhZhdl: [{ required: true, type: 'number' }],
|
|
|
- nyyjDlxhJsbf: [{validator: (_, val) => (( formValue.value.nyyjDlxhZhdl && !val ) ? new Error() : true)}],
|
|
|
- nyyjDlxhGfjf: [{validator: (_, val) => (( formValue.value.nyyjDlxhZhdl && !val ) ? new Error() : true)}],
|
|
|
- nyyjDlxhTsjf: [{validator: (_, val) => (( formValue.value.nyyjDlxhZhdl && !val ) ? new Error() : true)}],
|
|
|
- nyyjDlxhXdj: [{validator: (_, val) => (( formValue.value.nyyjDlxhZhdl && !val ) ? new Error() : true)}],
|
|
|
- nyyjDlxhSdcl: [{validator: (_, val) => (( formValue.value.nyyjDlxhZhdl && !val ) ? new Error() : true)}],
|
|
|
- nyyjDlxhWncz: [{validator: (_, val) => (( formValue.value.nyyjDlxhZhdl && !val ) ? new Error() : true)}],
|
|
|
- nyyjDlxhShq: [{validator: (_, val) => (( formValue.value.nyyjDlxhZhdl && !val ) ? new Error() : true)}],
|
|
|
- nyyjDlxhQt: [{validator: (_, val) => (( formValue.value.nyyjDlxhZhdl && !val ) ? new Error() : true)}],
|
|
|
-
|
|
|
- wnclYyzqZqcl: [{validator: (_, val) => (formValue.value.wnclYyzqChZlfs && !val ? new Error() : true)}],
|
|
|
- wnclYyzqChZlfs: [{validator: (_, val) => (formValue.value.wnclYyzqZqcl && !val ? new Error() : true)}],
|
|
|
-
|
|
|
- wnclDdclZycll: [{ required: true, type: 'number' }],
|
|
|
- wnclDdclClqnd: [{ required: true, type: 'number' }],
|
|
|
- wnclDdclClhnd: [{ required: true, type: 'number' }],
|
|
|
-
|
|
|
-
|
|
|
- wnclWnrjByhXhl: [{validator: (_, val) => (formValue.value.wnclWnrjByhHtbl && !val ? new Error() : true)}],
|
|
|
- wnclWnrjByhHtbl: [{validator: (_, val) => (formValue.value.wnclWnrjByhXhl && !val ? new Error() : true)}],
|
|
|
-
|
|
|
+ nyyjDlxhJsbf: [{ validator: (_, val) => ((formValue.value.nyyjDlxhZhdl && !val) ? new Error() : true) }],
|
|
|
+ nyyjDlxhGfjf: [{ validator: (_, val) => ((formValue.value.nyyjDlxhZhdl && !val) ? new Error() : true) }],
|
|
|
+ nyyjDlxhTsjf: [{ validator: (_, val) => ((formValue.value.nyyjDlxhZhdl && !val) ? new Error() : true) }],
|
|
|
+ nyyjDlxhXdj: [{ validator: (_, val) => ((formValue.value.nyyjDlxhZhdl && !val) ? new Error() : true) }],
|
|
|
+ nyyjDlxhSdcl: [{ validator: (_, val) => ((formValue.value.nyyjDlxhZhdl && !val) ? new Error() : true) }],
|
|
|
+ nyyjDlxhWncz: [{ validator: (_, val) => ((formValue.value.nyyjDlxhZhdl && !val) ? new Error() : true) }],
|
|
|
+ nyyjDlxhShq: [{ validator: (_, val) => ((formValue.value.nyyjDlxhZhdl && !val) ? new Error() : true) }],
|
|
|
+ nyyjDlxhQt: [{ validator: (_, val) => ((formValue.value.nyyjDlxhZhdl && !val) ? new Error() : true) }],
|
|
|
+
|
|
|
+ wnclYyzqZqcl: [{ validator: (_, val) => (formValue.value.wnclYyzqChZlfs && !val ? new Error() : true) }],
|
|
|
+ wnclYyzqChZlfs: [{ validator: (_, val) => (formValue.value.wnclYyzqZqcl && !val ? new Error() : true) }],
|
|
|
+
|
|
|
+ wnclDdclZycll: [{
|
|
|
+ required: true, validator: (_, val) => {
|
|
|
+ const { wnclDdclClqnd, wnclDdclClhnd } = formValue.value;
|
|
|
+ if ((wnclDdclClqnd || wnclDdclClhnd) && !val) {
|
|
|
+ return new Error();
|
|
|
+ } else {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }],
|
|
|
+ wnclDdclClqnd: [{
|
|
|
+ required: true, validator: (_, val) => {
|
|
|
+ const { wnclDdclZycll, wnclDdclClhnd } = formValue.value;
|
|
|
+ if ((wnclDdclZycll || wnclDdclClhnd) && !val) {
|
|
|
+ return new Error();
|
|
|
+ } else {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }],
|
|
|
+ wnclDdclClhnd: [{
|
|
|
+ required: true, validator: (_, val) => {
|
|
|
+ const { wnclDdclClqnd, wnclDdclZycll } = formValue.value;
|
|
|
+ if ((wnclDdclClqnd || wnclDdclZycll) && !val) {
|
|
|
+ return new Error();
|
|
|
+ } else {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }],
|
|
|
+
|
|
|
+ wnclWnfsXhl: [{ validator: (_, val) => (formValue.value.wnclWnfsHtbl && !val ? new Error() : true) }],
|
|
|
+ wnclWnfsHtbl: [{ validator: (_, val) => (formValue.value.wnclWnfsXhl && !val ? new Error() : true) }],
|
|
|
+
|
|
|
+ wnclWnrjByhXhl: [{ validator: (_, val) => (formValue.value.wnclWnrjByhHtbl && !val ? new Error() : true) }],
|
|
|
+ wnclWnrjByhHtbl: [{ validator: (_, val) => (formValue.value.wnclWnrjByhXhl && !val ? new Error() : true) }],
|
|
|
+
|
|
|
}
|
|
|
|
|
|
const switchTabs = (index) => {
|
|
@@ -209,7 +249,7 @@ const handleAddTableRow = (key) => {
|
|
|
});
|
|
|
|
|
|
option = {
|
|
|
- columns: ['燃料名称', '污泥厌氧消化沼气发电量', '厌氧消化沼气富余热能利用量', '沼气提纯并网的天然气量', '操作'],
|
|
|
+ columns: ['燃料名称', '污泥厌氧消化沼气发电量', '厌氧消化沼气富余热能用量', '沼气提纯并网的天然气量', '操作'],
|
|
|
data: [
|
|
|
{ type: 'name', value: codeSet.dictLabel },
|
|
|
{ type: 'input', value: null, unit: 'kW·h/月' },
|
|
@@ -250,7 +290,7 @@ const handleAddTableRow = (key) => {
|
|
|
|
|
|
tableData.value[key].isEmpty = false;
|
|
|
|
|
|
- addTable(key, option);
|
|
|
+ addTable(key, option);
|
|
|
}
|
|
|
|
|
|
// 格式化时间
|
|
@@ -260,12 +300,12 @@ const formatData = () => {
|
|
|
const tempObj = {};
|
|
|
|
|
|
const extraList = Object.keys(tableData.value).map(key => {
|
|
|
- const whiteList = ['sewageCo2First', 'energyFirst', 'energySecond', 'carbonFirst', 'carbonThird', 'carbonFourth' ];
|
|
|
+ const whiteList = ['sewageCo2First', 'energyFirst', 'energySecond', 'carbonFirst', 'carbonThird', 'carbonFourth'];
|
|
|
const tempArr = [];
|
|
|
const commonItem = unref(tableData)[key];
|
|
|
- if ( whiteList.includes(key) ) {
|
|
|
+ if (whiteList.includes(key)) {
|
|
|
const result = commonItem.map(({ codeSet, data, type }) => {
|
|
|
- const [_, amount, lyl, hz] = data || [];
|
|
|
+ const [_, amount, lyl, hz] = data || [];
|
|
|
return {
|
|
|
dictCode: codeSet.dictCode,
|
|
|
dictLabel: codeSet.dictLabel,
|
|
@@ -277,7 +317,7 @@ const formatData = () => {
|
|
|
});
|
|
|
tempArr.push(result)
|
|
|
} else {
|
|
|
- const [ item ] = commonItem;
|
|
|
+ const [item] = commonItem;
|
|
|
item.data.forEach(child => tempObj[child.key] = child.value);
|
|
|
}
|
|
|
return tempArr;
|
|
@@ -296,26 +336,24 @@ const formatData = () => {
|
|
|
|
|
|
const validateTableData = () => {
|
|
|
let result = true;
|
|
|
- const whiteList = ['sewageCo2First', 'energySecond', 'carbonFirst', 'carbonThird', 'carbonFourth'];
|
|
|
+ const whiteList = ['sewageCo2First', 'energySecond'];
|
|
|
const otherWhiteList = ['energyFirst', 'energySecond',];
|
|
|
const onlyWhiteList = ['mudFirst', 'mudSecond', 'carbonSecond',];
|
|
|
const tableInnerInpWhiteList = ['sewageCo2First', 'energyFirst', 'energySecond', 'carbonFirst', 'carbonThird', 'carbonFourth']
|
|
|
|
|
|
Object.keys(tableData.value).forEach(key => {
|
|
|
const item = tableData.value[key];
|
|
|
- console.log( "上", item );
|
|
|
- if ( !item.length && whiteList.includes(key)) {
|
|
|
- console.log(item);
|
|
|
+ if (!item.length && whiteList.includes(key)) {
|
|
|
item.isEmpty = true;
|
|
|
result = false;
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- if ( item.length && tableInnerInpWhiteList.includes(key) ) {
|
|
|
+ if (item.length && tableInnerInpWhiteList.includes(key)) {
|
|
|
|
|
|
item.forEach(item => {
|
|
|
item.data.forEach((child) => {
|
|
|
- if ( (child.type === 'input' || child.type === 'select') && !child.value && child.value !== 0 ) {
|
|
|
+ if ((child.type === 'input' || child.type === 'select') && !child.value && child.value !== 0) {
|
|
|
child.isEmpty = true;
|
|
|
result = false
|
|
|
} else {
|
|
@@ -325,10 +363,10 @@ const validateTableData = () => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- if ( item.length && otherWhiteList.includes(key) ) {
|
|
|
+ if (item.length && otherWhiteList.includes(key)) {
|
|
|
item.forEach(item => {
|
|
|
item.data.forEach(child => {
|
|
|
- if ( child.type === 'input' && !child.value && child.value !== 0 ) {
|
|
|
+ if (child.type === 'input' && !child.value && child.value !== 0) {
|
|
|
child.isEmpty = true;
|
|
|
result = false
|
|
|
} else {
|
|
@@ -338,12 +376,12 @@ const validateTableData = () => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- if ( onlyWhiteList.includes(key) ) {
|
|
|
+ if (onlyWhiteList.includes(key)) {
|
|
|
const { data } = tableData.value[key][0];
|
|
|
const isExists = data.filter(({ value }) => value || value === 0).length;
|
|
|
- if ( isExists && isExists < data.length) {
|
|
|
+ if (isExists && isExists < data.length) {
|
|
|
data.forEach(child => {
|
|
|
- if ( (child.type === 'input' || child.type === 'select') && !child.value && child.value !== 0 ) {
|
|
|
+ if ((child.type === 'input' || child.type === 'select') && !child.value && child.value !== 0) {
|
|
|
child.isEmpty = true;
|
|
|
result = false
|
|
|
} else {
|
|
@@ -359,18 +397,70 @@ const validateTableData = () => {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
-const onSubmit = ( e ) => {
|
|
|
+const onReset = () => {
|
|
|
+ formRef.value?.restoreValidation();
|
|
|
+ Object.keys(formValue.value).forEach(key => {
|
|
|
+ formValue.value[key] = null;
|
|
|
+ })
|
|
|
+ Object.keys(tableData.value).forEach(key => {
|
|
|
+ const item = tableData.value[key];
|
|
|
+ item.isEmpty = false;
|
|
|
+ })
|
|
|
+ Object.keys(selectValue.value).forEach(key => {
|
|
|
+ selectValue.value[key] = null;
|
|
|
+ })
|
|
|
+ tableData.value = {
|
|
|
+ sewageCo2First: [],
|
|
|
+ energyFirst: [],
|
|
|
+ energySecond: [],
|
|
|
+ mudFirst: [
|
|
|
+ {
|
|
|
+ columns: ['燃烧类型', '污泥处理焚烧量', '污泥焚烧过程N₂O的排放因子'],
|
|
|
+ data: [
|
|
|
+ { type: 'select', value: '', key: 'wnclBwqrsRslx' },
|
|
|
+ { type: 'input', value: null, unit: 't干污泥/月', key: 'wnclBwqrsFsl' },
|
|
|
+ { type: 'input', value: null, unit: 'tkg N₂O/t 干污泥', key: 'wnclBwqrsPfyz' }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ mudSecond: [
|
|
|
+ {
|
|
|
+ columns: ['反应堆类型', '污泥热解消耗量', '污泥热解过程N₂O的排放因子'],
|
|
|
+ data: [
|
|
|
+ { type: 'select', value: '', key: 'wnclWnrjQtLx' },
|
|
|
+ { type: 'input', value: null, unit: 't干污泥/月', key: 'wnclWnrjQtXhl' },
|
|
|
+ { type: 'input', value: null, unit: 'tkg N₂O/t 干污泥', key: 'wnclWnrjQtPfyz' }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ carbonFirst: [],
|
|
|
+ carbonSecond: [
|
|
|
+ {
|
|
|
+ columns: ['水厂规模', '回用水供应量'],
|
|
|
+ data: [
|
|
|
+ { type: 'select', value: '', key: 'thZssScgm' },
|
|
|
+ { type: 'input', value: null, unit: 'm³/月', key: '', key: 'thZssGyl' },
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ carbonThird: [],
|
|
|
+ carbonFourth: []
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const onSubmit = (e) => {
|
|
|
e.preventDefault();
|
|
|
- const isVerifying = !validateTableData();
|
|
|
- formRef.value?.validate( async (errors) => {
|
|
|
+ const isVerifying = !validateTableData();
|
|
|
+ formRef.value?.validate(async (errors) => {
|
|
|
if (!errors) {
|
|
|
- if ( isVerifying ) {
|
|
|
+ if (isVerifying) {
|
|
|
return message.error("提交失败, 请检查");
|
|
|
}
|
|
|
const params = formatData();
|
|
|
await carbonApi.postCarbonSmart(params);
|
|
|
- message.error("提供成功");
|
|
|
+ onReset();
|
|
|
emit(['on-submit']);
|
|
|
+ message.success("提交成功");
|
|
|
} else {
|
|
|
message.error("提交失败, 请检查");
|
|
|
}
|
|
@@ -401,13 +491,13 @@ const getAllCodeSet = async () => {
|
|
|
{ label: '连续燃烧', value: 4 }
|
|
|
],
|
|
|
reactOptions: [
|
|
|
- { label: '选择', value: "" },
|
|
|
+ { label: '选择', value: "" },
|
|
|
{ label: '竖井类型', value: 0 },
|
|
|
{ label: '流化床式', value: 1 },
|
|
|
{ label: '回转窑式', value: 2 }
|
|
|
],
|
|
|
scgmOptions: [
|
|
|
- { label: '选择', value: "" },
|
|
|
+ { label: '选择', value: "" },
|
|
|
{ label: '小型', value: 0 },
|
|
|
{ label: '中型', value: 1 },
|
|
|
{ label: '大型', value: 2 }
|
|
@@ -416,19 +506,22 @@ const getAllCodeSet = async () => {
|
|
|
|
|
|
}
|
|
|
|
|
|
+const disabledDate = (t) => {
|
|
|
+ return props.allMonth?.includes(dayjs(t).format('YYYY-MM'))
|
|
|
+}
|
|
|
+
|
|
|
+const handleInpFocus = () => {
|
|
|
+ elementDatePicker.value.focus();
|
|
|
+}
|
|
|
+
|
|
|
onMounted(async () => {
|
|
|
getAllCodeSet();
|
|
|
})
|
|
|
|
|
|
-const dateDisabled = (ts) => {
|
|
|
- return disabledMonth.value.includes(dayjs(ts).format('YYYY-MM'));
|
|
|
-}
|
|
|
-
|
|
|
onMounted(async () => {
|
|
|
const { data: month } = await carbonApi.getAllMonth();
|
|
|
disabledMonth.value = month;
|
|
|
})
|
|
|
-
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
@@ -444,25 +537,30 @@ onMounted(async () => {
|
|
|
<BaseStep></BaseStep>
|
|
|
</BaseCard>
|
|
|
|
|
|
- <NForm class="space-y-[12px] from-wrapper" ref="formRef" :model="formValue" :show-feedback="false" :rules="rules">
|
|
|
+ <NForm class="space-y-[12px] from-wrapper" ref="formRef" :model="formValue" :show-feedback="false"
|
|
|
+ :rules="rules">
|
|
|
<BaseCard title="基础信息" sub-title="碳排放管理基础信息填写">
|
|
|
<div class="flex space-x-[24px]">
|
|
|
-
|
|
|
<NFormItem label="省/直辖市" path="provinceId" label-placement="left" class="w-[343px]">
|
|
|
<NSelect v-model:value="formValue.provinceId" :options="selectCodeSet.areaOptions"
|
|
|
- value-field="dictCode" label-field="dictLabel" :rule="BASE_RULES"/>
|
|
|
+ value-field="dictCode" label-field="dictLabel" :rule="BASE_RULES" />
|
|
|
</NFormItem>
|
|
|
-
|
|
|
- <NFormItem label="核算时间" path="addYearMonth" label-placement="left" class="w-[343px]" :rule="BASE_RULES">
|
|
|
+ <NFormItem label="核算时间" path="addYearMonth" label-placement="left" class="w-[343px]"
|
|
|
+ style="position: relative;">
|
|
|
<NDatePicker type="month" placeholder="请选择" v-model:value="formValue.addYearMonth"
|
|
|
- class="w-full custom-date-picker" :is-date-disabled="dateDisabled"
|
|
|
- :theme-overrides="inputHasBorderThemeOverrides" actions="confirm"></NDatePicker>
|
|
|
+ class="w-full custom-date-picker" :theme-overrides="inputHasBorderThemeOverrides" actions="confirm"
|
|
|
+ @click="handleInpFocus" :show="false" input-readonly style="position: relative; z-index: 100;">
|
|
|
+ </NDatePicker>
|
|
|
+ <el-config-provider :locale="zhCn">
|
|
|
+ <el-date-picker class="custom-date-picker" v-model="formValue.addYearMonth" type="month"
|
|
|
+ placeholder="请选择" :teleported="false" ref="elementDatePicker" style="position: absolute;"
|
|
|
+ :disabledDate="disabledDate" />
|
|
|
+ </el-config-provider>
|
|
|
</NFormItem>
|
|
|
-
|
|
|
</div>
|
|
|
</BaseCard>
|
|
|
|
|
|
- <BaseCard title="污水处理" sub-title="生化碳排">
|
|
|
+ <BaseCard title="污水处理" sub-title="生化反应碳排">
|
|
|
<BasePanel isXScroll required title="化石源碳矿化产生的碳排放量">
|
|
|
<NFormItem label-placement="top" :label="item.label" :path="item.key"
|
|
|
v-for="item, index in inpConfig.sewage.oneBlock" :key="index" :rule="BASE_RULES">
|
|
@@ -481,7 +579,7 @@ onMounted(async () => {
|
|
|
</button>
|
|
|
</div>
|
|
|
</template>
|
|
|
-
|
|
|
+
|
|
|
<BaseTable :data="tableData.sewageCo2First" name="sewageCo2First"
|
|
|
@on-remove="(name, index) => removeTable(name, index)"></BaseTable>
|
|
|
</BasePanel>
|
|
@@ -508,7 +606,7 @@ onMounted(async () => {
|
|
|
</BasePanel>
|
|
|
</BaseCard>
|
|
|
|
|
|
- <BaseCard title="能源、药剂碳排" sub-title="生化反应碳排">
|
|
|
+ <BaseCard title="能源、药剂碳排" sub-title="能源、药剂碳排">
|
|
|
<BasePanel isXScroll required title="污水厂电力消耗产生的碳排放量">
|
|
|
<NFormItem label-placement="top" :path="item.key" :label="item.label"
|
|
|
v-for="item, index in inpConfig.energy.oneBlock" :key="index">
|
|
@@ -556,7 +654,7 @@ onMounted(async () => {
|
|
|
|
|
|
</BaseCard>
|
|
|
|
|
|
- <BaseCard title="污泥处理" sub-title="生化反应碳排">
|
|
|
+ <BaseCard title="污泥处理" sub-title="生化反应总碳排">
|
|
|
<BasePanel isXScroll title="污泥厌氧消化沼气收集管路无意泄露的CH₄或沼气火炬燃烧不充分导致的碳排放">
|
|
|
<NFormItem label-placement="top" :path="item.key" :label="item.label"
|
|
|
v-for="item, index in inpConfig.sludge.oneBlock" :key="index" required>
|
|
@@ -573,14 +671,14 @@ onMounted(async () => {
|
|
|
|
|
|
<BasePanel isXScroll title="污泥好氧发酵过程生化反应的碳排放">
|
|
|
<NFormItem label-placement="top" :path="item.key" :label="item.label"
|
|
|
- v-for="item, index in inpConfig.sludge.threeBlock" :key="index" :rule="BASE_RULES">
|
|
|
+ v-for="item, index in inpConfig.sludge.threeBlock" :key="index" required>
|
|
|
<BaseNumberInput :unit="item.unit" v-model:value="formValue[item.key]"></BaseNumberInput>
|
|
|
</NFormItem>
|
|
|
</BasePanel>
|
|
|
|
|
|
<BasePanel isXScroll title="污泥干化焚烧或协同焚烧过程,化石源碳被氧化产生的化石源CO₂碳排放量">
|
|
|
<NFormItem label-placement="top" :path="item.key" :label="item.label"
|
|
|
- v-for="item, index in inpConfig.sludge.fourBlock" :key="index" :rule="BASE_RULES">
|
|
|
+ v-for="item, index in inpConfig.sludge.fourBlock" :key="index" required>
|
|
|
<BaseNumberInput :unit="item.unit" v-model:value="formValue[item.key]"></BaseNumberInput>
|
|
|
</NFormItem>
|
|
|
</BasePanel>
|
|
@@ -604,12 +702,12 @@ onMounted(async () => {
|
|
|
</BasePanel>
|
|
|
</BaseCard>
|
|
|
|
|
|
- <BaseCard title="替碳、碳汇" sub-title="是不是写一些什么">
|
|
|
+ <BaseCard title="替碳、碳汇" sub-title="替碳、碳汇基础信息填写">
|
|
|
<BasePanel title="热泵技术-替碳量">
|
|
|
<template #side>
|
|
|
<div class="flex items-center space-x-[14px]">
|
|
|
- <NSelect v-model:value="selectValue.gyittOne" :options="selectCodeSet.gyittOptions" class="w-[200px]"
|
|
|
- label-field="dictLabel" value-field="dictCode" />
|
|
|
+ <NSelect v-model:value="selectValue.gyittOne" :options="selectCodeSet.gyittOptions"
|
|
|
+ class="w-[200px]" label-field="dictLabel" value-field="dictCode" />
|
|
|
<button class="add-btn space-x-[4px]" @click="handleAddTableRow('carbonFirst')">
|
|
|
<SvgIcon name="tool-add-symbol"></SvgIcon>
|
|
|
<span>添加</span>
|
|
@@ -637,8 +735,8 @@ onMounted(async () => {
|
|
|
<BasePanel title="污泥厌氧消化沼气利用的替碳量">
|
|
|
<template #side>
|
|
|
<div class="flex items-center space-x-[14px]">
|
|
|
- <NSelect v-model:value="selectValue.gyittTwo" :options="selectCodeSet.gyittOptions" class="w-[200px]"
|
|
|
- label-field="dictLabel" value-field="dictCode" />
|
|
|
+ <NSelect v-model:value="selectValue.gyittTwo" :options="selectCodeSet.gyittOptions"
|
|
|
+ class="w-[200px]" label-field="dictLabel" value-field="dictCode" />
|
|
|
<button class="add-btn space-x-[4px]" @click="handleAddTableRow('carbonThird')">
|
|
|
<SvgIcon name="tool-add-symbol"></SvgIcon>
|
|
|
<span>添加</span>
|
|
@@ -653,8 +751,8 @@ onMounted(async () => {
|
|
|
<BasePanel title="污泥焚烧或热解热能利用的替碳量">
|
|
|
<template #side>
|
|
|
<div class="flex items-center space-x-[14px]">
|
|
|
- <NSelect v-model:value="selectValue.gyittThree" :options="selectCodeSet.gyittOptions" class="w-[200px]"
|
|
|
- label-field="dictLabel" value-field="dictCode" />
|
|
|
+ <NSelect v-model:value="selectValue.gyittThree" :options="selectCodeSet.gyittOptions"
|
|
|
+ class="w-[200px]" label-field="dictLabel" value-field="dictCode" />
|
|
|
<button class="add-btn space-x-[4px]" @click="handleAddTableRow('carbonFourth')">
|
|
|
<SvgIcon name="tool-add-symbol"></SvgIcon>
|
|
|
<span>添加</span>
|
|
@@ -713,10 +811,6 @@ onMounted(async () => {
|
|
|
|
|
|
.from-wrapper {
|
|
|
|
|
|
- .panel-item {
|
|
|
- // padding-top: 26px;
|
|
|
- }
|
|
|
-
|
|
|
.form-item_inner {
|
|
|
padding-top: 16px;
|
|
|
|
|
@@ -827,6 +921,18 @@ onMounted(async () => {
|
|
|
</style>
|
|
|
|
|
|
<style lang="scss">
|
|
|
+.custom-date-picker {
|
|
|
+
|
|
|
+ .el-input__wrapper,
|
|
|
+ .el-input__wrapper.is-focus {
|
|
|
+ box-shadow: none;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ box-shadow: none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
.drawer-picker {
|
|
|
.el-input__wrapper {
|
|
|
height: 34px;
|