|
|
@@ -1,67 +1,187 @@
|
|
|
<template>
|
|
|
<div>
|
|
|
- <!-- <div
|
|
|
- v-for="(item, index) in form.blank_business_component"
|
|
|
- :key="index"
|
|
|
+ <el-table
|
|
|
+ :data="tableData"
|
|
|
+ style="width: 100%"
|
|
|
+ size="mini"
|
|
|
+ border>
|
|
|
+ <el-table-column
|
|
|
+ prop="startDate"
|
|
|
+ align="center"
|
|
|
+ label="出发日期">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="endDate"
|
|
|
+ align="center"
|
|
|
+ label="到达日期">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="startPlace"
|
|
|
+ align="center"
|
|
|
+ label="出发地">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="endPlace"
|
|
|
+ align="center"
|
|
|
+ label="到达地">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="transportationWay"
|
|
|
+ align="center"
|
|
|
+ label="交通方式">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="price"
|
|
|
+ align="center"
|
|
|
+ label="交通费用">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="操作"
|
|
|
+ align="center"
|
|
|
+ width="100">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-button @click="editRow(scope.row, index)" type="text" size="mini">编辑</el-button>
|
|
|
+ <el-button @click="deleteRow(index)" type="text" size="mini">删除</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <div @click="addRow" style="text-align: center;">
|
|
|
+ <el-button type="text" icon="el-icon-plus">添加</el-button>
|
|
|
+ </div>
|
|
|
+ <ele-modal
|
|
|
+ title="明细"
|
|
|
+ custom-class="ele-dialog-form long-dialog-form"
|
|
|
+ :visible.sync="visible"
|
|
|
+ :before-close="handleClose"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ top="5vh"
|
|
|
+ :close-on-press-escape="false"
|
|
|
+ append-to-body
|
|
|
+ width="70%"
|
|
|
+ :maxable="true"
|
|
|
>
|
|
|
- <div class="blank_business_component">
|
|
|
- <span>事项{{ index + 1 }}:</span>
|
|
|
- <span>删除</span>
|
|
|
- </div>
|
|
|
- <div class="blank_business_component">
|
|
|
- <span class="label">出发日期:</span>
|
|
|
- <el-input
|
|
|
- class="value"
|
|
|
- v-model="form.blank_business_component[index].price"
|
|
|
- type="number"
|
|
|
- ></el-input>
|
|
|
- </div>
|
|
|
- <div class="blank_business_component">
|
|
|
- <span class="label">到达日期:</span>
|
|
|
- <el-input
|
|
|
- class="value"
|
|
|
- v-model="form.blank_business_component[index].price"
|
|
|
- type="number"
|
|
|
- ></el-input>
|
|
|
- </div>
|
|
|
- <div class="blank_business_component">
|
|
|
- <span class="label">出发地:</span>
|
|
|
- <el-input
|
|
|
- class="value"
|
|
|
- v-model="form.blank_business_component[index].price"
|
|
|
- type="number"
|
|
|
- ></el-input>
|
|
|
- </div>
|
|
|
- <div class="blank_business_component">
|
|
|
- <span class="label">目的地:</span>
|
|
|
- <el-input
|
|
|
- class="value"
|
|
|
- v-model="form.blank_business_component[index].price"
|
|
|
- type="number"
|
|
|
- ></el-input>
|
|
|
- </div>
|
|
|
- <div class="blank_business_component">
|
|
|
- <span class="label">交通工具 :</span>
|
|
|
- <el-input
|
|
|
- class="value"
|
|
|
- v-model="form.blank_business_component[index].price"
|
|
|
- type="number"
|
|
|
- ></el-input>
|
|
|
- </div>
|
|
|
- <div class="blank_business_component">
|
|
|
- <span class="label">交通费用 :</span>
|
|
|
- <el-input
|
|
|
- class="value"
|
|
|
- v-model="form.blank_business_component[index].price"
|
|
|
- type="number"
|
|
|
- ></el-input>
|
|
|
+ <el-card shadow="never">
|
|
|
+ <el-form ref="form" :model="form">
|
|
|
+ <el-form-item
|
|
|
+ label="出发日期"
|
|
|
+ label-width="80px"
|
|
|
+ prop="startDate"
|
|
|
+ :rules="{
|
|
|
+ required: true,
|
|
|
+ message: '选择出发日期',
|
|
|
+ trigger: 'change'
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ style="width: 100%"
|
|
|
+ v-model="form.startDate"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ type="datetime"
|
|
|
+ placeholder="选择日期"
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ label="到达日期"
|
|
|
+ label-width="80px"
|
|
|
+ prop="endDate"
|
|
|
+ :rules="{
|
|
|
+ required: true,
|
|
|
+ message: '选择到达日期',
|
|
|
+ trigger: 'change'
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ style="width: 100%"
|
|
|
+ v-model="form.endDate"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ type="datetime"
|
|
|
+ placeholder="选择日期"
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ label="出发地"
|
|
|
+ label-width="80px"
|
|
|
+ prop="startPlace"
|
|
|
+ :rules="{
|
|
|
+ required: true,
|
|
|
+ message: '输入出发地',
|
|
|
+ trigger: 'change'
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ v-model="form.startPlace"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ label="目的地"
|
|
|
+ label-width="80px"
|
|
|
+ prop="endPlace"
|
|
|
+ :rules="{
|
|
|
+ required: true,
|
|
|
+ message: '输入目的地',
|
|
|
+ trigger: 'change'
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ v-model="form.endPlace"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ label="交通方式"
|
|
|
+ label-width="80px"
|
|
|
+ prop="transportationWay"
|
|
|
+ :rules="{
|
|
|
+ required: true,
|
|
|
+ message: '请选择交通方式',
|
|
|
+ trigger: 'change'
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ v-model="form.transportationWay"
|
|
|
+ placeholder="请选择"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in transportationWayList"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ label="交通费用"
|
|
|
+ label-width="80px"
|
|
|
+ prop="price"
|
|
|
+ :rules="{
|
|
|
+ required: true,
|
|
|
+ message: '输入交通费用',
|
|
|
+ trigger: 'change'
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ v-model="form.price"
|
|
|
+ type="number"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </el-card>
|
|
|
+
|
|
|
+ <div slot="footer">
|
|
|
+ <el-button type="primary" size="small" @click="save">保存</el-button>
|
|
|
+ <el-button size="small" @click="handleClose">关闭</el-button>
|
|
|
</div>
|
|
|
- </div> -->
|
|
|
-
|
|
|
- <el-form ref="form" :model="form">
|
|
|
- <div v-for="(row, $index) in form.blank_business_component" :key="$index">
|
|
|
+ </ele-modal>
|
|
|
+ <!-- <el-form ref="form" :model="info">
|
|
|
+ <div v-for="(row, $index) in info.blank_business_component" :key="$index">
|
|
|
<el-form-item>
|
|
|
- <span>事项{{ $index + 1 }}:</span> <span>删除</span>
|
|
|
+ <div class="header">
|
|
|
+ <span>事项{{ $index + 1 }}:</span>
|
|
|
+ <el-button v-if="$index !== 0" type="danger" size="mini" icon="el-icon-delete" @click="delNewRow($index)">删除</el-button>
|
|
|
+ </div>
|
|
|
</el-form-item>
|
|
|
<el-form-item
|
|
|
label="出发日期"
|
|
|
@@ -169,7 +289,7 @@
|
|
|
></el-input>
|
|
|
</el-form-item>
|
|
|
</div>
|
|
|
- <el-form-item>
|
|
|
+ <el-form-item style="text-align: right;">
|
|
|
<el-button
|
|
|
type="primary"
|
|
|
size="small"
|
|
|
@@ -178,7 +298,7 @@
|
|
|
>添加</el-button
|
|
|
>
|
|
|
</el-form-item>
|
|
|
- </el-form>
|
|
|
+ </el-form> -->
|
|
|
</div>
|
|
|
</template>
|
|
|
<script>
|
|
|
@@ -191,7 +311,11 @@ export default {
|
|
|
generateForm: {
|
|
|
type: Object,
|
|
|
default: () => {}
|
|
|
- }
|
|
|
+ },
|
|
|
+ id: {
|
|
|
+ type: String,
|
|
|
+ default: ''
|
|
|
+ },
|
|
|
},
|
|
|
watch: {
|
|
|
info: {
|
|
|
@@ -214,9 +338,8 @@ export default {
|
|
|
remark: ''
|
|
|
}
|
|
|
return {
|
|
|
- form: {
|
|
|
- blank_business_component: [formItem]
|
|
|
- },
|
|
|
+ form: {},
|
|
|
+ formItem,
|
|
|
transportationWayList: [
|
|
|
{
|
|
|
value: '火车',
|
|
|
@@ -250,39 +373,91 @@ export default {
|
|
|
value: '滴滴',
|
|
|
label: '滴滴'
|
|
|
}
|
|
|
- ]
|
|
|
+ ],
|
|
|
+ tableData: [],
|
|
|
+ visible: false,
|
|
|
+ currentItem: {},
|
|
|
+ currentIndex: null,
|
|
|
}
|
|
|
},
|
|
|
mounted() {
|
|
|
console.log('info~~~', this.info);
|
|
|
+ this.initForm();
|
|
|
},
|
|
|
methods: {
|
|
|
- async addNewRow(key) {
|
|
|
- console.log(key);
|
|
|
- console.log('addNewRow', this.form);
|
|
|
- // Ensure the array exists before pushing
|
|
|
- if (!this.form[key]) {
|
|
|
- this.form[key] = [];
|
|
|
- }
|
|
|
- this.form[key].push(formItem);
|
|
|
+ async initForm() {
|
|
|
+ let data = await this.generateForm.getData(false);
|
|
|
+ console.log('generateForm~~~', data);
|
|
|
+ data[this.id] = [this.formItem];
|
|
|
+ this.generateForm.setData({
|
|
|
+ [this.id]: data[this.id]
|
|
|
+ });
|
|
|
},
|
|
|
- async delNewRow(key, index) {
|
|
|
- // Ensure the array exists before filtering
|
|
|
- if (this.form[key] && Array.isArray(this.form[key])) {
|
|
|
- this.form[key] = this.form[key].filter((item, index1) => index1 !== index);
|
|
|
- }
|
|
|
+ async addNewRow() {
|
|
|
+ let data = await this.generateForm.getData(false);
|
|
|
+ console.log(this.id, data[this.id]);
|
|
|
+ data[this.id].push(this.formItem);
|
|
|
+ this.generateForm.setData({
|
|
|
+ [this.id]: data[this.id]
|
|
|
+ });
|
|
|
},
|
|
|
- // changePrice(arr) {
|
|
|
- // let total = 0;
|
|
|
- // arr.forEach(item => {
|
|
|
- // total += Number(item.price || 0);
|
|
|
- // });
|
|
|
- // this.form.blank_adopzrdd_total_price = total;
|
|
|
- // }
|
|
|
+ async delNewRow(index) {
|
|
|
+ let data = await this.generateForm.getData(false);
|
|
|
+ data[this.id] = data[this.id].filter((item, index1) => index1 != index);
|
|
|
+ this.generateForm.setData({
|
|
|
+ [this.id]: data[this.id]
|
|
|
+ });
|
|
|
+ },
|
|
|
+ validateForm() {
|
|
|
+ //开始表单校验
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ this.$refs.form.validate((valid) => {
|
|
|
+ if (!valid) {
|
|
|
+ reject(false);
|
|
|
+ } else {
|
|
|
+ resolve(true);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ addRow() {
|
|
|
+ this.visible = true;
|
|
|
+
|
|
|
+ },
|
|
|
+ handleClose() {
|
|
|
+ this.visible = false;
|
|
|
+ },
|
|
|
+ editRow(row, index) {
|
|
|
+ console.log('编辑行', row, index);
|
|
|
+ this.currentItem = row;
|
|
|
+ this.currentIndex = index;
|
|
|
+ this.visible = true;
|
|
|
+ // this.form = JSON.parse(JSON.stringify(row));
|
|
|
+ },
|
|
|
+ async save() {
|
|
|
+ try {
|
|
|
+ await this.validateForm();
|
|
|
+ console.log('表单验证通过');
|
|
|
+ // 深拷贝form对象,避免引用问题
|
|
|
+ const newForm = JSON.parse(JSON.stringify(this.form));
|
|
|
+ this.tableData.push(newForm);
|
|
|
+ this.handleClose(); // 保存后关闭弹窗
|
|
|
+ // 重置form
|
|
|
+ this.form = {};
|
|
|
+ } catch (error) {
|
|
|
+ console.log('表单验证失败', error);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
|
<style scoped>
|
|
|
+.header {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ width: 100%;
|
|
|
+}
|
|
|
.blank_business_component {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
@@ -295,4 +470,8 @@ export default {
|
|
|
flex: 1;
|
|
|
width: calc(100% - 80px);
|
|
|
}
|
|
|
+:deep(.el-form-box .el-table .el-table__row .el-table__cell .cell) {
|
|
|
+ padding-left: 10px;
|
|
|
+ padding-right: 10px;
|
|
|
+}
|
|
|
</style>
|