2545307760@qq.com 1 anno fa
parent
commit
75a10d988b

+ 1 - 1
web/.env.development

@@ -4,7 +4,7 @@ VITE_CLI_PORT = 8080
 VITE_SERVER_PORT = 8220
 VITE_BASE_API = /api
 VITE_FILE_API = /api
-VITE_BASE_PATH = http://127.0.0.1
+VITE_BASE_PATH = http://192.168.110.218
 VITE_POSITION = close
 VITE_EDITOR = webstorm
 

+ 348 - 200
web/src/view/projectManage/projectApproval/projectApproval.vue

@@ -1,8 +1,8 @@
 <template>
   <div>
     <div
-      style="height: 300px"
-      class="bg-white"
+        style="height: 370px"
+        class="bg-white"
     >
       <div class="basicInformation">
         <div style="padding-top: 10px;margin-left: 90px">
@@ -10,155 +10,269 @@
         </div>
         <div style="display: flex;align-items: center">
           <el-text
-            style="margin-left: 10px"
-            size="large"
-            tag="b"
+              style="margin-left: 10px"
+              size="large"
+              tag="b"
           >项目基本信息</el-text>
         </div>
       </div>
-      <el-form>
-        <el-row
-          style="margin:20px 0 0 90px;height: 50px"
-          align="middle"
+      <el-row style="margin-top: 20px">
+        <el-col
+            :span="16"
+            style="margin-left: 90px"
         >
-          <el-col :span="5">
-            <el-form-item
-              label="项目名称:"
-              size="large"
-              prop="name"
-            >
-              <el-input
-                v-model="basicMessage.name"
-                placeholder="请输入项目名称"
-                size="large"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col
-            :span="5"
-            :offset="2"
+          <el-steps
+              class="mb-4"
+              style="max-width: 750px"
+              :space="250"
+              :active="infoSteps"
+              simple
           >
-            <el-form-item
-              label="负责人:"
-              size="large"
-              prop="principal"
-            >
-              <el-select
-                v-model="basicMessage.principal"
-                placeholder="请选择负责人"
-                @change="headSelect"
+            <el-step
+                title="甲方信息"
+                :icon="Document"
+            />
+            <el-step
+                title="乙方信息"
+                :icon="Document"
+            />
+            <el-step
+                title="丙方信息"
+                :icon="Document"
+            />
+          </el-steps>
+        </el-col>
+        <el-col :span="4">
+          <el-form :inline="true">
+            <el-form-item>
+              <el-button
+                  size="large"
+                  :disabled="infoSteps === 0"
+                  @click="previousPage"
               >
-                <el-option
-                  v-for="item in userList"
-                  :key="item.ID"
-                  :label="item.nickName"
-                  :value="item.nickName"
-                />
-              </el-select>
+                上一页
+              </el-button>
             </el-form-item>
-          </el-col>
-          <el-col
-            :span="5"
-            :offset="2"
-          >
-            <el-form-item
-              label="相关客户:"
-              size="large"
-              prop="customer"
-            >
-              <el-input
-                v-model="basicMessage.customer"
-                placeholder="请输入项目相关客户"
-                size="large"
-              />
+            <el-form-item>
+              <el-button
+                  :disabled="infoSteps === 2"
+                  type="primary"
+                  size="large"
+                  @click="nextPage"
+              >下一页</el-button>
             </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row
-          style="margin:20px 0 0 90px;height: 50px"
-          align="middle"
+          </el-form>
+        </el-col>
+      </el-row>
+      <el-row style="margin-top: 30px">
+        <el-col
+            style="margin-left: 90px"
         >
-          <el-col :span="5">
-            <el-form-item
-              label="紧急程度:"
-              size="large"
-            >
-              <el-radio-group
-                v-model="basicMessage.level"
-                @change="changeUrgency"
-              >
-                <el-radio
-                  :value="1"
-                  :label="1"
-                >正常</el-radio>
-                <el-radio
-                  :value="2"
-                  :label="2"
-                >重要</el-radio>
-                <el-radio
-                  :value="3"
-                  :label="3"
-                >紧急</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-          <el-col
-            :span="6"
-            :offset="2"
+          <el-form
+              label-width="100"
+              label-position="left"
           >
-            <el-form-item
-              label="项目金额:"
-              size="large"
-            >
-              <el-input
-                v-model="projectAmount"
-                style="max-width: 600px"
-                placeholder="请输入项目的具体金额"
-                class="input-with-select"
-              >
-                <template #append>
-                  <el-select
-                    v-model="amountUnit"
-                    placeholder="元"
-                    style="width: 100px"
+            <div v-show="infoSteps === 0">
+              <el-row>
+                <el-col :span="5">
+                  <el-form-item
+                      label="项目名称"
+                      size="large"
                   >
-                    <el-option
-                      label="元"
-                      value="元"
+                    <el-input
+                        v-model="condition.name"
+                        placeholder="请输入项目名称"
                     />
-                    <el-option
-                      label="万元"
-                      value="万元"
+                  </el-form-item>
+                </el-col>
+                <el-col
+                    :span="5"
+                    :offset="1"
+                >
+                  <el-form-item
+                      label="项目地址:"
+                      size="large"
+                  >
+                    <el-input
+                        v-model="condition.address"
+                        placeholder="请输入项目地址"
                     />
