2545307760@qq.com 8 månader sedan
förälder
incheckning
da37828801

+ 11 - 3
web/src/view/finance/components/hour.vue

@@ -6,7 +6,7 @@
           v-model="peopleId"
           placeholder="请选择工作人员"
           clearable
-          @clear="peopleId = ''"
+          @clear="changePeopleId"
         >
           <el-option
             v-for="item in peopleList"
@@ -61,7 +61,7 @@
         <el-button
           type="primary"
           :icon="Plus"
-          @click="addTimeShow = true"
+          @click="changeAddTimeShow"
         >新增</el-button>
       </el-col>
     </el-row>
@@ -143,7 +143,7 @@
 </template>
 
 <script setup>
-import {reactive, onMounted, ref, defineExpose } from 'vue'
+import { reactive, onMounted, ref, defineExpose } from 'vue'
 import { hourOperate } from '@/pinia/hour/Hour'
 import { codeOperate } from '@/pinia/code/code'
 import { queryConstructor, createWorkingHours } from '@/api/finance'
@@ -224,6 +224,14 @@ const outsideChangePage = () => {
 defineExpose({
   outsideChangePage
 })
+
+const changeAddTimeShow = () => {
+  addTimeShow.value = true
+}
+
+const changePeopleId = () => {
+  peopleId.value = ''
+}
 </script>
 
 <style scoped>

+ 25 - 24
web/src/view/projectManage/projectApproval/projectApproval.vue

@@ -124,11 +124,11 @@
                   >
                     <el-option
                       label="元"
-                      :value="1"
+                      value="元"
                     />
                     <el-option
                       label="万元"
-                      :value="2"
+                      value="万元"
                     />
                   </el-select>
                 </template>
@@ -220,22 +220,15 @@ import { ElMessage } from 'element-plus'
 defineOptions({
   name: 'ProjectApproval'
 })
-// 表单验证规则
-// const fromRules = {
-//   name: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
-//   principal: [{ required: true, message: '项目负责人不能为空', trigger: 'blur' }],
-//   customer: [{ required: true, message: '项目相关用户不能为空', trigger: 'blur' }]
-// }
 // 项目基本信息
 const basicMessage = reactive({
   code: '',
-  name: '智慧路口',
+  name: '',
   principal: '',
   price: 0,
   level: 1,
-  customer: '交通局',
-  illustrate: '智慧路口项目',
-  progress: 0,
+  customer: '',
+  illustrate: '',
   state: 1
 })
 const projectAmount = ref('')
@@ -257,11 +250,9 @@ const headSelect = (value) => {
 // 修改文件数据
 const changeFileData = (file, fileList) => {
   fileListData.value = fileList
-  console.log(fileListData)
 }
 const removeFileData = (file, fileList) => {
   fileListData.value = fileList
-  console.log(fileListData)
 }
 // 项目紧急程度
 function changeUrgency(value) {
@@ -269,24 +260,34 @@ function changeUrgency(value) {
 }
 // 项目立项
 const approval = () => {
-  if (fileListData.value.length === 0) {
-    return ElMessage.warning('请选取文件后再上传')
-  }
   const basic = basicMessage
   basic.code = 'LCZM' + createCode()
-  if (amountUnit.value === '万元') {
-    basic.price = parseInt(projectAmount.value) * 10000
+  if (projectAmount.value === '') {
+    basic.price = 0
   } else {
-    basic.price = parseInt(projectAmount.value)
+    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 formData = new FormData()
   const json = JSON.stringify(basic)
-  fileListData.value.forEach(item => {
-    formData.append('file', item.raw)
-  })
+  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 => {
-    console.log(res)
     if (res.code === 0) {
       ElMessage({
         message: '立项成功',

+ 13 - 38
web/src/view/projectManage/projectDetails/projectDetails.vue

@@ -67,7 +67,7 @@
             <el-text
               size="large"
             >
-              <b>项目状态:</b>{{ projectState }}
+              <b>项目状态:</b>{{ currentState }}
             </el-text>
           </el-row>
           <el-row class="mt-10">
@@ -200,7 +200,7 @@
                     <el-dropdown-item>
                       <el-button
                         type="primary"
-                        :icon="Download"
+                        :icon="Delete"
                         @click="projectDeletes"
                       >
                         删除
@@ -363,8 +363,6 @@
           <el-select
             v-model="editData.principal"
             placeholder="请选择负责人"
-            clearable
-            @change="headSelect"
           >
             <el-option
               v-for="item in userList"
@@ -387,7 +385,6 @@
         >
           <el-radio-group
             v-model="editData.level"
-            @change="changeUrgency"
           >
             <el-radio
               :value="1"
@@ -423,6 +420,7 @@
             style="max-width: 600px"
             placeholder="请输入项目的具体金额"
             class="input-with-select"
+            oninput="value=value.replace(/[^\d.]/g,'')"
           />
         </el-form-item>
         <el-form-item label="项目说明:">
@@ -473,6 +471,7 @@ import OptionEdit from './components/optionEdit.vue'
 import { editorData } from '@/pinia/project/project'
 import { fileDownload } from '@/api/dailyFile'
 import { useRoute, useRouter } from 'vue-router'
+// eslint-disable-next-line no-unused-vars
 const router = useRouter()
 const route = useRoute()
 
@@ -517,23 +516,12 @@ const uploadFileData = ref([])
 
 const stateTypeShow = ref(false)
 
+const currentState = ref('')
 // .............................................
 // 计算属性
 const emergentDegree = computed(() => {
   return information.level === 1 ? '正常' : information.level === 2 ? '重要' : '紧急'
 })
-
-const projectState = computed(() => {
-  const obj = {
-    1: '立项',
-    2: '施工',
-    3: '收款',
-    4: '完成',
-    5: '失效'
-  }
-  return obj[information.state]
-})
-
 // .............................................
 // 方法
 onMounted(() => {
@@ -559,6 +547,7 @@ const projectMessage = (code) => {
         information[key] = data[key]
         editData[key] = data[key]
       })
+      currentState.value = information.projectState.name
     }
   })
 }
@@ -600,21 +589,25 @@ 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: parseInt(editData.price),
+    price: currentPrice,
     illustrate: editData.illustrate,
     state: editData.state,
     level: editData.level,
     customer: editData.customer
   }
   for (const i in data) {
-    if (data[i] === '') {
+    if (i === 'illustrate') {
+      continue
+    }
+    if (data[i] === '' || data[i] === 0) {
       ElMessage({
-        message: '表单中存在空值',
+        message: '请将除说明以外的信息填写完整',
         type: 'error',
         showClose: true,
         duration: 2000
@@ -638,7 +631,6 @@ const editBasicMessage = () => {
 
 const messageEdit = () => {
   Object.assign(editData, information)
-  console.log(editData)
   messagePopupShow.value = true
 }
 // 上传文件
@@ -656,12 +648,10 @@ const changeUploadFileType = (value) => {
 
 const changeFileData = (file, fileList) => {
   uploadFileData.value = fileList
-  console.log(uploadFileData)
 }
 
 const removeFileData = (file, fileList) => {
   uploadFileData.value = fileList
-  console.log(uploadFileData)
 }
 
 const supplementFile = () => {
@@ -676,7 +666,6 @@ const supplementFile = () => {
     })
     formData.append('genre', uploadFileType.value)
     formData.append('code', route.query.code)
-    console.log(formData.get('genre'))
     createProjectFile(formData).then(res => {
       if (res.code === 0) {
         fileDialog.value = false
@@ -708,7 +697,6 @@ const downloadTips = () => {
         name: fileCondition.name
       }
       downloadProjectFile(data).then(res => {
-        console.log(res)
         const link = document.createElement('a')
         const href = window.URL.createObjectURL(res) // 创建下载的链接
         link.href = href
@@ -729,9 +717,7 @@ const downloadTips = () => {
 
 // 单文件下载
 const oneDownload = async(val) => {
-  console.log(val)
   await fileDownload(val).then(res => {
-    console.log(res)
     const link = document.createElement('a')
     const href = window.URL.createObjectURL(res) // 创建下载的链接
     link.href = href
@@ -788,9 +774,7 @@ const projectDeletes = async() => {
         genre: type,
         name: fileCondition.name
       }
-      console.log(data)
       await deleteProjectFiles(data).then(res => {
-        console.log(res)
         if (res.code === 0) {
           ElMessage.success('删除成功')
         }
@@ -821,15 +805,6 @@ const formatDate = (dateString, locale = 'en-US', timezone = 'Asia/Shanghai') =>
   return `${date.getFullYear()}-${('0' + (date.getMonth() + 1)).slice(-2)}-${('0' + date.getDate()).slice(-2)}`
 }
 
-// 负责人修改
-const headSelect = () => {
-}
-
-//
-const changeUrgency = (v) => {
-  console.log(v)
-}
-
 const changeFilePage = (value) => {
   fileCondition.pageInfo.page = value
   queryFile()

+ 30 - 27
web/src/view/projectManage/projectList/projectList.vue

@@ -20,6 +20,7 @@
             placeholder="请选择立项时间"
             format="YYYY-MM"
             value-format="YYYY-MM"
+            clearable
           />
         </el-form-item>
       </el-col>
@@ -30,13 +31,15 @@
         <el-form-item label="项目状态">
           <el-select
             v-model="currentlyState"
+            clearable
             @change="changeState"
+            @clear="clearableState"
           >
             <el-option
               v-for="item in stateList"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
+              :key="item.ID"
+              :label="item.name"
+              :value="item.ID"
             />
           </el-select>
         </el-form-item>
@@ -214,7 +217,7 @@
               align="center"
             />
             <el-table-column
-              prop="state"
+              prop="projectState.name"
               label="状态"
               align="center"
             />
@@ -246,6 +249,7 @@
         style="display: flex;justify-content: end"
       >
         <el-pagination
+          v-model:current-page="filterProjects.pageInfo.page"
           :page-size="10"
           background
           layout="prev, pager, next"
@@ -259,11 +263,12 @@
 
 <script setup>
 import { DocumentCopy, RefreshLeft, Search } from '@element-plus/icons-vue'
-import { getProjectList, projectDataScreen, deleteProject } from '@/api/project'
+import { getProjectList, projectDataScreen, deleteProject, queryProjectState } from '@/api/project'
 import { reactive, ref, onMounted } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { useRoute, useRouter } from 'vue-router'
 const router = useRouter()
+// eslint-disable-next-line no-unused-vars
 const route = useRoute()
 
 defineOptions({
@@ -272,13 +277,7 @@ defineOptions({
 const screenData = reactive({})
 const projectListData = reactive([])
 const listTotal = ref(0)
-const stateList = [
-  { label: '立项', value: 1 },
-  { label: '施工', value: 2 },
-  { label: '收款', value: 3 },
-  { label: '完成', value: 4 },
-  { label: '失效', value: 5 },
-]
+const stateList = reactive([])
 const initialCondition = {
   pageInfo: {
     page: 1,
@@ -303,11 +302,16 @@ const currentlyState = ref('')
 const changeState = (value) => {
   filterProjects.state = value
   stateList.forEach(item => {
-    if (value === item.value) {
-      currentlyState.value = item.label
+    if (value === item.ID) {
+      currentlyState.value = item.name
     }
   })
 }
+
+const clearableState = () => {
+  currentlyState.value = ''
+  filterProjects.state = 0
+}
 const jumpProjectDetails = (row) => {
   const { href } = router.resolve({
     path: '/layout/projectManage/projectDetails', // 路径
@@ -354,9 +358,17 @@ const projectDelete = (index, row) => {
 onMounted(() => {
   // 项目数据总览
   dataScreen()
+  // 获取项目状态列表
+  queryProjectState().then(res => {
+    if (res.code === 0) {
+      stateList.length = 0
+      stateList.push(...res.data)
+    }
+  })
   // 获取项目列表
   listData(initialCondition)
 })
+
 const listData = (condition) => {
   projectListData.length = 0
   getProjectList(condition).then(res => {
@@ -364,9 +376,7 @@ const listData = (condition) => {
       const list = res.data.list
       list.forEach(item => {
         item.CreatedAt = formatDate(item.CreatedAt)
-        item.state = projectState(item.state)
       })
-      console.log(list)
       projectListData.push(...list)
       listTotal.value = res.data.total
     }
@@ -392,21 +402,14 @@ const formatDate = (dateString, locale = 'en-US', timezone = 'Asia/Shanghai') =>
 
   return `${date.getFullYear()}-${('0' + (date.getMonth() + 1)).slice(-2)}-${('0' + date.getDate()).slice(-2)}`
 }
-const projectState = (state) => {
-  const obj = {
-    1: '立项',
-    2: '施工',
-    3: '收款',
-    4: '完成',
-    5: '失效'
-  }
-  return obj[state]
-}
+
 const queryProject = () => {
+  filterProjects.pageInfo.page = 1
   listData(filterProjects)
 }
 const changePage = (value) => {
-  console.log(value)
+  filterProjects.pageInfo.page = value
+  listData(filterProjects)
 }
 
 const jumpProjectApproval = () => {