2545307760@qq.com пре 8 месеци
родитељ
комит
2a4c72a061

+ 1 - 2
web/src/pinia/project/project.js

@@ -2,7 +2,7 @@ import { defineStore } from 'pinia'
 import { reactive } from 'vue'
 import { queryProjectState } from '@/api/project'
 import { getFileType } from '@/api/file'
-export const projectData = defineStore('counter', () => {
+export const editorData = defineStore('counter', () => {
   // 定义数据(state)
   const stateList = reactive([])
   const typeList = reactive([])
@@ -10,7 +10,6 @@ export const projectData = defineStore('counter', () => {
   const getStateList = () => {
     queryProjectState().then(res => {
       if (res.code === 0) {
-        console.log(res.data)
         stateList.length = 0
         stateList.push(...res.data)
       }

+ 225 - 19
web/src/view/projectManage/projectDetails/components/optionEdit.vue

@@ -13,7 +13,7 @@
               size="large"
             >
               <el-input
-                v-model="projectState"
+                v-model="projectState.name"
                 placeholder="请输入项目状态"
                 style="max-width: 600px"
                 size="large"
@@ -21,7 +21,7 @@
               >
                 <template #append>
                   <el-select
-                    v-model="selectedState"
+                    v-model="projectState.id"
                     placeholder="项目状态"
                     style="width: 115px"
                     clearable
@@ -30,7 +30,7 @@
                       v-for="item in data.stateList"
                       :key="item.ID"
                       :label="item.name"
-                      :value="item.name"
+                      :value="item.ID"
                     />
                   </el-select>
                 </template>
@@ -41,7 +41,7 @@
               size="large"
             >
               <el-input
-                v-model="fileType"
+                v-model="fileType.name"
                 style="max-width: 600px"
                 placeholder="请输入文件类型"
                 size="large"
@@ -49,11 +49,10 @@
               >
                 <template #append>
                   <el-select
-                    v-model="selectedType"
+                    v-model="fileType.id"
                     placeholder="文件类型"
                     style="width: 115px"
                     clearable
-                    @change="changeType"
                   >
                     <el-option
                       v-for="item in data.typeList"
@@ -80,7 +79,78 @@
         </div>
       </el-tab-pane>
       <el-tab-pane label="删除">
-        <div style="height: 250px" />
+        <div style="height: 250px">
+          <el-row
+            align="middle"
+            justify="center"
+            class="mt-5"
+          >
+            <el-col :span="3">
+              <span>项目状态:</span>
+            </el-col>
+            <el-col :span="11">
+              <el-select
+                v-model="deleteState.id"
+                placeholder="请选择项目状态"
+                style="width: 100%"
+                clearable
+                size="large"
+              >
+                <el-option
+                  v-for="item in data.stateList"
+                  :key="item.ID"
+                  :label="item.name"
+                  :value="item.ID"
+                />
+              </el-select>
+            </el-col>
+            <el-col
+              :span="4"
+              :offset="1"
+            >
+              <el-button
+                :icon="Delete"
+                size="large"
+                @click="omitState"
+              >删除</el-button>
+            </el-col>
+          </el-row>
+          <el-row
+            align="middle"
+            justify="center"
+            class="mt-10"
+          >
+            <el-col :span="3">
+              <span>文件类型:</span>
+            </el-col>
+            <el-col :span="11">
+              <el-select
+                v-model="deleteType.id"
+                placeholder="请选择文件类型"
+                style="width: 100%"
+                clearable
+                size="large"
+              >
+                <el-option
+                  v-for="item in data.typeList"
+                  :key="item.ID"
+                  :label="item.name"
+                  :value="item.ID"
+                />
+              </el-select>
+            </el-col>
+            <el-col
+              :span="4"
+              :offset="1"
+            >
+              <el-button
+                :icon="Delete"
+                size="large"
+                @click="omitType"
+              >删除</el-button>
+            </el-col>
+          </el-row>
+        </div>
       </el-tab-pane>
     </el-tabs>
   </div>
@@ -90,28 +160,164 @@
 defineOptions({
   name: 'OptionEdit'
 })
-import { ref } from 'vue'
-import { Edit } from '@element-plus/icons-vue'
-import { projectData } from '@/pinia/project/project'
+import { reactive, ref } from 'vue'
+import { Edit, Delete } from '@element-plus/icons-vue'
+import { editorData } from '@/pinia/project/project'
+import { createProjectState, updateProjectState, deleteProjectState } from '@/api/project'
+import { createFileType, updateFileType, deleteFileType } from '@/api/file'
+import { ElMessage } from 'element-plus'
 
-const data = projectData()
+const data = editorData()
 // 数据
 
 const prompt = '注意:不选择类型或状态默认为添加,选择后默认为更新'
-const projectState = ref('')
+const projectState = reactive({
+  id: '',
+  name: ''
+})
 
-const fileType = ref('')
+const fileType = reactive({
+  id: '',
+  name: ''
+})
 
-const selectedState = ref('')
+const deleteState = reactive({
+  id: ''
+})
 
-const selectedType = ref('')
+const deleteType = reactive({
+  id: ''
+})
+
+const currentState = ref('')
+
+const currentType = ref('')
 
-// pinia数据
-data.getStateList()
-data.getTypeList()
 // 方法
 
-const itemEdit = () => {}
+// 新增与更新
+const itemEdit = () => {
+  if (projectState.name.length !== 0) {
+    if (typeof projectState.id !== 'number') {
+      const createState = { name: projectState.name }
+      createProjectState(createState).then(res => {
+        if (res.code === 0) {
+          ElMessage({
+            message: '添加项目状态成功',
+            type: 'success',
+            showClose: true,
+            duration: 2000
+          })
+          data.getStateList()
+        }
+      })
+    } else {
+      updateProjectState(projectState).then(res => {
+        if (res.code === 0) {
+          ElMessage({
+            message: '更新项目状态成功',
+            type: 'success',
+            showClose: true,
+            duration: 2000
+          })
+          data.getStateList()
+        }
+      })
+    }
+    projectState.id = ''
+    projectState.name = ''
+  }
+  if (fileType.name.length !== 0) {
+    if (typeof fileType.id !== 'number') {
+      const createType = { name: fileType.name }
+      createFileType(createType).then(res => {
+        if (res.code === 0) {
+          ElMessage({
+            message: '添加文件类型成功',
+            type: 'success',
+            showClose: true,
+            duration: 2000
+          })
+          data.getTypeList()
+        }
+      })
+    } else {
+      updateFileType(fileType).then(res => {
+        if (res.code === 0) {
+          ElMessage({
+            message: '更新文件类型成功',
+            type: 'success',
+            showClose: true,
+            duration: 2000
+          })
+          data.getTypeList()
+        }
+      })
+    }
+    fileType.id = ''
+    fileType.name = ''
+  }
+}
+
+// 删除
+const omitState = () => {
+  const stateList = data.stateList
+  if (typeof deleteState.id === 'number') {
+    stateList.forEach(item => {
+      if (item.ID === deleteState.id) {
+        currentState.value = item.name
+      }
+    })
+    deleteProjectState(deleteState).then(res => {
+      if (res.code === 0) {
+        ElMessage({
+          message: `已删除项目状态:${currentState.value}`,
+          type: 'success',
+          showClose: true,
+          duration: 2000
+        })
+        deleteState.id = ''
+        data.getStateList()
+      }
+    })
+  } else {
+    ElMessage({
+      message: '请选择一个项目状态',
+      type: 'error',
+      showClose: true,
+      duration: 2000
+    })
+  }
+}
+const omitType = () => {
+  const typeList = data.typeList
+  if (typeof deleteType.id === 'number') {
+    typeList.forEach(item => {
+      if (item.ID === deleteType.id) {
+        currentType.value = item.name
+      }
+    })
+    deleteFileType(deleteType).then(res => {
+      if (res.code === 0) {
+        ElMessage({
+          message: `已删除文件类型:${currentType.value}`,
+          type: 'success',
+          showClose: true,
+          duration: 2000
+        })
+        deleteType.id = ''
+        data.getTypeList()
+      }
+    })
+  } else {
+    ElMessage({
+      message: '请选择一个文件类型',
+      type: 'error',
+      showClose: true,
+      duration: 2000
+    })
+  }
+}
 </script>
 
 <style scoped lang="scss">

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

@@ -137,10 +137,10 @@
                 v-model="fileType"
                 clearable
                 @change="changeFileType"
-                placeholder="项目状态"
+                placeholder="文件类型"
               >
                 <el-option
-                  v-for="item in fileTypeList"
+                  v-for="item in editor.typeList"
                   :key="item.ID"
                   :label="item.name"
                   :value="item.ID"
@@ -271,7 +271,7 @@
                 @change="changeUploadFileType"
               >
                 <el-option
-                  v-for="item in fileTypeList"
+                  v-for="item in editor.typeList"
                   :key="item.ID"
                   :label="item.name"
                   :value="item.ID"
@@ -379,7 +379,7 @@
             v-model="editData.state"
           >
             <el-option
-              v-for="item in stateList"
+              v-for="item in editor.stateList"
               :key="item.ID"
               :label="item.name"
               :value="item.ID"
@@ -434,18 +434,21 @@
 </template>
 
 <script setup>
-import { getProjectMessage, editProject, queryProjectState } from '@/api/project'
+import { getProjectMessage, editProject } from '@/api/project'
 import { onMounted, reactive, ref, computed } from 'vue'
 import { getAllUsers } from '@/api/user'
-import { getFileType, queryFileList, createProjectFile, downloadProjectFile } from '@/api/file'
+import { queryFileList, createProjectFile, downloadProjectFile } from '@/api/file'
 import { Download, Upload, Delete, Search, RefreshLeft, Edit } from '@element-plus/icons-vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import OptionEdit from './components/optionEdit.vue'
+import { editorData } from '@/pinia/project/project'
+
 defineOptions({
   name: 'ProjectDetails'
 })
 // ......................................
 // 数据
+const editor = editorData()
 const fileCondition = reactive({
   code: 'LCZM202407161229',
   name: '',
@@ -458,8 +461,6 @@ const fileCondition = reactive({
 
 const information = reactive({})
 
-const stateList = reactive([])
-
 // 用于编辑的数据
 const editData = reactive({})
 
@@ -504,9 +505,9 @@ const projectState = computed(() => {
 // 方法
 onMounted(() => {
   projectMessage('LCZM202407161229')
-  queryFileType()
-  getProjectState()
   queryFile()
+  editor.getStateList()
+  editor.getTypeList()
   getAllUsers().then(res => {
     if (res.code === 0) {
       userList.push(...res.data)
@@ -529,23 +530,6 @@ const projectMessage = (code) => {
   })
 }
 
-// 项目类型
-const getProjectState = () => {
-  queryProjectState().then(res => {
-    if (res.code === 0) {
-      stateList.push(...res.data)
-    }
-  })
-}
-// 文件类型
-const queryFileType = () => {
-  getFileType().then(res => {
-    if (res.code === 0) {
-      fileTypeList.push(...res.data)
-    }
-  })
-}
-
 const changeFileType = (value) => {
   if (typeof value === 'number') {
     fileTypeList.forEach(item => {
@@ -646,10 +630,12 @@ const supplementFile = () => {
     })
     formData.append('genre', uploadFileType.value)
     formData.append('code', 'LCZM202407161229')
+    console.log(formData.get('genre'))
     createProjectFile(formData).then(res => {
       if (res.code === 0) {
         fileDialog.value = false
         ElMessage.success(res.msg)
+        queryFile()
       } else {
         ElMessage.error(res.msg)
       }