From 35ae41021855e59dee2ce57fc6ddf4ec75abfe80 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 25 三月 2025 23:05:31 +0800
Subject: [PATCH] 首页统计容缺项目数
---
src/views/engineering/index.vue | 300 ++++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 213 insertions(+), 87 deletions(-)
diff --git a/src/views/engineering/index.vue b/src/views/engineering/index.vue
index 3dfc4a5..d8c0f49 100644
--- a/src/views/engineering/index.vue
+++ b/src/views/engineering/index.vue
@@ -1,26 +1,26 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
- <el-form-item label="宸ョ▼鍚嶇О" prop="projectName">
+ <el-form-item label="椤圭洰鍚嶇О" prop="projectName">
<el-input
v-model="queryParams.projectName"
- placeholder="璇疯緭鍏ュ伐绋嬪悕绉�"
+ placeholder="椤圭洰鍚嶇О鎼滅储"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="涓婚」鐩�" prop="projectInfoId">
- <el-row>
- <el-select v-model="queryParams.projectInfoId" filterable clearable style="width: 100%" placeholder="璇烽�夋嫨涓婚」鐩�">
- <el-option
- v-for="item in projectList"
- :key="'pp1' + item.id"
- :label="item.projectName"
- :value="item.id">
- </el-option>
- </el-select>
- </el-row>
- </el-form-item>
+<!-- <el-form-item label="涓婚」鐩�" prop="projectInfoId">-->
+<!-- <el-row>-->
+<!-- <el-select v-model="queryParams.projectInfoId" filterable clearable style="width: 100%" placeholder="璇烽�夋嫨涓婚」鐩�">-->
+<!-- <el-option-->
+<!-- v-for="item in projectList"-->
+<!-- :key="'pp1' + item.id"-->
+<!-- :label="item.projectName"-->
+<!-- :value="item.id">-->
+<!-- </el-option>-->
+<!-- </el-select>-->
+<!-- </el-row>-->
+<!-- </el-form-item>-->
<el-form-item label="椤圭洰鎺ㄨ繘绫诲瀷" label-width="120px" prop="projectType">
<el-select v-model="queryParams.projectType" placeholder="璇烽�夋嫨椤圭洰鎺ㄨ繘绫诲瀷" clearable>
<el-option
@@ -47,59 +47,77 @@
</el-form-item>
</el-form>
- <el-row :gutter="10" class="mb8">
- <el-col :span="1.5">
- <el-button
- type="primary"
- plain
- icon="el-icon-plus"
- size="mini"
- @click="handleAdd"
- v-hasPermi="['code:engineering:add']"
- >鏂板</el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button
- type="success"
- plain
- icon="el-icon-edit"
- size="mini"
- :disabled="single"
- @click="handleUpdate"
- v-hasPermi="['code:engineering:edit']"
- >淇敼</el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button
- type="danger"
- plain
- icon="el-icon-delete"
- size="mini"
- :disabled="multiple"
- @click="deleteByIds"
- v-hasPermi="['code:engineering:remove']"
- >鍒犻櫎</el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button
- type="warning"
- plain
- icon="el-icon-download"
- size="mini"
- @click="handleExport"
- v-hasPermi="['code:engineering:export']"
- >瀵煎嚭</el-button>
- </el-col>
- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
- </el-row>
+<!-- <el-row :gutter="10" class="mb8">-->
+<!-- <el-col :span="1.5">-->
+<!-- <el-button-->
+<!-- type="primary"-->
+<!-- plain-->
+<!-- icon="el-icon-plus"-->
+<!-- size="mini"-->
+<!-- @click="handleAdd"-->
+<!-- v-hasPermi="['code:engineering:add']"-->
+<!-- >鏂板</el-button>-->
+<!-- </el-col>-->
+<!--<!– <el-col :span="1.5">–>-->
+<!--<!– <el-button–>-->
+<!--<!– type="success"–>-->
+<!--<!– plain–>-->
+<!--<!– icon="el-icon-edit"–>-->
+<!--<!– size="mini"–>-->
+<!--<!– :disabled="single"–>-->
+<!--<!– @click="handleUpdate"–>-->
+<!--<!– v-hasPermi="['code:engineering:edit']"–>-->
+<!--<!– >淇敼</el-button>–>-->
+<!--<!– </el-col>–>-->
+<!--<!– <el-col :span="1.5">–>-->
+<!--<!– <el-button–>-->
+<!--<!– type="danger"–>-->
+<!--<!– plain–>-->
+<!--<!– icon="el-icon-delete"–>-->
+<!--<!– size="mini"–>-->
+<!--<!– :disabled="multiple"–>-->
+<!--<!– @click="deleteByIds"–>-->
+<!--<!– v-hasPermi="['code:engineering:remove']"–>-->
+<!--<!– >鍒犻櫎</el-button>–>-->
+<!--<!– </el-col>–>-->
+<!--<!– <el-col :span="1.5">–>-->
+<!--<!– <el-button–>-->
+<!--<!– type="warning"–>-->
+<!--<!– plain–>-->
+<!--<!– icon="el-icon-download"–>-->
+<!--<!– size="mini"–>-->
+<!--<!– @click="handleExport"–>-->
+<!--<!– v-hasPermi="['code:engineering:export']"–>-->
+<!--<!– >瀵煎嚭</el-button>–>-->
+<!--<!– </el-col>–>-->
+<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
+<!-- </el-row>-->
- <el-table v-loading="loading" :data="engineeringList" @selection-change="handleSelectionChange">
- <el-table-column type="selection" width="55" align="center" />
- <el-table-column label="宸ョ▼鍚嶇О" align="center" prop="projectName" />
- <el-table-column label="涓婚」鐩悕绉�" align="center" prop="projectInfoName" />
+ <el-table
+ ref="elTable"
+ v-loading="loading"
+ style="margin-top: 20px"
+ :data="engineeringList"
+ height="100%"
+ sortable="custom"
+ row-key="id"
+ border
+ default-expand-all
+ :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+ :show-overflow-tooltip="true">
+ <el-table-column label="椤圭洰鍚嶇О" min-width="250" :show-overflow-tooltip="true" prop="projectName" />
<el-table-column label="椤圭洰鎺ㄨ繘绫诲瀷" align="center" prop="projectType">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_project_type" :value="scope.row.projectType"/>
+ </template>
+ </el-table-column>
+ <el-table-column label="涓荤閮ㄩ棬" align="center" prop="competentDepartmentName">
+ </el-table-column>
+ <el-table-column label="涓氫富鍗曚綅" align="center" prop="projectOwnerUnitName">
+ </el-table-column>
+ <el-table-column label="骞翠唤" align="center" prop="year">
+ <template slot-scope="scope">
+ {{ scope.row.year ? scope.row.year + '骞�' : '' }}
</template>
</el-table-column>
<el-table-column label="鎶曡祫棰�(涓�)" align="center" prop="investmentAmount" />
@@ -108,21 +126,29 @@
<dict-tag :options="dict.type.sys_project_status" :value="scope.row.status"/>
</template>
</el-table-column>
+ <el-table-column label="寤鸿鍐呭" align="center" prop="buildContent"/>
<el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
+ icon="el-icon-plus"
+ style="margin-right: 10px"
+ @click="handleAdd(scope.row)"
+ >娣诲姞瀛愬伐绋�</el-button>
+ <el-button
+ size="mini"
+ type="text"
icon="el-icon-edit"
+ v-if="!isProject(scope.row.id)"
@click="handleUpdate(scope.row)"
- v-hasPermi="['code:engineering:edit']"
>淇敼</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
+ v-if="!isProject(scope.row.id)"
@click="deleteById(scope.row)"
- v-hasPermi="['code:engineering:remove']"
>鍒犻櫎</el-button>
</template>
</el-table-column>
@@ -142,17 +168,9 @@
<el-form-item label="宸ョ▼鍚嶇О" prop="projectName">
<el-input v-model="form.projectName" placeholder="璇疯緭鍏ュ伐绋嬪悕绉�" />
</el-form-item>
- <el-form-item label="涓婚」鐩�" prop="projectInfoId">
- <el-row>
- <el-select v-model="form.projectInfoId" filterable style="width: 100%" placeholder="璇烽�夋嫨涓婚」鐩�">
- <el-option
- v-for="item in projectList"
- :key="'pp' + item.id"
- :label="item.projectName"
- :value="item.id">
- </el-option>
- </el-select>
- </el-row>
+ <el-form-item label="寤鸿鍐呭" prop="buildContent">
+ <el-input v-model.trim="form.buildContent" style="width: 100%;" :rows="4" maxlength="1000"
+ placeholder="璇疯緭鍏�" type="textarea"/>
</el-form-item>
<el-row :gutter="20">
<el-col :span="12">
@@ -183,6 +201,21 @@
></el-option>
</el-select>
</el-form-item>
+ <el-form-item label="涓荤閮ㄩ棬" prop="department">
+ <treeselect v-model="form.department" @input="getCompetentDepartmentInfo" noChildrenText="鏃犲尮閰嶆暟鎹�" :options="approvalList" :normalizer="normalizer" placeholder="璇烽�夋嫨涓荤閮ㄩ棬">
+ </treeselect>
+ </el-form-item>
+ <el-form-item label="涓氫富鍗曚綅" prop="unit">
+ <treeselect v-model="form.unit" @input="getProjectOwnerUnit" noChildrenText="鏃犲尮閰嶆暟鎹�" :options="selectOptions" :normalizer="normalizer" placeholder="閫夋嫨鍗曚綅" />
+ </el-form-item>
+ <el-form-item label="骞翠唤" prop="year">
+ <el-date-picker v-model="form.year "
+ placeholder="閫夋嫨鏃堕棿"
+ style="width: 100%"
+ type="year"
+ value-format="yyyy"
+ :picker-options="pickerOptions"/>
+ </el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
@@ -195,9 +228,16 @@
<script>
import { getProjectEngineerings, getProjectEngineeringById, deleteProjectEngineeringByIds, deleteProjectEngineeringById, editProjectEngineering, addProjectEngineering } from "@/api/projectEngineering/projectEngineering";
import {list} from "@/api/projectEngineering/projectInfo";
+import Treeselect from '@riophae/vue-treeselect'
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+import {approvalList,listDept} from "@/api/system/dept";
+import {getProjectProcess} from "@/api/projectProcess/projectProcess";
+
export default {
name: "Engineering",
+ components: { Treeselect },
dicts: ['sys_project_type', 'sys_project_status'],
data() {
return {
@@ -220,6 +260,10 @@
title: "",
// 鏄惁鏄剧ず寮瑰嚭灞�
open: false,
+ //涓荤閮ㄩ棬
+ approvalList: [],
+ //涓氫富鍗曚綅
+ selectOptions: [],
// 鏌ヨ鍙傛暟
queryParams: {
currentPage: 1,
@@ -229,15 +273,21 @@
projectType: null,
status: null,
},
+ addId:null,
// 琛ㄥ崟鍙傛暟
form: {},
// 琛ㄥ崟鏍¢獙
rules: {
+ buildContent: [{required: true, message: '璇疯緭鍏ュ缓璁惧唴瀹�', trigger: 'blur'}],
projectName: [{required: true, message: '璇疯緭鍏ュ伐绋嬪悕绉�', trigger: 'blur'}],
projectInfoId: [{required: true, message: '璇烽�夋嫨涓婚」鐩�', trigger: 'change'}],
investmentAmount: [{required: true, message: '璇疯緭鍏ユ姇璧勯', trigger: 'change'}],
projectType: [{required: true, message: '璇烽�夋嫨娴佺▼鎺ㄨ繘绫诲瀷', trigger: 'change'}],
status: [{required: true, message: '璇烽�夋嫨寮�宸ョ姸鎬�', trigger: 'change'}],
+ department: [{required: true, message: '璇烽�夋嫨涓荤閮ㄩ棬', trigger: 'change'}],
+ unit: [{required: true, message: '璇烽�夋嫨椤圭洰涓氫富鍗曚綅', trigger: 'change'}],
+ year: [{required: true, message: '璇烽�夋嫨璁″垝寮�宸ユ椂闂�', trigger: 'change'}],
+ parent: [{required: false, message: '璇烽�夋嫨鐖跺伐绋�', trigger: 'change'}],
}
};
},
@@ -245,7 +295,69 @@
this.getList();
this.getProjectList();
},
+ mounted() {
+ //鍒濆鍖栦富绠¢儴闂ㄤ笅鎷夋
+ this.getApprovalList();
+ //鍗曚綅
+ this.getDeptList();
+ },
methods: {
+ pickerOptions: {
+ // 杩欓噷鍙互娣诲姞鏇村鐨刾icker閫夐」锛屼絾涓虹畝鍖栫ず渚嬶紝鍙睍绀虹鐢ㄥ叾浠栨棩鏈熺殑閫昏緫
+ // 鍏抽敭璁剧疆锛氭樉绀哄勾浠介�夋嫨鍣�
+ pickers: ['year']
+ },
+ isProject(id) {
+ const numericPattern = /^\d+(\.\d+)?$/;
+ return numericPattern.test(id)
+ },
+ getProjectOwnerUnit(unitId) {
+ console.log(unitId)
+ // if (deptId) {
+ // this.projectForm.unit = deptId
+ // } else {
+ // this.projectForm.unit = ''
+ // }
+ },
+ getCompetentDepartmentInfo(deptId) {
+ console.log(deptId)
+ // if (deptId) {
+ // if (this.projectForm.department != deptId) {
+ // this.projectForm.competentDepartmentPerson = ""
+ // this.projectForm.competentDepartmentPhone = ""
+ // }
+ // this.projectForm.department = deptId
+ // this.getCompetentDepartmentPeople(deptId)
+ // } else {
+ // this.projectForm.department = ''
+ // this.deptPersonList = [];
+ // }
+ },
+ getDeptList(){
+ listDept().then(response => {
+ console.log(response.data)
+ this.selectOptions = this.handleTree(response.data, "deptId");
+ this.selectOptions.push({deptId: '', deptName: '鏃�', children: []})
+ });
+ },
+ getApprovalList() {
+ approvalList().then(res => {
+ this.approvalList = this.handleTree(res.data, "deptId");
+ this.approvalList.push({deptId: '', deptName: '鏃�', children: []})
+ console.log(this.approvalList)
+ });
+ },
+ /** 杞崲閮ㄩ棬鏁版嵁缁撴瀯 */
+ normalizer(node) {
+ if (node.children && !node.children.length) {
+ delete node.children;
+ }
+ return {
+ id: node.deptId,
+ label: node.deptName,
+ children: node.children
+ };
+ },
getProjectList() {
list().then(res => {
this.projectList = res.data
@@ -254,9 +366,10 @@
/** 鏌ヨ宸ョ▼搴撳垪琛� */
getList() {
this.loading = true;
- getProjectEngineerings(this.queryParams).then(res => {
- this.engineeringList = res.data;
- this.total = res.total;
+
+ getProjectProcess(this.queryParams).then(response => {
+ this.engineeringList = response.data;
+ this.total = response.total;
this.loading = false;
});
},
@@ -276,10 +389,16 @@
status: null,
gmtCreate: null,
gmtUpdate: null,
- deleted: null
+ deleted: null,
+ department:null,
+ unit:null,
+ year:null,
+ parent:null,
};
+ this.addId = null;
this.resetForm("form");
},
+
/** 鎼滅储鎸夐挳鎿嶄綔 */
handleQuery() {
this.queryParams.pageNum = 1;
@@ -296,11 +415,18 @@
this.single = selection.length!==1
this.multiple = !selection.length
},
- /** 鏂板鎸夐挳鎿嶄綔 */
- handleAdd() {
+ handleAdd(row){
this.reset();
this.open = true;
this.title = "娣诲姞宸ョ▼";
+ if (this.isProject(row.id)) {
+ this.form.projectInfoId = row.id
+ this.form.parent = '0'
+ } else {
+ this.form.projectInfoId = row.projectInfoId
+ this.form.parent = row.id
+ }
+
},
/** 淇敼鎸夐挳鎿嶄綔 */
handleUpdate(row) {
@@ -316,15 +442,15 @@
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
- if (this.form.id != null) {
- editProjectEngineering(this.form).then(response => {
- this.$modal.msgSuccess("淇敼鎴愬姛");
+ if (! this.form.id){
+ addProjectEngineering(this.form).then(response => {
+ this.$modal.msgSuccess("鏂板鎴愬姛");
this.open = false;
this.getList();
});
} else {
- addProjectEngineering(this.form).then(response => {
- this.$modal.msgSuccess("鏂板鎴愬姛");
+ editProjectEngineering(this.form).then(response => {
+ this.$modal.msgSuccess("淇敼鎴愬姛");
this.open = false;
this.getList();
});
--
Gitblit v1.8.0