|
|
@@ -0,0 +1,260 @@
|
|
|
+<template>
|
|
|
+ <hc-new-dialog
|
|
|
+ v-model="editModal"
|
|
|
+ is-table
|
|
|
+ :title="editModalTitle"
|
|
|
+ widths="85rem"
|
|
|
+ :loading="confirmLoad"
|
|
|
+ @close="closeModal"
|
|
|
+ @save="confirmLink"
|
|
|
+ >
|
|
|
+ <el-form
|
|
|
+ ref="formRef"
|
|
|
+ :model="formData"
|
|
|
+ :disabled="formDisabled"
|
|
|
+ >
|
|
|
+ <!-- 测量者信息 -->
|
|
|
+ <div class="section-title">
|
|
|
+ <!-- 左侧蓝色圆点标识 -->
|
|
|
+ <div class="title-dot" />
|
|
|
+ <!-- 标题文本 -->
|
|
|
+ <div class="title-text">测量者信息</div>
|
|
|
+ </div>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="隧道名称" prop="tunnelName">
|
|
|
+ <el-input v-model="formData.tunnelName" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="隧道时间" prop="tunnelTime">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="formData.tunnelTime"
|
|
|
+ style="width: 100%;"
|
|
|
+ type="date"
|
|
|
+ placeholder="请选择"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="测量者" prop="surveyor">
|
|
|
+ <el-input v-model="formData.surveyor" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <!-- 基础数据 -->
|
|
|
+ <div class="section-title">
|
|
|
+ <!-- 左侧蓝色圆点标识 -->
|
|
|
+ <div class="title-dot" />
|
|
|
+ <!-- 标题文本 -->
|
|
|
+ <div class="title-text">基础数据</div>
|
|
|
+ </div>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="仪器高度" prop="instrumentHeight">
|
|
|
+ <ElInput v-model="formData.instrumentHeight" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="方向偏移量(X)" prop="offsetX">
|
|
|
+ <ElInput v-model="formData.offsetX" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="方向偏移量(Y)" prop="offsetY">
|
|
|
+ <ElInput v-model="formData.offsetY" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <!-- 标准断面 -->
|
|
|
+ <div class="section-title">
|
|
|
+ <!-- 左侧蓝色圆点标识 -->
|
|
|
+ <div class="title-dot" />
|
|
|
+ <!-- 标题文本 -->
|
|
|
+ <div class="title-text">标准断面</div>
|
|
|
+ </div>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-form-item label="方向" prop="direction">
|
|
|
+ <ElInput v-model="formData.direction" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-form-item label="起角" prop="startAngle">
|
|
|
+ <ElInput v-model="formData.startAngle" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-form-item label="终角" prop="endAngle">
|
|
|
+ <ElInput v-model="formData.endAngle" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-form-item label="半径" prop="radius">
|
|
|
+ <ElInput v-model="formData.radius" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-form-item label="圆心(X)" prop="centerX">
|
|
|
+ <ElInput v-model="formData.centerX" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-form-item label="圆心(Z)" prop="centerZ">
|
|
|
+ <ElInput v-model="formData.centerZ" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <!-- 测量点数组 -->
|
|
|
+ <div class="section-title">
|
|
|
+ <!-- 左侧蓝色圆点标识 -->
|
|
|
+ <div class="title-dot" />
|
|
|
+ <!-- 标题文本 -->
|
|
|
+ <div class="title-text">测量点数组</div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <HcTable is-new :column="tableColumn" :datas="formData.measurePoints">
|
|
|
+ <template #angle="{ row }">
|
|
|
+ <el-input v-model="row.angle" size="small" />
|
|
|
+ </template>
|
|
|
+ <template #distance="{ row }">
|
|
|
+ <el-input v-model="row.distance" size="small" />
|
|
|
+ </template>
|
|
|
+ <template #x="{ row }">
|
|
|
+ <el-input v-model="row.x" size="small" />
|
|
|
+ </template>
|
|
|
+ <template #y="{ row }">
|
|
|
+ <el-input v-model="row.y" size="small" />
|
|
|
+ </template>
|
|
|
+ <template #status="{ row }">
|
|
|
+ <el-select
|
|
|
+ v-model="row.status"
|
|
|
+ size="small"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option label="超挖" value="超挖" />
|
|
|
+ <el-option label="正常" value="正常" />
|
|
|
+ <el-option label="欠挖" value="欠挖" />
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+ </HcTable>
|
|
|
+ </el-form>
|
|
|
+ </hc-new-dialog>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import { defineModel, onMounted, ref, watch } from 'vue'
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+const props = defineProps({
|
|
|
+ formDisabled: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false,
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+})
|
|
|
+const formDisabled = ref(props.formDisabled)
|
|
|
+
|
|
|
+// 双向绑定弹窗显示状态
|
|
|
+const editModal = defineModel('modelValue', {
|
|
|
+ default: false,
|
|
|
+})
|
|
|
+const editModalTitle = ref('编辑')
|
|
|
+
|
|
|
+watch(() => props.formDisabled, (val) => {
|
|
|
+ formDisabled.value = val
|
|
|
+ editModalTitle.value = val ? '查看详情' : '编辑'
|
|
|
+})
|
|
|
+// 表单引用
|
|
|
+const formRef = ref(null)
|
|
|
+// 加载状态
|
|
|
+const confirmLoad = ref(false)
|
|
|
+
|
|
|
+// 表单数据结构
|
|
|
+const formData = ref({
|
|
|
+ tunnelName: '',
|
|
|
+ tunnelTime: '',
|
|
|
+ surveyor: '',
|
|
|
+ instrumentHeight: '',
|
|
|
+ offsetX: '',
|
|
|
+ offsetY: '',
|
|
|
+ direction: '',
|
|
|
+ startAngle: '',
|
|
|
+ endAngle: '',
|
|
|
+ radius: '',
|
|
|
+ centerX: '',
|
|
|
+ centerZ: '',
|
|
|
+ measurePoints: [
|
|
|
+ { angle: '测点角度1', distance: '10', x: '10', y: '10', status: '超挖' },
|
|
|
+ { angle: '测点角度2', distance: '20', x: '20', y: '20', status: '正常' },
|
|
|
+ { angle: '测点角度3', distance: '30', x: '30', y: '30', status: '欠挖' },
|
|
|
+
|
|
|
+ ],
|
|
|
+})
|
|
|
+const tableColumn = [
|
|
|
+ { key: 'angle', name: '测点角度' },
|
|
|
+ { key: 'distance', name: '距离' },
|
|
|
+ { key: 'x', name: 'X坐标' },
|
|
|
+ { key: 'y', name: 'Y坐标' },
|
|
|
+ { key: 'status', name: '超/欠挖值' },
|
|
|
+
|
|
|
+]
|
|
|
+// 添加新的测量点
|
|
|
+
|
|
|
+
|
|
|
+// 关闭弹窗
|
|
|
+const closeModal = () => {
|
|
|
+ editModal.value = false
|
|
|
+}
|
|
|
+
|
|
|
+// 确认提交
|
|
|
+const confirmLink = async () => {
|
|
|
+ // 表单验证
|
|
|
+ if (formRef.value) {
|
|
|
+ const valid = await formRef.value.validate()
|
|
|
+ if (!valid) return
|
|
|
+ }
|
|
|
+
|
|
|
+ confirmLoad.value = true
|
|
|
+ try {
|
|
|
+ // 模拟提交逻辑
|
|
|
+ console.log('提交表单数据:', formData.value)
|
|
|
+ // 实际项目中这里会调用API
|
|
|
+ await new Promise(resolve => setTimeout(resolve, 1000))
|
|
|
+ editModal.value = false
|
|
|
+ } catch (error) {
|
|
|
+ console.error('提交失败:', error)
|
|
|
+ } finally {
|
|
|
+ confirmLoad.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.section-title {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ /* 可根据需要调整整体边距 */
|
|
|
+ margin: 15px 0;
|
|
|
+}
|
|
|
+
|
|
|
+.title-dot {
|
|
|
+ width: 8px;
|
|
|
+ height: 20px;
|
|
|
+ border-radius: 20px;
|
|
|
+ background-color:var(--el-color-primary); /* Element UI主题蓝 */
|
|
|
+ margin-right: 8px; /* 圆点与文字间距 */
|
|
|
+}
|
|
|
+
|
|
|
+.title-text {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 500;
|
|
|
+ color: #333; /* 标题文字颜色 */
|
|
|
+ /* 可根据实际设计调整字体样式 */
|
|
|
+}
|
|
|
+</style>
|