info.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <template>
  2. <div class="relative p-12px">
  3. <el-form ref="formRef" :model="formModel" :rules="formRules" label-width="auto" size="large">
  4. <el-row :gutter="60">
  5. <el-col :span="12">
  6. <el-form-item label="项目名称:" prop="projectName">
  7. <el-input v-model="formModel.projectName" clearable placeholder="项目名称" />
  8. </el-form-item>
  9. <el-form-item label="项目别名:" prop="projectAlias">
  10. <el-input v-model="formModel.projectAlias" clearable placeholder="项目别名" />
  11. </el-form-item>
  12. <el-form-item label="项目编号:">
  13. <el-input v-model="formModel.projectNumber" clearable placeholder="项目编号" />
  14. </el-form-item>
  15. <el-form-item label="公路等级:">
  16. <el-select v-model="formModel.projectGrade" filterable clearable block placeholder="公路等级">
  17. <el-option v-for="item in highwayGradeList" :key="item.value" :label="item.label" :value="item.value" />
  18. </el-select>
  19. </el-form-item>
  20. <el-form-item label="计划开工:" prop="planStartTime">
  21. <el-date-picker v-model="formModel.planStartTime" class="block" format="YYYY 年 MM 月 DD 日" type="date" value-format="YYYY-MM-DD HH:mm:ss" placeholder="计划开工日期" />
  22. </el-form-item>
  23. <el-form-item label="实际开工:" prop="actualStartTime">
  24. <el-date-picker v-model="formModel.actualStartTime" class="block" format="YYYY 年 MM 月 DD 日" type="date" value-format="YYYY-MM-DD HH:mm:ss" placeholder="实际开工日期" />
  25. </el-form-item>
  26. <el-form-item label="预算投资:">
  27. <el-input v-model="formModel.estimatedAmount" clearable placeholder="项目预算投资">
  28. <template #append>万元</template>
  29. </el-input>
  30. </el-form-item>
  31. <el-form-item label="电签类别:" prop="remarkType">
  32. <div class="form-item-div">
  33. <el-radio-group v-model="formModel.remarkType">
  34. <el-radio :value="1">安心签</el-radio>
  35. <el-radio :value="2">东方中讯</el-radio>
  36. </el-radio-group>
  37. </div>
  38. </el-form-item>
  39. <el-form-item label="电签方式:">
  40. <div class="form-item-div">
  41. <el-radio-group v-model="formModel.approvalType">
  42. <el-radio :value="1">流程审批</el-radio>
  43. <el-radio :value="2">平行审批</el-radio>
  44. </el-radio-group>
  45. </div>
  46. </el-form-item>
  47. <el-form-item label="计量单元:">
  48. <el-select v-model="formModel.meterTemplateId" filterable clearable block placeholder="系统计量单元">
  49. <el-option v-for="item in meterTemplateOption" :key="item.id" :label="item.name" :value="item.id" />
  50. </el-select>
  51. </el-form-item>
  52. </el-col>
  53. <el-col :span="12">
  54. <el-form-item label="项目概况:">
  55. <el-input v-model="formModel.projectGist" :rows="7" type="textarea" placeholder="项目概况" />
  56. </el-form-item>
  57. <el-form-item label="内置里程:">
  58. <el-radio-group v-model="formModel.radioType" class="mr-14px">
  59. <el-radio-button label="总里程" value="总里程" />
  60. <el-radio-button label="路面" value="路面" />
  61. <el-radio-button label="路基" value="路基" />
  62. </el-radio-group>
  63. <el-input-number v-if="formModel.radioType === '总里程'" v-model="formModel.projectAllMileage" :min="0" />
  64. <el-input-number v-if="formModel.radioType === '路面'" v-model="formModel.projectPavement" :min="0" />
  65. <el-input-number v-if="formModel.radioType === '路基'" v-model="formModel.projectSubgrade" :min="0" />
  66. <span class="ml-12px">公里(KM)</span>
  67. </el-form-item>
  68. <el-form-item label="计划完工:" prop="planEndTime">
  69. <el-date-picker v-model="formModel.planEndTime" class="block" format="YYYY 年 MM 月 DD 日" type="date" value-format="YYYY-MM-DD HH:mm:ss" placeholder="计划完工日期" />
  70. </el-form-item>
  71. <el-form-item label="实际完工:" prop="actualEndTime">
  72. <el-date-picker v-model="formModel.actualEndTime" class="block" format="YYYY 年 MM 月 DD 日" type="date" value-format="YYYY-MM-DD HH:mm:ss" placeholder="实际完工日期" />
  73. </el-form-item>
  74. <el-form-item label="随机数:" prop="isOpenRandomNumber">
  75. <div class="form-item-div">
  76. <el-radio-group v-model="formModel.isOpenRandomNumber">
  77. <el-radio :value="0">不开启</el-radio>
  78. <el-radio :value="1">开启</el-radio>
  79. </el-radio-group>
  80. </div>
  81. </el-form-item>
  82. </el-col>
  83. </el-row>
  84. </el-form>
  85. </div>
  86. </template>
  87. <script setup>
  88. import { formValidate, getArrValue } from 'js-fast-way'
  89. import { onMounted, ref, watch } from 'vue'
  90. import { getDictionaryData } from '~uti/tools'
  91. import measureApi from '~api/measure/template'
  92. //双向绑定
  93. const modelData = defineModel('modelValue', {
  94. default: {},
  95. })
  96. //渲染完成
  97. onMounted(() => {
  98. getHighwayGradeList()
  99. getBusinessUserOpinion()
  100. })
  101. //监听数据
  102. const formModel = ref({})
  103. watch(() => modelData.value, (data) => {
  104. data.radioType = data.radioType || '总里程'
  105. formModel.value = data
  106. }, { immediate: true, deep: true })
  107. //监听表单数据
  108. watch(() => formModel.value, (data) => {
  109. modelData.value = data
  110. }, { deep: true })
  111. //表单
  112. const formRef = ref(null)
  113. const formRules = {
  114. projectName: { required: true, trigger: 'blur', message: '请输入项目名称' },
  115. projectAlias: { required: true, trigger: 'blur', message: '请输入项目别名' },
  116. planStartTime: { required: true, trigger: 'blur', message: '请选择计划开工日期' },
  117. actualStartTime: { required: true, trigger: 'blur', message: '请选择实际开工日期' },
  118. remarkType: { required: true, trigger: 'blur', message: '请选择电签类别' },
  119. }
  120. //公路等级
  121. const highwayGradeList = ref([])
  122. const getHighwayGradeList = async () => {
  123. highwayGradeList.value = await getDictionaryData('highway_grade')
  124. }
  125. //系统计量单元
  126. const meterTemplateOption = ref([])
  127. const getBusinessUserOpinion = async () => {
  128. const { data } = await measureApi.queryBusinessUserOpinionList()
  129. meterTemplateOption.value = getArrValue(data)
  130. }
  131. //验证表单
  132. const isForm = async () => {
  133. return await formValidate(formRef.value)
  134. }
  135. defineExpose({
  136. isForm,
  137. })
  138. </script>