-                  </el-select>
-                </template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row
-          style="margin:20px 0 0 90px;height: 70px"
-        >
-          <el-col :span="19">
-            <el-form-item
-              label="项目说明:"
-              size="large"
-            >
-              <el-input
-                v-model="basicMessage.illustrate"
-                type="textarea"
-                placeholder="项目说明(选填)"
-                :rows="3"
-                size="large"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row style="margin-top: 10px">
+                <el-col :span="5">
+                  <el-form-item
+                      label="甲方电话"
+                      size="large"
+                  >
+                    <el-input
+                        v-model="condition.firstPhone"
+                        placeholder="请输入甲方负责人电话"
+                    />
+                  </el-form-item>
+                </el-col>
+                <el-col
+                    :span="5"
+                    :offset="1"
+                >
+                  <el-form-item
+                      label="甲方负责人"
+                      size="large"
+                  >
+                    <el-input
+                        v-model="condition.firstPrincipal"
+                        placeholder="请输入甲方负责人名称"
+                    />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </div>
+            <div v-show="infoSteps === 1">
+              <el-row>
+                <el-col :span="5">
+                  <el-form-item
+                      label="乙方负责人"
+                      size="large"
+                  >
+                    <el-input
+                        v-model="condition.secondPrincipal"
+                        placeholder="请输入乙方负责人名称"
+                    />
+                  </el-form-item>
+                </el-col>
+                <el-col
+                    :span="5"
+                    :offset="1"
+                >
+                  <el-form-item
+                      label="合同金额"
+                      size="large"
+                  >
+                    <el-input-number v-model="condition.projectPrice" />
+                  </el-form-item>
+                </el-col>
+                <el-col
+                    :span="5"
+                    :offset="1"
+                >
+                  <el-form-item
+                      label="合同签订时间"
+                      size="large"
+                  >
+                    <el-date-picker
+                        v-model="condition.signTime"
+                        type="date"
+                        placeholder="请选择合同签订时间"
+                        format="YYYY-MM-DD"
+                        value-format="YYYY-MM-DD"
+                        clearable
+                        @clear="condition.signTime = ''"
+                    />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row style="margin-top: 10px">
+                <el-col :span="5">
+                  <el-form-item
+                      label="进场施工时间"
+                      size="large"
+                  >
+                    <el-date-picker
+                        v-model="condition.intoConstructionTime"
+                        type="date"
+                        placeholder="请选择进场施工时间"
+                        format="YYYY-MM-DD"
+                        value-format="YYYY-MM-DD"
+                        clearable
+                        @clear="condition.intoConstructionTime = ''"
+                    />
+                  </el-form-item>
+                </el-col>
+                <el-col
+                    :span="5"
+                    :offset="1"
+                >
+                  <el-form-item
+                      label="竣工时间"
+                      size="large"
+                  >
+                    <el-date-picker
+                        v-model="condition.completedTime"
+                        type="date"
+                        placeholder="请选择竣工时间"
+                        format="YYYY-MM-DD"
+                        value-format="YYYY-MM-DD"
+                        clearable
+                        @clear="condition.completedTime = ''"
+                    />
+                  </el-form-item>
+                </el-col>
+                <el-col
+                    :span="8"
+                    :offset="1"
+                >
+                  <el-form-item label="说明">
+                    <el-input
+                        v-model="condition.illustrate"
+                        :rows="5"
+                        type="textarea"
+                        placeholder="请输入项目说明"
+                    />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </div>
+            <div v-show="infoSteps === 2">
+              <el-row>
+                <el-col :span="5">
+                  <el-form-item
+                      label="监理单位"
+                      size="large"
+                  >
+                    <el-input
+                        v-model="condition.supervisorUint"
+                        placeholder="请输入监理单位"
+                    />
+                  </el-form-item>
+                </el-col>
+                <el-col
+                    :span="5"
+                    :offset="1"
+                >
+                  <el-form-item
+                      label="监理姓名"
+                      size="large"
+                  >
+                    <el-input
+                        v-model="condition.supervisorName"
+                        placeholder="请输入监理姓名"
+                    />
+                  </el-form-item>
+                </el-col>
+                <el-col
+                    :span="5"
+                    :offset="1"
+                >
+                  <el-form-item
+                      label="监理电话"
+                      size="large"
+                  >
+                    <el-input
+                        v-model="condition.supervisorPhone"
+                        placeholder="请输入监理电话"
+                    />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </div>
+          </el-form>
+        </el-col>
+      </el-row>
     </div>
     <div
-      style="height: 400px;margin-top: 20px"
-      class="bg-white"
+        style="height: 400px;margin-top: 20px;overflow: auto"
+        class="bg-white"
     >
       <div class="basicInformation">
         <div style="padding-top: 10px;margin-left: 90px">
@@ -166,22 +280,34 @@
         </div>
         <div style="display: flex;align-items: center">
           <el-text
-            style="margin-left: 10px"
-            size="large"
-            tag="b"
+              style="margin-left: 10px"
+              size="large"
+              tag="b"
           >项目附属文件</el-text>
         </div>
       </div>
+      <el-row style="margin-top: 15px">
+        <el-col
+            :span="12"
+            style="margin-left: 90px"
+        >
+          <el-alert
+              title="请注意立项时上传的文件应包含报价单、施工图、合同、项目立项书、工程清单、财评中心审计后清单表、图审报告"
+              type="info"
+              show-icon
+          />
+        </el-col>
+      </el-row>
       <el-row style="margin:20px 0 0 90px;">
         <el-col :span="15">
           <el-upload
-            class="upload-demo"
-            drag
-            multiple
-            :auto-upload="false"
-            :file-list="fileListData"
-            :on-change="changeFileData"
-            :on-remove="removeFileData"
+              class="upload-demo"
+              drag
+              multiple
+              :auto-upload="false"
+              :file-list="fileListData"
+              :on-change="changeFileData"
+              :on-remove="removeFileData"
           >
             <el-icon class="el-icon--upload"><upload-filled /></el-icon>
             <div class="el-upload__text">
