瀏覽代碼

新增断面仪页

duy 1 周之前
父節點
當前提交
3be58e7243
共有 1 個文件被更改,包括 320 次插入0 次删除
  1. 320 0
      src/views/cross/cross-add.vue

+ 320 - 0
src/views/cross/cross-add.vue

@@ -0,0 +1,320 @@
+<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="channelName">
+                        <el-input v-model="formData.channelName" placeholder="请输入" />
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="测量时间" prop="date">
+                        <el-date-picker
+                            v-model="formData.date"
+                            style="width: 100%;"
+                            type="date"
+                            placeholder="请选择"
+                            value-format="YYYY-MM-DD HH:mm:ss"
+                        />
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="测量者" prop="userName">
+                        <el-input v-model="formData.userName" 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="deviceHeight">
+                        <ElInput v-model="formData.deviceHeight" placeholder="请输入" />
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="方向偏移量(X)" prop="x0">
+                        <ElInput v-model="formData.x0" placeholder="请输入" />
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="方向偏移量(Y)" prop="z0">
+                        <ElInput v-model="formData.z0" placeholder="请输入" />
+                    </el-form-item>
+                </el-col>
+            </el-row>
+
+            <!-- 标准断面 -->
+            <div class="section-title">
+                <!-- 左侧蓝色圆点标识 -->
+                <div class="title-dot" />
+                <!-- 标题文本 -->
+                <div class="title-text">标准断面</div>
+            </div>
+            <el-row v-for="(eleItem, eleIndex) in formData.sectionBeans" :key="eleIndex" :gutter="20">
+                <el-col :span="4">
+                    <el-form-item label="方向" prop="direction">
+                        <!-- <ElInput v-model="eleItem.direction" placeholder="请输入" /> -->
+                        <el-select 
+                            v-model="eleItem.direction" 
+                            size="small" 
+                            style="width: 100%"
+                        >
+                            <el-option label="顺时针" value="true" />
+                            <el-option label="逆时针" value="false" />
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="4">
+                    <el-form-item label="起角" prop="startAngle">
+                        <ElInput v-model="eleItem.startAngle" placeholder="请输入" />
+                    </el-form-item>
+                </el-col>
+                <el-col :span="4">
+                    <el-form-item label="终角" prop="endAngle">
+                        <ElInput v-model="eleItem.endAngle" placeholder="请输入" />
+                    </el-form-item>
+                </el-col>
+                <el-col :span="4">
+                    <el-form-item label="半径" prop="radius">
+                        <ElInput v-model="eleItem.radius" placeholder="请输入" />
+                    </el-form-item>
+                </el-col>
+                <el-col :span="4">
+                    <el-form-item label="圆心(X)" prop="x">
+                        <ElInput v-model="eleItem.x" placeholder="请输入" />
+                    </el-form-item>
+                </el-col>
+                <el-col :span="4">
+                    <el-form-item label="圆心(Z)" prop="y">
+                        <ElInput v-model="eleItem.y" 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.data">
+                <template #angle="{ row }">
+                    <el-input v-model="row.angle" size="small" />
+                </template>
+                <template #dist="{ row }">
+                    <el-input v-model="row.dist" size="small" />
+                </template>
+                <template #x="{ row }">
+                    <el-input v-model="row.x" size="small" />
+                </template>
+                <template #z="{ row }">
+                    <el-input v-model="row.z" size="small" />
+                </template>
+                <template #backBreak="{ row }">
+                    <el-input v-model="row.backBreak" size="small" />
+                </template>
+            </HcTable>
+        </el-form>
+    </hc-new-dialog>
+</template>
+
+<script setup>
+import { defineModel, onMounted, ref, watch } from 'vue'
+import { getObjValue } from 'js-fast-way'
+import { getDictionaryData } from '~uti/tools'
+import crossApi from '~api/cross/cross'
+
+const props = defineProps({
+    formDisabled: {
+        type: Boolean,
+        default: false,
+    },
+    rowId: {
+        type: String,
+        default: '',
+    },
+
+ 
+})
+const emit = defineEmits(['save'])
+const formDisabled = ref(props.formDisabled)
+const rowId = ref(props.rowId)
+// 双向绑定弹窗显示状态
+const editModal = defineModel('modelValue', {
+  default: false,
+})
+const editModalTitle = ref('编辑')
+
+watch(() => props.formDisabled, (val) => {
+   
+  formDisabled.value = val
+  editModalTitle.value = val ? '查看详情' : '编辑'
+})
+watch(() => props.rowId, (val) => {
+  rowId.value = val
+  if (val) {
+  
+    getOneDetail(val)
+  }
+})
+const tasksStatus = ref([
+   
+])
+const getTasksStatusOptions = async () => {
+    tasksStatus.value = await getDictionaryData('q_profiler_back_break', true)
+
+    tasksStatus.value.forEach(item => {
+        item.value = String(item.value) 
+
+    })
+    
+
+    
+}
+// 监听弹窗显示状态,每次打开时加载选项
+watch(editModal, (newVal) => {
+  if (newVal) { // 当弹窗被打开时
+    // getTasksStatusOptions()
+  }
+})
+const getOneDetail = async (id)=>{
+    confirmLoad.value = true
+        const { error, code, data } = await crossApi.getOne({
+       id,
+
+    })
+    //判断状态
+    confirmLoad.value = false
+    if (!error && code === 200) {
+        console.log(data, '详情')
+        formData.value = getObjValue(data)
+        const { sectionBeans } = data
+        if (sectionBeans.length === 0) {
+            formData.value.sectionBeans = [{}]
+        }
+        
+    } else {
+      formData.value = {}
+       
+    }
+
+}
+// 表单引用
+const formRef = ref(null)
+// 加载状态
+const confirmLoad = ref(false)
+
+// 表单数据结构
+const formData = ref({
+  channelName: '',
+  date: '',
+  userName: '',
+  deviceHeight: '',
+  x0: '',
+  z0: '',
+  direction: '',
+  startAngle: '',
+  endAngle: '',
+  radius: '',
+  x: '',
+  z: '',
+  data: [
+
+
+  ],
+})
+const tableColumn = [
+    { key: 'angle', name: '测点角度' },
+    { key: 'dist', name: '距离' },
+    { key: 'x', name: 'X坐标' },
+    { key: 'z', name: 'Y坐标' },
+    { key: 'backBreak', name: '超/欠挖值' },
+   
+]
+// 添加新的测量点
+
+
+// 关闭弹窗
+const closeModal = () => {
+  editModal.value = false
+}
+
+// 确认提交
+const confirmLink = async () => {
+  // 表单验证
+  if (formRef.value) {
+    const valid = await formRef.value.validate()
+    if (!valid) return
+  }
+
+
+  confirmLoad.value = true
+  
+  // 检查sectionBeans是否为[{}]
+  if (formData.value.sectionBeans && formData.value.sectionBeans.length === 1 && Object.keys(formData.value.sectionBeans[0]).length === 0) {
+    formData.value.sectionBeans = []
+  }
+
+  const { error, code, msg } = await crossApi.edit(formData.value)
+  //判断状态
+  confirmLoad.value = false
+  if (!error && code === 200) {
+    window.$message.success('保存成功')
+    closeModal()
+    emit('save')
+  }
+
+}
+</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>