|
|
@@ -34,7 +34,14 @@
|
|
|
<el-button type="info" @click="search" size="mini">查询</el-button>
|
|
|
</el-col>
|
|
|
<el-col :span="6" style="text-align:right;">
|
|
|
- <el-button type="info" size="mini">批量导出当前页</el-button>
|
|
|
+ <el-button
|
|
|
+ type="info"
|
|
|
+ size="mini"
|
|
|
+ @click="exportData('all')"
|
|
|
+ :disabled="exportLoading"
|
|
|
+ ><i v-if="exportLoading" class="el-icon-loading"></i
|
|
|
+ >批量导出当前页</el-button
|
|
|
+ >
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</div>
|
|
|
@@ -47,7 +54,7 @@
|
|
|
:height="48 * 13"
|
|
|
ref="gridTable"
|
|
|
>
|
|
|
- <el-table-column prop="index" label="编号" width="60px">
|
|
|
+ <el-table-column prop="index" label="编号" width="60px" fixed="left">
|
|
|
<template slot-scope="scope">
|
|
|
<span>{{ (queryInfo.page - 1) * 20 + (scope.$index + 1) }}</span>
|
|
|
</template>
|
|
|
@@ -55,10 +62,14 @@
|
|
|
<el-table-column
|
|
|
prop="sample_addr"
|
|
|
label="标准样地地点"
|
|
|
+ fixed="left"
|
|
|
+ width="120"
|
|
|
+ show-overflow-tooltip
|
|
|
></el-table-column>
|
|
|
<el-table-column
|
|
|
prop="sample_num"
|
|
|
label="标准样地编号"
|
|
|
+ width="120"
|
|
|
></el-table-column>
|
|
|
<el-table-column
|
|
|
prop="sample_area"
|
|
|
@@ -71,23 +82,34 @@
|
|
|
<el-table-column prop="pest_name" label="物种名称"> </el-table-column>
|
|
|
<el-table-column prop="pest_name_2" label="当地俗名">
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="is_check" label="是否需要辅助调查">
|
|
|
+ <el-table-column prop="is_check" label="是否需要辅助调查" width="140">
|
|
|
</el-table-column>
|
|
|
<el-table-column prop="harm_obj" label="危害对象"> </el-table-column>
|
|
|
<el-table-column prop="harm_place" label="危害部位">
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="is_gather" label="是否采集样本">
|
|
|
+ <el-table-column prop="is_gather" label="是否采集样本" width="120">
|
|
|
</el-table-column>
|
|
|
<el-table-column prop="user_name" label="调查人"> </el-table-column>
|
|
|
- <el-table-column prop="submit_time" label="调查时间">
|
|
|
+ <el-table-column prop="check_time" label="调查时间" min-width="140">
|
|
|
</el-table-column>
|
|
|
|
|
|
- <el-table-column label="操作" width="200">
|
|
|
+ <el-table-column
|
|
|
+ label="操作"
|
|
|
+ width="180"
|
|
|
+ align="center"
|
|
|
+ fixed="right"
|
|
|
+ >
|
|
|
<template slot-scope="scope">
|
|
|
<el-button type="info" size="mini" @click="handleEdit(scope.row)">
|
|
|
修改</el-button
|
|
|
>
|
|
|
- <el-button type="info" size="mini">导出</el-button>
|
|
|
+ <el-button
|
|
|
+ type="info"
|
|
|
+ size="mini"
|
|
|
+ :disabled="exportLoading"
|
|
|
+ @click="exportData('single', scope.row)"
|
|
|
+ >导出</el-button
|
|
|
+ >
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
@@ -122,7 +144,7 @@
|
|
|
baseForm.user_name
|
|
|
}}</el-descriptions-item>
|
|
|
<el-descriptions-item label="调查时间">{{
|
|
|
- baseForm.submit_time
|
|
|
+ baseForm.check_time
|
|
|
}}</el-descriptions-item>
|
|
|
</el-descriptions>
|
|
|
</el-form-item>
|
|
|
@@ -163,7 +185,7 @@
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-form-item label="发生生境:" prop="occurs_list">
|
|
|
- <el-checkbox-group v-model="baseForm.occurs_list">
|
|
|
+ <el-checkbox-group v-model="baseForm.occurs_list" :max="1">
|
|
|
<el-row v-for="item in habitatList" :key="item.value">
|
|
|
<el-col>
|
|
|
<el-checkbox :label="item.value">{{ item.label }}</el-checkbox>
|
|
|
@@ -237,32 +259,97 @@
|
|
|
</el-table-column>
|
|
|
<el-table-column label="1" align="center" width="120">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-input v-model="scope.row.num1"></el-input>
|
|
|
+ <el-form-item
|
|
|
+ :prop="'tableList.' + scope.$index + '.num_1'"
|
|
|
+ label-width="0"
|
|
|
+ :rules="{
|
|
|
+ validator: validateSingleInputNumber,
|
|
|
+ trigger: 'blur'
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ @change="value => handleInputChange(value, scope.row)"
|
|
|
+ v-model="scope.row.num_1"
|
|
|
+ onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)));"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="2" align="center" width="120">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-input v-model="scope.row.num1"></el-input>
|
|
|
+ <el-form-item
|
|
|
+ :prop="'tableList.' + scope.$index + '.num_2'"
|
|
|
+ label-width="0"
|
|
|
+ :rules="{
|
|
|
+ validator: validateSingleInputNumber,
|
|
|
+ trigger: 'blur'
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ @change="value => handleInputChange(value, scope.row)"
|
|
|
+ v-model="scope.row.num_2"
|
|
|
+ onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)));"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="3" align="center" width="120">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-input v-model="scope.row.num1"></el-input>
|
|
|
+ <el-form-item
|
|
|
+ :prop="'tableList.' + scope.$index + '.num_3'"
|
|
|
+ label-width="0"
|
|
|
+ :rules="{
|
|
|
+ validator: validateSingleInputNumber,
|
|
|
+ trigger: 'blur'
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ @change="value => handleInputChange(value, scope.row)"
|
|
|
+ v-model="scope.row.num_3"
|
|
|
+ onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)));"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="4" align="center" width="120">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-input v-model="scope.row.num1"></el-input>
|
|
|
+ <el-form-item
|
|
|
+ :prop="'tableList.' + scope.$index + '.num_4'"
|
|
|
+ label-width="0"
|
|
|
+ :rules="{
|
|
|
+ validator: validateSingleInputNumber,
|
|
|
+ trigger: 'blur'
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ @change="value => handleInputChange(value, scope.row)"
|
|
|
+ v-model="scope.row.num_4"
|
|
|
+ onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)));"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="5" align="center" width="120">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-input v-model="scope.row.num1"></el-input>
|
|
|
+ <el-form-item
|
|
|
+ :prop="'tableList.' + scope.$index + '.num_5'"
|
|
|
+ label-width="0"
|
|
|
+ :rules="{
|
|
|
+ validator: validateSingleInputNumber,
|
|
|
+ trigger: 'blur'
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ @change="value => handleInputChange(value, scope.row)"
|
|
|
+ v-model="scope.row.num_5"
|
|
|
+ onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)));"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="平均值" align="center" width="120">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-input v-model="scope.row.num1"></el-input>
|
|
|
+ <el-input v-model="scope.row.num_6" disabled></el-input>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
@@ -296,7 +383,9 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+import { assign, omit, map } from 'lodash-es';
|
|
|
import UserIDSelectComponent from './components/userSelect.vue';
|
|
|
+import { downFile } from '@/util/downloadFile.js';
|
|
|
|
|
|
export default {
|
|
|
components: { UserIDSelectComponent },
|
|
|
@@ -512,7 +601,8 @@ export default {
|
|
|
label: '水库道路周边地块、荒地(待建地、城乡失管地等)',
|
|
|
value: '4'
|
|
|
}
|
|
|
- ]
|
|
|
+ ],
|
|
|
+ exportLoading: false
|
|
|
};
|
|
|
},
|
|
|
//监听属性 类似于data概念
|
|
|
@@ -521,6 +611,46 @@ export default {
|
|
|
watch: {},
|
|
|
//方法集合
|
|
|
methods: {
|
|
|
+ // 导出
|
|
|
+ exportData(type, row) {
|
|
|
+ if (this.exportLoading) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ let payload = {
|
|
|
+ as_ids: ''
|
|
|
+ };
|
|
|
+
|
|
|
+ if (type === 'all') {
|
|
|
+ payload.as_ids = map(this.tableData, 'as_id').join(',');
|
|
|
+ } else {
|
|
|
+ payload.as_ids = row.as_id;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.exportLoading = true;
|
|
|
+ this.$axios({
|
|
|
+ method: 'POST',
|
|
|
+ url:
|
|
|
+ '/api/api_gateway?method=data_report.info.export_alien_specie_info',
|
|
|
+ responseType: 'blob',
|
|
|
+ data: this.qs.stringify(payload)
|
|
|
+ })
|
|
|
+ .then(res => {
|
|
|
+ downFile({
|
|
|
+ data: res.data,
|
|
|
+ fileName: '外来入侵病虫害标准样地调查表.docx'
|
|
|
+ });
|
|
|
+
|
|
|
+ setTimeout(() => {
|
|
|
+ this.exportLoading = false;
|
|
|
+ }, 1500);
|
|
|
+ })
|
|
|
+ .catch(err => {
|
|
|
+ setTimeout(() => {
|
|
|
+ this.exportLoading = false;
|
|
|
+ }, 1500);
|
|
|
+ });
|
|
|
+ },
|
|
|
getDataList() {
|
|
|
//列表
|
|
|
this.loading = true;
|
|
|
@@ -557,7 +687,66 @@ export default {
|
|
|
this.queryInfo.page = e;
|
|
|
this.getDataList();
|
|
|
},
|
|
|
- handleEdit() {
|
|
|
+ averageValue(key, len) {
|
|
|
+ let total = 0;
|
|
|
+ for (let i = 1; i <= len; i++) {
|
|
|
+ total += this.baseForm[key + '_' + i] * 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ return (total / len).toFixed(2);
|
|
|
+ },
|
|
|
+ handleInputChange(value, row) {
|
|
|
+ console.log('input value', value, 'iiiiii', row);
|
|
|
+
|
|
|
+ const total =
|
|
|
+ row.num_1 * 1 +
|
|
|
+ row.num_2 * 1 +
|
|
|
+ row.num_3 * 1 +
|
|
|
+ row.num_4 * 1 +
|
|
|
+ row.num_5 * 1;
|
|
|
+
|
|
|
+ row.num_6 = (total / 5).toFixed(2);
|
|
|
+ },
|
|
|
+ handleEdit(row) {
|
|
|
+ if (row.as_id) {
|
|
|
+ this.baseForm = assign({}, row, {
|
|
|
+ occurs_list: row.occurs ? [row.occurs] : []
|
|
|
+ });
|
|
|
+
|
|
|
+ this.baseForm.tableList = [
|
|
|
+ {
|
|
|
+ row_name: '调查株数/样线长度',
|
|
|
+ row_key: 'check_num',
|
|
|
+ num_1: this.baseForm.check_num_1 || '',
|
|
|
+ num_2: this.baseForm.check_num_2 || '',
|
|
|
+ num_3: this.baseForm.check_num_3 || '',
|
|
|
+ num_4: this.baseForm.check_num_4 || '',
|
|
|
+ num_5: this.baseForm.check_num_5 || '',
|
|
|
+ num_6: this.averageValue('check_num', 5) || ''
|
|
|
+ },
|
|
|
+ {
|
|
|
+ row_name: '受害株数/受害病株所垮长度',
|
|
|
+ row_key: 'harm_num',
|
|
|
+ num_1: this.baseForm.harm_num_1 || '',
|
|
|
+ num_2: this.baseForm.harm_num_2 || '',
|
|
|
+ num_3: this.baseForm.harm_num_3 || '',
|
|
|
+ num_4: this.baseForm.harm_num_4 || '',
|
|
|
+ num_5: this.baseForm.harm_num_5 || '',
|
|
|
+ num_6: this.averageValue('harm_num', 5) || ''
|
|
|
+ },
|
|
|
+ {
|
|
|
+ row_name: '危害率(%)',
|
|
|
+ row_key: 'harm_rate',
|
|
|
+ num_1: this.baseForm.harm_rate_1 || '',
|
|
|
+ num_2: this.baseForm.harm_rate_2 || '',
|
|
|
+ num_3: this.baseForm.harm_rate_3 || '',
|
|
|
+ num_4: this.baseForm.harm_rate_4 || '',
|
|
|
+ num_5: this.baseForm.harm_rate_5 || '',
|
|
|
+ num_6: this.averageValue('harm_rate', 5) || ''
|
|
|
+ }
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
this.dialogVisible = true;
|
|
|
},
|
|
|
submitForm(formName) {
|
|
|
@@ -588,7 +777,12 @@ export default {
|
|
|
} else {
|
|
|
// 编辑
|
|
|
// 添加
|
|
|
- const payload = omit(this.baseForm, ['check_time']);
|
|
|
+ const payload = omit(this.baseForm, [
|
|
|
+ 'check_time',
|
|
|
+ 'submit_time',
|
|
|
+ 'user_name'
|
|
|
+ ]);
|
|
|
+
|
|
|
this.$axios({
|
|
|
method: 'POST',
|
|
|
url:
|
|
|
@@ -626,6 +820,18 @@ export default {
|
|
|
console.log(res.data.data);
|
|
|
this.organizationList = res.data.data.org_list;
|
|
|
});
|
|
|
+ },
|
|
|
+ validateSingleInputNumber(rule, value, callback) {
|
|
|
+ console.log(value, 'validateSingleInputNumber');
|
|
|
+ if (!value) {
|
|
|
+ callback(new Error('请输入大于0的数'));
|
|
|
+ } else {
|
|
|
+ if (Number(value) > 0) {
|
|
|
+ callback();
|
|
|
+ } else {
|
|
|
+ callback(new Error('请输入大于0的数'));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
beforeCreate() {}, //生命周期 - 创建之前
|