@@ -195,14 +321,14 @@
           </el-upload>
         </el-col>
         <el-col
-          :span="4"
-          :offset="1"
+            :span="4"
+            :offset="1"
         >
           <el-button
-            icon="Collection"
-            size="large"
-            type="primary"
-            @click="approval"
+              icon="Collection"
+              size="large"
+              type="primary"
+              @click="approval"
           >项目立项</el-button>
         </el-col>
       </el-row>
@@ -211,73 +337,95 @@
 </template>
 
 <script setup>
-import { ref, reactive } from 'vue'
+import { reactive, ref } from 'vue'
+import { Document } from '@element-plus/icons-vue'
+import { ElMessage } from 'element-plus'
 import sign from '@/assets/sign.png'
-import moment from 'moment/moment'
 import { createProject } from '@/api/project'
-import { getAllUsers } from '@/api/user'
-import { ElMessage } from 'element-plus'
+import moment from 'moment/moment'
 import { useRouter } from 'vue-router'
 const router = useRouter()
 
 defineOptions({
   name: 'ProjectApproval'
 })
-// 项目基本信息
-const basicMessage = reactive({
-  code: '',
-  name: '',
-  principal: '',
-  price: 0,
-  level: 1,
-  customer: '',
-  illustrate: '',
-  state: 1
+
+// 数据
+const condition = reactive({
+  code: '', // 项目编号
+  name: '', // 项目名称
+  address: '', // 项目地址
+  firstPrincipal: '', // 甲方负责人
+  firstPhone: '', // 甲方电话
+  projectPrice: 0, // 合同金额
+  secondPrincipal: '', // 乙方负责人
+  signTime: '', // 合同签订日期
+  intoConstructionTime: '', // 进场施工时间
+  completedTime: '', // 竣工时间
+  supervisorUint: '', // 监理单位
+  supervisorName: '', // 监理姓名
+  supervisorPhone: '', // 监理电话
+  illustrate: '', // 说明
+  state: 1 // 状态
 })
-const projectAmount = ref('')
-// 项目用户列表
-const userList = reactive([])
-getAllUsers().then(res => {
-  if (res.code === 0) {
-    userList.push(...res.data)
+// 基本信息页数
+const infoSteps = ref(0)
+const previousPage = () => {
+  infoSteps.value -= 1
+}
+const nextPage = () => {
+  if (infoSteps.value === 0) {
+    const home = {
+      name: condition.name,
+      address: condition.address,
+      firstPrincipal: condition.firstPrincipal,
+      firstPhone: condition.firstPhone
+    }
+    for (const item in home) {
+      if (home[item] === '') {
+        ElMessage.error('请将甲方信息填写完整')
+        return
+      }
+    }
+    infoSteps.value += 1
+  } else if (infoSteps.value === 1) {
+    const second = {
+      projectPrice: condition.projectPrice,
+      secondPrincipal: condition.secondPrincipal,
+      signTime: condition.signTime,
+      intoConstructionTime: condition.intoConstructionTime,
+      completedTime: condition.completedTime,
+      illustrate: condition.illustrate
+    }
+    for (const item in second) {
+      if (second[item] === '' || second[item] === 0) {
+        ElMessage.error('请将乙方信息填写完整')
+        return
+      }
+    }
+    infoSteps.value += 1
   }
-})
-// 项目文件列表
-const fileListData = ref([])
-// 金额单位
-const amountUnit = ref('元')
-// 修改负责人
-const headSelect = (value) => {
-  basicMessage.principal = value
+  infoSteps.value += 1
 }
-// 修改文件数据
+
+// 附属文件
+const fileListData = ref([])
+
 const changeFileData = (file, fileList) => {
   fileListData.value = fileList
 }
+
 const removeFileData = (file, fileList) => {
   fileListData.value = fileList
 }
-// 项目紧急程度
-function changeUrgency(value) {
-  basicMessage.level = value
-}
+
 // 项目立项
 const approval = () => {
-  const basic = basicMessage
-  basic.code = 'LCZM' + createCode()
-  if (projectAmount.value === '') {
-    basic.price = 0
-  } else {
-    if (amountUnit.value === '万元') {
-      basic.price = parseInt(projectAmount.value) * 10000
-    } else {
-      basic.price = parseInt(projectAmount.value)
-    }
-  }
-  for (const key in basic) {
-    if (key === 'illustrate') { /* empty */ } else if (basic[key] === 0 || basic[key] === '') {
-      ElMessage.error('请将除说明以外的基本信息填写完整')
-      return
+  const basic = condition
+  basic.code = 'LCZH' + createCode()
+  for (const item in basic) {
+    if (basic[item] === '' || basic[item] === 0) {
+      ElMessage.error('请将三方信息填写完整')
     }
   }
   const formData = new FormData()

+ 323 - 216
web/src/view/projectManage/projectDetails/projectDetails.vue

@@ -17,83 +17,149 @@
                 <el-button
                   type="primary"
                   :icon="Edit"
-                  @click="messageEdit"
+                  @click="basicEditShow"
                 >信息编辑
                 </el-button>
               </el-col>
             </el-row>
           </template>
-          <el-row>
-            <el-text
-              size="large"
-              :line-clamp="1"
-            >
-              <b>项目名称:</b>{{ information.name }}
-            </el-text>
-          </el-row>
-          <el-row class="mt-10">
-            <el-text
-              size="large"
-              :line-clamp="1"
-            >
-              <b>项目负责人:</b>{{ information.principal }}
-            </el-text>
-          </el-row>
-          <el-row class="mt-10">
-            <el-text
-              size="large"
-              :line-clamp="1"
-            >
-              <b>相关客户:</b>{{ information.customer }}
-            </el-text>
-          </el-row>
-          <el-row class="mt-10">
-            <el-text
-              size="large"
-              :line-clamp="1"
-            >
-              <b>紧急程度:</b>{{ emergentDegree }}
-            </el-text>
-          </el-row>
-          <el-row class="mt-10">
-            <el-text
-              size="large"
-              :line-clamp="1"
+          <el-tabs
+            v-model="activeName"
+            class="demo-tabs"
+            type="border-card"
+            @tab-click="handleClick"
+          >
+            <el-tab-pane
+              label="甲方信息"
+              name="first"
             >
-              <b>项目金额:</b>{{ information.price }}元
-            </el-text>
-          </el-row>
-          <el-row class="mt-10">
-            <el-text
-              size="large"
+              <el-row class="mt-2">
+                <el-text
+                  size="large"
+                  :line-clamp="1"
+                >
+                  <b>项目名称:</b>{{ information.name }}
+                </el-text>
+              </el-row>
+              <el-row class="mt-10">
+                <el-text
+                  size="large"
+                  :line-clamp="1"
+                >
+                  <b>项目地址:</b>{{ information.address }}
+                </el-text>
+              </el-row>
+              <el-row class="mt-10">
+                <el-text
+                  size="large"
+                  :line-clamp="1"
+                >
+                  <b>甲方负责人:</b>{{ information.firstPrincipal }}
+                </el-text>
+              </el-row>
+              <el-row class="mt-10">
+                <el-text
+                  size="large"
+                  :line-clamp="1"
+                >
+                  <b>甲方负责人电话:</b>{{ information.firstPhone }}
+                </el-text>
+              </el-row>
+            </el-tab-pane>
+            <el-tab-pane
+              label="乙方信息"
+              name="second"
             >
-              <b>项目状态:</b>{{ currentState }}
-            </el-text>
-          </el-row>
-          <el-row class="mt-10">
-            <el-text
-              size="large"
+              <el-row class="mt-2">
+                <el-text
+                  size="large"
+                  :line-clamp="1"
+                >
+                  <b>乙方负责人:</b>{{ information.secondPrincipal }}
+                </el-text>
+              </el-row>
+              <el-row class="mt-10">
+                <el-text
+                  size="large"
+                  :line-clamp="1"
+                >
+                  <b>合同金额:</b>{{ information.projectPrice }}元
+                </el-text>
+              </el-row>
+              <el-row class="mt-10">
+                <el-text
+                  size="large"
+                >
+                  <b>合同签订时间:</b>{{ information.signTime }}
+                </el-text>
+              </el-row>
+              <el-row class="mt-10">
+                <el-text
+                  size="large"
+                >
+                  <b>进场施工时间:</b>{{ information.intoConstructionTime }}
+                </el-text>
+              </el-row>
+              <el-row class="mt-10">
+                <el-text
+                  size="large"
+                >
+                  <b>竣工时间:</b>{{ information.completedTime }}
+                </el-text>
+              </el-row>
+              <el-row class="mt-10">
+                <el-text
+                  size="large"
+                >
+                  <b>项目状态:</b>{{ currentState }}
+                </el-text>
+              </el-row>
+              <el-row class="mt-10">
+                <el-col :span="3">
+                  <el-text
+                    size="large"
+                  >
+                    <b>项目说明:</b>
+                  </el-text>
+                </el-col>
+                <el-col :span="20">
+                  <el-text
+                    size="large"
+                    :line-clamp="4"
+                  >
+                    {{ information.illustrate }}
+                  </el-text>
+                </el-col>
+              </el-row>
+            </el-tab-pane>
+            <el-tab-pane
+              label="丙方信息"
+              name="third"
             >
-              <b>立项时间:</b>{{ information.CreatedAt }}
-            </el-text>
-          </el-row>
-          <el-row class="mt-10">
-            <el-col :span="3">
-              <el-text
-                size="large"
-              >
-                <b>项目说明:</b>
-              </el-text>
-            </el-col>
-            <el-col :span="20">
-              <el-text
-                size="large"
-                :line-clamp="4"
-              >
-                {{ information.illustrate }}
-              </el-text>
-            </el-col>
-          </el-row>
+              <el-row class="mt-2">
+                <el-text
+                  size="large"
+                  :line-clamp="1"
+                >
+                  <b>监理人姓名:</b>{{ information.supervisorName }}
+                </el-text>
+              </el-row>
+              <el-row class="mt-10">
+                <el-text
+                  size="large"
+                >
+                  <b>监理单位:</b>{{ information.supervisorUint }}
+                </el-text>
+              </el-row>
+              <el-row class="mt-10">
+                <el-text
+                  size="large"
+                >
+                  <b>监理人电话:</b>{{ information.supervisorPhone }}
+                </el-text>
+              </el-row>
+            </el-tab-pane>
+          </el-tabs>
         </el-card>
       </el-col>
       <el-col
@@ -339,130 +405,176 @@
       </template>
     </el-dialog>
     <el-dialog
-      v-model="messagePopupShow"
-      title="项目基本信息编辑"
+      v-model="stateTypeShow"
+      title="状态和类型编辑"
       width="40%"
+    >
+      <option-edit />
+    </el-dialog>
+    <el-drawer
+      v-model="basicEditDisplay"
+      title="项目基本信息编辑"
     >
       <el-form
         size="large"
         style="margin-top: 10px"
         label-position="left"
-        label-width="100"
+        label-width="110"
       >
-        <el-form-item
-          label="项目名称:"
-        >
-          <el-input
-            v-model="editData.name"
-            placeholder="请输入项目名称"
-          />
-        </el-form-item>
-        <el-form-item
-          label="负责人:"
-        >
-          <el-select
-            v-model="editData.principal"
-            placeholder="请选择负责人"
+        <el-tabs v-model="editItem">
+          <el-tab-pane
+            label="甲方信息"
+            name="first"
           >
-            <el-option
-              v-for="item in userList"
-              :key="item.ID"
-              :label="item.nickName"
-              :value="item.nickName"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item
-          label="相关客户:"
-        >
-          <el-input
-            v-model="editData.customer"
-            placeholder="请输入相关客户"
-          />
-        </el-form-item>
-        <el-form-item
-          label="紧急程度:"
-        >
-          <el-radio-group
-            v-model="editData.level"
+            <el-form-item
+              label="项目名称:"
+            >
+              <el-input
+                v-model="editData.name"
+                placeholder="请输入项目名称"
+              />
+            </el-form-item>
+            <el-form-item
+              label="项目地址:"
+            >
+              <el-input
+                v-model="editData.address"
+                placeholder="请输入项目名称"
+              />
+            </el-form-item>
+            <el-form-item
+              label="甲方负责人:"
+            >
+              <el-input
+                v-model="editData.firstPrincipal"
+                placeholder="请输入甲方负责人"
+              />
+            </el-form-item>
+            <el-form-item
+              label="负责人电话:"
+            >
+              <el-input
+                v-model="editData.firstPhone"
+                placeholder="请输入甲方负责人电话"
+              />
+            </el-form-item>
+          </el-tab-pane>
+          <el-tab-pane
+            label="乙方信息"
+            name="second"
           >
-            <el-radio
-              :value="1"
-              :label="1"
-            >正常</el-radio>
-            <el-radio
-              :value="2"
-              :label="2"
-            >重要</el-radio>
-            <el-radio
-              :value="3"
-              :label="3"
-            >紧急</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="项目状态">
-          <el-select
-            v-model="editData.state"
+            <el-form-item label="乙方负责人:">
+              <el-input
+                v-model="editData.secondPrincipal"
+                placeholder="请输入乙方负责人姓名"
+              />
+            </el-form-item>
+            <el-form-item label="合同金额:">
+              <el-input-number v-model="editData.projectPrice" />
+            </el-form-item>
+            <el-form-item label="合同签订日期:">
+              <el-date-picker
+                v-model="editData.signTime"
+                type="date"
+                placeholder="请选择合同签订时间"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+                clearable
+                @clear="editData.signTime = ''"
+              />
+            </el-form-item>
+            <el-form-item label="进场施工时间:">
+              <el-date-picker
+                v-model="editData.intoConstructionTime"
+                type="date"
+                placeholder="请选择进场施工时间"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+                clearable
+                @clear="editData.intoConstructionTime = ''"
+              />
+            </el-form-item>
+            <el-form-item label="竣工时间:">
+              <el-date-picker
+                v-model="editData.completedTime"
+                type="date"
+                placeholder="请选择竣工时间"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+                clearable
+                @clear="editData.completedTime = ''"
+              />
+            </el-form-item>
+            <el-form-item label="项目状态:">
+              <el-select
+                v-model="editData.state"
+              >
+                <el-option
+                  v-for="item in editor.stateList"
+                  :key="item.ID"
+                  :label="item.name"
+                  :value="item.ID"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="项目说明:">
+              <el-input
+                v-model="editData.illustrate"
+                :rows="5"
+                type="textarea"
+                placeholder="请输入项目说明"
+              />
+            </el-form-item>
+          </el-tab-pane>
+          <el-tab-pane
+            label="丙方信息"
+            name="third"
           >
-            <el-option
-              v-for="item in editor.stateList"
-              :key="item.ID"
-              :label="item.name"
-              :value="item.ID"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item
-          label="项目金额:"
-        >
-          <el-input
-            v-model="editData.price"
-            style="max-width: 600px"
-            placeholder="请输入项目的具体金额"
-            class="input-with-select"
-            oninput="value=value.replace(/[^\d.]/g,'')"
-          />
-        </el-form-item>
-        <el-form-item label="项目说明:">
-          <el-input
-            v-model="editData.illustrate"
-            type="textarea"
-            placeholder="项目说明"
-            :rows="3"
-          />
-        </el-form-item>
+            <el-form-item label="监理人姓名:">
+              <el-input
+                v-model="editData.supervisorName"
+                placeholder="请输入监理人姓名"
+              />
+            </el-form-item>
+            <el-form-item label="监理单位:">
+              <el-input
+                v-model="editData.supervisorUint"
+                placeholder="请输入监理单位"
+              />
+            </el-form-item>
+            <el-form-item label="监理电话:">
+              <el-input
+                v-model="editData.supervisorPhone"
+                placeholder="请输入监理电话"
+              />
+            </el-form-item>
+          </el-tab-pane>
+        </el-tabs>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
           <el-button
             size="large"
-            @click="messagePopupShow = false"
+            @click="basicEditDisplay = false"
           >
             取消
           </el-button>
           <el-button
             type="primary"
             size="large"
-            @click="editBasicMessage"
+            @click="basicDataEdit"
           >
             确定
           </el-button>
         </div>
       </template>
-    </el-dialog>
-    <el-dialog
-      v-model="stateTypeShow"
-      title="状态和类型编辑"
-      width="40%"
-    >
-      <option-edit />
-    </el-dialog>
+    </el-drawer>
   </div>
 </template>
 
 <script setup>
 import { getProjectMessage, editProject } from '@/api/project'
-import { onMounted, reactive, ref, computed } from 'vue'
+import { onMounted, reactive, ref } from 'vue'
 import { getAllUsers } from '@/api/user'
 import { queryFileList, createProjectFile, downloadProjectFile, deleteProjectFile, deleteProjectFiles } from '@/api/file'
 import { Download, Upload, Delete, Search, RefreshLeft, Edit } from '@element-plus/icons-vue'
@@ -479,6 +591,53 @@ defineOptions({
   name: 'ProjectDetails'
 })
 // ......................................
+// 基本信息编辑
+const activeName = ref('first')
+const handleClick = () => {}
+const basicEditDisplay = ref(false)
+const basicEditShow = () => {
+  basicEditDisplay.value = true
+  Object.assign(editData, information)
+}
+const editItem = ref('first')
+const basicDataEdit = () => {
+  const edit = {
+    id: editData.ID,
+    code: route.query.code, // 项目编号
+    name: editData.name, // 项目名称
+    address: editData.address, // 项目地址
+    firstPrincipal: editData.firstPrincipal, // 甲方负责人
+    firstPhone: editData.firstPhone, // 甲方电话
+    projectPrice: editData.projectPrice, // 合同金额
+    secondPrincipal: editData.secondPrincipal, // 乙方负责人
+    signTime: editData.signTime, // 合同签订日期
+    intoConstructionTime: editData.intoConstructionTime, // 进场施工时间
+    completedTime: editData.completedTime, // 竣工时间
+    supervisorUint: editData.supervisorUint, // 监理单位
+    supervisorName: editData.supervisorName, // 监理姓名
+    supervisorPhone: editData.supervisorPhone, // 监理电话
+    illustrate: editData.illustrate, // 说明
+    state: editData.state // 状态
+  }
+  for (const i in edit) {
+    if (edit[i] === '' || edit[i] === 0 || edit[i] === null) {
+      ElMessage.error('请将甲乙丙三方的信息填写完整')
+      return
+    }
+  }
+  editProject(edit).then(res => {
+    if (res.code === 0) {
+      ElMessage({
+        message: '编辑成功',
+        type: 'success',
+        showClose: true,
+        duration: 2000
+      })
+      basicEditDisplay.value = false
+      projectMessage(route.query.code)
+    }
+  })
+}
 // 数据
 const editor = editorData()
 const fileCondition = reactive({
@@ -496,7 +655,6 @@ const information = reactive({})
 // 用于编辑的数据
 const editData = reactive({})
 
-const messagePopupShow = ref(false)
 // 项目用户列表
 const userList = reactive([])
 // 项目文件列表
@@ -517,12 +675,7 @@ const uploadFileData = ref([])
 const stateTypeShow = ref(false)
 
 const currentState = ref('')
-// .............................................
-// 计算属性
-const emergentDegree = computed(() => {
-  return information.level === 1 ? '正常' : information.level === 2 ? '重要' : '紧急'
-})
-// .............................................
+
 // 方法
 onMounted(() => {
   projectMessage(route.query.code)
@@ -541,6 +694,7 @@ const projectMessage = (code) => {
   getProjectMessage(code).then(res => {
     if (res.code === 0) {
       const data = res.data
+      console.log(data)
       data.CreatedAt = formatDate(data.CreatedAt)
       data.UpdatedAt = formatDate(data.UpdatedAt)
       Object.keys(data).forEach(key => {
@@ -586,53 +740,6 @@ const queryFile = () => {
     }
   })
 }
-
-// 编辑基本信息
-const editBasicMessage = () => {
-  const currentPrice = editData.price === '' ? 0 : parseFloat(editData.price)
-  const data = {
-    id: editData.ID,
-    code: route.query.code,
-    name: editData.name,
-    principal: editData.principal,
-    price: currentPrice,
-    illustrate: editData.illustrate,
-    state: editData.state,
-    level: editData.level,
-    customer: editData.customer
-  }
-  for (const i in data) {
-    if (i === 'illustrate') {
-      continue
-    }
-    if (data[i] === '' || data[i] === 0) {
-      ElMessage({
-        message: '请将除说明以外的信息填写完整',
-        type: 'error',
-        showClose: true,
-        duration: 2000
-      })
-      return
-    }
-  }
-  editProject(data).then(res => {
-    if (res.code === 0) {
-      ElMessage({
-        message: '编辑成功',
-        type: 'success',
-        showClose: true,
-        duration: 2000
-      })
-      messagePopupShow.value = false
-      projectMessage(route.query.code)
-    }
-  })
-}
-
-const messageEdit = () => {
-  Object.assign(editData, information)
-  messagePopupShow.value = true
-}
 // 上传文件
 const fileDialogClose = () => {
   fileDialog.value = false

+ 0 - 1
web/src/view/projectManage/projectList/projectList.vue

@@ -373,7 +373,6 @@ const listData = (condition) => {
   getProjectList(condition).then(res => {
     if (res.code === 0 && res.data.total > 0) {
       const list = res.data.list
-      console.log(list)
       list.forEach(item => {
         item.CreatedAt = formatDate(item.CreatedAt)
       })

+ 0 - 471
web/src/view/projectManage/projectTest/projectTest.vue

@@ -1,471 +0,0 @@
-<template>
-  <div>
-    <div
-      style="height: 370px"
-      class="bg-white"
-    >
-      <div class="basicInformation">
-        <div style="padding-top: 10px;margin-left: 90px">
-          <el-image :src="sign" />
-        </div>
-        <div style="display: flex;align-items: center">
-          <el-text
-            style="margin-left: 10px"
-            size="large"
-            tag="b"
-          >项目基本信息</el-text>
-        </div>
-      </div>
-      <el-row style="margin-top: 20px">
-        <el-col
-          :span="16"
-          style="margin-left: 90px"
-        >
-          <el-steps
-            class="mb-4"
-            style="max-width: 750px"
-            :space="250"
-            :active="infoSteps"
-            simple
-          >
-            <el-step
-              title="甲方信息"
-              :icon="Document"
-            />
-            <el-step
-              title="乙方信息"
-              :icon="Document"
-            />
-            <el-step
-              title="丙方信息"
-              :icon="Document"
-            />
-          </el-steps>
-        </el-col>
-        <el-col :span="4">
-          <el-form :inline="true">
-            <el-form-item>
-              <el-button
-                size="large"
-                :disabled="infoSteps === 0"
-                @click="previousPage"
-              >
-                上一页
-              </el-button>
-            </el-form-item>
-            <el-form-item>
-              <el-button
-                :disabled="infoSteps === 2"
-                type="primary"
-                size="large"
-                @click="nextPage"
-              >下一页</el-button>
-            </el-form-item>
-          </el-form>
-        </el-col>
-      </el-row>
-      <el-row style="margin-top: 30px">
-        <el-col
-          style="margin-left: 90px"
-        >
-          <el-form
-            label-width="100"
-            label-position="left"
-          >
-            <div v-show="infoSteps === 0">
-              <el-row>
-                <el-col :span="5">
-                  <el-form-item
-                    label="项目名称"
-                    size="large"
-                  >
-                    <el-input
-                      v-model="condition.name"
-                      placeholder="请输入项目名称"
-                    />
-                  </el-form-item>
-                </el-col>
-                <el-col
-                  :span="5"
-                  :offset="1"
-                >
-                  <el-form-item
-                    label="项目地址:"
-                    size="large"
-                  >
-                    <el-input
-                      v-model="condition.address"
-                      placeholder="请输入项目地址"
-                    />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-              <el-row style="margin-top: 10px">
-                <el-col :span="5">
-                  <el-form-item
-                    label="甲方电话"
-                    size="large"
-                  >
-                    <el-input
-                      v-model="condition.firstPhone"
-                      placeholder="请输入甲方负责人电话"
-                    />
-                  </el-form-item>
-                </el-col>
-                <el-col
-                  :span="5"
-                  :offset="1"
-                >
-                  <el-form-item
-                    label="甲方负责人"
-                    size="large"
-                  >
-                    <el-input
-                      v-model="condition.firstPrincipal"
-                      placeholder="请输入甲方负责人名称"
-                    />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-            </div>
-            <div v-show="infoSteps === 1">
-              <el-row>
-                <el-col :span="5">
-                  <el-form-item
-                    label="乙方负责人"
-                    size="large"
-                  >
-                    <el-input
-                      v-model="condition.secondPrincipal"
-                      placeholder="请输入乙方负责人名称"
-                    />
-                  </el-form-item>
-                </el-col>
-                <el-col
-                  :span="5"
-                  :offset="1"
-                >
-                  <el-form-item
-                    label="合同金额"
-                    size="large"
-                  >
-                    <el-input-number v-model="condition.projectPrice" />
-                  </el-form-item>
-                </el-col>
-                <el-col
-                  :span="5"
-                  :offset="1"
-                >
-                  <el-form-item
-                    label="合同签订时间"
-                    size="large"
-                  >
-                    <el-date-picker
-                      v-model="condition.signTime"
-                      type="date"
-                      placeholder="请选择合同签订时间"
-                      format="YYYY-MM-DD"
-                      value-format="YYYY-MM-DD"
-                      clearable
-                      @clear="condition.signTime = ''"
-                    />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-              <el-row style="margin-top: 10px">
-                <el-col :span="5">
-                  <el-form-item
-                    label="进场施工时间"
-                    size="large"
-                  >
-                    <el-date-picker
-                      v-model="condition.intoConstructionTime"
-                      type="date"
-                      placeholder="请选择进场施工时间"
-                      format="YYYY-MM-DD"
-                      value-format="YYYY-MM-DD"
-                      clearable
-                      @clear="condition.intoConstructionTime = ''"
-                    />
-                  </el-form-item>
-                </el-col>
-                <el-col
-                  :span="5"
-                  :offset="1"
-                >
-                  <el-form-item
-                    label="竣工时间"
-                    size="large"
-                  >
-                    <el-date-picker
-                      v-model="condition.completedTime"
-                      type="date"
-                      placeholder="请选择竣工时间"
-                      format="YYYY-MM-DD"
-                      value-format="YYYY-MM-DD"
-                      clearable
-                      @clear="condition.completedTime = ''"
-                    />
-                  </el-form-item>
-                </el-col>
-                <el-col
-                  :span="8"
-                  :offset="1"
-                >
-                  <el-form-item label="说明">
-                    <el-input
-                      v-model="condition.illustrate"
-                      :rows="5"
-                      type="textarea"
-                      placeholder="请输入项目说明"
-                    />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-            </div>
-            <div v-show="infoSteps === 2">
-              <el-row>
-                <el-col :span="5">
-                  <el-form-item
-                    label="监理单位"
-                    size="large"
-                  >
-                    <el-input
-                      v-model="condition.supervisorUint"
-                      placeholder="请输入监理单位"
-                    />
-                  </el-form-item>
-                </el-col>
-                <el-col
-                  :span="5"
-                  :offset="1"
-                >
-                  <el-form-item
-                    label="监理姓名"
-                    size="large"
-                  >
-                    <el-input
-                      v-model="condition.supervisorName"
-                      placeholder="请输入监理姓名"
-                    />
-                  </el-form-item>
-                </el-col>
-                <el-col
-                  :span="5"
-                  :offset="1"
-                >
-                  <el-form-item
-                    label="监理电话"
-                    size="large"
-                  >
-                    <el-input
-                      v-model="condition.supervisorPhone"
-                      placeholder="请输入监理电话"
-                    />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-            </div>
-          </el-form>
-        </el-col>
-      </el-row>
-    </div>
-    <div
-      style="height: 400px;margin-top: 20px;overflow: auto"
-      class="bg-white"
-    >
-      <div class="basicInformation">
-        <div style="padding-top: 10px;margin-left: 90px">
-          <el-image :src="sign" />
-        </div>
-        <div style="display: flex;align-items: center">
-          <el-text
-            style="margin-left: 10px"
-            size="large"
-            tag="b"
-          >项目附属文件</el-text>
-        </div>
-      </div>
-      <el-row style="margin-top: 15px">
-        <el-col
-          :span="12"
-          style="margin-left: 90px"
-        >
-          <el-alert
-            title="请注意立项时上传的文件应包含报价单、施工图、合同、项目立项书、工程清单、财评中心审计后清单表"
-            type="info"
-            show-icon
-          />
-        </el-col>
-      </el-row>
-      <el-row style="margin:20px 0 0 90px;">
-        <el-col :span="15">
-          <el-upload
-            class="upload-demo"
-            drag
-            multiple
-            :auto-upload="false"
-            :file-list="fileListData"
-            :on-change="changeFileData"
-            :on-remove="removeFileData"
-          >
-            <el-icon class="el-icon--upload"><upload-filled /></el-icon>
-            <div class="el-upload__text">
-              请选择需要上传的文件
-            </div>
-            <template #tip>
-              <div class="el-upload__tip">
-                选择的文件不要超过500MB
-              </div>
-            </template>
-          </el-upload>
-        </el-col>
-        <el-col
-          :span="4"
-          :offset="1"
-        >
-          <el-button
-            icon="Collection"
-            size="large"
-            type="primary"
-            @click="approval"
-          >项目立项</el-button>
-        </el-col>
-      </el-row>
-    </div>
-  </div>
-</template>
-
-<script setup>
-import { reactive, ref } from 'vue'
-import { Document } from '@element-plus/icons-vue'
-import { ElMessage } from 'element-plus'
-import sign from '@/assets/sign.png'
-import { createProject } from '@/api/project'
-import moment from 'moment/moment'
-import { useRouter } from 'vue-router'
-const router = useRouter()
-
-defineOptions({
-  name: 'ProjectTest'
-})
-
-// 数据
-const condition = reactive({
-  code: '', // 项目编号
-  name: '水质监测', // 项目名称
-  address: '湖南省', // 项目地址
-  firstPrincipal: '刘总', // 甲方负责人
-  firstPhone: '18373925841', // 甲方电话
-  projectPrice: 200000, // 合同金额
-  secondPrincipal: '苏道民', // 乙方负责人
-  signTime: '2024-08-20', // 合同签订日期
-  intoConstructionTime: '2024-09-10', // 进场施工时间
-  completedTime: '2024-10-10', // 竣工时间
-  supervisorUint: '法律事务所', // 监理单位
-  supervisorName: '罗翔', // 监理姓名
-  supervisorPhone: '18373925841', // 监理电话
-  illustrate: '1122222222', // 说明
-  state: 1 // 状态
-})
-// 基本信息页数
-const infoSteps = ref(0)
-const previousPage = () => {
-  infoSteps.value -= 1
-}
-const nextPage = () => {
-  if (infoSteps.value === 0) {
-    const home = {
-      name: condition.name,
-      address: condition.address,
-      firstPrincipal: condition.firstPrincipal,
-      firstPhone: condition.firstPhone
-    }
-    for (const item in home) {
-      if (home[item] === '') {
-        ElMessage.error('请将甲方信息填写完整')
-        return
-      }
-    }
-    infoSteps.value += 1
-  } else if (infoSteps.value === 1) {
-    const second = {
-      projectPrice: condition.projectPrice,
-      secondPrincipal: condition.secondPrincipal,
-      signTime: condition.signTime,
-      intoConstructionTime: condition.intoConstructionTime,
-      completedTime: condition.completedTime,
-      illustrate: condition.illustrate
-    }
-    for (const item in second) {
-      if (second[item] === '' || second[item] === 0) {
-        ElMessage.error('请将乙方信息填写完整')
-        return
-      }
-    }
-    infoSteps.value += 1
-  }
-}
-
-// 附属文件
-const fileListData = ref([])
-
-const changeFileData = (file, fileList) => {
-  fileListData.value = fileList
-}
-
-const removeFileData = (file, fileList) => {
-  fileListData.value = fileList
-}
-
-// 项目立项
-const approval = () => {
-  const basic = condition
-  basic.code = 'LCZM' + createCode()
-  for (const item in basic) {
-    if (basic[item] === '' || basic[item] === 0) {
-      ElMessage.error('请将三方信息填写完整')
-    }
-  }
-  const formData = new FormData()
-  const json = JSON.stringify(basic)
-  if (fileListData.value.length !== 0) {
-    fileListData.value.forEach(item => {
-      formData.append('file', item.raw)
-    })
-  } else {
-    formData.append('file', [])
-  }
-  formData.append('project', json)
-  createProject(formData).then(res => {
-    if (res.code === 0) {
-      ElMessage({
-        message: '立项成功',
-        type: 'success',
-      })
-      const { href } = router.resolve({
-        path: '/layout/projectManage/projectList', // 路径
-      })
-      location.href = (href)
-    } else {
-      ElMessage({
-        message: '立项失败',
-        type: 'error',
-      })
-    }
-  })
-}
-
-const createCode = () => {
-  return moment().format('YYYYMMDDHHmm')
-}
-</script>
-
-<style scoped lang="less">
-.basicInformation{
-  height: 40px;
-  background-color: #f8fafd;
-  display: flex;
-//align-items: center;
-}
-</style>