瀏覽代碼

创建项

ZaiZai 10 月之前
父節點
當前提交
c642a458dd
共有 4 個文件被更改,包括 243 次插入5 次删除
  1. 11 0
      src/api/modules/measure/template.js
  2. 97 0
      src/views/project/info/detail.vue
  3. 131 0
      src/views/project/info/info.vue
  4. 4 5
      src/views/project/list.vue

+ 11 - 0
src/api/modules/measure/template.js

@@ -0,0 +1,11 @@
+import { HcApi } from '../../request/index'
+
+export default {
+    async queryBusinessUserOpinionList(form) {
+        return HcApi({
+            url: '/api/blade-meter/tree/template/list',
+            method: 'get',
+            params: form,
+        })
+    },
+}

+ 97 - 0
src/views/project/info/detail.vue

@@ -0,0 +1,97 @@
+<template>
+    <hc-drawer v-model="isShow" to-id="hc-project-list" is-close @close="drawerClose">
+        <div class="hc-project-info-drawer relative h-full">
+            <hc-tab-card scrollbar :tabs="tabsData" :tab-key="tabsKey" is-action-btn :disabled="isDisabled" @change="tabsChange">
+                <HcInfo v-if="tabsKey === '1'" v-model="basicForm" />
+                <template #action>
+                    <el-button hc-btn class="mr-4" :loading="submitLoading" @click="saveAndExit">保存并退出</el-button>
+                    <el-button hc-btn type="primary" :loading="submitLoading" @click="saveAndNextStep">保存并进入下一步</el-button>
+                </template>
+            </hc-tab-card>
+        </div>
+    </hc-drawer>
+</template>
+
+<script setup>
+import { ref, watch } from 'vue'
+import { getArrValue, isNullES } from 'js-fast-way'
+import HcInfo from './info.vue'
+import mainApi from '~api/project/tree'
+
+const props = defineProps({
+    data: {
+        type: Object,
+        default: () => ({}),
+    },
+})
+
+//事件
+const emit = defineEmits(['close'])
+
+//双向绑定
+const isShow = defineModel('modelValue', {
+    default: false,
+})
+
+//监听数据
+const dataInfo = ref(props.data)
+watch(() => props.data, (data) => {
+    dataInfo.value = data
+}, { immediate: true, deep: true })
+
+//监听显示
+watch(isShow, (val) => {
+    if (val) getDataApi()
+})
+
+//处理相关数据
+const getDataApi = () => {
+
+}
+
+//选项卡
+const tabsKey = ref('1')
+const isDisabled = ref(true)
+const tabsData = ref([
+    { key: '1', name: '项目基本信息' },
+    { key: '2', name: '分配WBS模版' },
+    { key: '3', name: '分配日志WBS' },
+    { key: '4', name: '分配系统维护人员' },
+])
+const tabsChange = (item) => {
+    console.log(item)
+}
+
+//基本信息表单
+const basicForm = ref({})
+
+//保存并退出
+const saveAndExit = async () => {
+    const isRes = await saveDataApi()
+    console.log(isRes)
+}
+
+//保存并进入下一步
+const saveAndNextStep = async () => {
+    const isRes = await saveDataApi()
+    console.log(isRes)
+}
+
+//保存数据
+const submitLoading = ref(false)
+const saveDataApi = async () => {
+
+}
+
+//关闭抽屉
+const drawerClose = () => {
+    isShow.value = false
+    emit('close')
+}
+</script>
+
+<style scoped lang="scss">
+.hc-project-info-drawer {
+
+}
+</style>

+ 131 - 0
src/views/project/info/info.vue

