提交代码

dev_xds
姜玉琦 2023-08-22 18:09:42 +08:00
parent 9ac4cb4e03
commit 27db4819ba
17 changed files with 2107 additions and 380 deletions

View File

@ -16,10 +16,10 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="部门名称" prop="deptName">
<el-form-item label="单位名称" prop="deptName">
<el-input
v-model="queryParams.deptName"
placeholder="请输入部门名称"
placeholder="请输入单位名称"
clearable
@keyup.enter.native="handleQuery"
/>
@ -40,6 +40,17 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="封样时间">
<el-date-picker
v-model="daterangeSealDate"
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="contractBrand">
<el-input
v-model="queryParams.contractBrand"
@ -56,27 +67,6 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="封样时间">
<el-date-picker
v-model="daterangeSealDate"
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="isDel">
<el-select v-model="queryParams.isDel" placeholder="请选择数据状态" clearable>
<el-option
v-for="dict in dict.type.sys_common_isdel"
: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
@ -141,29 +131,92 @@
@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="deptName" />
<el-table-column label="封样主图" align="center" prop="mainImage" width="100">
<el-table-column
label="项目名称"
align="center"
prop="projectName"
width="200"
fixed="left"
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="220">
<template slot-scope="scope">
<image-preview :src="scope.row.mainImage" :width="50" :height="50" />
<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="imgUrls" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.imgUrls" :width="50" :height="50" />
</template>
</el-table-column>
<el-table-column label="封样名称" align="center" prop="materialName" />
<el-table-column label="使用部位" align="center" prop="usePosition" />
<el-table-column label="指定品牌" align="center" prop="contractBrand" />
<el-table-column label="拟用品牌" align="center" prop="useBrand" />
<el-table-column
label="封样名称"
align="center"
prop="materialName"
width="180"
show-overflow-tooltip
/>
<el-table-column
label="使用部位"
align="center"
prop="usePosition"
width="150"
show-overflow-tooltip
/>
<el-table-column
label="指定品牌"
align="center"
prop="contractBrand"
width="120"
show-overflow-tooltip
/>
<el-table-column
label="拟用品牌"
align="center"
prop="useBrand"
width="120"
show-overflow-tooltip
/>
<el-table-column label="封样时间" align="center" prop="sealDate" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.sealDate, "{y}-{m}-{d}") }}</span>
<span>{{ parseTime(scope.row.sealDate, "{y}-{m}-{d} {h}:{i}") }}</span>
</template>
</el-table-column>
<el-table-column label="会签单" align="center" prop="signFiles" width="120">
<template slot-scope="scope">
<el-button
v-if="scope.row.signFiles != null"
size="mini"
type="text"
icon="el-icon-paperclip"
@click="handledownloadSignFiles(scope.row)"
v-hasPermi="['project:materialSeal:list']"
>下载会签单</el-button
>
<span v-if="scope.row.signFiles == null"> - </span>
</template>
</el-table-column>
<el-table-column label="变更单" align="center" prop="alterationFiles" width="120">
<template slot-scope="scope">
<el-button
v-if="scope.row.alterationFiles != null"
size="mini"
type="text"
icon="el-icon-paperclip"
@click="handledownloadAlterationFiles(scope.row)"
v-hasPermi="['project:materialSeal:list']"
>下载变更单</el-button
>
<span v-if="scope.row.signFiles == null"> - </span>
</template>
</el-table-column>
<el-table-column label="会签单" align="center" prop="signFiles" />
<el-table-column label="变更单" align="center" prop="alterationFiles" />
<el-table-column label="数据状态" align="center" prop="isDel">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_common_isdel" :value="scope.row.isDel" />
@ -206,19 +259,24 @@
/>
<!-- 添加或修改材料封样对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-dialog :title="title" :visible.sync="open" width="780px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="项目名称" prop="projectId">
<el-input v-model="form.projectId" placeholder="请输入项目名称" />
<el-form-item label="项目名称" prop="projectName">
<el-input
v-model="form.projectName"
placeholder="请输入项目名称"
:disabled="true"
/>
</el-form-item>
<el-form-item label="部门名称" prop="deptId">
<el-input v-model="form.deptId" placeholder="请输入部门名称" />
<el-form-item label="单位名称" prop="deptName">
<el-input
v-model="form.deptName"
placeholder="请输入单位名称"
:disabled="true"
/>
</el-form-item>
<el-form-item label="封样主图" prop="mainImage">
<image-upload v-model="form.mainImage" />
</el-form-item>
<el-form-item label="图片集合" prop="imgUrls">
<image-upload v-model="form.imgUrls" />
<el-form-item label="封样图片" prop="imageUrls">
<image-upload v-model="form.imageUrls" :limit="9" />
</el-form-item>
<el-form-item label="封样名称" prop="materialName">
<el-input v-model="form.materialName" placeholder="请输入封样名称" />
@ -227,39 +285,46 @@
<el-input v-model="form.usePosition" placeholder="请输入使用部位" />
</el-form-item>
<el-form-item label="指定品牌" prop="contractBrand">
<el-input v-model="form.contractBrand" placeholder="请输入指定品牌" />
<el-input
v-model="form.contractBrand"
placeholder="请输入指定品牌"
@change="onlyFile"
/>
</el-form-item>
<el-form-item label="拟用品牌" prop="useBrand">
<el-input v-model="form.useBrand" placeholder="请输入拟用品牌" />
<el-input
v-model="form.useBrand"
placeholder="请输入拟用品牌"
@change="onlyFile"
/>
</el-form-item>
<el-form-item label="封样时间" prop="sealDate">
<el-date-picker
clearable
v-model="form.sealDate"
type="date"
value-format="yyyy-MM-dd"
type="datetime"
default-time="10:00:00"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择封样时间"
style="width: 100%"
>
</el-date-picker>
</el-form-item>
<el-form-item label="会签单" prop="signFiles">
<file-upload v-model="form.signFiles" />
<file-upload
v-model="form.signFiles"
:limit="1"
:fileType="['pdf', 'png', 'jpg', 'jpeg']"
@input="fileInputSign"
/>
</el-form-item>
<el-form-item label="变更单" prop="alterationFiles">
<file-upload v-model="form.alterationFiles" />
</el-form-item>
<el-form-item label="数据状态" prop="isDel">
<el-select v-model="form.isDel" placeholder="请选择数据状态">
<el-option
v-for="dict in dict.type.sys_common_isdel"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
<el-form-item label="变更单" prop="alterationFiles" v-show="isOnly">
<file-upload
v-model="form.alterationFiles"
:limit="1"
:fileType="['pdf', 'png', 'jpg', 'jpeg']"
@input="fileInputAlteration"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -267,6 +332,7 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<el-image-viewer v-if="showViewer" :on-close="closeViewer" :url-list="previewList" />
</div>
</template>
@ -278,12 +344,17 @@ import {
addMaterialSeal,
updateMaterialSeal,
} from "@/api/project/materialSeal";
import ElImageViewer from "element-ui/packages/image/src/image-viewer";
export default {
name: "MaterialSeal",
components: {
ElImageViewer,
},
dicts: ["sys_common_isdel"],
data() {
return {
showViewer: false,
//
loading: true,
//
@ -312,7 +383,7 @@ export default {
projectName: null,
deptId: null,
deptName: null,
imgUrls: null,
imageUrls: null,
materialName: null,
usePosition: null,
contractBrand: null,
@ -323,13 +394,89 @@ export default {
//
form: {},
//
rules: {},
rules: {
imageUrls: [{ required: true, message: "请上传封样现场图片", trigger: "blur" }],
materialName: [
{ required: true, message: "请输入封样名称", trigger: "blur" },
{ max: 100, message: "封样名称最多100字符", trigger: "blur" },
],
usePosition: [
{ required: true, message: "请输入使用部位", trigger: "blur" },
{ max: 100, message: "使用部位最多100字符", trigger: "blur" },
],
contractBrand: [
{ required: true, message: "请输入合同指定品牌", trigger: "blur" },
{ max: 100, message: "合同指定品牌最多100字符", trigger: "blur" },
],
useBrand: [
{ required: true, message: "请输入使用品牌", trigger: "blur" },
{ max: 100, message: "使用品牌最多100字符", trigger: "blur" },
],
sealDate: [{ required: true, message: "请选择封样时间", trigger: "blur" }],
signFiles: [{ required: true, message: "请上传会签单附件", trigger: "blur" }],
alterationFiles: [
{ required: false, message: "请上传变更单附件", trigger: "blur" },
],
},
previewList: [],
isOnly: false,
};
},
created() {
this.getList();
},
methods: {
fileInputSign(files) {
let fileUrls = null;
if (files.length > 0) {
fileUrls = "";
files.forEach((item) => {
fileUrls += "," + item.url;
});
fileUrls = fileUrls.substring(1);
}
this.form.signFiles = fileUrls;
},
fileInputAlteration(files) {
let fileUrls = null;
if (files.length > 0) {
fileUrls = "";
files.forEach((item) => {
fileUrls += "," + item.url;
});
fileUrls = fileUrls.substring(1);
}
this.form.alterationFiles = fileUrls;
},
onlyFile() {
if (this.form.contractBrand && this.form.useBrand) {
if (this.form.contractBrand != this.form.useBrand) {
this.isOnly = true;
this.rules.alterationFiles[0].required = true;
} else {
this.isOnly = false;
this.form.alterationFiles = null;
this.rules.alterationFiles[0].required = false;
}
} else {
this.isOnly = false;
this.form.alterationFiles = null;
this.rules.alterationFiles[0].required = 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;
@ -354,9 +501,11 @@ export default {
this.form = {
id: null,
projectId: null,
projectName: null,
deptId: null,
deptName: null,
mainImage: null,
imgUrls: null,
imageUrls: null,
materialName: null,
usePosition: null,
contractBrand: null,
@ -450,6 +599,20 @@ export default {
`materialSeal_${new Date().getTime()}.xlsx`
);
},
/** 下载附件 */
handledownloadSignFiles(row) {
this.files = row.signFiles.split(",");
this.files.forEach((item) => {
this.$download.resource(item);
});
},
/** 下载附件 */
handledownloadAlterationFiles(row) {
this.files = row.alterationFiles.split(",");
this.files.forEach((item) => {
this.$download.resource(item);
});
},
},
};
</script>

View File

@ -0,0 +1,586 @@
<template>
<div class="projectect-attendance-drawer">
<el-drawer
v-if="isOpen"
:visible.sync="isOpen"
direction="rtl"
size="65%"
style="padding-left: 20px"
>
<template slot="title">
<div>{{ title + " 【材料封样管理】" }}</div>
</template>
<el-tabs
v-model="activeName"
style="margin-left: 20px; margin-right: 20px"
@tab-click="getList"
>
<el-tab-pane
v-for="(it, idx) in nodes"
:label="it.unitName + ''"
:name="it.unitId + ''"
:key="idx"
></el-tab-pane>
</el-tabs>
<el-row
:gutter="10"
class="mb8"
style="margin-left: 20px; margin-top: 10px; margin-right: 20px"
>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['project:materialSeal: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:materialSeal: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:materialSeal:remove']"
>删除</el-button
>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="projectMaterialSealList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="封样图片" align="center" prop="mainImage" width="80">
<template slot-scope="scope">
<el-image
ref="preview"
style="width: 50px; height: 50px"
:src="getImageUrl(scope.row.mainImage)"
@click="onPreview(scope.row.imageUrls)"
></el-image>
</template>
</el-table-column>
<el-table-column
label="封样名称"
align="center"
prop="materialName"
width="180"
show-overflow-tooltip
/>
<el-table-column
label="使用部位"
align="center"
prop="usePosition"
width="150"
show-overflow-tooltip
/>
<el-table-column
label="指定品牌"
align="center"
prop="contractBrand"
width="120"
show-overflow-tooltip
/>
<el-table-column
label="拟用品牌"
align="center"
prop="useBrand"
width="120"
show-overflow-tooltip
/>
<el-table-column label="封样时间" align="center" prop="sealDate" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.sealDate, "{y}-{m}-{d} {h}:{i}") }}</span>
</template>
</el-table-column>
<el-table-column label="会签单" align="center" prop="signFiles" width="100">
<template slot-scope="scope">
<el-button
v-if="scope.row.signFiles != null"
size="mini"
type="text"
icon="el-icon-paperclip"
@click="handledownloadSignFiles(scope.row)"
v-hasPermi="['project:materialSeal:list']"
>下载会签单</el-button
>
<span v-if="scope.row.signFiles == null"> - </span>
</template>
</el-table-column>
<el-table-column label="变更单" align="center" prop="alterationFiles" width="100">
<template slot-scope="scope">
<el-button
v-if="scope.row.alterationFiles != null"
size="mini"
type="text"
icon="el-icon-paperclip"
@click="handledownloadAlterationFiles(scope.row)"
v-hasPermi="['project:materialSeal:list']"
>下载变更单</el-button
>
<span v-if="scope.row.signFiles == null"> - </span>
</template>
</el-table-column>
<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-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['project:materialSeal:edit']"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['project:materialSeal: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>
<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="materialName">
<el-input v-model="form.materialName" placeholder="请输入封样名称" />
</el-form-item>
<el-form-item label="使用部位" prop="usePosition">
<el-input v-model="form.usePosition" placeholder="请输入使用部位" />
</el-form-item>
<el-form-item label="指定品牌" prop="contractBrand">
<el-input
v-model="form.contractBrand"
placeholder="请输入指定品牌"
@change="onlyFile"
/>
</el-form-item>
<el-form-item label="拟用品牌" prop="useBrand">
<el-input
v-model="form.useBrand"
placeholder="请输入拟用品牌"
@change="onlyFile"
/>
</el-form-item>
<el-form-item label="封样时间" prop="sealDate">
<el-date-picker
clearable
v-model="form.sealDate"
type="datetime"
default-time="10:00:00"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择封样时间"
style="width: 100%"
>
</el-date-picker>
</el-form-item>
<el-form-item label="会签单" prop="signFiles">
<file-upload
v-model="form.signFiles"
:limit="1"
:fileType="['pdf', 'png', 'jpg', 'jpeg']"
@input="fileInputSign"
/>
</el-form-item>
<el-form-item label="变更单" prop="alterationFiles" v-show="true">
<file-upload
v-model="form.alterationFiles"
:limit="1"
:fileType="['pdf', 'png', 'jpg', 'jpeg']"
@input="fileInputAlteration"
/>
</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-drawer>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="previewList"
style="z-index: 2050"
/>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import {
listMaterialSeal,
getMaterialSeal,
delMaterialSeal,
addMaterialSeal,
updateMaterialSeal,
} from "@/api/project/materialSeal";
import ElImageViewer from "element-ui/packages/image/src/image-viewer";
export default {
name: "RuoyiUiProjectDeptWroksDrawer",
components: {
ElImageViewer,
},
data() {
return {
showViewer: false,
open: false,
isOpen: false,
project: null,
title: "",
isUnit: true,
nodes: [],
form: {},
rules: {
imageUrls: [{ required: true, message: "请上传封样现场图片", trigger: "blur" }],
materialName: [
{ required: true, message: "请输入封样名称", trigger: "blur" },
{ max: 100, message: "封样名称最多100字符", trigger: "blur" },
],
usePosition: [
{ required: true, message: "请输入使用部位", trigger: "blur" },
{ max: 100, message: "使用部位最多100字符", trigger: "blur" },
],
contractBrand: [
{ required: true, message: "请输入合同指定品牌", trigger: "blur" },
{ max: 100, message: "合同指定品牌最多100字符", trigger: "blur" },
],
useBrand: [
{ required: true, message: "请输入使用品牌", trigger: "blur" },
{ max: 100, message: "使用品牌最多100字符", trigger: "blur" },
],
sealDate: [{ required: true, message: "请选择封样时间", trigger: "blur" }],
signFiles: [{ required: true, message: "请上传会签单附件", trigger: "blur" }],
alterationFiles: [
{ required: false, message: "请上传变更单附件", trigger: "blur" },
],
},
projectMaterialSealList: [],
activeName: "",
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
queryParams: {
pageNum: 1,
pageSize: 10,
projectId: null,
deptId: null,
},
previewList: [],
isOnly: false,
};
},
computed: {
...mapGetters(["dept"]),
},
mounted() {},
methods: {
fileInputSign(files) {
let fileUrls = null;
if (files.length > 0) {
fileUrls = "";
files.forEach((item) => {
fileUrls += "," + item.url;
});
fileUrls = fileUrls.substring(1);
}
this.form.signFiles = fileUrls;
},
fileInputAlteration(files) {
let fileUrls = null;
if (files.length > 0) {
fileUrls = "";
files.forEach((item) => {
fileUrls += "," + item.url;
});
fileUrls = fileUrls.substring(1);
}
this.form.alterationFiles = fileUrls;
},
onlyFile() {
if (
this.form.contractBrand &&
this.form.useBrand &&
this.form.contractBrand != this.form.useBrand
) {
console.log("qqqq");
//this.isOnly = true;
this.rules.alterationFiles[0].required = true;
} else {
console.log("qqqq22222");
//this.isOnly = false;
this.alterationFiles = null;
this.rules.alterationFiles[0].required = 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;
},
doOk() {
updateProjectDeptWroks(this.form).then((response) => {
this.$modal.msgSuccess("保存成功");
this.isOpen = false;
});
},
doCanel() {
this.isOpen = false;
},
show(project) {
this.project = project;
this.title = project.projectName;
this.isOpen = true;
this.queryParams.projectId = project.id;
this.$api.publics
.queryUnitList({
projectId: project.id,
unitType: 2,
})
.then((d) => {
this.nodes = d.rows;
if (d.rows.length > 0) {
this.activeName = this.nodes[0].unitId + "";
this.isUnit = true;
this.getList();
} else {
this.projectMaterialSealList = [];
this.$message.error("当前项目未分配总包单位,不能办理材料封样!");
this.isUnit = false;
}
});
},
//
getList() {
this.queryParams.deptId = this.activeName;
this.loading = true;
listMaterialSeal(this.queryParams).then((response) => {
this.projectMaterialSealList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
projectId: null,
deptId: null,
insuranceType: null,
insuranceNumber: null,
insuranceFile: null,
insuranceState: null,
beginDate: null,
endDate: null,
companyName: 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.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
if (this.nodes.length > 0) {
this.reset();
this.form.projectId = this.project.id;
this.form.projectName = this.project.projectName;
this.form.deptId = this.activeName;
this.nodes.forEach((item) => {
if (item.unitId == this.activeName) {
this.form.deptName = item.unitName;
}
});
this.open = true;
this.title = "添加项目材料封样";
} else {
this.$message.error("当前项目未分配总包单位,不能办理材料封样!");
}
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids;
getMaterialSeal(id).then((response) => {
this.form = response.data;
this.form.projectName = this.project.projectName;
this.nodes.forEach((item) => {
if (item.unitId == this.activeName) {
this.form.deptName = item.unitName;
}
});
this.open = true;
this.title = "修改项目材料封样";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id != null) {
updateMaterialSeal(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addMaterialSeal(this.form).then((response) => {
if (response.code == 200) {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除项目材料封样编号为"' + ids + '"的数据项?')
.then(function () {
return delMaterialSeal(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download(
"project/materialSeal/export",
{
...this.queryParams,
},
`materialSeal_${new Date().getTime()}.xlsx`
);
},
/** 下载附件 */
handleDownload(row) {
this.files = row.checkingFiles.split(",");
this.files.forEach((item) => {
this.$download.resource(item);
});
},
/** 下载附件 */
handledownloadSignFiles(row) {
this.files = row.signFiles.split(",");
this.files.forEach((item) => {
this.$download.resource(item);
});
},
/** 下载附件 */
handledownloadAlterationFiles(row) {
this.files = row.alterationFiles.split(",");
this.files.forEach((item) => {
this.$download.resource(item);
});
},
},
};
</script>
<style lang="scss" scoped></style>

View File

@ -147,7 +147,7 @@
show-overflow-tooltip
/>
<el-table-column
label="部门名称"
label="单位名称"
align="center"
prop="deptName"
width="180"
@ -557,14 +557,14 @@ export default {
this.form = response.data;
this.open = true;
this.title = "修改项目验收";
this.$api.publics
.selectProjectUnitUser({
projectId: response.data.projectId,
})
.then((d) => {
this.deptUserData = d.data;
});
});
this.$api.publics
.selectProjectUnitUser({
projectId: row.projectId,
})
.then((d) => {
this.deptUserData = d.data;
});
},
/** 提交按钮 */
submitForm() {

View File

@ -67,7 +67,11 @@
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="projectCheckingList">
<el-table
v-loading="loading"
:data="projectCheckingList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="验收图片" align="center" prop="mainImage" width="80">
<template slot-scope="scope">

View File

@ -16,14 +16,53 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="部门名称" prop="deptName">
<el-form-item label="单位名称" prop="deptName">
<el-input
v-model="queryParams.deptName"
placeholder="请输入部门名称"
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="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"
@ -40,29 +79,10 @@
@keyup.enter.native="handleQuery"
/>
</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="measurePointPosition">
<el-form-item label="质量专员" prop="qualityUser">
<el-input
v-model="queryParams.measurePointPosition"
placeholder="请输入测量点位"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="测量结果" prop="measureResult">
<el-input
v-model="queryParams.measureResult"
placeholder="请输入测量结果"
v-model="queryParams.qualityUser"
placeholder="请输入监理专员"
clearable
@keyup.enter.native="handleQuery"
/>
@ -75,14 +95,6 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="数据状态" prop="isDel">
<el-input
v-model="queryParams.isDel"
placeholder="请输入数据状态"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"
>搜索</el-button
@ -147,27 +159,65 @@
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="项目名称" align="center" prop="projectName" fixed="left" />
<el-table-column label="部门名称" align="center" prop="deptName" />
<el-table-column label="测量主图" align="center" prop="mainImage" width="100">
<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">
<image-preview :src="scope.row.mainImage" :width="50" :height="50" />
<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="imageUrls" width="100">
<el-table-column label="测量类型" align="center" prop="measureType">
<template slot-scope="scope">
<image-preview :src="scope.row.imageUrls" :width="50" :height="50" />
<dict-tag
:options="dict.type.project_measure_type"
:value="scope.row.measureType"
/>
</template>
</el-table-column>
<el-table-column label="测量类型" align="center" prop="measureType" />
<el-table-column label="测量部位" align="center" prop="measurePosition" />
<el-table-column label="测量内容" align="center" prop="measureInfo" />
<el-table-column label="测量时间" align="center" prop="measureTime" width="180">
<el-table-column
label="测量部位"
align="center"
prop="measurePosition"
width="140"
show-overflow-tooltip
/>
<el-table-column
label="测量内容"
align="center"
prop="measureInfo"
width="150"
show-overflow-tooltip
/>
<el-table-column label="测量时间" align="center" prop="measureTime" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.measureTime, "{y}-{m}-{d}") }}</span>
<span>{{ parseTime(scope.row.measureTime, "{y}-{m}-{d} {h}:{i}") }}</span>
</template>
</el-table-column>
<el-table-column label="测量点位" align="center" prop="measurePointPosition" />
<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
@ -176,20 +226,53 @@
/>
</template>
</el-table-column>
<el-table-column label="测量文件" align="center" prop="measureFiles" />
<el-table-column label="质量专员" align="center" prop="qualityUser" />
<el-table-column label="质量专员名称" align="center" prop="qualityUserName" />
<el-table-column label="监理专员" align="center" prop="superviseUser" />
<el-table-column label="监理专员名称" align="center" prop="superviseUserName" />
<el-table-column label="数据状态" align="center" prop="isDel" />
<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="remark" />
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
fixed="right"
width="130"
>
<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
size="mini"
type="text"
@ -219,19 +302,38 @@
/>
<!-- 添加或修改实测实量对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-dialog :title="title" :visible.sync="open" width="780px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="项目名称" prop="projectId">
<el-input v-model="form.projectId" placeholder="请输入项目名称" />
<el-form-item label="项目名称" prop="projectName">
<el-input
v-model="form.projectName"
placeholder="请输入项目名称"
:disabled="true"
/>
</el-form-item>
<el-form-item label="部门名称" prop="deptId">
<el-input v-model="form.deptId" placeholder="请输入部门名称" />
<el-form-item label="单位名称" prop="deptName">
<el-input
v-model="form.deptName"
placeholder="请输入单位名称"
:disabled="true"
/>
</el-form-item>
<el-form-item label="测量主图" prop="mainImage">
<image-upload v-model="form.mainImage" />
<el-form-item label="测量" prop="imageUrls">
<image-upload v-model="form.imageUrls" :limit="9" />
</el-form-item>
<el-form-item label="图片集合" prop="imageUrls">
<image-upload v-model="form.imageUrls" />
<el-form-item label="测量类型" prop="measureType">
<el-select
v-model="form.measureType"
placeholder="请选择测量类型"
style="width: 100%"
>
<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="measurePosition">
<el-input v-model="form.measurePosition" placeholder="请输入测量部位" />
@ -239,42 +341,80 @@
<el-form-item label="测量内容" prop="measureInfo">
<el-input v-model="form.measureInfo" 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 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="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"
type="datetime"
default-time="10:00:00"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择测量时间"
style="width: 100%"
>
</el-date-picker>
</el-form-item>
<el-form-item label="测量点位" prop="measurePointPosition">
<el-input v-model="form.measurePointPosition" placeholder="请输入测量点位" />
</el-form-item>
<el-form-item label="测量结果" prop="measureResult">
<el-input v-model="form.measureResult" placeholder="请输入测量结果" />
<el-radio
v-model="form.measureResult"
v-for="dict in dict.type.project_checking_result"
:label="dict.value"
:key="dict.value"
border
size="small"
>{{ dict.label }}</el-radio
>
</el-form-item>
<el-form-item label="测量文件" prop="measureFiles">
<file-upload v-model="form.measureFiles" />
</el-form-item>
<el-form-item label="质量专员" prop="qualityUser">
<el-input v-model="form.qualityUser" placeholder="请输入质量专员" />
</el-form-item>
<el-form-item label="质量专员名称" prop="qualityUserName">
<el-input v-model="form.qualityUserName" placeholder="请输入质量专员名称" />
</el-form-item>
<el-form-item label="监理专员" prop="superviseUser">
<el-input v-model="form.superviseUser" placeholder="请输入监理专员" />
</el-form-item>
<el-form-item label="监理专员名称" prop="superviseUserName">
<el-input v-model="form.superviseUserName" placeholder="请输入监理专员名称" />
</el-form-item>
<el-form-item label="数据状态" prop="isDel">
<el-input v-model="form.isDel" placeholder="请输入数据状态" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
<el-form-item label="测量附件" prop="measureFiles" v-if="false">
<file-upload v-model="form.measureFiles" :limit="1" @input="fileInput" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -282,6 +422,7 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<el-image-viewer v-if="showViewer" :on-close="closeViewer" :url-list="previewList" />
</div>
</template>
@ -293,11 +434,17 @@ import {
addProjectMeasure,
updateProjectMeasure,
} from "@/api/project/projectMeasure";
import ElImageViewer from "element-ui/packages/image/src/image-viewer";
export default {
name: "ProjectMeasure",
components: {
ElImageViewer,
},
dicts: ["project_measure_type", "project_checking_result", "sys_common_isdel"],
data() {
return {
showViewer: false,
//
loading: true,
//
@ -332,19 +479,66 @@ export default {
measureTime: null,
measurePointPosition: null,
measureResult: null,
qualityUser: null,
superviseUser: null,
isDel: null,
},
//
form: {},
//
rules: {},
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" },
{ max: 100, message: "测量内容最多100字符", 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: true, message: "请选择测量结果", trigger: "blur" }],
measureFiles: [{ required: false, message: "请上传测量附件", trigger: "blur" }],
},
deptUserData: [],
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;
},
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;
@ -369,7 +563,9 @@ export default {
this.form = {
id: null,
projectId: null,
projectName: null,
deptId: null,
deptName: null,
mainImage: null,
imageUrls: null,
measureType: null,
@ -424,6 +620,13 @@ export default {
this.open = true;
this.title = "修改实测实量";
});
this.$api.publics
.selectProjectUnitUser({
projectId: row.projectId,
})
.then((d) => {
this.deptUserData = d.data;
});
},
/** 提交按钮 */
submitForm() {
@ -469,6 +672,33 @@ export default {
`projectMeasure_${new Date().getTime()}.xlsx`
);
},
/** 选择质量专员*/
selectQualityUser(val) {
this.deptUserData.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);
});
},
},
};
</script>

View File

@ -0,0 +1,631 @@
<template>
<div class="projectect-attendance-drawer">
<el-drawer
v-if="isOpen"
:visible.sync="isOpen"
direction="rtl"
size="65%"
style="padding-left: 20px"
>
<template slot="title">
<div>{{ title + " 【实时测量管理】" }}</div>
</template>
<el-tabs
v-model="activeName"
style="margin-left: 20px; margin-right: 20px"
@tab-click="getList"
>
<el-tab-pane
v-for="(it, idx) in nodes"
:label="it.unitName + ''"
:name="it.unitId + ''"
:key="idx"
></el-tab-pane>
</el-tabs>
<el-row
:gutter="10"
class="mb8"
style="margin-left: 20px; margin-top: 10px; margin-right: 20px"
>
<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>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="projectMeasureList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="测量图片" align="center" prop="mainImage" width="80">
<template slot-scope="scope">
<el-image
ref="preview"
style="width: 50px; height: 50px"
: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="measurePosition"
width="120"
show-overflow-tooltip
/>
<el-table-column
label="测量内容"
align="center"
prop="measureInfo"
width="140"
show-overflow-tooltip
/>
<el-table-column label="测量时间" align="center" prop="measureTime" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.measureTime, "{y}-{m}-{d} {h}:{i}") }}</span>
</template>
</el-table-column>
<el-table-column
label="测量点位"
align="center"
prop="measurePointPosition"
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="center"
prop="qualityUser"
width="100"
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="100"
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"
class-name="small-padding fixed-width"
width="120"
>
<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
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['project:projectMeasure:edit']"
>修改</el-button
>
<el-button
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>
<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%"
>
<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="measurePosition">
<el-input v-model="form.measurePosition" placeholder="请输入测量部位" />
</el-form-item>
<el-form-item label="测量内容" prop="measureInfo">
<el-input v-model="form.measureInfo" 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 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="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="datetime"
default-time="10:00:00"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择测量时间"
style="width: 100%"
>
</el-date-picker>
</el-form-item>
<el-form-item label="测量结果" prop="measureResult">
<el-radio
v-model="form.measureResult"
v-for="dict in dict.type.project_checking_result"
:label="dict.value"
:key="dict.value"
border
size="small"
>{{ dict.label }}</el-radio
>
</el-form-item>
<el-form-item label="测量附件" prop="measureFiles" v-if="false">
<file-upload v-model="form.measureFiles" :limit="1" @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-drawer>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="previewList"
style="z-index: 2050"
/>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import {
listProjectMeasure,
getProjectMeasure,
delProjectMeasure,
addProjectMeasure,
updateProjectMeasure,
} from "@/api/project/projectMeasure";
import ElImageViewer from "element-ui/packages/image/src/image-viewer";
export default {
name: "RuoyiUiProjectDeptWroksDrawer",
components: {
ElImageViewer,
},
dicts: ["project_measure_type", "project_checking_result"],
data() {
return {
showViewer: false,
open: false,
isOpen: false,
project: null,
title: "",
isUnit: true,
nodes: [],
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" },
{ max: 100, message: "测量内容最多100字符", 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: true, message: "请选择测量结果", trigger: "blur" }],
measureFiles: [{ required: false, message: "请上传测量附件", trigger: "blur" }],
},
projectMeasureList: [],
activeName: "",
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
queryParams: {
pageNum: 1,
pageSize: 10,
projectId: null,
deptId: null,
},
deptUserData: [],
previewList: [],
};
},
computed: {
...mapGetters(["dept"]),
},
mounted() {},
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;
},
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;
},
doOk() {
updateProjectDeptWroks(this.form).then((response) => {
this.$modal.msgSuccess("保存成功");
this.isOpen = false;
});
},
doCanel() {
this.isOpen = false;
},
show(project) {
this.project = project;
this.title = project.projectName;
this.isOpen = true;
this.queryParams.projectId = project.id;
this.$api.publics
.queryUnitList({
projectId: project.id,
unitTypes: "2,4".split(","),
})
.then((d) => {
this.nodes = d.rows;
if (d.rows.length > 0) {
this.activeName = this.nodes[0].unitId + "";
this.isUnit = true;
this.getList();
} else {
this.projectMeasureList = [];
this.$message.error("当前项目未分配总包单位,不能办理举牌测量!");
this.isUnit = false;
}
});
this.$api.publics
.selectProjectUnitUser({
projectId: project.id,
})
.then((d) => {
this.deptUserData = d.data;
});
},
//
getList() {
this.queryParams.deptId = this.activeName;
this.loading = true;
listProjectMeasure(this.queryParams).then((response) => {
this.projectMeasureList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
projectId: null,
deptId: null,
insuranceType: null,
insuranceNumber: null,
insuranceFile: null,
insuranceState: null,
beginDate: null,
endDate: null,
companyName: 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.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
if (this.nodes.length > 0) {
this.reset();
this.form.projectId = this.project.id;
this.form.projectName = this.project.projectName;
this.form.deptId = this.activeName;
this.nodes.forEach((item) => {
if (item.unitId == this.activeName) {
this.form.deptName = item.unitName;
}
});
this.open = true;
this.title = "添加项目举牌测量";
} else {
this.$message.error("当前项目未分配总包单位,不能办理举牌测量!");
}
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids;
getProjectMeasure(id).then((response) => {
this.form = response.data;
this.form.projectName = this.project.projectName;
this.nodes.forEach((item) => {
if (item.unitId == this.activeName) {
this.form.deptName = item.unitName;
}
});
this.open = true;
this.title = "修改项目举牌测量";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id != null) {
updateProjectMeasure(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addProjectMeasure(this.form).then((response) => {
if (response.code == 200) {
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.deptUserData.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);
});
},
},
};
</script>
<style lang="scss" scoped></style>

View File

@ -369,6 +369,8 @@
'work:emergencyDrill:list',
'project:surProjectInsurance:list',
'project:surProjectSpecial:list',
'project:projectMeasure:list',
'project:materialSeal:list',
'project:projectDeptWroks:list',
'project:surProjectAttendance:add',
'project:surProject:remove',
@ -420,6 +422,18 @@
v-hasPermi="['project:surProjectSpecial:list']"
>项目特种人员</el-dropdown-item
>
<el-dropdown-item
command="handleProjectMeasure"
icon="el-icon-s-operation"
v-hasPermi="['project:projectMeasure:list']"
>实时测量管理</el-dropdown-item
>
<el-dropdown-item
command="handleProjectMaterialSeal"
icon="el-icon-s-ticket"
v-hasPermi="['project:materialSeal:list']"
>材料封样管理</el-dropdown-item
>
<el-dropdown-item
command="handleProjectDeptWroks"
icon="el-icon-s-custom"
@ -432,7 +446,6 @@
v-hasPermi="['project:surProjectAttendance:add']"
>今日出勤</el-dropdown-item
>
<el-dropdown-item
command="handleDelete"
icon="el-icon-delete"
@ -764,6 +777,8 @@
<projectDeptWroksDrawer ref="deptWroksDrawer"></projectDeptWroksDrawer>
<insuranceDrawer ref="insurance"></insuranceDrawer>
<projectCheckingDrawer ref="projectChecking"></projectCheckingDrawer>
<materialSealDrawer ref="materialSeal"></materialSealDrawer>
<projectMeasureDrawer ref="projectMeasure"></projectMeasureDrawer>
</div>
</template>
@ -789,6 +804,8 @@ import attendanceDrawer from "../surProjectAttendance/attendanceDrawer.vue";
import projectDeptWroksDrawer from "../projectDeptWroks/projectDeptWroksDrawer.vue";
import insuranceDrawer from "../surProjectInsurance/insuranceDrawer.vue";
import projectCheckingDrawer from "../projectChecking/projectCheckingDrawer.vue";
import materialSealDrawer from "../materialSeal/projectMaterialSealDrawer.vue";
import projectMeasureDrawer from "../projectMeasure/projectMeasureDrawer.vue";
import { checkPermi, checkRole } from "@/utils/permission"; //
export default {
@ -806,6 +823,8 @@ export default {
projectDeptWroksDrawer,
insuranceDrawer,
projectCheckingDrawer,
materialSealDrawer,
projectMeasureDrawer,
},
dicts: [
"sys_check_state",
@ -1046,6 +1065,12 @@ export default {
case "handleProjectChecking":
this.$refs.projectChecking.show(row);
break;
case "handleProjectMeasure":
this.$refs.projectMeasure.show(row);
break;
case "handleProjectMaterialSeal":
this.$refs.materialSeal.show(row);
break;
default:
break;
}

View File

@ -39,7 +39,11 @@
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="surProjectInsuranceList">
<el-table
v-loading="loading"
:data="surProjectInsuranceList"
@selection-change="handleSelectionChange"
>
<el-table-column label="保险类型" align="center" prop="insuranceTypeName" />
<el-table-column label="保险状态" align="center" prop="insuranceState">
<template slot-scope="scope">

View File

@ -1,71 +1,123 @@
<template>
<div class="app-container">
<el-drawer v-bind="$attrs" v-if="onOpen" v-on="$listeners" @opened="onOpen" @close="onClose" style="padding-left: 20px;">
<el-row :gutter="10" class="mb8" style="margin-left: 25px; margin-top:10px;margin-right:0px;">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['project:surProjectUserInfo:add']"
>添加</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:surProjectUserInfo:remove']"
>删除</el-button>
<div class="app-container">
<el-drawer
v-bind="$attrs"
v-if="onOpen"
v-on="$listeners"
@opened="onOpen"
@close="onClose"
style="padding-left: 20px"
>
<el-row
:gutter="10"
class="mb8"
style="margin-left: 25px; margin-top: 10px; margin-right: 0px"
>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['project:surProjectUserInfo:add']"
>添加</el-button
>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="surProjectUserInfoList" @selection-change="handleSelectionChange">
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['project:surProjectUserInfo:remove']"
>删除</el-button
>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="surProjectUserInfoList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="单位名称" prop="deptName" align="left" show-overflow-tooltip/>
<el-table-column
label="单位名称"
prop="deptName"
align="left"
show-overflow-tooltip
/>
<el-table-column label="单位类型" align="center" prop="deptType">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_dept_type" :value="scope.row.deptType"/>
</template>
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_dept_type" :value="scope.row.deptType" />
</template>
</el-table-column>
<el-table-column label="职务类型" align="center" prop="jobType">
<template slot-scope="scope">
<el-select v-model="scope.row.jobType" placeholder="请选择职务类型" @change="changeJobType(scope.row,$event)">
<el-option
v-for="item in dict.type.sys_job_type"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
<template slot-scope="scope">
<el-select
v-model="scope.row.jobType"
placeholder="请选择职务类型"
@change="changeJobType(scope.row, $event)"
>
<el-option
v-for="item in dict.type.sys_job_type"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="人员名称" align="center" prop="nickName" />
<el-table-column label="联系电话" align="center" prop="phonenumber" />
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog :title="title" v-if="open" :visible.sync="open" width="680px" append-to-body :close-on-click-modal="false" :close-on-press-escape="false">
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog
:title="title"
v-if="open"
:visible.sync="open"
width="680px"
append-to-body
:close-on-click-modal="false"
:close-on-press-escape="false"
>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-form-item label="项目名称">
<el-input placeholder="请输入项目名称" v-model="form.projectName" :disabled="true"></el-input>
<el-input
placeholder="请输入项目名称"
v-model="form.projectName"
:disabled="true"
></el-input>
</el-form-item>
<el-form-item label="所属单位" prop="deptId">
<treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择所属单位" @select="deptChange"/>
<treeselect
v-model="form.deptId"
:options="deptOptions"
:show-count="true"
placeholder="请选择所属单位"
@select="deptChange"
/>
</el-form-item>
<el-form-item label="职务类型" prop="jobType">
<el-select v-model="form.jobType" filterable placeholder="请选择职务类型" style="width: 100%;">
<el-select
v-model="form.jobType"
filterable
placeholder="请选择职务类型"
style="width: 100%"
>
<el-option
v-for="dict in dict.type.sys_job_type"
:key="dict.value"
@ -75,12 +127,20 @@
</el-select>
</el-form-item>
<el-form-item label="项目人员" prop="userIds">
<el-select v-model="form.userIds" filterable multiple clearable placeholder="请选择项目人员" style="width: 100%;">
<el-select
v-model="form.userIds"
filterable
multiple
clearable
placeholder="请选择项目人员"
style="width: 100%"
>
<el-option
v-for="item in userOptions"
:key="item.userId"
:label="item.nickName"
:value="item.userId">
:value="item.userId"
>
</el-option>
</el-select>
</el-form-item>
@ -93,112 +153,106 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</el-drawer>
</div>
</template>
</el-drawer>
</div>
</template>
<script>
import { listSurProjectUserInfo, delSurProjectUserInfo, addSurProjectUserInfo, updateSurProjectUserInfo, findUserByDeptId } from "@/api/project/surProjectUserInfo";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
<script>
import {
listSurProjectUserInfo,
delSurProjectUserInfo,
addSurProjectUserInfo,
updateSurProjectUserInfo,
findUserByDeptId,
} from "@/api/project/surProjectUserInfo";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
components: {Treeselect},
props: {
formData: {
projectId: String,
projectName: String
}
export default {
components: { Treeselect },
props: {
formData: {
projectId: String,
projectName: String,
},
dicts: ['sys_dept_type','sys_job_type'],
data() {
return {
//
loading: true,
//
ids: [],
//
total: 0,
//
surProjectUserInfoList: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
open: false,
//
title: "",
userIds: [],
userOptions: [],
//
deptOptions: [],
//
deptName: null,
//
queryParams: {
pageNum: 1,
pageSize: 20,
projectId: null
},
//
form: {},
//
rules: {
deptId: [
{ required: true, message: "请选择所属单位", trigger: "blur" }
],
jobType: [
{ required: true, message: "请选择职务类型", trigger: "blur" }
],
userIds: [
{ required: true, message: "请选择项目人员", trigger: "blur" }
]
}
},
dicts: ["sys_dept_type", "sys_job_type"],
data() {
return {
//
loading: true,
//
ids: [],
//
total: 0,
//
surProjectUserInfoList: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
open: false,
//
title: "",
userIds: [],
userOptions: [],
//
deptOptions: [],
//
deptName: null,
//
queryParams: {
pageNum: 1,
pageSize: 20,
projectId: null,
},
//
form: {},
//
rules: {
deptId: [{ required: true, message: "请选择所属单位", trigger: "blur" }],
jobType: [{ required: true, message: "请选择职务类型", trigger: "blur" }],
userIds: [{ required: true, message: "请选择项目人员", trigger: "blur" }],
},
};
},
computed: {},
watch: {
formData: {
handler(value) {
this.formData = value;
},
immediate: true,
},
},
created() {},
mounted() {},
beforeDestroy() {},
methods: {
onOpen() {
this.getList();
},
onClose() {},
/** 查询项目人员列表 */
getList() {
if (this.formData.projectId) {
this.loading = true;
this.queryParams.projectId = this.formData.projectId;
listSurProjectUserInfo(this.queryParams).then((response) => {
this.surProjectUserInfoList = response.rows;
this.total = response.total;
this.loading = false;
});
}
},
computed: {},
watch: {
formData: {
handler(value) {
this.formData = value
},
immediate: true
}
},
created() {
},
mounted() {
},
beforeDestroy() {
},
methods: {
onOpen() {
this.getList();
},
onClose() {},
/** 查询项目人员列表 */
getList() {
if(this.formData.projectId){
this.loading = true;
this.queryParams.projectId = this.formData.projectId;
listSurProjectUserInfo(this.queryParams).then(response => {
this.surProjectUserInfoList = response.rows;
this.total = response.total;
this.loading = false;
});
}
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
//
reset() {
@ -215,18 +269,18 @@
createTime: null,
updateBy: null,
updateTime: null,
remark: null
remark: null,
};
this.userIds= [];
this.userOptions=[];
this.userIds = [];
this.userOptions = [];
this.resetForm("form");
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.getDeptTree();
this.form.projectId=this.formData.projectId;
this.form.projectName=this.formData.projectName;
this.form.projectId = this.formData.projectId;
this.form.projectName = this.formData.projectName;
this.open = true;
this.title = "添加项目人员";
},
@ -238,16 +292,16 @@
//
getDeptTree() {
//
this.$api.publics.getDeptTree().then(response => {
this.$api.publics.getDeptTree().then((response) => {
this.deptOptions = response.data;
})
});
},
//
deptChange(note){
this.userIds=[];
this.userOptions=[];
this.form.userIds=[];
if(note&&note.id){
deptChange(note) {
this.userIds = [];
this.userOptions = [];
this.form.userIds = [];
if (note && note.id) {
this.form.deptId = note.id;
this.getUserList(note.id);
}
@ -256,27 +310,27 @@
getUserList(id) {
this.loading = true;
let param = {
id:this.form.projectId,
deptId: this.form.deptId
}
id: this.form.projectId,
deptId: this.form.deptId,
};
//
findUserByDeptId(param).then(response => {
findUserByDeptId(param).then((response) => {
this.loading = false;
this.userOptions = response.rows
})
this.userOptions = response.rows;
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id != null) {
updateSurProjectUserInfo(this.form).then(response => {
updateSurProjectUserInfo(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addSurProjectUserInfo(this.form).then(response => {
addSurProjectUserInfo(this.form).then((response) => {
this.$modal.msgSuccess("添加成功");
this.open = false;
this.getList();
@ -286,36 +340,40 @@
});
},
//
changeJobType(row,val){
changeJobType(row, val) {
this.form.id = row.id;
this.form.jobType = val;
updateSurProjectUserInfo(this.form).then(response => {
updateSurProjectUserInfo(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.getList();
});
},
/** 删除按钮操作 */
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除项目人员编号为"' + ids + '"的数据项?').then(function() {
return delSurProjectUserInfo(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
this.$modal
.confirm('是否确认删除项目人员编号为"' + ids + '"的数据项?')
.then(function () {
return delSurProjectUserInfo(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
}
}
</script>
<style lang="scss" scoped>
@import '@/styles/mixin.scss';
},
};
</script>
<style lang="scss" scoped>
@import "@/styles/mixin.scss";
::v-deep .el-drawer__header {
display: none;
}
@include action-bar;
::v-deep .el-drawer__header {
display: none;
}
@include action-bar;
.json-editor{
height: calc(100vh - 33px);
}
.json-editor {
height: calc(100vh - 33px);
}
</style>

View File

@ -61,7 +61,7 @@ spring:
servlet:
multipart:
# 单个文件大小
max-file-size: 500MB
max-file-size: 100MB
# 设置总上传的文件大小
max-request-size: 500MB
# 服务模块

View File

@ -34,7 +34,7 @@ public class SurProjectMaterialSeal extends BaseEntity
/** 图片集合 */
@Excel(name = "图片集合")
private String imgUrls;
private String imageUrls;
/** 封样名称 */
@Excel(name = "封样名称")
@ -108,14 +108,14 @@ public class SurProjectMaterialSeal extends BaseEntity
{
return mainImage;
}
public void setImgUrls(String imgUrls)
public void setImageUrls(String imageUrls)
{
this.imgUrls = imgUrls;
this.imageUrls = imageUrls;
}
public String getImgUrls()
public String getImageUrls()
{
return imgUrls;
return imageUrls;
}
public void setMaterialName(String materialName)
{
@ -213,7 +213,7 @@ public class SurProjectMaterialSeal extends BaseEntity
.append("projectId", getProjectId())
.append("deptId", getDeptId())
.append("mainImage", getMainImage())
.append("imgUrls", getImgUrls())
.append("imageUrls", getImageUrls())
.append("materialName", getMaterialName())
.append("usePosition", getUsePosition())
.append("contractBrand", getContractBrand())

View File

@ -55,6 +55,8 @@ public class SurProjectUnitInfo extends BaseEntity
/** 删除状态0 未删除 1 已删除) */
private Long delFlag;
private List<Long> unitTypes;
private String unitTypeName;
private List<SurProjectUserinfo> userinfoList;
@ -172,6 +174,14 @@ public class SurProjectUnitInfo extends BaseEntity
this.userinfoList = userinfoList;
}
public List<Long> getUnitTypes() {
return unitTypes;
}
public void setUnitTypes(List<Long> unitTypes) {
this.unitTypes = unitTypes;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -1,6 +1,8 @@
package com.yanzhu.jh.project.service.impl;
import java.util.List;
import com.ruoyi.common.enums.PublicStateEnum;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -53,6 +55,8 @@ public class SurProjectMaterialSealServiceImpl implements ISurProjectMaterialSea
@Override
public int insertSurProjectMaterialSeal(SurProjectMaterialSeal surProjectMaterialSeal)
{
surProjectMaterialSeal.setIsDel(PublicStateEnum.OK.getCode());
surProjectMaterialSeal.setMainImage(surProjectMaterialSeal.getImageUrls().split(",")[0]);
surProjectMaterialSeal.setCreateBy(SecurityUtils.getUsername());
surProjectMaterialSeal.setCreateTime(DateUtils.getNowDate());
return surProjectMaterialSealMapper.insertSurProjectMaterialSeal(surProjectMaterialSeal);
@ -67,6 +71,7 @@ public class SurProjectMaterialSealServiceImpl implements ISurProjectMaterialSea
@Override
public int updateSurProjectMaterialSeal(SurProjectMaterialSeal surProjectMaterialSeal)
{
surProjectMaterialSeal.setMainImage(surProjectMaterialSeal.getImageUrls().split(",")[0]);
surProjectMaterialSeal.setUpdateBy(SecurityUtils.getUsername());
surProjectMaterialSeal.setUpdateTime(DateUtils.getNowDate());
return surProjectMaterialSealMapper.updateSurProjectMaterialSeal(surProjectMaterialSeal);

View File

@ -1,6 +1,8 @@
package com.yanzhu.jh.project.service.impl;
import java.util.List;
import com.ruoyi.common.enums.PublicStateEnum;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -53,6 +55,8 @@ public class SurProjectMeasureServiceImpl implements ISurProjectMeasureService
@Override
public int insertSurProjectMeasure(SurProjectMeasure surProjectMeasure)
{
surProjectMeasure.setMainImage(surProjectMeasure.getImageUrls().split(",")[0]);
surProjectMeasure.setIsDel(PublicStateEnum.OK.getCode());
surProjectMeasure.setCreateBy(SecurityUtils.getUsername());
surProjectMeasure.setCreateTime(DateUtils.getNowDate());
return surProjectMeasureMapper.insertSurProjectMeasure(surProjectMeasure);
@ -67,6 +71,7 @@ public class SurProjectMeasureServiceImpl implements ISurProjectMeasureService
@Override
public int updateSurProjectMeasure(SurProjectMeasure surProjectMeasure)
{
surProjectMeasure.setMainImage(surProjectMeasure.getImageUrls().split(",")[0]);
surProjectMeasure.setUpdateBy(SecurityUtils.getUsername());
surProjectMeasure.setUpdateTime(DateUtils.getNowDate());
return surProjectMeasureMapper.updateSurProjectMeasure(surProjectMeasure);

View File

@ -11,7 +11,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="deptId" column="dept_id" />
<result property="deptName" column="dept_name" />
<result property="mainImage" column="main_image" />
<result property="imgUrls" column="img_urls" />
<result property="imageUrls" column="image_urls" />
<result property="materialName" column="material_name" />
<result property="usePosition" column="use_position" />
<result property="contractBrand" column="contract_brand" />
@ -28,7 +28,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectSurProjectMaterialSealVo">
select spme.id, spme.project_id, spme.dept_id, spme.main_image, spme.img_urls, spme.material_name, spme.use_position, spme.contract_brand, spme.use_brand, spme.seal_date, spme.sign_files, spme.alteration_files, spme.is_del, spme.create_by, spme.create_time, spme.update_by, spme.update_time, spme.remark, sp.projectName, sd.dept_name from sur_project_material_seal spme
select spme.id, spme.project_id, spme.dept_id, spme.main_image, spme.image_urls, spme.material_name, spme.use_position, spme.contract_brand, spme.use_brand, spme.seal_date, spme.sign_files, spme.alteration_files, spme.is_del, spme.create_by, spme.create_time, spme.update_by, spme.update_time, spme.remark, sp.projectName, sd.dept_name from sur_project_material_seal spme
left join sur_project sp on spme.project_id = sp.id
left join sys_dept sd on sd.dept_id = spme.dept_id
</sql>
@ -43,7 +43,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and spme.is_del='0'
<if test="projectId != null "> and spme.project_id = #{projectId}</if>
<if test="deptId != null "> and spme.dept_id = #{deptId}</if>
<if test="imgUrls != null and imgUrls != ''"> and spme.img_urls = #{imgUrls}</if>
<if test="imageUrls != null and imageUrls != ''"> and spme.image_urls = #{imageUrls}</if>
<if test="materialName != null and materialName != ''"> and spme.material_name like concat('%', #{materialName}, '%')</if>
<if test="usePosition != null and usePosition != ''"> and spme.use_position like concat('%', #{usePosition}, '%')</if>
<if test="contractBrand != null and contractBrand != ''"> and spme.contract_brand like concat('%', #{contractBrand}, '%')</if>
@ -63,7 +63,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectSurProjectMaterialSealById" parameterType="Long" resultMap="SurProjectMaterialSealResult">
<include refid="selectSurProjectMaterialSealVo"/>
where id = #{id}
where spme.id = #{id}
</select>
<insert id="insertSurProjectMaterialSeal" parameterType="SurProjectMaterialSeal" useGeneratedKeys="true" keyProperty="id">
@ -72,7 +72,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="projectId != null">project_id,</if>
<if test="deptId != null">dept_id,</if>
<if test="mainImage != null">main_image,</if>
<if test="imgUrls != null">img_urls,</if>
<if test="imageUrls != null">image_urls,</if>
<if test="materialName != null">material_name,</if>
<if test="usePosition != null">use_position,</if>
<if test="contractBrand != null">contract_brand,</if>
@ -91,7 +91,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="projectId != null">#{projectId},</if>
<if test="deptId != null">#{deptId},</if>
<if test="mainImage != null">#{mainImage},</if>
<if test="imgUrls != null">#{imgUrls},</if>
<if test="imageUrls != null">#{imageUrls},</if>
<if test="materialName != null">#{materialName},</if>
<if test="usePosition != null">#{usePosition},</if>
<if test="contractBrand != null">#{contractBrand},</if>
@ -114,7 +114,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="projectId != null">project_id = #{projectId},</if>
<if test="deptId != null">dept_id = #{deptId},</if>
<if test="mainImage != null">main_image = #{mainImage},</if>
<if test="imgUrls != null">img_urls = #{imgUrls},</if>
<if test="imageUrls != null">image_urls = #{imageUrls},</if>
<if test="materialName != null">material_name = #{materialName},</if>
<if test="usePosition != null">use_position = #{usePosition},</if>
<if test="contractBrand != null">contract_brand = #{contractBrand},</if>

View File

@ -32,7 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectSurProjectMeasureVo">
select spm.id, spm.project_id, spm.dept_id, spm.main_image, spm.image_urls, spm.measure_type, spm.measure_position, spm.measure_info, spm.measure_time, spm.measure_point_position, spm.measure_result, spm.measure_files, spm.quality_user, spm.quality_user_name, spm.supervise_user, spm.supervise_user_name, spm.is_del, spm.create_by, spm.create_time, spm.update_by, spm.update_time, spm.remark, sp.prijectName, sd.dept_name from sur_project_measure spm
select spm.id, spm.project_id, spm.dept_id, spm.main_image, spm.image_urls, spm.measure_type, spm.measure_position, spm.measure_info, spm.measure_time, spm.measure_point_position, spm.measure_result, spm.measure_files, spm.quality_user, spm.quality_user_name, spm.supervise_user, spm.supervise_user_name, spm.is_del, spm.create_by, spm.create_time, spm.update_by, spm.update_time, spm.remark, sp.projectName, sd.dept_name from sur_project_measure spm
left join sur_project sp on spm.project_id = sp.id
left join sys_dept sd on sd.dept_id = spm.dept_id
</sql>

View File

@ -38,6 +38,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createUser != null and createUser != ''"> and spui.createUser = #{createUser}</if>
<if test="createTime != null "> and spui.createTime = #{createTime}</if>
<if test="nowDept != null and nowDept != ''"> and spui.unitId != #{nowDept}</if>
<if test="unitTypes != null ">
and spui.unitType in
<foreach item="type" collection="unitTypes" open="(" separator="," close=")">
#{type}
</foreach>
</if>
</where>
</select>