jhprjv2/ruoyi-ui/src/views/project/projectMeasure/index.vue

822 lines
26 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<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-input
v-model="queryParams.projectName"
placeholder="请输入项目名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="单位名称" prop="deptName">
<el-input
v-model="queryParams.deptName"
placeholder="请输入单位名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="测量类型" prop="measureType">
<el-select
v-model="queryParams.measureType"
placeholder="请选择测量类型"
clearable
>
<el-option
v-for="dict in dict.type.project_measure_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="测量内容" prop="measureInfo">
<el-select
v-model="queryParams.measureInfo"
placeholder="请选择测量类型"
clearable
>
<el-option
v-for="dict in dict.type.project_measure_info_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="测量结果" prop="measureResult">
<el-select
v-model="queryParams.measureResult"
placeholder="请选择测量结果"
clearable
>
<el-option
v-for="dict in dict.type.project_checking_result"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item> -->
<el-form-item label="测量时间">
<el-date-picker
v-model="daterangeMeasureTime"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item label="测量部位" prop="measurePosition">
<el-input
v-model="queryParams.measurePosition"
placeholder="请输入测量部位"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="质量专员" prop="qualityUser">
<el-input
v-model="queryParams.qualityUser"
placeholder="请输入监理专员"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="监理专员" prop="superviseUser">
<el-input
v-model="queryParams.superviseUser"
placeholder="请输入监理专员"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="审批状态" prop="approveStatus" v-if="false">
<el-select
v-model="queryParams.approveStatus"
placeholder="请选择审批状态"
clearable
>
<el-option
v-for="dict in dict.type.project_check_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</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="['project:projectMeasure: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="['project:projectMeasure:edit']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['project:projectMeasure: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="['project:projectMeasure:export']"
>导出</el-button
>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> -->
<el-tabs type="card" v-model="queryParams.activeName" @tab-click="getList">
<el-tab-pane :label="tabs.all" name="all"></el-tab-pane>
<el-tab-pane :label="tabs.jxz" name="jxz"></el-tab-pane>
<el-tab-pane :label="tabs.ywc" name="ywc"></el-tab-pane
></el-tabs>
<el-table
v-loading="loading"
:data="projectMeasureList"
@selection-change="handleSelectionChange" stripe
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column
label="项目名称"
align="center"
prop="projectName"
fixed="left"
width="200"
show-overflow-tooltip
/>
<el-table-column
label="单位名称"
align="center"
prop="deptName"
width="180"
show-overflow-tooltip
/>
<el-table-column label="测量主图" align="center" prop="mainImage" width="210">
<template slot-scope="scope">
<el-image
ref="preview"
style="width: 200px; height: 100px"
:src="getImageUrl(scope.row.mainImage)"
@click="onPreview(scope.row.imageUrls)"
></el-image>
</template>
</el-table-column>
<el-table-column label="测量类型" align="center" prop="measureType">
<template slot-scope="scope">
<dict-tag
:options="dict.type.project_measure_type"
:value="scope.row.measureType"
/>
</template>
</el-table-column>
<el-table-column label="测量内容" align="center" prop="measureInfo">
<template slot-scope="scope">
<dict-tag
:options="dict.type.project_measure_info_type"
:value="scope.row.measureInfo"
/>
</template>
</el-table-column>
<el-table-column
label="测量部位"
align="center"
prop="measurePosition"
width="140"
show-overflow-tooltip
/>
<el-table-column label="测量时间" align="center" prop="measureTime" width="100">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.measureTime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
<el-table-column label="审批状态" align="center" prop="approveStatus" width="120">
<template slot-scope="scope">
<dict-tag :options="dict.type.project_check_status" :value="scope.row.approveStatus" />
</template>
</el-table-column>
<el-table-column
label="测量点位"
align="center"
prop="measurePointPosition"
width="100"
show-overflow-tooltip
/>
<!-- <el-table-column label="测量结果" align="center" prop="measureResult">
<template slot-scope="scope">
<dict-tag
:options="dict.type.project_checking_result"
:value="scope.row.measureResult"
/>
</template>
</el-table-column> -->
<el-table-column
label="质量专员"
align="left"
prop="qualityUser"
width="120"
show-overflow-tooltip
>
<template slot-scope="scope">
<div>{{ scope.row.qualityUserName }}</div>
<div>{{ scope.row.qualityUser }}</div>
</template>
</el-table-column>
<el-table-column
label="监理专员"
align="left"
prop="superviseUser"
width="120"
show-overflow-tooltip
>
<template slot-scope="scope">
<div>{{ scope.row.superviseUserName }}</div>
<div>{{ scope.row.superviseUser }}</div>
</template>
</el-table-column>
<el-table-column label="数据状态" align="center" prop="isDel">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_common_isdel" :value="scope.row.isDel" />
</template>
</el-table-column>
<el-table-column label="提交时间" align="center" prop="createTime" width="100">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.measureTime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
fixed="right"
width="200"
>
<template slot-scope="scope">
<el-button
v-if="scope.row.measureFiles != null"
size="mini"
type="text"
icon="el-icon-paperclip"
@click="handledownload(scope.row)"
v-hasPermi="['project:projectMeasure:list']"
>下载附件</el-button
>
<el-button
v-if="scope.row.approveStatus != null"
size="mini"
type="text"
icon="el-icon-tickets"
@click="handleAuditinfo(scope.row)"
>审批日志</el-button
>
<el-button
v-if="scope.row.approveStatus == '1'"
size="mini"
type="text"
icon="el-icon-finished"
v-hasPermi="['project:projectMeasure:approve']"
@click="handleAudit(scope.row)"
>处理审批</el-button
>
<el-button
v-if="scope.row.approveStatus != '4'"
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['project:projectMeasure:edit']"
>修改</el-button
>
<el-button
v-if="scope.row.approveStatus != '4'"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['project:projectMeasure:remove']"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改实测实量对话框 -->
<el-dialog :title="title" :visible.sync="open" width="780px" append-to-body :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="项目名称" prop="projectName">
<el-input
v-model="form.projectName"
placeholder="请输入项目名称"
:disabled="true"
/>
</el-form-item>
<el-form-item label="单位名称" prop="deptName">
<el-input
v-model="form.deptName"
placeholder="请输入单位名称"
:disabled="true"
/>
</el-form-item>
<el-form-item label="测量图片" prop="imageUrls">
<image-upload v-model="form.imageUrls" :limit="9" />
</el-form-item>
<el-form-item label="测量类型" prop="measureType">
<el-select
v-model="form.measureType"
placeholder="请选择测量类型"
style="width: 100%"
@change="selectMeasureType"
>
<el-option
v-for="dict in dict.type.project_measure_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="测量内容" prop="measureInfo">
<el-select
v-model="form.measureInfo"
placeholder="请选择测量内容"
style="width: 100%"
>
<el-option
v-for="dict in dict.type.project_measure_info_type"
v-show="showInfoType(dict)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="测量部位" prop="measurePosition">
<el-input v-model="form.measurePosition" placeholder="请输入测量部位" />
</el-form-item>
<el-form-item label="测量点位" prop="measurePointPosition">
<el-input v-model="form.measurePointPosition" placeholder="请输入测量点位" />
</el-form-item>
<el-form-item label="质量专员" prop="qualityUser">
<el-select
v-model="form.qualityUser"
placeholder="请选择质量专员"
filterable
style="width: 100%"
@change="selectQualityUser"
>
<el-option-group
v-for="group in deptUserData2"
:key="group.unitId + ''"
:label="group.unitName + ' [' + group.unitTypeName + '] '"
>
<el-option
v-for="item in group.userinfoList"
:key="item.phonenumber"
:label="item.nickName + ' [' + item.jobTypeName + '] '"
:value="item.phonenumber"
>
</el-option>
</el-option-group>
</el-select>
</el-form-item>
<el-form-item label="监理专员" prop="superviseUser">
<el-select
v-model="form.superviseUser"
placeholder="请选择监理专员"
filterable
style="width: 100%"
@change="selectSuperviseUser"
>
<el-option-group
v-for="group in deptUserData"
:key="group.unitId + ''"
:label="group.unitName + ' [' + group.unitTypeName + '] '"
>
<el-option
v-for="item in group.userinfoList"
:key="item.phonenumber"
:label="item.nickName + ' [' + item.jobTypeName + '] '"
:value="item.phonenumber"
>
</el-option>
</el-option-group>
</el-select>
</el-form-item>
<el-form-item label="测量时间" prop="measureTime">
<el-date-picker
clearable
v-model="form.measureTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择测量时间"
style="width: 100%"
>
</el-date-picker>
</el-form-item>
<el-form-item label="测量附件" prop="measureFiles">
<file-upload v-model="form.measureFiles" :limit="9" @input="fileInput"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<el-image-viewer v-if="showViewer" :on-close="closeViewer" :url-list="previewList" />
<indexDrawer ref="indexDrawer"></indexDrawer>
<approveMeasureDrawer ref="approveMeasureDrawer" :closeCallBack="getList"/>
</div>
</template>
<script>
import {
listProjectMeasure,
getProjectMeasure,
delProjectMeasure,
addProjectMeasure,
updateProjectMeasure,
findGroupCountByApprove,
} from "@/api/project/projectMeasure";
import ElImageViewer from "element-ui/packages/image/src/image-viewer";
import indexDrawer from "../projectAuditinfo/indexDrawer.vue";
import approveMeasureDrawer from "../projectAuditinfo/approveMeasureDrawer.vue";
export default {
name: "ProjectMeasure",
components: {
indexDrawer,
ElImageViewer,
approveMeasureDrawer,
},
dicts: [
"project_check_status",
"project_measure_type",
"project_measure_info_type",
"project_checking_result",
"sys_common_isdel",
],
data() {
return {
showViewer: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 实测实量表格数据
projectMeasureList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 备注时间范围
daterangeMeasureTime: [],
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
projectId: null,
projectName: null,
deptId: null,
deptName: null,
measureType: null,
measurePosition: null,
measureInfo: null,
measureTime: null,
measurePointPosition: null,
measureResult: null,
qualityUser: null,
superviseUser: null,
isDel: null,
approveStatus: null,
activeName: "jxz",
},
tabs: {
all: "全部数据0",
jxz: "进行中0",
ywc: "已完成0",
},
// 表单参数
form: {},
// 表单校验
rules: {
imageUrls: [{ required: true, message: "请上传测量图片", trigger: "blur" }],
measureType: [{ required: true, message: "请选择测量类型", trigger: "blur" }],
measurePosition: [
{ required: true, message: "请输入测量部位", trigger: "blur" },
{ max: 100, message: "测量部位最多100字符", trigger: "blur" },
],
measureInfo: [{ required: true, message: "请选择测量内容", trigger: "blur" }],
measurePointPosition: [
{ required: true, message: "请输入测量点位", trigger: "blur" },
{ max: 100, message: "测量点位最多100字符", trigger: "blur" },
],
qualityUser: [{ required: true, message: "请选择质量专员", trigger: "blur" }],
superviseUser: [{ required: true, message: "请选择监理专员", trigger: "blur" }],
measureTime: [{ required: true, message: "请选择测量时间", trigger: "blur" }],
measureResult: [{ required: false, message: "请选择测量结果", trigger: "blur" }],
measureFiles: [{ required: false, message: "请上传测量附件", trigger: "blur" }],
},
deptUserData: [],
deptUserData2:[],
previewList: [],
};
},
created() {
this.getList();
},
methods: {
fileInput(files) {
let fileUrls = null;
if (files.length > 0) {
fileUrls = "";
files.forEach((item) => {
fileUrls += "," + item.url;
});
fileUrls = fileUrls.substring(1);
}
this.form.measureFiles = fileUrls;
},
selectMeasureType(val){
this.form.measureInfo=null;
},
showInfoType(dict){
if(this.form.measureType){
if(this.form.measureType=='6'){
return dict.raw.remark == 'gjgc' || dict.raw.remark == 'all';
}else{
return dict.raw.remark == null || dict.raw.remark == 'all';
}
}else{
return false;
}
},
getImageUrl(url) {
return process.env.VUE_APP_BASE_API + url + ".min.jpg";
},
onPreview(urls) {
this.previewList = [];
urls.split(",").forEach((item) => {
this.previewList.push(process.env.VUE_APP_BASE_API + item);
});
this.showViewer = true;
},
closeViewer() {
this.showViewer = false;
},
/** 查询实测实量列表 */
getList() {
this.loading = true;
this.queryParams.params = {};
if (null != this.daterangeMeasureTime && "" != this.daterangeMeasureTime) {
this.queryParams.params["beginMeasureTime"] = this.daterangeMeasureTime[0];
this.queryParams.params["endMeasureTime"] = this.daterangeMeasureTime[1];
}
this.queryCount();
listProjectMeasure(this.queryParams).then((response) => {
this.projectMeasureList = response.rows;
this.total = response.total;
this.loading = false;
});
},
queryCount() {
findGroupCountByApprove(this.queryParams).then((response) => {
if (response && response.data) {
this.tabs.jxz = "进行中(" + response.data.jxz + "";
this.tabs.ywc = "已完成(" + response.data.ywc + "";
this.tabs.all = "全部数据(" + (response.data.jxz + response.data.ywc) + "";
}
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
projectId: null,
projectName: null,
deptId: null,
deptName: null,
mainImage: null,
imageUrls: null,
measureType: null,
measurePosition: null,
measureInfo: null,
measureTime: null,
measurePointPosition: null,
measureResult: null,
measureFiles: null,
qualityUser: null,
qualityUserName: null,
superviseUser: null,
superviseUserName: null,
isDel: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.daterangeMeasureTime = [];
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加实测实量";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids;
getProjectMeasure(id).then((response) => {
this.form = response.data;
this.open = true;
this.title = "修改实测实量";
});
this.$api.publics
.selectProjectUnitUser({
unitType: "4",
projectId: row.projectId,
})
.then((d) => {
this.deptUserData = d.data;
});
this.$api.publics
.selectProjectUnitUser({
unitType: "2",
projectId: row.projectId,
})
.then((d) => {
this.deptUserData2 = d.data;
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
this.form.approveStatus="1";
if (this.form.id) {
updateProjectMeasure(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addProjectMeasure(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除实测实量编号为"' + ids + '"的数据项?')
.then(function () {
return delProjectMeasure(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download(
"project/projectMeasure/export",
{
...this.queryParams,
},
`projectMeasure_${new Date().getTime()}.xlsx`
);
},
/** 选择质量专员*/
selectQualityUser(val) {
this.deptUserData2.forEach((item) => {
item.userinfoList.forEach((u) => {
if (u.phonenumber == val) {
this.form.qualityUserName = u.nickName + " [" + u.jobTypeName + "] ";
}
});
});
},
/** 选择监理专员*/
selectSuperviseUser(val) {
this.deptUserData.forEach((item) => {
item.userinfoList.forEach((u) => {
if (u.phonenumber == val) {
this.form.superviseUserName = u.nickName + " [" + u.jobTypeName + "] ";
}
});
});
},
/** 下载附件 */
handleDownload(row) {
this.files = row.measureFiles.split(",");
this.files.forEach((item) => {
this.$download.resource(item);
});
},
/** 审批日志 */
handleAuditinfo(row) {
row.title="实测实量";
row.logType="2";
this.$refs.indexDrawer.show(row);
},
/** 处理审批 */
handleAudit(row){
row.typeName="实测实量";
this.$refs.approveMeasureDrawer.show(row);
}
},
};
</script>