@@ -0,0 +1,131 @@
+<template>
+    <div class="relative p-12px">
+        <el-form ref="formRef" :model="formModel" :rules="formRules" label-width="auto" size="large">
+            <el-row :gutter="60">
+                <el-col :span="12">
+                    <el-form-item label="项目名称:" prop="projectName">
+                        <el-input v-model="formModel.projectName" clearable placeholder="项目名称" />
+                    </el-form-item>
+                    <el-form-item label="项目别名:" prop="projectAlias">
+                        <el-input v-model="formModel.projectAlias" clearable placeholder="项目别名" />
+                    </el-form-item>
+                    <el-form-item label="项目编号:">
+                        <el-input v-model="formModel.projectNumber" clearable placeholder="项目编号" />
+                    </el-form-item>
+                    <el-form-item label="公路等级:">
+                        <el-select v-model="formModel.projectGrade" filterable clearable block placeholder="公路等级">
+                            <el-option v-for="item in highwayGradeList" :key="item.value" :label="item.label" :value="item.value" />
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="计划开工:" prop="planStartTime">
+                        <el-date-picker v-model="formModel.planStartTime" class="block" format="YYYY 年 MM 月 DD 日" type="date" value-format="YYYY-MM-DD HH:mm:ss" placeholder="计划开工日期" />
+                    </el-form-item>
+                    <el-form-item label="实际开工:" prop="actualStartTime">
+                        <el-date-picker v-model="formModel.actualStartTime" class="block" format="YYYY 年 MM 月 DD 日" type="date" value-format="YYYY-MM-DD HH:mm:ss" placeholder="实际开工日期" />
+                    </el-form-item>
+                    <el-form-item label="预算投资:">
+                        <el-input v-model="formModel.estimatedAmount" clearable placeholder="项目预算投资">
+                            <template #append>万元</template>
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item label="电签类别:" prop="remarkType">
+                        <div class="form-item-div">
+                            <el-radio-group v-model="formModel.remarkType">
+                                <el-radio :value="1">安心签</el-radio>
+                                <el-radio :value="2">东方中讯</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <el-form-item label="电签方式:">
+                        <div class="form-item-div">
+                            <el-radio-group v-model="formModel.approvalType">
+                                <el-radio :value="1">流程审批</el-radio>
+                                <el-radio :value="2">平行审批</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                    <el-form-item label="计量单元:">
+                        <el-select v-model="formModel.meterTemplateId" filterable clearable block placeholder="系统计量单元">
+                            <el-option v-for="item in meterTemplateOption" :key="item.value" :label="item.label" :value="item.value" />
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item label="项目概况:">
+                        <el-input v-model="formModel.projectGist" :rows="7" type="textarea" placeholder="项目概况" />
+                    </el-form-item>
+                    <el-form-item label="内置里程:">
+                        <el-radio-group v-model="formModel.radioType" class="mr-14px">
+                            <el-radio-button label="总里程" value="总里程" />
+                            <el-radio-button label="路面" value="路面" />
+                            <el-radio-button label="路基" value="路基" />
+                        </el-radio-group>
+                        <el-input-number v-if="formModel.radioType === '总里程'" v-model="formModel.projectAllMileage" :min="0" />
+                        <el-input-number v-if="formModel.radioType === '路面'" v-model="formModel.projectPavement" :min="0" />
+                        <el-input-number v-if="formModel.radioType === '路基'" v-model="formModel.projectSubgrade" :min="0" />
+                        <span class="ml-12px">公里(KM)</span>
+                    </el-form-item>
+                    <el-form-item label="计划完工:" prop="planEndTime">
+                        <el-date-picker v-model="formModel.planEndTime" class="block" format="YYYY 年 MM 月 DD 日" type="date" value-format="YYYY-MM-DD HH:mm:ss" placeholder="计划完工日期" />
+                    </el-form-item>
+                    <el-form-item label="实际完工:" prop="actualEndTime">
+                        <el-date-picker v-model="formModel.actualEndTime" class="block" format="YYYY 年 MM 月 DD 日" type="date" value-format="YYYY-MM-DD HH:mm:ss" placeholder="实际完工日期" />
+                    </el-form-item>
+                    <el-form-item label="随机数:" prop="isOpenRandomNumber">
+                        <div class="form-item-div">
+                            <el-radio-group v-model="formModel.isOpenRandomNumber">
+                                <el-radio :value="0">不开启</el-radio>
+                                <el-radio :value="1">开启</el-radio>
+                            </el-radio-group>
+                        </div>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+        </el-form>
+    </div>
+</template>
+
+<script setup>
+import { onMounted, ref, watch } from 'vue'
+import { getDictionaryData } from '~uti/tools'
+
+//双向绑定
+const modelData = defineModel('modelValue', {
+    default: {},
+})
+
+//渲染完成
+onMounted(() => {
+    getHighwayGradeList()
+})
+
+//监听数据
+const formModel = ref({})
+watch(() => modelData.value, (data) => {
+    data.radioType = data.radioType || '总里程'
+    formModel.value = data
+}, { immediate: true, deep: true })
+
+//表单
+const formRef = ref(null)
+const formRules = {
+    projectName: { required: true, trigger: 'blur', message: '请输入项目名称' },
+    projectAlias: { required: true, trigger: 'blur', message: '请输入项目别名' },
+    planStartTime: { required: true, trigger: 'blur', message: '请选择计划开工日期' },
+    actualStartTime: { required: true, trigger: 'blur', message: '请选择实际开工日期' },
+    remarkType: { required: true, trigger: 'blur', message: '请选择电签类别' },
+}
+
+//公路等级
+const highwayGradeList = ref([])
+const getHighwayGradeList = async () => {
+    highwayGradeList.value = await getDictionaryData('highway_grade')
+}
+
+//系统计量单元
+const meterTemplateOption = ref([])
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 4 - 5
src/views/project/list.vue

@@ -38,9 +38,7 @@
         <HcWbsTree v-model="isWbsTreeDrawer" :type="wbsTreeType" :info="wbsTreeInfo" @change="wbsTreeChange" @close="wbsTreeClose" />
 
         <!-- 创建或编辑项目信息 -->
-        <hc-drawer v-model="isProjectDrawer" is-close to-id="hc-project-list">
-            创建或编辑项目信息
-        </hc-drawer>
+        <HcInfoDetail v-model="isProjectDrawer" :data="projectItem" />
     </hc-card>
 </template>
 
@@ -49,6 +47,7 @@ import { nextTick, onActivated, onDeactivated, ref } from 'vue'
 import { getArrValue, getObjValue } from 'js-fast-way'
 import InfoDialog from './list/info-dialog.vue'
 import HcWbsTree from './list/wbs-tree.vue'
+import HcInfoDetail from './info/detail.vue'
 import mainApi from '~api/project/project'
 
 defineOptions({
@@ -166,11 +165,11 @@ const projectInfoCheck = ({ type, info, item }) => {
 
 //创建项目或修改项目
 const isProjectDrawer = ref(false)
-const projectDrawerId = ref('')
+const projectItem = ref({})
 
 //创建项目
 const addProjectClick = () => {
-    projectDrawerId.value = ''
+    projectItem.value = {}
     nextTick(() => {
         isProjectDrawer.value = true
     })