فهرست منبع

Merge remote-tracking branch 'origin/master'

yewc 9 ماه پیش
والد
کامیت
f8b742eff8

+ 9 - 1
client/src/views/OaSystem/components/DistrictTree/index.vue

@@ -9,6 +9,7 @@
       :disabled="disabled"
       :label-all="true"
       :placeholder="placeholder"
+      @node-click="nodeClickHandler"
     >
       <template #default="{ node }">
         <span class="prefix"> </span>
@@ -45,12 +46,19 @@ const props = defineProps({
     default: '请选择'
   }
 })
-const emit = defineEmits<{ (e: 'update:modelValue', v: any): void }>()
+const emit = defineEmits<{
+  (e: 'update:modelValue', v: any): void
+  (e: 'nodeClick', v: any): void
+}>()
 const xzqdm = computed({
   get: () => Number(props.modelValue),
   set: (val) => emit('update:modelValue', val)
 })
 const { data: areaTree } = useQuery([getAreaTree.name], getAreaTree)
+
+const nodeClickHandler = (node) => {
+  emit('nodeClick', node)
+}
 </script>
 
 <style lang="scss" scoped>

+ 123 - 7
client/src/views/OaSystem/officeCenter/gdzccgsqPage/index.vue

@@ -54,6 +54,10 @@
         <span class="formSpan">资产型号:</span>
         <el-input v-model="qrs.assetModel" placeholder="请输入资产型号" style="width: 160px" />
       </div>
+      <div class="form">
+        <span class="formSpan">资产序列号:</span>
+        <el-input v-model="qrs.assetSequence" placeholder="请输入资产序列号" style="width: 160px" />
+      </div>
       <div class="form">
         <span class="formSpan">保管人:</span>
         <el-input v-model="qrs.custodianName" placeholder="请输入保管人" style="width: 160px" />
@@ -83,6 +87,10 @@
             <img src="@/assets/imgs/OA/open.png" class="mr-8px" alt="" />
             导出</el-button
           >
+          <!-- <el-button type="primary" @click="addOrEditDialogHandle">
+            <el-icon size="16" style="margin-right: 5px; font-weight: bold"><Plus /></el-icon>
+            新增</el-button
+          > -->
           <el-button type="danger" @click="changeCustodian">
             <img src="@/assets/imgs/OA/open.png" class="mr-8px" alt="" />
             变更</el-button
@@ -113,7 +121,7 @@
               {{ xmztMap[scope.row.state] }}
             </template>
           </el-table-column>
-          <el-table-column prop="userNickname" label="申请人" width="80" />
+          <!-- <el-table-column prop="userNickname" label="申请人" width="80" />
           <el-table-column
             :show-overflow-tooltip="true"
             prop="projectName"
@@ -126,7 +134,7 @@
             label="项目编号"
             width="120"
           />
-          <el-table-column :show-overflow-tooltip="true" prop="projectDept" label="项目部门" />
+          <el-table-column :show-overflow-tooltip="true" prop="projectDept" label="项目部门" /> -->
           <el-table-column
             :show-overflow-tooltip="true"
             prop="procureTime"
@@ -137,14 +145,19 @@
           <el-table-column :show-overflow-tooltip="true" prop="assetName" label="资产名称" />
           <el-table-column :show-overflow-tooltip="true" prop="assetType" label="资产类型" />
           <el-table-column :show-overflow-tooltip="true" prop="assetModel" label="资产型号" />
-          <el-table-column :show-overflow-tooltip="true" prop="custodianName" label="保管人" />
+          <el-table-column
+            :show-overflow-tooltip="true"
+            prop="custodianName"
+            label="保管人"
+            width="120"
+          />
           <!-- <el-table-column
             :show-overflow-tooltip="true"
             prop="custodianDeptName"
             label="保管人部门"
           /> -->
-          <el-table-column :show-overflow-tooltip="true" prop="amount" label="金额" />
-          <!-- <el-table-column :show-overflow-tooltip="true" prop="assetSequence" label="序列号" /> -->
+          <el-table-column :show-overflow-tooltip="true" prop="assetSequence" label="资产序列号" />
+          <el-table-column :show-overflow-tooltip="true" prop="amount" label="金额" width="120" />
           <!-- <el-table-column :show-overflow-tooltip="true" prop="assetConfig" label="资产配置" /> -->
           <el-table-column :show-overflow-tooltip="true" prop="bz1" label="备注" />
 
