提交代码

dev_xds
姜玉琦 2024-03-24 20:09:06 +08:00
parent 668912e91c
commit 77c2a74c25
14 changed files with 740 additions and 487 deletions

View File

@ -63,7 +63,6 @@
"vue": "2.6.12", "vue": "2.6.12",
"vue-count-to": "1.0.13", "vue-count-to": "1.0.13",
"vue-cropper": "0.5.5", "vue-cropper": "0.5.5",
"vue-h265-player": "^0.0.24",
"vue-meta": "2.4.0", "vue-meta": "2.4.0",
"vue-router": "3.4.9", "vue-router": "3.4.9",
"vuedraggable": "2.24.3", "vuedraggable": "2.24.3",

File diff suppressed because one or more lines are too long

View File

@ -6,6 +6,7 @@
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> <link rel="icon" href="<%= BASE_URL %>favicon.ico">
<script src="./easyplayer/EasyWasmPlayer.js"></script>
<script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=6zAD8CIavtzWnkGg0a7roush5maGMIPn"></script> <script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=6zAD8CIavtzWnkGg0a7roush5maGMIPn"></script>
<title><%= webpackConfig.name %></title> <title><%= webpackConfig.name %></title>
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]--> <!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->

View File

@ -423,7 +423,7 @@ export default {
}, },
handledownload(url) { handledownload(url) {
let fileType = url.split("."); let fileType = url.split(".");
if (fileTypes.indexOf(fileType) > -1) { if (this.fileTypes.indexOf(fileType[fileType.length-1].toLocaleLowerCase())>-1) {
window.open(process.env.VUE_APP_BASE_API + url); window.open(process.env.VUE_APP_BASE_API + url);
} else { } else {
this.$download.resource(url); this.$download.resource(url);

View File

@ -619,7 +619,7 @@ export default {
}, },
handledownload(url) { handledownload(url) {
let fileType = url.split("."); let fileType = url.split(".");
if(fileTypes.indexOf(fileType)>-1){ if(this.fileTypes.indexOf(fileType[fileType.length-1].toLocaleLowerCase())>-1){
window.open(process.env.VUE_APP_BASE_API+url); window.open(process.env.VUE_APP_BASE_API+url);
}else{ }else{
this.$download.resource(url); this.$download.resource(url);

View File

@ -52,6 +52,14 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="提交人" prop="createBy">
<el-input
v-model="queryParams.createBy"
placeholder="请输入提交人姓名/联系方式"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="提交时间"> <el-form-item label="提交时间">
<el-date-picker <el-date-picker
v-model="daterangeMarksTime" v-model="daterangeMarksTime"
@ -472,6 +480,7 @@ export default {
checkUserPhone: null, checkUserPhone: null,
isDel: null, isDel: null,
dangerType: null, dangerType: null,
createBy:null,
createUser: null, createUser: null,
createTime: null, createTime: null,
updateUser: null, updateUser: null,

View File

@ -1,6 +1,13 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="所属项目" prop="projectId" v-if="showPro"> <el-form-item label="所属项目" prop="projectId" v-if="showPro">
<el-select <el-select
v-model="queryParams.projectId" v-model="queryParams.projectId"
@ -17,7 +24,11 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="责任主体" prop="projectDeptId" v-hasPermi="['project:project:zgs']"> <el-form-item
label="责任主体"
prop="projectDeptId"
v-hasPermi="['project:project:zgs']"
>
<el-select v-model="queryParams.deptId" placeholder="请选择责任主体" clearable> <el-select v-model="queryParams.deptId" placeholder="请选择责任主体" clearable>
<el-option <el-option
v-for="dict in projectDeptOptions" v-for="dict in projectDeptOptions"
@ -27,7 +38,11 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="问题分类" prop="projectDeptId" v-hasPermi="['project:project:zgs']"> <el-form-item
label="问题分类"
prop="projectDeptId"
v-hasPermi="['project:project:zgs']"
>
<el-select v-model="queryParams.roleTypes" placeholder="请选择问题分类" clearable> <el-select v-model="queryParams.roleTypes" placeholder="请选择问题分类" clearable>
<el-option <el-option
v-for="dict in roleTypeOpts" v-for="dict in roleTypeOpts"
@ -46,7 +61,9 @@
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <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-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -60,7 +77,8 @@
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']" v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']"
>新增</el-button> >新增</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -71,7 +89,8 @@
@click="dataSynchronization" @click="dataSynchronization"
:disabled="single" :disabled="single"
v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']" v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']"
>数据同步</el-button> >数据同步</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-tooltip content="Top center" placement="批量提交选择的数据!"> <el-tooltip content="Top center" placement="批量提交选择的数据!">
@ -83,35 +102,47 @@
@click="batchSubmitForm" @click="batchSubmitForm"
:disabled="multiple" :disabled="multiple"
v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']" v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']"
>批量提交</el-button> >批量提交</el-button
>
</el-tooltip> </el-tooltip>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-alert title="操作说明" class="tips"> <el-alert title="操作说明" class="tips">
<template slot='title'> <template slot="title">
<div><strong>数据同步:</strong>将选中行的数据同步到当前项目的其它行</div> <div><strong>数据同步:</strong>将选中行的数据同步到当前项目的其它行</div>
<div><strong>批量提交:</strong>将选中行的数据数据验证通过后一次全部提交</div> <div><strong>批量提交:</strong>将选中行的数据数据验证通过后一次全部提交</div>
</template> </template>
</el-alert> </el-alert>
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-table v-loading="loading" :data="smzSspProblemmodifyDraftList" :row-class-name="rowIndex" @selection-change="handleSelectionChange"> <el-table
<el-table-column type="selection" width="50" align="center"/> v-loading="loading"
<el-table-column label="序号" align="center" prop="index" width="50"/> :data="smzSspProblemmodifyDraftList"
<el-table-column label="问题图片" header-align="center" align="left" prop="smarkUrl" width="240"> :row-class-name="rowIndex"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="序号" align="center" prop="index" width="50" />
<el-table-column
label="问题图片"
header-align="center"
align="left"
prop="smarkUrl"
width="240"
>
<template slot-scope="scope"> <template slot-scope="scope">
<image-upload v-model="scope.row.smarkUrl" :limit="9" :isShowTip="false" /> <image-upload v-model="scope.row.smarkUrl" :limit="9" :isShowTip="false" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="所属项目" align="center" prop="problemArea" width="180"> <el-table-column label="所属项目" align="center" prop="problemArea" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.id!=null">{{scope.row.problemArea}}</div> <div v-if="scope.row.id != null">{{ scope.row.problemArea }}</div>
<el-select <el-select
v-if="scope.row.id==null" v-if="scope.row.id == null"
v-model="scope.row.projectId" v-model="scope.row.projectId"
placeholder="请选择所属项目" placeholder="请选择所属项目"
filterable filterable
@change="changeProject($event,scope.row)" @change="changeProject($event, scope.row)"
> >
<el-option <el-option
v-for="(item, index) in projectOptions" v-for="(item, index) in projectOptions"
@ -126,7 +157,7 @@
<el-table-column label="隐患类型" align="center" prop="dangerType" width="170"> <el-table-column label="隐患类型" align="center" prop="dangerType" width="170">
<template slot-scope="scope"> <template slot-scope="scope">
<el-select <el-select
v-if="scope.row.infoType==1" v-if="scope.row.infoType == 1"
v-model="scope.row.dangerType" v-model="scope.row.dangerType"
placeholder="请选择隐患类型" placeholder="请选择隐患类型"
> >
@ -138,7 +169,7 @@
></el-option> ></el-option>
</el-select> </el-select>
<el-select <el-select
v-if="scope.row.infoType==0" v-if="scope.row.infoType == 0"
v-model="scope.row.dangerType" v-model="scope.row.dangerType"
placeholder="请选择隐患类型" placeholder="请选择隐患类型"
> >
@ -153,24 +184,34 @@
</el-table-column> </el-table-column>
<el-table-column label="施工部位" align="center" prop="workParts" width="180"> <el-table-column label="施工部位" align="center" prop="workParts" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<el-input v-model="scope.row.workParts" placeholder="请输入施工部位" type="textarea" :rows="3"/> <el-input
v-model="scope.row.workParts"
placeholder="请输入施工部位"
type="textarea"
:rows="3"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="整改要求" align="center" prop="changeInfo" width="180"> <el-table-column label="整改要求" align="center" prop="changeInfo" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<el-input v-model="scope.row.changeInfo" placeholder="请输入整改要求" type="textarea" :rows="3"/> <el-input
v-model="scope.row.changeInfo"
placeholder="请输入整改要求"
type="textarea"
:rows="3"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="问题人员" align="center" prop="lordSentUser" width="260"> <el-table-column label="问题人员" align="center" prop="lordSentUser" width="260">
<template slot-scope="scope"> <template slot-scope="scope">
<el-row style="line-height: 36px;margin-bottom: 5px;"> <el-row style="line-height: 36px; margin-bottom: 5px">
<el-col :span="6">整改人</el-col> <el-col :span="6">整改人</el-col>
<el-col :span="18"> <el-col :span="18">
<el-select <el-select
v-model="scope.row.lordSentUser" v-model="scope.row.lordSentUser"
placeholder="请选择整改人" placeholder="请选择整改人"
style="width: 100%" style="width: 100%"
@change="selectLordSentUser($event,scope.row)" @change="selectLordSentUser($event, scope.row)"
> >
<el-option-group <el-option-group
v-for="group in findProjectAllUnitUser(scope.row.projectId)" v-for="group in findProjectAllUnitUser(scope.row.projectId)"
@ -188,14 +229,14 @@
</el-select> </el-select>
</el-col> </el-col>
</el-row> </el-row>
<el-row style="line-height: 36px;margin-bottom: 5px;"> <el-row style="line-height: 36px; margin-bottom: 5px">
<el-col :span="6">抄送人</el-col> <el-col :span="6">抄送人</el-col>
<el-col :span="18"> <el-col :span="18">
<el-select <el-select
v-model="scope.row.copySendUser" v-model="scope.row.copySendUser"
placeholder="请选择整改人" placeholder="请选择整改人"
style="width: 100%" style="width: 100%"
@change="selectCopySendUser($event,scope.row)" @change="selectCopySendUser($event, scope.row)"
> >
<el-option-group <el-option-group
v-for="group in findProjectAllUnitUser(scope.row.projectId)" v-for="group in findProjectAllUnitUser(scope.row.projectId)"
@ -213,14 +254,14 @@
</el-select> </el-select>
</el-col> </el-col>
</el-row> </el-row>
<el-row style="line-height: 36px;margin-bottom: 5px;"> <el-row style="line-height: 36px; margin-bottom: 5px">
<el-col :span="6">复检人</el-col> <el-col :span="6">复检人</el-col>
<el-col :span="18"> <el-col :span="18">
<el-select <el-select
v-model="scope.row.recheckSendUser" v-model="scope.row.recheckSendUser"
placeholder="请选择整改人" placeholder="请选择整改人"
style="width: 100%" style="width: 100%"
@change="selectRecheckSendUser($event,scope.row)" @change="selectRecheckSendUser($event, scope.row)"
> >
<el-option-group <el-option-group
v-for="group in findProjectAllUnitUser(scope.row.projectId)" v-for="group in findProjectAllUnitUser(scope.row.projectId)"
@ -240,25 +281,43 @@
</el-row> </el-row>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="整改截至时间" align="center" prop="nickedTime" width="180"> <el-table-column
label="整改截至时间"
align="center"
prop="nickedTime"
width="180"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-date-picker <el-date-picker
v-model="scope.row.nickedTime" v-model="scope.row.nickedTime"
type="date" type="date"
value-format="yyyy-MM-dd HH:ss" value-format="yyyy-MM-dd HH:ss"
placeholder="选择截至时间" style="width:160px;"> placeholder="选择截至时间"
style="width: 160px"
>
</el-date-picker> </el-date-picker>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="草稿信息" align="left" prop="createUser" width="180"> <el-table-column label="草稿信息" align="left" prop="createUser" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<div><i class="el-icon-user"></i>{{scope.row.createUserName}}</div> <div><i class="el-icon-user"></i>{{ scope.row.createUserName }}</div>
<div><i class="el-icon-phone-outline"></i>{{scope.row.createUser}}</div> <div><i class="el-icon-phone-outline"></i>{{ scope.row.createUser }}</div>
<div><el-tag type="info">{{scope.row.createUserDeptName}}</el-tag></div> <div>
<div><i class="el-icon-alarm-clock"></i>{{ parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}") }}</div> <el-tag type="info">{{ scope.row.createUserDeptName }}</el-tag>
</div>
<div>
<i class="el-icon-alarm-clock"></i
>{{ parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}") }}
</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="70"> <el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
fixed="right"
width="70"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
@ -266,7 +325,8 @@
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
@click="submitForm(scope.row)" @click="submitForm(scope.row)"
v-hasPermi="['trouble:smzSspProblemmodifyDraft:edit']" v-hasPermi="['trouble:smzSspProblemmodifyDraft:edit']"
>提交</el-button> >提交</el-button
>
<el-button <el-button
class="bt2" class="bt2"
size="mini" size="mini"
@ -274,13 +334,14 @@
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['trouble:smzSspProblemmodifyDraft:remove']" v-hasPermi="['trouble:smzSspProblemmodifyDraft:remove']"
>删除</el-button> >删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form> </el-form>
<pagination <pagination
v-show="total>0" v-show="total > 0"
:total="total" :total="total"
:page.sync="queryParams.pageNum" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@ -290,7 +351,12 @@
</template> </template>
<script> <script>
import { listSmzSspProblemmodifyDraft, updateSmzSspProblemmodifyDraft, batchUpdateSmzSspProblemmodifyDraft, delSmzSspProblemmodifyDraft } from "@/api/trouble/smzSspProblemmodifyDraft"; import {
listSmzSspProblemmodifyDraft,
updateSmzSspProblemmodifyDraft,
batchUpdateSmzSspProblemmodifyDraft,
delSmzSspProblemmodifyDraft,
} from "@/api/trouble/smzSspProblemmodifyDraft";
export default { export default {
name: "SmzSspProblemmodifyDraft", name: "SmzSspProblemmodifyDraft",
@ -330,20 +396,19 @@ export default {
// //
form: {}, form: {},
// //
rules: { rules: {},
}, roleTypeOpts: [
roleTypeOpts:[ { label: "集团", value: 3 },
{label:'集团',value:3}, { label: "子公司", value: 4 },
{label:'子公司',value:4}, { label: "甲方代表", value: 5 },
{label:'甲方代表',value:5}, { label: "监理单位", value: 6 },
{label:'监理单位',value:6}, { label: "总包单位", value: 7 },
{label:'总包单位',value:7}
], ],
showPro:false, showPro: false,
projectOptions: [], projectOptions: [],
projectDeptOptions:[], projectDeptOptions: [],
projectIds:[], projectIds: [],
projectUnitUsers:[], projectUnitUsers: [],
}; };
}, },
created() { created() {
@ -359,13 +424,17 @@ export default {
// //
this.$api.publics.getMyProjectList({}).then((response) => { this.$api.publics.getMyProjectList({}).then((response) => {
this.projectOptions = response.rows; this.projectOptions = response.rows;
if(response.rows.length == 1){ if (response.rows.length == 1) {
// //
this.$api.publics.selectProjectAllUnitUser({projectId: response.rows[0].id}) this.$api.publics
.selectProjectAllUnitUser({ projectId: response.rows[0].id })
.then((d) => { .then((d) => {
this.projectUnitUsers.push({projectId:response.rows[0].id,data:d.data}); this.projectUnitUsers.push({
projectId: response.rows[0].id,
data: d.data,
}); });
}else if (response.rows.length > 1) { });
} else if (response.rows.length > 1) {
this.showPro = true; this.showPro = true;
} }
}); });
@ -373,26 +442,25 @@ export default {
/** 查询随手拍问题整改质量留痕信息列表 */ /** 查询随手拍问题整改质量留痕信息列表 */
getList() { getList() {
this.loading = true; this.loading = true;
listSmzSspProblemmodifyDraft(this.queryParams).then(response => { listSmzSspProblemmodifyDraft(this.queryParams).then((response) => {
response.rows.forEach(row => { response.rows.forEach((row) => {
if(!this.projectIds.includes(row.projectId)){ if (!this.projectIds.includes(row.projectId)) {
this.projectIds.push(row.projectId); this.projectIds.push(row.projectId);
} }
}); });
this.projectIds.forEach(proj => { this.projectIds.forEach((proj) => {
this.$api.publics.selectProjectAllUnitUser({projectId: proj}) this.$api.publics.selectProjectAllUnitUser({ projectId: proj }).then((d) => {
.then((d) => { this.projectUnitUsers.push({ projectId: proj, data: d.data });
this.projectUnitUsers.push({projectId:proj,data:d.data}); });
}); });
})
this.smzSspProblemmodifyDraftList = response.rows; this.smzSspProblemmodifyDraftList = response.rows;
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
}); });
}, },
findProjectAllUnitUser(projectId){ findProjectAllUnitUser(projectId) {
for(let i=0;i<this.projectUnitUsers.length;i++){ for (let i = 0; i < this.projectUnitUsers.length; i++) {
if(this.projectUnitUsers[i].projectId==projectId){ if (this.projectUnitUsers[i].projectId == projectId) {
return this.projectUnitUsers[i].data; return this.projectUnitUsers[i].data;
} }
} }
@ -409,52 +477,52 @@ export default {
}, },
// //
handleSelectionChange(selection) { handleSelectionChange(selection) {
this.ids = selection.map(item => item.id); this.ids = selection.map((item) => item.id);
this.indexs = selection.map(item => item.index) this.indexs = selection.map((item) => item.index);
this.single = selection.length!==1 this.single = selection.length !== 1;
this.multiple = !selection.length this.multiple = !selection.length;
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm(row) { submitForm(row) {
if(!row.smarkUrl){ if (!row.smarkUrl) {
this.$message.error("请上传隐患图片!"); this.$message.error("请上传隐患图片!");
return false; return false;
} }
if(!row.dangerType){ if (!row.dangerType) {
this.$message.error("请选择隐患类型!"); this.$message.error("请选择隐患类型!");
return false; return false;
} }
if(!row.workParts){ if (!row.workParts) {
this.$message.error("请输入施工部位!"); this.$message.error("请输入施工部位!");
return false; return false;
} }
if(!row.changeInfo){ if (!row.changeInfo) {
this.$message.error("请输入整改要求!"); this.$message.error("请输入整改要求!");
return false; return false;
} }
if(!row.lordSent || !row.lordSentUser){ if (!row.lordSent || !row.lordSentUser) {
this.$message.error("请选择整改人!"); this.$message.error("请选择整改人!");
return false; return false;
} }
if(!row.copySend || !row.copySendUser){ if (!row.copySend || !row.copySendUser) {
this.$message.error("请选择抄送人!"); this.$message.error("请选择抄送人!");
return false; return false;
} }
if(!row.recheckSend || !row.recheckSendUser){ if (!row.recheckSend || !row.recheckSendUser) {
this.$message.error("请选择复检人!"); this.$message.error("请选择复检人!");
return false; return false;
} }
if(!row.nickedTime){ if (!row.nickedTime) {
row.nickedTime = row.nickedTime+" 23:59" row.nickedTime = row.nickedTime + " 23:59";
this.$message.error("请选择整改截至时间!"); this.$message.error("请选择整改截至时间!");
return false; return false;
} }
if(row.lordSent==row.recheckSend){ if (row.lordSent == row.recheckSend) {
this.$message.error("整改人和复检人不能是同一人!"); this.$message.error("整改人和复检人不能是同一人!");
return false; return false;
} }
this.loading = true; this.loading = true;
updateSmzSspProblemmodifyDraft(row).then(response => { updateSmzSspProblemmodifyDraft(row).then((response) => {
this.$modal.msgSuccess("提交成功!"); this.$modal.msgSuccess("提交成功!");
this.loading = false; this.loading = false;
this.getList(); this.getList();
@ -464,48 +532,48 @@ export default {
batchSubmitForm() { batchSubmitForm() {
let indexs = this.indexs; let indexs = this.indexs;
let rows = []; let rows = [];
for(let i=0;i<indexs.length;i++){ for (let i = 0; i < indexs.length; i++) {
let row = this.smzSspProblemmodifyDraftList[(indexs[i]-1)]; let row = this.smzSspProblemmodifyDraftList[indexs[i] - 1];
if(!row.smarkUrl){ if (!row.smarkUrl) {
this.$message.error("第"+indexs[i]+"行请上传隐患图片!"); this.$message.error("第" + indexs[i] + "行请上传隐患图片!");
return false; return false;
} }
if(!row.dangerType){ if (!row.dangerType) {
this.$message.error("第"+indexs[i]+"行请选择隐患类型!"); this.$message.error("第" + indexs[i] + "行请选择隐患类型!");
return false; return false;
} }
if(!row.workParts){ if (!row.workParts) {
this.$message.error("第"+indexs[i]+"行请输入施工部位!"); this.$message.error("第" + indexs[i] + "行请输入施工部位!");
return false; return false;
} }
if(!row.changeInfo){ if (!row.changeInfo) {
this.$message.error("第"+indexs[i]+"行请输入整改要求!"); this.$message.error("第" + indexs[i] + "行请输入整改要求!");
return false; return false;
} }
if(!row.lordSent || !row.lordSentUser){ if (!row.lordSent || !row.lordSentUser) {
this.$message.error("第"+indexs[i]+"行请选择整改人!"); this.$message.error("第" + indexs[i] + "行请选择整改人!");
return false; return false;
} }
if(!row.copySend || !row.copySendUser){ if (!row.copySend || !row.copySendUser) {
this.$message.error("第"+indexs[i]+"行请选择抄送人!"); this.$message.error("第" + indexs[i] + "行请选择抄送人!");
return false; return false;
} }
if(!row.recheckSend || !row.recheckSendUser){ if (!row.recheckSend || !row.recheckSendUser) {
this.$message.error("第"+indexs[i]+"行请选择复检人!"); this.$message.error("第" + indexs[i] + "行请选择复检人!");
return false; return false;
} }
if(!row.nickedTime || !row.nickedTime){ if (!row.nickedTime || !row.nickedTime) {
this.$message.error("第"+indexs[i]+"行请选择整改截至时间!"); this.$message.error("第" + indexs[i] + "行请选择整改截至时间!");
return false; return false;
} }
if(row.lordSent==row.recheckSend){ if (row.lordSent == row.recheckSend) {
this.$message.error("第"+indexs[i]+"行整改人和复检人不能是同一人!"); this.$message.error("第" + indexs[i] + "行整改人和复检人不能是同一人!");
return false; return false;
} }
rows.push(row); rows.push(row);
} }
this.loading = true; this.loading = true;
batchUpdateSmzSspProblemmodifyDraft(rows).then(response => { batchUpdateSmzSspProblemmodifyDraft(rows).then((response) => {
this.$modal.msgSuccess("提交成功!"); this.$modal.msgSuccess("提交成功!");
this.loading = false; this.loading = false;
this.getList(); this.getList();
@ -515,37 +583,45 @@ export default {
handleDelete(row) { handleDelete(row) {
const ids = row.id || this.ids; const ids = row.id || this.ids;
const indexs = row.index || this.index; const indexs = row.index || this.index;
if(this.smzSspProblemmodifyDraftList[indexs-1].id){ if (this.smzSspProblemmodifyDraftList[indexs - 1].id) {
this.$modal.confirm('是否确认删除隐患问题编号为"' + indexs + '"的数据项?').then(function() { this.$modal
.confirm('是否确认删除隐患问题编号为"' + indexs + '"的数据项?')
.then(function () {
return delSmzSspProblemmodifyDraft(ids); return delSmzSspProblemmodifyDraft(ids);
}).then(() => { })
.then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
}).catch(() => {}); })
}else{ .catch(() => {});
} else {
let that = this; let that = this;
// //
this.$modal.confirm('是否确认删除隐患问题编号为"' + indexs + '"的数据项?').then(function() { this.$modal
that.smzSspProblemmodifyDraftList.splice(indexs-1,1); .confirm('是否确认删除隐患问题编号为"' + indexs + '"的数据项?')
}).then(() => { .then(function () {
that.smzSspProblemmodifyDraftList.splice(indexs - 1, 1);
})
.then(() => {
that.$modal.msgSuccess("删除成功"); that.$modal.msgSuccess("删除成功");
}).catch(() => {}); })
.catch(() => {});
} }
}, },
/** 行内序号 */ /** 行内序号 */
rowIndex({ row, rowIndex }) { rowIndex({ row, rowIndex }) {
row.index = rowIndex + 1; row.index = rowIndex + 1;
}, },
selectLordSentUser(val,row){ selectLordSentUser(val, row) {
let data=[]; let data = [];
for(let i=0;i<this.projectUnitUsers.length;i++){ for (let i = 0; i < this.projectUnitUsers.length; i++) {
if(this.projectUnitUsers[i].projectId==row.projectId){ if (this.projectUnitUsers[i].projectId == row.projectId) {
data = this.projectUnitUsers[i].data; data = this.projectUnitUsers[i].data;
break; break;
} }
} }
for(let i=0;i<data.length;i++){ for (let i = 0; i < data.length; i++) {
for(let us=0;us<data[i].userinfoList.length;us++){ for (let us = 0; us < data[i].userinfoList.length; us++) {
let u = data[i].userinfoList[us]; let u = data[i].userinfoList[us];
if (u.phonenumber == val) { if (u.phonenumber == val) {
row.lordSent = u.nickName + " [" + u.jobTypeName + "] "; row.lordSent = u.nickName + " [" + u.jobTypeName + "] ";
@ -554,16 +630,16 @@ export default {
} }
} }
}, },
selectCopySendUser(val,row){ selectCopySendUser(val, row) {
let data=[]; let data = [];
for(let i=0;i<this.projectUnitUsers.length;i++){ for (let i = 0; i < this.projectUnitUsers.length; i++) {
if(this.projectUnitUsers[i].projectId==row.projectId){ if (this.projectUnitUsers[i].projectId == row.projectId) {
data = this.projectUnitUsers[i].data; data = this.projectUnitUsers[i].data;
break; break;
} }
} }
for(let i=0;i<data.length;i++){ for (let i = 0; i < data.length; i++) {
for(let us=0;us<data[i].userinfoList.length;us++){ for (let us = 0; us < data[i].userinfoList.length; us++) {
let u = data[i].userinfoList[us]; let u = data[i].userinfoList[us];
if (u.phonenumber == val) { if (u.phonenumber == val) {
row.copySend = u.nickName + " [" + u.jobTypeName + "] "; row.copySend = u.nickName + " [" + u.jobTypeName + "] ";
@ -572,16 +648,16 @@ export default {
} }
} }
}, },
selectRecheckSendUser(val,row){ selectRecheckSendUser(val, row) {
let data=[]; let data = [];
for(let i=0;i<this.projectUnitUsers.length;i++){ for (let i = 0; i < this.projectUnitUsers.length; i++) {
if(this.projectUnitUsers[i].projectId==row.projectId){ if (this.projectUnitUsers[i].projectId == row.projectId) {
data = this.projectUnitUsers[i].data; data = this.projectUnitUsers[i].data;
break; break;
} }
} }
for(let i=0;i<data.length;i++){ for (let i = 0; i < data.length; i++) {
for(let us=0;us<data[i].userinfoList.length;us++){ for (let us = 0; us < data[i].userinfoList.length; us++) {
let u = data[i].userinfoList[us]; let u = data[i].userinfoList[us];
if (u.phonenumber == val) { if (u.phonenumber == val) {
row.recheckSend = u.nickName + " [" + u.jobTypeName + "] "; row.recheckSend = u.nickName + " [" + u.jobTypeName + "] ";
@ -591,12 +667,12 @@ export default {
} }
}, },
/** 数据同步 */ /** 数据同步 */
dataSynchronization(){ dataSynchronization() {
let indexs = this.indexs; let indexs = this.indexs;
let data = this.smzSspProblemmodifyDraftList; let data = this.smzSspProblemmodifyDraftList;
let row = data[(indexs-1)]; let row = data[indexs - 1];
for(let i=0;i<data.length;i++){ for (let i = 0; i < data.length; i++) {
if(data[i].index!=row.index && data[i].projectId == row.projectId){ if (data[i].index != row.index && data[i].projectId == row.projectId) {
data[i].lordSent = row.lordSent; data[i].lordSent = row.lordSent;
data[i].lordSentUser = row.lordSentUser; data[i].lordSentUser = row.lordSentUser;
data[i].copySend = row.copySend; data[i].copySend = row.copySend;
@ -608,13 +684,13 @@ export default {
} }
this.smzSspProblemmodifyDraftList = data; this.smzSspProblemmodifyDraftList = data;
}, },
handleAdd(){ handleAdd() {
let row = { let row = {
index:this.smzSspProblemmodifyDraftList.length+1, index: this.smzSspProblemmodifyDraftList.length + 1,
id: null, id: null,
projectId: this.projectOptions.length==1?this.projectOptions[0].id:null, projectId: this.projectOptions.length == 1 ? this.projectOptions[0].id : null,
infoType: "0", infoType: "0",
problemArea: null, problemArea: this.projectOptions.length == 1 ? this.projectOptions[0].projectName : null,
workParts: null, workParts: null,
changeInfo: null, changeInfo: null,
lordSent: null, lordSent: null,
@ -628,65 +704,59 @@ export default {
processName: null, processName: null,
projectName: null, projectName: null,
nickedInfo: null, nickedInfo: null,
createUser:this.$store.getters.name, createUser: this.$store.getters.name,
createUserName:this.$store.getters.nickname, createUserName: this.$store.getters.nickname,
createUserDeptName:this.$store.getters.dept.deptName, createUserDeptName: this.$store.getters.dept.deptName,
createTime:this.$dt(new Date()).format("YYYY-MM-DD HH:mm:ss"), createTime: this.$dt(new Date()).format("YYYY-MM-DD HH:mm:ss"),
isDel: 0 isDel: 0,
} };
this.smzSspProblemmodifyDraftList.push(row); this.smzSspProblemmodifyDraftList.push(row);
this.changeProject(row.projectId,row); this.changeProject(row.projectId, row);
this.$notify({ this.$notify({
title: '新增成功', title: "新增成功",
message: '已新增一行新数据,提交后生效!', message: "已新增一行新数据,提交后生效!",
type: 'success' type: "success",
}); });
}, },
changeProject(val,row){ changeProject(val, row) {
if(val){ if (val) {
console.log(1111111111); if (!this.projectIds.includes(val)) {
if(!this.projectIds.includes(val)){
console.log(2222222222);
this.projectIds.push(row.projectId); this.projectIds.push(row.projectId);
this.$api.publics.selectProjectAllUnitUser({projectId: val}) this.$api.publics.selectProjectAllUnitUser({ projectId: val }).then((d) => {
.then((d) => { this.projectUnitUsers.push({ projectId: val, data: d.data });
console.log(3333333333);
this.projectUnitUsers.push({projectId:val,data:d.data});
}); });
} }
for(let i=0;i<this.projectOptions.length;i++){ for (let i = 0; i < this.projectOptions.length; i++) {
console.log(4444444444); if (this.projectOptions[i].projectId == val) {
if(this.projectOptions[i].projectId==val){
console.log(5555555555);
row.problemArea = this.projectOptions[i].projectName; row.problemArea = this.projectOptions[i].projectName;
break; return;
}
}
} }
} }
} }
},
},
}; };
</script> </script>
<style lang="scss"> <style lang="scss">
.el-upload--picture-card{ .el-upload--picture-card {
width: 100px !important; width: 100px !important;
height: 100px !important; height: 100px !important;
line-height: 100px !important; line-height: 100px !important;
} }
.el-upload-list--picture-card .el-upload-list__item{ .el-upload-list--picture-card .el-upload-list__item {
width: 100px !important; width: 100px !important;
height: 100px !important; height: 100px !important;
} }
.bt2{ .bt2 {
padding-left: 0px !important; padding-left: 0px !important;
margin-left: 0px !important; margin-left: 0px !important;
} }
.tips{ .tips {
padding: 8px 16px; padding: 8px 16px;
background-color: #ecf8ff !important; background-color: #ecf8ff !important;
border-radius: 4px; border-radius: 4px;
border-left: 5px solid #50bfff; border-left: 5px solid #50bfff;
margin: 20px 0; margin: 20px 0;
color:#666666 !important; color: #666666 !important;
} }
</style> </style>

View File

@ -52,6 +52,14 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="提交人" prop="createBy">
<el-input
v-model="queryParams.createBy"
placeholder="请输入提交人姓名/联系方式"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="提交时间"> <el-form-item label="提交时间">
<el-date-picker <el-date-picker
v-model="daterangeMarksTime" v-model="daterangeMarksTime"
@ -466,6 +474,7 @@ export default {
checkUserPhone: null, checkUserPhone: null,
isDel: null, isDel: null,
dangerType: null, dangerType: null,
createBy: null,
createUser: null, createUser: null,
createTime: null, createTime: null,
updateUser: null, updateUser: null,

View File

@ -1,6 +1,13 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="所属项目" prop="projectId" v-if="showPro"> <el-form-item label="所属项目" prop="projectId" v-if="showPro">
<el-select <el-select
v-model="queryParams.projectId" v-model="queryParams.projectId"
@ -17,7 +24,11 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="责任主体" prop="projectDeptId" v-hasPermi="['project:project:zgs']"> <el-form-item
label="责任主体"
prop="projectDeptId"
v-hasPermi="['project:project:zgs']"
>
<el-select v-model="queryParams.deptId" placeholder="请选择责任主体" clearable> <el-select v-model="queryParams.deptId" placeholder="请选择责任主体" clearable>
<el-option <el-option
v-for="dict in projectDeptOptions" v-for="dict in projectDeptOptions"
@ -27,7 +38,11 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="问题分类" prop="projectDeptId" v-hasPermi="['project:project:zgs']"> <el-form-item
label="问题分类"
prop="projectDeptId"
v-hasPermi="['project:project:zgs']"
>
<el-select v-model="queryParams.roleTypes" placeholder="请选择问题分类" clearable> <el-select v-model="queryParams.roleTypes" placeholder="请选择问题分类" clearable>
<el-option <el-option
v-for="dict in roleTypeOpts" v-for="dict in roleTypeOpts"
@ -46,7 +61,9 @@
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <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-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -60,7 +77,8 @@
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']" v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']"
>新增</el-button> >新增</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -71,7 +89,8 @@
@click="dataSynchronization" @click="dataSynchronization"
:disabled="single" :disabled="single"
v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']" v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']"
>数据同步</el-button> >数据同步</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-tooltip content="Top center" placement="批量提交选择的数据!"> <el-tooltip content="Top center" placement="批量提交选择的数据!">
@ -83,35 +102,47 @@
@click="batchSubmitForm" @click="batchSubmitForm"
:disabled="multiple" :disabled="multiple"
v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']" v-hasPermi="['trouble:smzSspProblemmodifyDraft:add']"
>批量提交</el-button> >批量提交</el-button
>
</el-tooltip> </el-tooltip>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-alert title="操作说明" class="tips"> <el-alert title="操作说明" class="tips">
<template slot='title'> <template slot="title">
<div><strong>数据同步:</strong>将选中行的数据同步到当前项目的其它行</div> <div><strong>数据同步:</strong>将选中行的数据同步到当前项目的其它行</div>
<div><strong>批量提交:</strong>将选中行的数据数据验证通过后一次全部提交</div> <div><strong>批量提交:</strong>将选中行的数据数据验证通过后一次全部提交</div>
</template> </template>
</el-alert> </el-alert>
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-table v-loading="loading" :data="smzSspProblemmodifyDraftList" :row-class-name="rowIndex" @selection-change="handleSelectionChange"> <el-table
<el-table-column type="selection" width="50" align="center"/> v-loading="loading"
<el-table-column label="序号" align="center" prop="index" width="50"/> :data="smzSspProblemmodifyDraftList"
<el-table-column label="问题图片" header-align="center" align="left" prop="smarkUrl" width="240"> :row-class-name="rowIndex"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="序号" align="center" prop="index" width="50" />
<el-table-column
label="问题图片"
header-align="center"
align="left"
prop="smarkUrl"
width="240"
>
<template slot-scope="scope"> <template slot-scope="scope">
<image-upload v-model="scope.row.smarkUrl" :limit="9" :isShowTip="false" /> <image-upload v-model="scope.row.smarkUrl" :limit="9" :isShowTip="false" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="所属项目" align="center" prop="problemArea" width="180"> <el-table-column label="所属项目" align="center" prop="problemArea" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.id!=null">{{scope.row.problemArea}}</div> <div v-if="scope.row.id != null">{{ scope.row.problemArea }}</div>
<el-select <el-select
v-if="scope.row.id==null" v-if="scope.row.id == null"
v-model="scope.row.projectId" v-model="scope.row.projectId"
placeholder="请选择所属项目" placeholder="请选择所属项目"
filterable filterable
@change="changeProject($event,scope.row)" @change="changeProject($event, scope.row)"
> >
<el-option <el-option
v-for="(item, index) in projectOptions" v-for="(item, index) in projectOptions"
@ -126,7 +157,7 @@
<el-table-column label="隐患类型" align="center" prop="dangerType" width="170"> <el-table-column label="隐患类型" align="center" prop="dangerType" width="170">
<template slot-scope="scope"> <template slot-scope="scope">
<el-select <el-select
v-if="scope.row.infoType==1" v-if="scope.row.infoType == 1"
v-model="scope.row.dangerType" v-model="scope.row.dangerType"
placeholder="请选择隐患类型" placeholder="请选择隐患类型"
> >
@ -138,7 +169,7 @@
></el-option> ></el-option>
</el-select> </el-select>
<el-select <el-select
v-if="scope.row.infoType==0" v-if="scope.row.infoType == 0"
v-model="scope.row.dangerType" v-model="scope.row.dangerType"
placeholder="请选择隐患类型" placeholder="请选择隐患类型"
> >
@ -153,24 +184,34 @@
</el-table-column> </el-table-column>
<el-table-column label="施工部位" align="center" prop="workParts" width="180"> <el-table-column label="施工部位" align="center" prop="workParts" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<el-input v-model="scope.row.workParts" placeholder="请输入施工部位" type="textarea" :rows="3"/> <el-input
v-model="scope.row.workParts"
placeholder="请输入施工部位"
type="textarea"
:rows="3"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="整改要求" align="center" prop="changeInfo" width="180"> <el-table-column label="整改要求" align="center" prop="changeInfo" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<el-input v-model="scope.row.changeInfo" placeholder="请输入整改要求" type="textarea" :rows="3"/> <el-input
v-model="scope.row.changeInfo"
placeholder="请输入整改要求"
type="textarea"
:rows="3"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="问题人员" align="center" prop="lordSentUser" width="260"> <el-table-column label="问题人员" align="center" prop="lordSentUser" width="260">
<template slot-scope="scope"> <template slot-scope="scope">
<el-row style="line-height: 36px;margin-bottom: 5px;"> <el-row style="line-height: 36px; margin-bottom: 5px">
<el-col :span="6">整改人</el-col> <el-col :span="6">整改人</el-col>
<el-col :span="18"> <el-col :span="18">
<el-select <el-select
v-model="scope.row.lordSentUser" v-model="scope.row.lordSentUser"
placeholder="请选择整改人" placeholder="请选择整改人"
style="width: 100%" style="width: 100%"
@change="selectLordSentUser($event,scope.row)" @change="selectLordSentUser($event, scope.row)"
> >
<el-option-group <el-option-group
v-for="group in findProjectAllUnitUser(scope.row.projectId)" v-for="group in findProjectAllUnitUser(scope.row.projectId)"
@ -188,14 +229,14 @@
</el-select> </el-select>
</el-col> </el-col>
</el-row> </el-row>
<el-row style="line-height: 36px;margin-bottom: 5px;"> <el-row style="line-height: 36px; margin-bottom: 5px">
<el-col :span="6">抄送人</el-col> <el-col :span="6">抄送人</el-col>
<el-col :span="18"> <el-col :span="18">
<el-select <el-select
v-model="scope.row.copySendUser" v-model="scope.row.copySendUser"
placeholder="请选择整改人" placeholder="请选择整改人"
style="width: 100%" style="width: 100%"
@change="selectCopySendUser($event,scope.row)" @change="selectCopySendUser($event, scope.row)"
> >
<el-option-group <el-option-group
v-for="group in findProjectAllUnitUser(scope.row.projectId)" v-for="group in findProjectAllUnitUser(scope.row.projectId)"
@ -213,14 +254,14 @@
</el-select> </el-select>
</el-col> </el-col>
</el-row> </el-row>
<el-row style="line-height: 36px;margin-bottom: 5px;"> <el-row style="line-height: 36px; margin-bottom: 5px">
<el-col :span="6">复检人</el-col> <el-col :span="6">复检人</el-col>
<el-col :span="18"> <el-col :span="18">
<el-select <el-select
v-model="scope.row.recheckSendUser" v-model="scope.row.recheckSendUser"
placeholder="请选择整改人" placeholder="请选择整改人"
style="width: 100%" style="width: 100%"
@change="selectRecheckSendUser($event,scope.row)" @change="selectRecheckSendUser($event, scope.row)"
> >
<el-option-group <el-option-group
v-for="group in findProjectAllUnitUser(scope.row.projectId)" v-for="group in findProjectAllUnitUser(scope.row.projectId)"
@ -240,25 +281,43 @@
</el-row> </el-row>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="整改截至时间" align="center" prop="nickedTime" width="180"> <el-table-column
label="整改截至时间"
align="center"
prop="nickedTime"
width="180"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-date-picker <el-date-picker
v-model="scope.row.nickedTime" v-model="scope.row.nickedTime"
type="date" type="date"
value-format="yyyy-MM-dd HH:ss" value-format="yyyy-MM-dd HH:ss"
placeholder="选择截至时间" style="width:160px;"> placeholder="选择截至时间"
style="width: 160px"
>
</el-date-picker> </el-date-picker>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="草稿信息" align="left" prop="createUser" width="180"> <el-table-column label="草稿信息" align="left" prop="createUser" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<div><i class="el-icon-user"></i>{{scope.row.createUserName}}</div> <div><i class="el-icon-user"></i>{{ scope.row.createUserName }}</div>
<div><i class="el-icon-phone-outline"></i>{{scope.row.createUser}}</div> <div><i class="el-icon-phone-outline"></i>{{ scope.row.createUser }}</div>
<div><el-tag type="info">{{scope.row.createUserDeptName}}</el-tag></div> <div>
<div><i class="el-icon-alarm-clock"></i>{{ parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}") }}</div> <el-tag type="info">{{ scope.row.createUserDeptName }}</el-tag>
</div>
<div>
<i class="el-icon-alarm-clock"></i
>{{ parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}") }}
</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="70"> <el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
fixed="right"
width="70"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
@ -266,7 +325,8 @@
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
@click="submitForm(scope.row)" @click="submitForm(scope.row)"
v-hasPermi="['trouble:smzSspProblemmodifyDraft:edit']" v-hasPermi="['trouble:smzSspProblemmodifyDraft:edit']"
>提交</el-button> >提交</el-button
>
<el-button <el-button
class="bt2" class="bt2"
size="mini" size="mini"
@ -274,13 +334,14 @@
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['trouble:smzSspProblemmodifyDraft:remove']" v-hasPermi="['trouble:smzSspProblemmodifyDraft:remove']"
>删除</el-button> >删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form> </el-form>
<pagination <pagination
v-show="total>0" v-show="total > 0"
:total="total" :total="total"
:page.sync="queryParams.pageNum" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@ -290,7 +351,12 @@
</template> </template>
<script> <script>
import { listSmzSspProblemmodifyDraft, updateSmzSspProblemmodifyDraft, batchUpdateSmzSspProblemmodifyDraft, delSmzSspProblemmodifyDraft } from "@/api/trouble/smzSspProblemmodifyDraft"; import {
listSmzSspProblemmodifyDraft,
updateSmzSspProblemmodifyDraft,
batchUpdateSmzSspProblemmodifyDraft,
delSmzSspProblemmodifyDraft,
} from "@/api/trouble/smzSspProblemmodifyDraft";
export default { export default {
name: "SmzSspProblemmodifyDraft", name: "SmzSspProblemmodifyDraft",
@ -330,20 +396,19 @@ export default {
// //
form: {}, form: {},
// //
rules: { rules: {},
}, roleTypeOpts: [
roleTypeOpts:[ { label: "集团", value: 3 },
{label:'集团',value:3}, { label: "子公司", value: 4 },
{label:'子公司',value:4}, { label: "甲方代表", value: 5 },
{label:'甲方代表',value:5}, { label: "监理单位", value: 6 },
{label:'监理单位',value:6}, { label: "总包单位", value: 7 },
{label:'总包单位',value:7}
], ],
showPro:false, showPro: false,
projectOptions: [], projectOptions: [],
projectDeptOptions:[], projectDeptOptions: [],
projectIds:[], projectIds: [],
projectUnitUsers:[], projectUnitUsers: [],
}; };
}, },
created() { created() {
@ -359,13 +424,17 @@ export default {
// //
this.$api.publics.getMyProjectList({}).then((response) => { this.$api.publics.getMyProjectList({}).then((response) => {
this.projectOptions = response.rows; this.projectOptions = response.rows;
if(response.rows.length == 1){ if (response.rows.length == 1) {
// //
this.$api.publics.selectProjectAllUnitUser({projectId: response.rows[0].id}) this.$api.publics
.selectProjectAllUnitUser({ projectId: response.rows[0].id })
.then((d) => { .then((d) => {
this.projectUnitUsers.push({projectId:response.rows[0].id,data:d.data}); this.projectUnitUsers.push({
projectId: response.rows[0].id,
data: d.data,
}); });
}else if (response.rows.length > 1) { });
} else if (response.rows.length > 1) {
this.showPro = true; this.showPro = true;
} }
}); });
@ -373,26 +442,25 @@ export default {
/** 查询随手拍问题整改质量留痕信息列表 */ /** 查询随手拍问题整改质量留痕信息列表 */
getList() { getList() {
this.loading = true; this.loading = true;
listSmzSspProblemmodifyDraft(this.queryParams).then(response => { listSmzSspProblemmodifyDraft(this.queryParams).then((response) => {
response.rows.forEach(row => { response.rows.forEach((row) => {
if(!this.projectIds.includes(row.projectId)){ if (!this.projectIds.includes(row.projectId)) {
this.projectIds.push(row.projectId); this.projectIds.push(row.projectId);
} }
}); });
this.projectIds.forEach(proj => { this.projectIds.forEach((proj) => {
this.$api.publics.selectProjectAllUnitUser({projectId: proj}) this.$api.publics.selectProjectAllUnitUser({ projectId: proj }).then((d) => {
.then((d) => { this.projectUnitUsers.push({ projectId: proj, data: d.data });
this.projectUnitUsers.push({projectId:proj,data:d.data}); });
}); });
})
this.smzSspProblemmodifyDraftList = response.rows; this.smzSspProblemmodifyDraftList = response.rows;
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
}); });
}, },
findProjectAllUnitUser(projectId){ findProjectAllUnitUser(projectId) {
for(let i=0;i<this.projectUnitUsers.length;i++){ for (let i = 0; i < this.projectUnitUsers.length; i++) {
if(this.projectUnitUsers[i].projectId==projectId){ if (this.projectUnitUsers[i].projectId == projectId) {
return this.projectUnitUsers[i].data; return this.projectUnitUsers[i].data;
} }
} }
@ -409,52 +477,52 @@ export default {
}, },
// //
handleSelectionChange(selection) { handleSelectionChange(selection) {
this.ids = selection.map(item => item.id); this.ids = selection.map((item) => item.id);
this.indexs = selection.map(item => item.index) this.indexs = selection.map((item) => item.index);
this.single = selection.length!==1 this.single = selection.length !== 1;
this.multiple = !selection.length this.multiple = !selection.length;
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm(row) { submitForm(row) {
if(!row.smarkUrl){ if (!row.smarkUrl) {
this.$message.error("请上传隐患图片!"); this.$message.error("请上传隐患图片!");
return false; return false;
} }
if(!row.dangerType){ if (!row.dangerType) {
this.$message.error("请选择隐患类型!"); this.$message.error("请选择隐患类型!");
return false; return false;
} }
if(!row.workParts){ if (!row.workParts) {
this.$message.error("请输入施工部位!"); this.$message.error("请输入施工部位!");
return false; return false;
} }
if(!row.changeInfo){ if (!row.changeInfo) {
this.$message.error("请输入整改要求!"); this.$message.error("请输入整改要求!");
return false; return false;
} }
if(!row.lordSent || !row.lordSentUser){ if (!row.lordSent || !row.lordSentUser) {
this.$message.error("请选择整改人!"); this.$message.error("请选择整改人!");
return false; return false;
} }
if(!row.copySend || !row.copySendUser){ if (!row.copySend || !row.copySendUser) {
this.$message.error("请选择抄送人!"); this.$message.error("请选择抄送人!");
return false; return false;
} }
if(!row.recheckSend || !row.recheckSendUser){ if (!row.recheckSend || !row.recheckSendUser) {
this.$message.error("请选择复检人!"); this.$message.error("请选择复检人!");
return false; return false;
} }
if(!row.nickedTime){ if (!row.nickedTime) {
row.nickedTime = row.nickedTime+" 23:59" row.nickedTime = row.nickedTime + " 23:59";
this.$message.error("请选择整改截至时间!"); this.$message.error("请选择整改截至时间!");
return false; return false;
} }
if(row.lordSent==row.recheckSend){ if (row.lordSent == row.recheckSend) {
this.$message.error("整改人和复检人不能是同一人!"); this.$message.error("整改人和复检人不能是同一人!");
return false; return false;
} }
this.loading = true; this.loading = true;
updateSmzSspProblemmodifyDraft(row).then(response => { updateSmzSspProblemmodifyDraft(row).then((response) => {
this.$modal.msgSuccess("提交成功!"); this.$modal.msgSuccess("提交成功!");
this.loading = false; this.loading = false;
this.getList(); this.getList();
@ -464,48 +532,48 @@ export default {
batchSubmitForm() { batchSubmitForm() {
let indexs = this.indexs; let indexs = this.indexs;
let rows = []; let rows = [];
for(let i=0;i<indexs.length;i++){ for (let i = 0; i < indexs.length; i++) {
let row = this.smzSspProblemmodifyDraftList[(indexs[i]-1)]; let row = this.smzSspProblemmodifyDraftList[indexs[i] - 1];
if(!row.smarkUrl){ if (!row.smarkUrl) {
this.$message.error("第"+indexs[i]+"行请上传隐患图片!"); this.$message.error("第" + indexs[i] + "行请上传隐患图片!");
return false; return false;
} }
if(!row.dangerType){ if (!row.dangerType) {
this.$message.error("第"+indexs[i]+"行请选择隐患类型!"); this.$message.error("第" + indexs[i] + "行请选择隐患类型!");
return false; return false;
} }
if(!row.workParts){ if (!row.workParts) {
this.$message.error("第"+indexs[i]+"行请输入施工部位!"); this.$message.error("第" + indexs[i] + "行请输入施工部位!");
return false; return false;
} }
if(!row.changeInfo){ if (!row.changeInfo) {
this.$message.error("第"+indexs[i]+"行请输入整改要求!"); this.$message.error("第" + indexs[i] + "行请输入整改要求!");
return false; return false;
} }
if(!row.lordSent || !row.lordSentUser){ if (!row.lordSent || !row.lordSentUser) {
this.$message.error("第"+indexs[i]+"行请选择整改人!"); this.$message.error("第" + indexs[i] + "行请选择整改人!");
return false; return false;
} }
if(!row.copySend || !row.copySendUser){ if (!row.copySend || !row.copySendUser) {
this.$message.error("第"+indexs[i]+"行请选择抄送人!"); this.$message.error("第" + indexs[i] + "行请选择抄送人!");
return false; return false;
} }
if(!row.recheckSend || !row.recheckSendUser){ if (!row.recheckSend || !row.recheckSendUser) {
this.$message.error("第"+indexs[i]+"行请选择复检人!"); this.$message.error("第" + indexs[i] + "行请选择复检人!");
return false; return false;
} }
if(!row.nickedTime || !row.nickedTime){ if (!row.nickedTime || !row.nickedTime) {
this.$message.error("第"+indexs[i]+"行请选择整改截至时间!"); this.$message.error("第" + indexs[i] + "行请选择整改截至时间!");
return false; return false;
} }
if(row.lordSent==row.recheckSend){ if (row.lordSent == row.recheckSend) {
this.$message.error("第"+indexs[i]+"行整改人和复检人不能是同一人!"); this.$message.error("第" + indexs[i] + "行整改人和复检人不能是同一人!");
return false; return false;
} }
rows.push(row); rows.push(row);
} }
this.loading = true; this.loading = true;
batchUpdateSmzSspProblemmodifyDraft(rows).then(response => { batchUpdateSmzSspProblemmodifyDraft(rows).then((response) => {
this.$modal.msgSuccess("提交成功!"); this.$modal.msgSuccess("提交成功!");
this.loading = false; this.loading = false;
this.getList(); this.getList();
@ -515,37 +583,45 @@ export default {
handleDelete(row) { handleDelete(row) {
const ids = row.id || this.ids; const ids = row.id || this.ids;
const indexs = row.index || this.index; const indexs = row.index || this.index;
if(this.smzSspProblemmodifyDraftList[indexs-1].id){ if (this.smzSspProblemmodifyDraftList[indexs - 1].id) {
this.$modal.confirm('是否确认删除隐患问题编号为"' + indexs + '"的数据项?').then(function() { this.$modal
.confirm('是否确认删除隐患问题编号为"' + indexs + '"的数据项?')
.then(function () {
return delSmzSspProblemmodifyDraft(ids); return delSmzSspProblemmodifyDraft(ids);
}).then(() => { })
.then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
}).catch(() => {}); })
}else{ .catch(() => {});
} else {
let that = this; let that = this;
// //
this.$modal.confirm('是否确认删除隐患问题编号为"' + indexs + '"的数据项?').then(function() { this.$modal
that.smzSspProblemmodifyDraftList.splice(indexs-1,1); .confirm('是否确认删除隐患问题编号为"' + indexs + '"的数据项?')
}).then(() => { .then(function () {
that.smzSspProblemmodifyDraftList.splice(indexs - 1, 1);
})
.then(() => {
that.$modal.msgSuccess("删除成功"); that.$modal.msgSuccess("删除成功");
}).catch(() => {}); })
.catch(() => {});
} }
}, },
/** 行内序号 */ /** 行内序号 */
rowIndex({ row, rowIndex }) { rowIndex({ row, rowIndex }) {
row.index = rowIndex + 1; row.index = rowIndex + 1;
}, },
selectLordSentUser(val,row){ selectLordSentUser(val, row) {
let data=[]; let data = [];
for(let i=0;i<this.projectUnitUsers.length;i++){ for (let i = 0; i < this.projectUnitUsers.length; i++) {
if(this.projectUnitUsers[i].projectId==row.projectId){ if (this.projectUnitUsers[i].projectId == row.projectId) {
data = this.projectUnitUsers[i].data; data = this.projectUnitUsers[i].data;
break; break;
} }
} }
for(let i=0;i<data.length;i++){ for (let i = 0; i < data.length; i++) {
for(let us=0;us<data[i].userinfoList.length;us++){ for (let us = 0; us < data[i].userinfoList.length; us++) {
let u = data[i].userinfoList[us]; let u = data[i].userinfoList[us];
if (u.phonenumber == val) { if (u.phonenumber == val) {
row.lordSent = u.nickName + " [" + u.jobTypeName + "] "; row.lordSent = u.nickName + " [" + u.jobTypeName + "] ";
@ -554,16 +630,16 @@ export default {
} }
} }
}, },
selectCopySendUser(val,row){ selectCopySendUser(val, row) {
let data=[]; let data = [];
for(let i=0;i<this.projectUnitUsers.length;i++){ for (let i = 0; i < this.projectUnitUsers.length; i++) {
if(this.projectUnitUsers[i].projectId==row.projectId){ if (this.projectUnitUsers[i].projectId == row.projectId) {
data = this.projectUnitUsers[i].data; data = this.projectUnitUsers[i].data;
break; break;
} }
} }
for(let i=0;i<data.length;i++){ for (let i = 0; i < data.length; i++) {
for(let us=0;us<data[i].userinfoList.length;us++){ for (let us = 0; us < data[i].userinfoList.length; us++) {
let u = data[i].userinfoList[us]; let u = data[i].userinfoList[us];
if (u.phonenumber == val) { if (u.phonenumber == val) {
row.copySend = u.nickName + " [" + u.jobTypeName + "] "; row.copySend = u.nickName + " [" + u.jobTypeName + "] ";
@ -572,16 +648,16 @@ export default {
} }
} }
}, },
selectRecheckSendUser(val,row){ selectRecheckSendUser(val, row) {
let data=[]; let data = [];
for(let i=0;i<this.projectUnitUsers.length;i++){ for (let i = 0; i < this.projectUnitUsers.length; i++) {
if(this.projectUnitUsers[i].projectId==row.projectId){ if (this.projectUnitUsers[i].projectId == row.projectId) {
data = this.projectUnitUsers[i].data; data = this.projectUnitUsers[i].data;
break; break;
} }
} }
for(let i=0;i<data.length;i++){ for (let i = 0; i < data.length; i++) {
for(let us=0;us<data[i].userinfoList.length;us++){ for (let us = 0; us < data[i].userinfoList.length; us++) {
let u = data[i].userinfoList[us]; let u = data[i].userinfoList[us];
if (u.phonenumber == val) { if (u.phonenumber == val) {
row.recheckSend = u.nickName + " [" + u.jobTypeName + "] "; row.recheckSend = u.nickName + " [" + u.jobTypeName + "] ";
@ -591,12 +667,12 @@ export default {
} }
}, },
/** 数据同步 */ /** 数据同步 */
dataSynchronization(){ dataSynchronization() {
let indexs = this.indexs; let indexs = this.indexs;
let data = this.smzSspProblemmodifyDraftList; let data = this.smzSspProblemmodifyDraftList;
let row = data[(indexs-1)]; let row = data[indexs - 1];
for(let i=0;i<data.length;i++){ for (let i = 0; i < data.length; i++) {
if(data[i].index!=row.index && data[i].projectId == row.projectId){ if (data[i].index != row.index && data[i].projectId == row.projectId) {
data[i].lordSent = row.lordSent; data[i].lordSent = row.lordSent;
data[i].lordSentUser = row.lordSentUser; data[i].lordSentUser = row.lordSentUser;
data[i].copySend = row.copySend; data[i].copySend = row.copySend;
@ -608,13 +684,13 @@ export default {
} }
this.smzSspProblemmodifyDraftList = data; this.smzSspProblemmodifyDraftList = data;
}, },
handleAdd(){ handleAdd() {
let row = { let row = {
index:this.smzSspProblemmodifyDraftList.length+1, index: this.smzSspProblemmodifyDraftList.length + 1,
id: null, id: null,
projectId: null, projectId: this.projectOptions.length == 1 ? this.projectOptions[0].id : null,
infoType: "1", infoType: "1",
problemArea: this.projectOptions.length==1?this.projectOptions[0].projectName:null, problemArea: this.projectOptions.length == 1 ? this.projectOptions[0].projectName : null,
workParts: null, workParts: null,
changeInfo: null, changeInfo: null,
lordSent: null, lordSent: null,
@ -628,42 +704,36 @@ export default {
processName: null, processName: null,
projectName: null, projectName: null,
nickedInfo: null, nickedInfo: null,
createUser:this.$store.getters.name, createUser: this.$store.getters.name,
createUserName:this.$store.getters.nickname, createUserName: this.$store.getters.nickname,
createUserDeptName:this.$store.getters.dept.deptName, createUserDeptName: this.$store.getters.dept.deptName,
createTime:this.$dt(new Date()).format("YYYY-MM-DD HH:mm:ss"), createTime: this.$dt(new Date()).format("YYYY-MM-DD HH:mm:ss"),
isDel: 0 isDel: 0,
} };
this.smzSspProblemmodifyDraftList.push(row); this.smzSspProblemmodifyDraftList.push(row);
this.changeProject(row.projectId,row); this.changeProject(row.projectId, row);
this.$notify({ this.$notify({
title: '新增成功', title: "新增成功",
message: '已新增一行新数据,提交后生效!', message: "已新增一行新数据,提交后生效!",
type: 'success' type: "success",
}); });
}, },
changeProject(val,row){ changeProject(val, row) {
if(val){ if (val) {
console.log(1111111111); if (!this.projectIds.includes(val)) {
if(!this.projectIds.includes(val)){
console.log(2222222222);
this.projectIds.push(row.projectId); this.projectIds.push(row.projectId);
this.$api.publics.selectProjectAllUnitUser({projectId: val}) this.$api.publics.selectProjectAllUnitUser({ projectId: val }).then((d) => {
.then((d) => { this.projectUnitUsers.push({ projectId: val, data: d.data });
console.log(3333333333);
this.projectUnitUsers.push({projectId:val,data:d.data});
}); });
} }
for(let i=0;i<this.projectOptions.length;i++){ for (let i = 0; i < this.projectOptions.length; i++) {
console.log(4444444444); if (this.projectOptions[i].projectId == val) {
if(this.projectOptions[i].projectId==val){
console.log(5555555555);
row.problemArea = this.projectOptions[i].projectName; row.problemArea = this.projectOptions[i].projectName;
break; break;
} }
} }
} }
} },
// changeProject(val,row){ // changeProject(val,row){
// if(!this.projectIds.includes(val)){ // if(!this.projectIds.includes(val)){
// this.projectIds.push(row.projectId); // this.projectIds.push(row.projectId);
@ -679,29 +749,29 @@ export default {
// } // }
// } // }
// } // }
} },
}; };
</script> </script>
<style lang="scss"> <style lang="scss">
.el-upload--picture-card{ .el-upload--picture-card {
width: 100px !important; width: 100px !important;
height: 100px !important; height: 100px !important;
line-height: 100px !important; line-height: 100px !important;
} }
.el-upload-list--picture-card .el-upload-list__item{ .el-upload-list--picture-card .el-upload-list__item {
width: 100px !important; width: 100px !important;
height: 100px !important; height: 100px !important;
} }
.bt2{ .bt2 {
padding-left: 0px !important; padding-left: 0px !important;
margin-left: 0px !important; margin-left: 0px !important;
} }
.tips{ .tips {
padding: 8px 16px; padding: 8px 16px;
background-color: #ecf8ff !important; background-color: #ecf8ff !important;
border-radius: 4px; border-radius: 4px;
border-left: 5px solid #50bfff; border-left: 5px solid #50bfff;
margin: 20px 0; margin: 20px 0;
color:#666666 !important; color: #666666 !important;
} }
</style> </style>

View File

@ -268,6 +268,20 @@
<el-form-item label="设备名称" prop="videoName"> <el-form-item label="设备名称" prop="videoName">
<el-input v-model="form.videoName" placeholder="请输入设备名称" /> <el-input v-model="form.videoName" placeholder="请输入设备名称" />
</el-form-item> </el-form-item>
<el-form-item label="设备类型" prop="videoOnlyType">
<el-select
v-model="form.videoOnlyType"
placeholder="请选择设备类型"
style="width: 100%"
>
<el-option
v-for="dict in dict.type.project_video_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="设备编号" prop="videoDvrNumber"> <el-form-item label="设备编号" prop="videoDvrNumber">
<el-input v-model="form.videoDvrNumber" placeholder="请输入设备编号" /> <el-input v-model="form.videoDvrNumber" placeholder="请输入设备编号" />
</el-form-item> </el-form-item>
@ -277,6 +291,20 @@
<el-form-item label="通信密码" prop="signalCode"> <el-form-item label="通信密码" prop="signalCode">
<el-input v-model="form.signalCode" placeholder="请输入通信密码" /> <el-input v-model="form.signalCode" placeholder="请输入通信密码" />
</el-form-item> </el-form-item>
<el-form-item label="通讯状态" prop="signalState">
<el-select
v-model="form.signalState"
placeholder="请选择设备状态"
style="width: 100%"
>
<el-option
v-for="dict in dict.type.project_video_signal_state"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-divider content-position="center">设备通道信息</el-divider> <el-divider content-position="center">设备通道信息</el-divider>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
@ -429,6 +457,12 @@ export default {
{ required: false, message: "请输入备注", trigger: "blur" }, { required: false, message: "请输入备注", trigger: "blur" },
{ maxlength: 200, message: "备注最多200字符", trigger: "blur" }, { maxlength: 200, message: "备注最多200字符", trigger: "blur" },
], ],
videoOnlyType: [
{ required: true, message: "请选择设备类型", trigger: "blur" }
],
signalState: [
{ required: true, message: "请输入通信状态", trigger: "blur" }
]
}, },
formData: { formData: {
videoDvrNumber: null, videoDvrNumber: null,

View File

@ -180,6 +180,20 @@
</el-form-item> </el-form-item>
<el-form-item label="设备名称" prop="videoName"> <el-form-item label="设备名称" prop="videoName">
<el-input v-model="form.videoName" placeholder="请输入设备名称" /> <el-input v-model="form.videoName" placeholder="请输入设备名称" />
</el-form-item>
<el-form-item label="设备类型" prop="videoOnlyType">
<el-select
v-model="form.videoOnlyType"
placeholder="请选择设备类型"
style="width: 100%"
>
<el-option
v-for="dict in dict.type.project_video_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="设备编号" prop="videoDvrNumber"> <el-form-item label="设备编号" prop="videoDvrNumber">
<el-input v-model="form.videoDvrNumber" placeholder="请输入设备编号" /> <el-input v-model="form.videoDvrNumber" placeholder="请输入设备编号" />
@ -189,6 +203,20 @@
</el-form-item> </el-form-item>
<el-form-item label="通信密码" prop="signalCode"> <el-form-item label="通信密码" prop="signalCode">
<el-input v-model="form.signalCode" placeholder="请输入通信密码" /> <el-input v-model="form.signalCode" placeholder="请输入通信密码" />
</el-form-item>
<el-form-item label="通讯状态" prop="signalState">
<el-select
v-model="form.signalState"
placeholder="请选择设备状态"
style="width: 100%"
>
<el-option
v-for="dict in dict.type.project_video_signal_state"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item> </el-form-item>
<el-divider content-position="center">设备通道信息</el-divider> <el-divider content-position="center">设备通道信息</el-divider>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
@ -324,6 +352,12 @@ export default {
{ required: false, message: "请输入备注", trigger: "blur" }, { required: false, message: "请输入备注", trigger: "blur" },
{ maxlength: 200, message: "备注最多200字符", trigger: "blur" }, { maxlength: 200, message: "备注最多200字符", trigger: "blur" },
], ],
videoOnlyType: [
{ required: true, message: "请选择设备类型", trigger: "blur" }
],
signalState: [
{ required: true, message: "请输入通信状态", trigger: "blur" }
]
}, },
isOpen: false, isOpen: false,
nodes: [], nodes: [],

View File

@ -8,29 +8,17 @@
@close="onClose" @close="onClose"
style="padding-left: 20px" style="padding-left: 20px"
> >
<div class="videoView" v-if="showVideoView0"> <div class="videoView">
<H265Player :url="url0" @on-error="handleOnError0" /> <div id="vd01"></div>
</div> </div>
<div class="videoView videoViewError" v-if="showVideoView0 == false"> <div class="videoView">
设备0通道链接失败请及时检查 <div id="vd02"></div>
</div> </div>
<div class="videoView" v-if="showVideoView1"> <div class="videoView">
<H265Player :url="url1" @on-error="handleOnError1" /> <div id="vd03"></div>
</div> </div>
<div class="videoView videoViewError" v-if="showVideoView1 == false"> <div class="videoView">
设备1通道链接失败请及时检查 <div id="vd04"></div>
</div>
<div class="videoView" v-if="showVideoView2">
<H265Player :url="url2" @on-error="handleOnError2" />
</div>
<div class="videoView videoViewError" v-if="showVideoView2 == false">
设备2通道链接失败请及时检查
</div>
<div class="videoView" v-if="showVideoView3">
<H265Player :url="url3" @on-error="handleOnError3" />
</div>
<div class="videoView videoViewError" v-if="showVideoView3 == false">
设备3通道链接失败请及时检查
</div> </div>
</el-drawer> </el-drawer>
</div> </div>
@ -38,13 +26,9 @@
<script> <script>
import { getVideoPassage, editPassageState } from "@/api/video/videoConfig"; import { getVideoPassage, editPassageState } from "@/api/video/videoConfig";
import H265Player from "vue-h265-player";
export default { export default {
name: "videoPlay", name: "videoPlay",
components: {
H265Player,
},
props: { props: {
formData: { formData: {
videoDvrNumber: String, videoDvrNumber: String,
@ -52,17 +36,9 @@ export default {
}, },
data() { data() {
return { return {
players: [],
request: request:
"http://192.168.25.2:7086/live/cameraid/{{videoDvrNumber}}${{passage}}/substream/2.m3u8", "https://szgc.jhncidg.com/video/live/cameraid/{{videoDvrNumber}}${{passage}}/substream/2.m3u8",
url0: "",
url1: "",
url2: "",
url3: "",
showVideoView0: true,
showVideoView1: true,
showVideoView2: true,
showVideoView3: true,
videoPassageList: [],
}; };
}, },
computed: {}, computed: {},
@ -80,54 +56,87 @@ export default {
}, },
}, },
created() {}, created() {},
mounted() {}, beforeDestroy() {
beforeDestroy() {}, console.log("-----beforeDestroy------>");
this.players.forEach((p) => {
if (p) {
try {
p.stop();
} catch (e) {}
}
});
},
mounted() {
this.$nextTick(() => {
for (let i = 1; i <= 4; i++) {
let player = new WasmPlayer(null, "vd0" + i, null, {
Height: true,
});
this.players.push(player);
}
});
},
methods: { methods: {
onOpen() {}, onOpen() {},
onClose() {}, onClose() {
this.players.forEach((p) => {
if (p) {
try {
p.stop();
} catch (e) {}
}
});
},
handleOnError0(error) { handleOnError0(error) {
//this.showVideoView0 = false; //this.showVideoView0 = false;
console.log("error: ", error); //console.log("error: ", error);
this.url0 = this.request.replace("192.168.25.2","111.21.209.230").replace("{{passage}}", "0"); //this.url0 = this.request.replace("192.168.25.2","111.21.209.230").replace("{{passage}}", "0");
//this.updatePassageState(this.videoPassageList[0].id); //this.updatePassageState(this.videoPassageList[0].id);
}, },
handleOnError1(error) { handleOnError1(error) {
//this.showVideoView1 = false; //this.showVideoView1 = false;
console.log("error: ", error); //console.log("error: ", error);
this.url1 = this.request.replace("192.168.25.2","111.21.209.230").replace("{{passage}}", "1"); //this.url1 = this.request.replace("192.168.25.2","111.21.209.230").replace("{{passage}}", "1");
//this.updatePassageState(this.videoPassageList[1].id); //this.updatePassageState(this.videoPassageList[1].id);
}, },
handleOnError2(error) { handleOnError2(error) {
//this.showVideoView2 = false; //this.showVideoView2 = false;
console.log("error: ", error); //console.log("error: ", error);
this.url2 = this.request.replace("192.168.25.2","111.21.209.230").replace("{{passage}}", "2"); //this.url2 = this.request.replace("192.168.25.2","111.21.209.230").replace("{{passage}}", "2");
//this.updatePassageState(this.videoPassageList[2].id); //this.updatePassageState(this.videoPassageList[2].id);
}, },
handleOnError3(error) { handleOnError3(error) {
//this.showVideoView3 = false; //this.showVideoView3 = false;
console.log("error: ", error); //console.log("error: ", error);
this.url3 = this.request.replace("192.168.25.2","111.21.209.230").replace("{{passage}}", "3"); //this.url3 = this.request.replace("192.168.25.2","111.21.209.230").replace("{{passage}}", "3");
//this.updatePassageState(this.videoPassageList[3].id); //this.updatePassageState(this.videoPassageList[3].id);
}, },
// //
initVideo() { initVideo() {
getVideoPassage(this.formData.videoDvrNumber).then((response) => { this.players.forEach((p) => {
let data = response.data; if (p) {
this.videoPassageList = data; try {
data.forEach((it, idx) => { p.stop();
if (idx == 0) { } catch (e) {}
this.url0 = this.request.replace("{{passage}}", it.passageValue);
}
if (idx == 1) {
this.url1 = this.request.replace("{{passage}}", it.passageValue);
}
if (idx == 2) {
this.url2 = this.request.replace("{{passage}}", it.passageValue);
}
if (idx == 3) {
this.url3 = this.request.replace("{{passage}}", it.passageValue);
} }
}); });
this.players = [];
let that = this;
getVideoPassage(that.formData.videoDvrNumber).then((response) => {
let data = response.data;
that.videoPassageList = data;
data.forEach((it, idx) => {
let player = new WasmPlayer(null, "vd0" + (idx + 1), null, {
Height: true,
});
that.players.push(player);
});
setTimeout(() => {
that.videoPassageList.forEach((it, idx) => {
let url = that.request.replace("{{passage}}", it.passageValue);
that.players[idx].play(url, 1);
});
},400);
}); });
}, },
updatePassageState(id) { updatePassageState(id) {

View File

@ -24,29 +24,17 @@
</div> </div>
</div> </div>
<div class="right" v-if="showVideo"> <div class="right" v-if="showVideo">
<div class="videoView" v-if="showVideoView0"> <div class="videoView">
<H265Player :url="url0" @on-error="handleOnError0" /> <div id="vd01"></div>
</div> </div>
<div class="videoView videoViewError" v-if="showVideoView0 == false"> <div class="videoView">
设备0通道链接失败请及时检查 <div id="vd02"></div>
</div> </div>
<div class="videoView" v-if="showVideoView1"> <div class="videoView">
<H265Player :url="url1" @on-error="handleOnError1" /> <div id="vd03"></div>
</div> </div>
<div class="videoView videoViewError" v-if="showVideoView1 == false"> <div class="videoView">
设备1通道链接失败请及时检查 <div id="vd04"></div>
</div>
<div class="videoView" v-if="showVideoView2">
<H265Player :url="url2" @on-error="handleOnError2" />
</div>
<div class="videoView videoViewError" v-if="showVideoView2 == false">
设备2通道链接失败请及时检查
</div>
<div class="videoView" v-if="showVideoView3">
<H265Player :url="url3" @on-error="handleOnError3" />
</div>
<div class="videoView videoViewError" v-if="showVideoView3 == false">
设备3通道链接失败请及时检查
</div> </div>
</div> </div>
</div> </div>
@ -58,35 +46,44 @@ import {
getVideoPassage, getVideoPassage,
editPassageState, editPassageState,
} from "@/api/video/videoConfig"; } from "@/api/video/videoConfig";
import H265Player from "vue-h265-player";
export default { export default {
name: "VideoPlay", name: "VideoPlay",
components: {
H265Player,
},
data() { data() {
return { return {
// //
loading: true, loading: true,
showVideo: false, players: [],
showVideo: true,
// //
videoConfigList: [], videoConfigList: [],
currentIndex: null, currentIndex: null,
request: request:
"http://111.21.209.230:7086/live/cameraid/{{videoDvrNumber}}${{passage}}/substream/2.m3u8", "https://szgc.jhncidg.com/video/live/cameraid/{{videoDvrNumber}}${{passage}}/substream/2.m3u8",
url0: "",
url1: "",
url2: "",
url3: "",
showVideoView0: true,
showVideoView1: true,
showVideoView2: true,
showVideoView3: true,
videoPassageList: [], videoPassageList: [],
videoDvrNumber: null, videoDvrNumber: null,
}; };
}, },
beforeDestroy() {
console.log("-----beforeDestroy------>");
this.players.forEach((p) => {
if (p) {
try {
p.stop();
} catch (e) {}
}
});
},
mounted() {
this.$nextTick(() => {
for (let i = 1; i <= 4; i++) {
let player = new WasmPlayer(null, "vd0" + i, null, {
Height: true,
});
this.players.push(player);
}
});
},
created() { created() {
this.initMenu(); this.initMenu();
}, },
@ -99,64 +96,64 @@ export default {
}); });
}, },
handlePlay(it, idx) { handlePlay(it, idx) {
this.players.forEach((p) => {
if (p) {
try {
p.stop();
} catch (e) {}
}
});
this.currentIndex = idx; this.currentIndex = idx;
this.showVideo = false; this.showVideo = false;
this.url0 = "";
this.url1 = "";
this.url2 = "";
this.url3 = "";
this.showVideoView0 = true;
this.showVideoView1 = true;
this.showVideoView2 = true;
this.showVideoView3 = true;
this.videoDvrNumber = it.videoDvrNumber; this.videoDvrNumber = it.videoDvrNumber;
setTimeout(() => {
this.initVideo( this.initVideo(
it.videoDvrNumber, it.videoDvrNumber,
this.request.replace("{{videoDvrNumber}}", it.videoDvrNumber) this.request.replace("{{videoDvrNumber}}", it.videoDvrNumber)
); );
},400)
}, },
// //
initVideo(videoDvrNumber, url) { initVideo(videoDvrNumber, url) {
let that = this; let that = this;
this.showVideo = true;
this.players = [];
getVideoPassage(videoDvrNumber).then((response) => { getVideoPassage(videoDvrNumber).then((response) => {
let data = response.data; let data = response.data;
this.videoPassageList = data; this.videoPassageList = data;
that.showVideo = true;
data.forEach((it, idx) => { data.forEach((it, idx) => {
if (idx == 0) { let player = new WasmPlayer(null, "vd0" + (idx + 1), null, {
that.url0 = url.replace("{{passage}}", it.passageValue); Height: true,
}
if (idx == 1) {
that.url1 = url.replace("{{passage}}", it.passageValue);
}
if (idx == 2) {
that.url2 = url.replace("{{passage}}", it.passageValue);
}
if (idx == 3) {
that.url3 = url.replace("{{passage}}", it.passageValue);
}
}); });
that.players.push(player);
});
setTimeout(() => {
that.videoPassageList.forEach((it, idx) => {
let themUrl = url.replace("{{passage}}", it.passageValue);
that.players[idx].play(themUrl, 1);
});
},400);
}); });
}, },
handleOnError0(error) { handleOnError0(error) {
this.showVideoView0 = false; //this.showVideoView0 = false;
console.log("error: ", error); //console.log("error: ", error);
this.updatePassageState(this.videoPassageList[0].id); //this.updatePassageState(this.videoPassageList[0].id);
}, },
handleOnError1(error) { handleOnError1(error) {
this.showVideoView1 = false; //this.showVideoView1 = false;
console.log("error: ", error); //console.log("error: ", error);
this.updatePassageState(this.videoPassageList[1].id); //this.updatePassageState(this.videoPassageList[1].id);
}, },
handleOnError2(error) { handleOnError2(error) {
this.showVideoView2 = false; //this.showVideoView2 = false;
console.log("error: ", error); //console.log("error: ", error);
this.updatePassageState(this.videoPassageList[2].id); //this.updatePassageState(this.videoPassageList[2].id);
}, },
handleOnError3(error) { handleOnError3(error) {
this.showVideoView3 = false; //this.showVideoView3 = false;
console.log("error: ", error); //console.log("error: ", error);
this.updatePassageState(this.videoPassageList[3].id); //this.updatePassageState(this.videoPassageList[3].id);
}, },
updatePassageState(id) { updatePassageState(id) {
let param = { let param = {
@ -178,7 +175,6 @@ export default {
overflow: hidden; overflow: hidden;
.side-nav { .side-nav {
margin-left: 20px;
height: 820px; height: 820px;
overflow-y: scroll; overflow-y: scroll;
.nav-item { .nav-item {
@ -211,6 +207,7 @@ export default {
display: block; display: block;
float: left; float: left;
margin-top: 6px; margin-top: 6px;
margin-right:5px;
background-color: var(--bgColor); background-color: var(--bgColor);
} }
} }