@@ -170,6 +183,97 @@
     </div>
   </div>
   <UserForm ref="formRef" @success="queryProjectListAjax" />
+  <el-dialog v-model="dialogVisible" :title="title" width="860px" align-center>
+    <el-form
+      ref="ruleFormRef"
+      :model="ruleForm"
+      label-width="auto"
+      class="demo-ruleForm"
+      status-icon
+    >
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="项目名称" prop="name">
+            <el-input v-model="ruleForm.name" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="项目编号" prop="name">
+            <el-input v-model="ruleForm.name" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="项目责任部门" prop="name">
+            <el-input v-model="ruleForm.name" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="采购时间" prop="name">
+            <el-input v-model="ruleForm.name" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="资产编号" prop="name">
+            <el-input v-model="ruleForm.name" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="资产名称" prop="name">
+            <el-input v-model="ruleForm.name" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="资产类型" prop="name">
+            <el-input v-model="ruleForm.name" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="资产型号" prop="name">
+            <el-input v-model="ruleForm.name" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="资产序列号" prop="name">
+            <el-input v-model="ruleForm.name" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="保管人" prop="name">
+            <el-input v-model="ruleForm.name" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="金额" prop="name">
+            <el-input v-model="ruleForm.name" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="状态" prop="name">
+            <el-input v-model="ruleForm.name" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-form-item label="备注" prop="desc">
+        <el-input v-model="ruleForm.desc" type="textarea" />
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button @click="dialogVisible = false">关闭</el-button>
+        <el-button type="primary" @click="onSaveHandle"> 保存 </el-button>
+      </div>
+    </template>
+  </el-dialog>
 </template>
 <script setup lang="ts">
 import { useRouter } from 'vue-router'
@@ -249,7 +353,7 @@ const handleCurrentChange = (pageNo: number) => {
   queryProjectListAjax()
 }
 const formRef = ref()
-const changeCustodian = (pageNo: number) => {
+const changeCustodian = () => {
   formRef.value.open(row.value)
 }
 const row: any = ref([])
@@ -284,7 +388,19 @@ const queryProjectListAjax = async () => {
 }
 
 queryProjectListAjax()
-
+/**
+ * 固定资产投资新增、编辑
+ */
+const title = ref<string>('添加固定资产')
+interface IFormType {}
+const ruleForm = ref<IFormType>({
+  name: ''
+})
+const dialogVisible = ref<boolean>(false)
+const addOrEditDialogHandle = () => {
+  dialogVisible.value = true
+}
+const onSaveHandle = () => {}
 /**
  * 获取行政区tree结构数据
  */

+ 1 - 22
client/src/views/OaSystem/personnelManagement/ygdaPage/index.ts

@@ -354,28 +354,7 @@ export const formConfigList = [
         name: 'jjlxrgx',
         title: '紧急联系人关系',
         type: 'select',
-        options: [
-          {
-            value: 1,
-            label: '父母'
-          },
-          {
-            value: 2,
-            label: '夫妻'
-          },
-          {
-            value: 3,
-            label: '子女'
-          },
-          {
-            value: 4,
-            label: '兄弟姐妹'
-          },
-          {
-            value: 5,
-            label: '其他'
-          }
-        ]
+        options: []
       }
     ]
   }

+ 4 - 1
client/src/views/OaSystem/personnelManagement/ygdaPage/index.vue

@@ -29,7 +29,7 @@
             <img src="@/assets/imgs/OA/search.png" class="mr-8px" alt="" />
             查询</el-button
           >
-          <el-button type="primary">
+          <el-button type="primary" @click="exportHandle">
             <img src="@/assets/imgs/OA/open.png" class="mr-8px" alt="" />
             导出</el-button
           >
@@ -172,6 +172,9 @@ const deptOnChange = (id) => {
   console.log(id)
   queryParams.deptId = id
 }
+const exportHandle = () => {
+  '/adm/staff-records/excel'
+}
 /** 初始化 */
 onMounted(() => {
   getList()

+ 69 - 57
client/src/views/OaSystem/projectCenter/projectTrack/common.ts

@@ -1,74 +1,86 @@
-import moment from 'moment'
-import download from '@/utils/download'
+import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
 
-interface QueryParam {
-  xmbh: string
+const { wsCache } = useCache()
+export const user = wsCache.get(CACHE_KEY.USER)
+interface IPageParam {
+  pageNo?: number
+  pageSize?: number
+}
+
+interface QueryParam extends IPageParam {
+  xmmc: string
+  gzryId: string
+  xmbmId: string
+}
+export interface IFormType {
+  id: string
   xmmc: string
-  xmlbId: string
-  lxsjOn: string
-  lxsjOff: string
-  pageNo: number
-  xzqdm: number | string
-  pageSize: number
-  isSign: any
-  xmzt: any
-  xmjlId: string
-  hyId: any
+  gzryId: string
+  gzry: string
+  jf: string
+  ygje: number
+  jfdjr: string
+  xmbmId: string
+  xmbm: string
+  xzqdm: string
+  xzqmc: string
+  zt: string
+  visibleUserIds: string
+  status: number
+  bz: string
 }
 export const useMixins = () => {
   const queryParams = reactive<QueryParam>({
-    xmbh: '',
     xmmc: '',
-    xmlbId: '15',
-    lxsjOn: '',
-    lxsjOff: '',
+    gzryId: '',
+    xmbmId: '',
     pageNo: 1,
+    pageSize: 15
+  })
+  const formData = ref<IFormType>({
+    id: '',
+    xmmc: '',
+    gzryId: '',
+    gzry: '',
+    jf: '',
+    ygje: 0,
+    jfdjr: '',
+    xmbmId: '',
+    xmbm: '',
     xzqdm: '',
-    pageSize: 15,
-    isSign: '',
-    xmzt: '',
-    xmjlId: '',
-    hyId: 0
+    xzqmc: '',
+    zt: '',
+    visibleUserIds: '',
+    status: 0,
+    bz: ''
   })
-  const lxsjObj = ref()
-  const setSearchParams = (): void => {
-    if (lxsjObj.value && lxsjObj.value.length > 0) {
-      queryParams.lxsjOn = moment(lxsjObj.value[0]).format('YYYY-MM-DD')
-      queryParams.lxsjOff = moment(lxsjObj.value[1]).format('YYYY-MM-DD')
+  const initFormData = (row?: IFormType) => {
+    if (!row) {
+      formData.value = {
+        id: '',
+        xmmc: '',
+        gzryId: user.user.id,
+        gzry: user.user.nickname,
+        jf: '',
+        ygje: 0,
+        jfdjr: '',
+        xmbmId: '',
+        xmbm: '',
+        xzqdm: '',
+        xzqmc: '',
+        zt: '',
+        visibleUserIds: '',
+        status: 0,
+        bz: ''
+      }
     } else {
-      queryParams.lxsjOn = ''
-      queryParams.lxsjOff = ''
-    }
-    if (queryParams.hyId == 0) {
-      queryParams.hyId = null
-    }
-  }
-  const exportHandleCommon = (request, params, fileName: string): void => {
-    if (lxsjObj.value && lxsjObj.value.length > 0) {
-      queryParams.lxsjOn = moment(lxsjObj.value[0]).format('YYYY-MM-DD')
-      queryParams.lxsjOff = moment(lxsjObj.value[1]).format('YYYY-MM-DD')
-    } else {
-      queryParams.lxsjOn = ''
-      queryParams.lxsjOff = ''
-    }
-    if (queryParams.hyId == 0) {
-      queryParams.hyId = null
-    }
-    const urlApi = `/project/list/excel`
-    setSearchParams()
-    const sendData = {
-      ...queryParams,
-      ...params
+      formData.value = row
     }
-    request.download({ url: urlApi, params: sendData }, '/business').then((blob) => {
-      download.excel(blob, fileName)
-    })
   }
   return {
     queryParams,
-    lxsjObj,
-    setSearchParams,
-    exportHandleCommon
+    formData,
+    initFormData
   }
 }
 

+ 129 - 84
client/src/views/OaSystem/projectCenter/projectTrack/index.vue

@@ -1,21 +1,17 @@
 <template>
   <div class="oa-sys-list-view">
     <div class="searchBox">
-      <div class="form">
-        <span class="formSpan">年份:</span>
-        <el-input v-model="queryParams.xmbh" placeholder="请输入项目编号" style="width: 160px" />
-      </div>
       <div class="form">
         <span class="formSpan">项目名称:</span>
         <el-input v-model="queryParams.xmmc" placeholder="请输入项目名称" style="width: 210px" />
       </div>
       <div class="form">
         <span class="formSpan">项目部门:</span>
-        <DeptTree v-model="queryParams['deptId']" placeholder="请选择部门" />
+        <DeptTree v-model="queryParams['xmbmId']" placeholder="请选择部门" />
       </div>
       <div class="form">
         <span class="formSpan">跟踪人员:</span>
-        <UserOrgTree v-model="queryParams['xmjlId']" :all="true" placeholder="请选择项目经理" />
+        <UserOrgTree v-model="queryParams['gzryId']" :all="true" placeholder="请选择项目经理" />
       </div>
       <div class="from">
         <div class="btnBox">
@@ -23,7 +19,7 @@
             <img src="@/assets/imgs/OA/search.png" class="mr-8px" alt="" />
             查询</el-button
           >
-          <el-button type="primary" @click="addHandle">
+          <el-button type="primary" @click="addOrEditHandle()">
             <img src="@/assets/imgs/OA/open.png" class="mr-8px" alt="" />
             新增</el-button
           >
@@ -59,32 +55,42 @@
             :show-overflow-tooltip="true"
             prop="xmmc"
             label="项目名称"
-            :min-width="250"
+            :min-width="220"
           />
-          <el-table-column prop="lxsj" label="跟踪人员" width="140" />
+          <el-table-column prop="gzry" label="跟踪人员" width="140" />
           <el-table-column
-            prop="zrbm"
+            prop="ygje"
             label="预估金额(万元)"
             :show-overflow-tooltip="true"
             width="200"
           />
-          <el-table-column prop="xmjl" label="甲方" width="120" />
-          <el-table-column prop="xmjl" label="甲方对接人" width="120" />
-          <el-table-column prop="xmjl" label="项目归属部门" width="120" />
-          <el-table-column prop="xmjl" label="行政区" width="120" />
-          <el-table-column prop="xmzt" label="项目状态" width="120">
+          <el-table-column prop="jf" label="甲方" width="120" />
+          <el-table-column prop="jfdjr" label="甲方对接人" width="120" />
+          <el-table-column prop="xmbm" label="项目归属部门" width="120" />
+          <el-table-column prop="xzqdm" label="行政区" width="120" />
+          <el-table-column prop="zt" label="状态" width="120">
+            <template #default="scope">
+              {{ ztMap[scope.row.zt] }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="xmjl" label="开关" width="120">
             <template #default="scope">
-              {{ getDictLabel(DICT_TYPE.PROJECT_STATUS, scope.row.xmzt) }}
+              <el-switch
+                v-model="scope.row.status"
+                :active-value="0"
+                @change="switchChange(scope.row)"
+                :inactive-value="1"
+              />
             </template>
           </el-table-column>
-          <el-table-column prop="xmjl" label="开关" width="120" />
 
           <el-table-column label="操作" width="80" fixed="right">
             <template #default="scope">
-              <div class="operateBtn" @click="operateClick(scope.row)">
-                <span>查看</span>
-              </div>
-              <div class="operateBtn" @click="operateClick(scope.row)">
+              <div
+                class="operateBtn"
+                @click="addOrEditHandle(scope.row)"
+                v-if="scope.row.gzryId === user.user.id"
+              >
                 <span>编辑</span>
               </div>
             </template>
@@ -102,7 +108,7 @@
         />
       </div>
     </div>
-    <el-dialog v-model="dialogVisible" title="项目跟踪填报" width="660px" align-center>
+    <el-dialog v-model="dialogVisible" :title="dialogTitle" width="660px" align-center>
       <el-form
         ref="ruleFormRef"
         style="width: 600px"
@@ -112,157 +118,196 @@
         status-icon
       >
         <el-form-item label="项目名称" prop="name">
-          <el-input v-model="ruleForm.name" />
+          <el-input v-model="formData.xmmc" />
         </el-form-item>
         <el-row :gutter="20">
           <el-col :span="12">
             <el-form-item label="跟踪人员" prop="region">
-              <el-select v-model="ruleForm.region" placeholder="Activity zone">
-                <el-option label="Zone one" value="shanghai" />
-                <el-option label="Zone two" value="beijing" />
-              </el-select>
+              <UserOrgTree
+                v-model="formData.gzryId"
+                :all="true"
+                placeholder="请选择跟踪人员"
+                @node-click="(item) => treeNodeClick(item, 'gzry')"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="甲方" prop="name">
-              <el-input v-model="ruleForm.name" />
+              <el-input v-model="formData.jf" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="20">
           <el-col :span="12">
             <el-form-item label="预估金额(万元)" prop="name">
-              <el-input v-model="ruleForm.name" />
+              <el-input v-model="formData.ygje" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="甲方对接人" prop="name">
-              <el-input v-model="ruleForm.name" />
+              <el-input v-model="formData.jfdjr" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="20">
           <el-col :span="12">
             <el-form-item label="项目归属部门" prop="region">
-              <el-select v-model="ruleForm.region" placeholder="Activity zone">
-                <el-option label="Zone one" value="shanghai" />
-                <el-option label="Zone two" value="beijing" />
-              </el-select>
+              <DeptTree
+                v-model="formData.xmbmId"
+                @node-click="(item) => treeNodeClick(item, 'xmbm')"
+                placeholder="请选择部门"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="行政区" prop="region">
-              <el-select v-model="ruleForm.region" placeholder="Activity zone">
-                <el-option label="Zone one" value="shanghai" />
-                <el-option label="Zone two" value="beijing" />
-              </el-select>
+              <DistrictTree
+                class="form-item-disable-style"
+                v-model="formData.xzqdm"
+                @node-click="(item) => treeNodeClick(item, 'xzqmc')"
+                style="width: 100%"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="20">
           <el-col :span="12">
             <el-form-item label="状态" prop="region">
-              <el-select v-model="ruleForm.region" placeholder="Activity zone">
-                <el-option label="Zone one" value="shanghai" />
-                <el-option label="Zone two" value="beijing" />
+              <el-select v-model="formData.zt" placeholder="请选择状态" style="width: 100%">
+                <el-option label="谋划" value="0" />
+                <el-option label="待上会" value="1" />
+                <el-option label="待招标" value="2" />
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="谁可见" prop="region">
-              <el-select v-model="ruleForm.region" placeholder="Activity zone">
-                <el-option label="Zone one" value="shanghai" />
-                <el-option label="Zone two" value="beijing" />
-              </el-select>
+              <UserOrgTree
+                v-model="formData.visibleUserIds"
+                :all="true"
+                placeholder="请选择跟谁可见"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-form-item label="备注" prop="desc">
-          <el-input v-model="ruleForm.desc" type="textarea" />
+          <el-input v-model="formData.bz" type="textarea" />
         </el-form-item>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
           <el-button @click="dialogVisible = false">关闭</el-button>
-          <el-button type="primary" @click="onSaveHandle"> 保存 </el-button>
+          <el-button type="primary" @click="saveProjectTracking"> 保存 </el-button>
         </div>
       </template>
     </el-dialog>
   </div>
 </template>
 <script setup lang="ts">
-import { useRouter } from 'vue-router'
 import { DICT_TYPE, getDictLabel } from '@/utils/dict'
-import { useMixins, infoList } from './common'
+import { IFormType, useMixins, infoList, user } from './common'
 import request from '@/config/axios'
 import { getAssetURL } from '@/utils/auth'
 import UserOrgTree from '@/views/OaSystem/components/UserOrgTree/index.vue'
 import DeptTree from '@/views/OaSystem/components/DeptTree/index.vue'
+import DistrictTree from '@/views/OaSystem/components/DistrictTree/index.vue'
 
-defineOptions({ name: 'ProjectBook' })
-const router = useRouter()
+defineOptions({ name: 'ProjectTrack' })
+
+const ztMap = {
+  '0': '谋划',
+  '1': '待上会',
+  '2': '待招标'
+}
 const tableRef: any = ref(null)
 const tableHeight: any = ref(0)
-const { queryParams, setSearchParams } = useMixins()
+const { queryParams, formData, initFormData } = useMixins()
 
 const handleCurrentChange = (pageNo: number) => {
   queryParams.pageNo = pageNo
-  queryProjectListAjax()
+  queryProjectTrackByPage()
 }
-interface IFormType {}
-const ruleForm = ref<IFormType>({
-  name: ''
-})
 /**
- * 操作:查看、编辑
+ * 项目跟踪:新增、编辑
  */
+const dialogTitle = ref<string>('项目跟踪填报')
 const dialogVisible = ref<boolean>(false)
-//type 0 查看 1 编辑
-const operateClick = (row: any, type: number = 0) => {
+const addOrEditHandle = (row?: IFormType) => {
   dialogVisible.value = true
+  if (!row) {
+    initFormData()
+    dialogTitle.value = '项目跟踪填报'
+  } else {
+    dialogTitle.value = '项目跟踪编辑'
+    queryProjectTrackByDetail(row['id']).then((result) => {
+      initFormData(result as any)
+    })
+  }
 }
-/**
- * 新建项目跟踪
- */
-const addHandle = () => {
-  dialogVisible.value = true
+const treeNodeClick = (item, type: string) => {
+  if (!item) return
+  formData.value[type] = item['label'] || item['name']
+}
+const saveProjectTracking = async (): Promise<void> => {
+  const urlApi = `/projectTracking/save`
+  const sendData = {
+    ...formData.value
+  }
+  const result = await request.post({ url: urlApi, data: sendData }, '/business')
+  if (result) {
+    searchHandle()
+    dialogVisible.value = false
+  }
+}
+const switchChange = (item) => {
+  console.log(item.status)
+  updateStatus({
+    id: item['id'],
+    status: item['status']
+  })
+}
+const updateStatus = async (data: { id: string; status: string }): Promise<void> => {
+  const urlApi = `/update-status`
+  return await request.put({ url: urlApi, data: data }, '/business')
 }
 const tableData = ref<Array<any>>([])
 const total = ref<number>()
 const searchHandle: () => void = () => {
-  queryProjectCalculate()
-  queryProjectListAjax()
+  queryParams.pageNo = 1
+  queryProjectTrackingSummary()
+  queryProjectTrackByPage()
 }
-const queryProjectListAjax = async (): Promise<void> => {
-  const urlApi = `/project/page`
-  setSearchParams()
+const queryProjectTrackByPage = async (): Promise<void> => {
+  const urlApi = `/projectTracking/page`
   const sendData = {
-    ...queryParams,
-    pageSize: 15
+    ...queryParams
   }
   const result = await request.get({ url: urlApi, params: sendData }, '/business')
-  tableData.value = result['records']
+  tableData.value = result['list']
   total.value = result['total']
 }
-queryProjectListAjax()
+const queryProjectTrackByDetail = async (id: string): Promise<void> => {
+  const urlApi = `/projectTracking/getById`
+  const sendData = {
+    id
+  }
+  return await request.get({ url: urlApi, params: sendData }, '/business')
+}
+queryProjectTrackByPage()
 
 /**
- * 获取项目台账金额计算
+ * 项目金额、项目个数汇总
  */
-const queryProjectCalculate = async (): Promise<void> => {
-  const urlApi = `/project/calculate`
-  setSearchParams()
+const queryProjectTrackingSummary = async (): Promise<void> => {
+  const urlApi = `/projectTracking/summary`
   const sendData = {
     ...queryParams
   }
   const result = await request.get({ url: urlApi, params: sendData }, '/business')
-  if (result) {
-    infoList[0]['num'] = result.output ?? 0
-    infoList[1]['num'] = result.cost ?? 0
-  }
+  infoList[0]['num'] = result ? result.amount ?? 0 : 0
+  infoList[1]['num'] = result ? result.nums ?? 0 : 0
 }
-queryProjectCalculate()
-const onSaveHandle = () => {}
+queryProjectTrackingSummary()
 onMounted(() => {
   tableHeight.value = tableRef.value.clientHeight
 })

+ 6 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/entity/ProjectTracking.java

@@ -68,6 +68,12 @@ public class ProjectTracking extends BaseEntity {
      */
     private String xzqdm;
 
+
+    /**
+     * 行政区名称
+     */
+    private String xzqmc;
+
     /**
      * 状态
      */

+ 5 - 1
zjugis-business/src/main/java/com/zjugis/business/bean/request/ProjectTrackingRequest.java

@@ -56,6 +56,10 @@ public class ProjectTrackingRequest {
     @NotBlank(message = "行政区代码不能为空")
     private String xzqdm;
 
+    @Schema(description = "行政区名称")
+    @NotBlank(message = "行政区名称不能为空")
+    private String xzqmc;
+
     @Schema(description = "状态")
     @NotBlank(message = "状态不能为空")
     private String zt;
@@ -64,7 +68,7 @@ public class ProjectTrackingRequest {
     private String visibleUserIds;
 
     @Schema(description = "追踪开关状态")
-    @NotBlank(message = "追踪开关状态不能为空")
+    @NotNull(message = "追踪开关状态不能为空(0:正常;1:停用)")
     private Integer status;
 
     @Schema(description = "备注")

+ 23 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/request/ProjectTrackingStatusRequest.java

@@ -0,0 +1,23 @@
+package com.zjugis.business.bean.request;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Author 陈俊
+ * @Date 2024/9/11 15:06
+ * @Version 1.0
+ */
+@Schema(description = "项目跟踪 - 状态修改 Request VO")
+@Data
+public class ProjectTrackingStatusRequest {
+
+    @Schema(description = "项目跟踪ID")
+    private String id;
+
+    @Schema(description = "追踪开关状态")
+    @NotNull(message = "追踪开关状态不能为空(0:正常;1:停用)")
+    private Integer status;
+}

+ 10 - 0
zjugis-business/src/main/java/com/zjugis/business/controller/ProjectTrackingController.java

@@ -3,6 +3,7 @@ package com.zjugis.business.controller;
 import com.zjugis.business.bean.entity.ProjectTracking;
 import com.zjugis.business.bean.request.ProjectTrackingPageRequest;
 import com.zjugis.business.bean.request.ProjectTrackingRequest;
+import com.zjugis.business.bean.request.ProjectTrackingStatusRequest;
 import com.zjugis.business.bean.response.ProjectTrackingResp;
 import com.zjugis.business.bean.response.ProjectTrackingSummaryResp;
 import com.zjugis.business.converter.projecttracking.ProjectTrackingConvert;
@@ -16,6 +17,8 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 
+import static com.zjugis.framework.common.pojo.CommonResult.success;
+
 /**
  * @Author 陈俊
  * @Date 2024/8/27 14:07
@@ -35,6 +38,13 @@ public class ProjectTrackingController {
         return CommonResult.success(projectTrackingService.save(ProjectTrackingConvert.INSTANCE.convert(reqVO)));
     }
 
+    @PutMapping("/update-status")
+    @Operation(summary = "修改项目追踪状态")
+    public CommonResult<Boolean> updateStatus(@Valid @RequestBody ProjectTrackingStatusRequest reqVO) {
+        projectTrackingService.updateStatus(reqVO.getId(), reqVO.getStatus());
+        return success(true);
+    }
+
     @GetMapping("/projectTracking/page")
     @Operation(summary = "项目追踪分页列表")
     public CommonResult<PageResult<ProjectTrackingResp>> page(@Valid ProjectTrackingPageRequest reqVO) {

+ 7 - 0
zjugis-business/src/main/java/com/zjugis/business/service/ProjectTrackingService.java

@@ -39,4 +39,11 @@ public interface ProjectTrackingService {
      * @return
      */
     ProjectTrackingSummaryResp summary(ProjectTrackingPageRequest reqVO);
+
+    /**
+     * 修改项目追踪状态
+     * @param id
+     * @param status
+     */
+    void updateStatus(String id, Integer status);
 }

+ 9 - 1
zjugis-business/src/main/java/com/zjugis/business/service/impl/ProjectTrackingServiceImpl.java

@@ -50,7 +50,7 @@ public class ProjectTrackingServiceImpl implements ProjectTrackingService {
     @Override
     public ProjectTrackingSummaryResp summary(ProjectTrackingPageRequest reqVO) {
         List<ProjectTracking> list = projectTrackingMapper.list(reqVO);
-        if(CollectionUtil.isEmpty(list)){
+        if (CollectionUtil.isEmpty(list)) {
             return null;
         }
         BigDecimal amount = list.stream().map(ProjectTracking::getYgje).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -59,4 +59,12 @@ public class ProjectTrackingServiceImpl implements ProjectTrackingService {
         resp.setAmount(amount);
         return resp;
     }
+
+    @Override
+    public void updateStatus(String id, Integer status) {
+        ProjectTracking projectTracking = new ProjectTracking();
+        projectTracking.setId(id);
+        projectTracking.setStatus(status);
+        projectTrackingMapper.updateById(projectTracking);
+    }
 }