From ab72ffdff7ca370bb1a5bf0b34402f8e9a6d07f0 Mon Sep 17 00:00:00 2001 From: Your Name <123456> Date: 星期一, 28 三月 2022 09:14:11 +0800 Subject: [PATCH] 'lct' --- src/views/contractor/troubleStatistics/components/troubleDetail/index.vue | 151 +++ src/api/user.js | 10 src/api/blackList.js | 56 src/api/troubleStatistics.js | 48 src/views/contractor/userManage/components/workLicense/index.vue | 260 +++++ src/views/contractor/troubleStatistics/index.vue | 156 +++ src/views/contractor/workStatistics/workDetail/index.vue | 197 +++ src/assets/example/contractoruser.xlsx | 0 src/views/contractor/workStatistics/index.vue | 206 ++++ src/views/contractor/unitManage/index.vue | 443 ++++++++ src/views/contractor/blackList/index.vue | 271 +++++ src/views/contractor/userManage/index.vue | 1157 +++++++++++++++++++++++ 12 files changed, 2,922 insertions(+), 33 deletions(-) diff --git a/src/api/blackList.js b/src/api/blackList.js index 22dbc92..d7dc74c 100644 --- a/src/api/blackList.js +++ b/src/api/blackList.js @@ -1,47 +1,37 @@ +import {getToken} from "../utils/auth"; import request from '@/utils/request' -import { getToken } from '@/utils/auth' -export function getBlackList(data){ + +export function getBlackList(params) { return request({ - headers:{ - 'Authorization':getToken() + headers: { + 'Authorization': getToken() }, - url:process.env.BASE_API+ '/blackList/list', - method:'post', + url: process.env.BASE_API + '/blackList', + method: 'get', + params:params?params:{} + }) +} + +export function addBlack(data) { + return request({ + headers: { + 'Authorization': getToken() + }, + url: process.env.BASE_API + '/banCompany', + method: 'post', data }) } -export function addBlackList(data){ +export function deleteBlack(data) { return request({ - headers:{ - 'Authorization':getToken() + headers: { + 'Authorization': getToken() }, - url:process.env.BASE_API+ '/blackList/add', - method:'post', - data - }) -} - -export function updateBlackList(data){ - return request({ - headers:{ - 'Authorization':getToken() - }, - url:process.env.BASE_API+ '/blackList/mod', - method:'post', - data - }) -} - -export function deleteBlackList(data){ - return request({ - headers:{ - 'Authorization':getToken() - }, - url:process.env.BASE_API+ '/blackList/del?id=' + data, - method:'post', + url: process.env.BASE_API + '/cancelBan', + method: 'post', data }) } diff --git a/src/api/troubleStatistics.js b/src/api/troubleStatistics.js new file mode 100644 index 0000000..efe2260 --- /dev/null +++ b/src/api/troubleStatistics.js @@ -0,0 +1,48 @@ +import {getToken} from "../utils/auth"; +import request from '@/utils/request' + + + +export function getTroubleList(params) { + return request({ + headers: { + 'Authorization': getToken() + }, + url: process.env.BASE_API + '/hiddenDanger/statistics', + method: 'get', + params:params?params:{} + }) +} + +export function getTroubleDetailList(params) { + return request({ + headers: { + 'Authorization': getToken() + }, + url: process.env.BASE_API + '/hiddenDanger/info', + method: 'get', + params:params?params:{} + }) +} + +export function getWorkList(params) { + return request({ + headers: { + 'Authorization': getToken() + }, + url: process.env.BASE_API + '/task/statistics', + method: 'get', + params:params?params:{} + }) +} + +export function getWorkDetailList(params) { + return request({ + headers: { + 'Authorization': getToken() + }, + url: process.env.BASE_API + '/task/info', + method: 'get', + params:params?params:{} + }) +} diff --git a/src/api/user.js b/src/api/user.js index bb163b2..da92fd9 100644 --- a/src/api/user.js +++ b/src/api/user.js @@ -234,3 +234,13 @@ }) } +export function importSupplierUser(data) { + return request({ + headers: { + 'Authorization': getToken() + }, + url: process.env.BASE_API + '/importSupplierUser', + method: 'post', + data + }) +} diff --git a/src/assets/example/contractoruser.xlsx b/src/assets/example/contractoruser.xlsx new file mode 100644 index 0000000..65f80ca --- /dev/null +++ b/src/assets/example/contractoruser.xlsx Binary files differ diff --git a/src/views/contractor/blackList/index.vue b/src/views/contractor/blackList/index.vue new file mode 100644 index 0000000..ceec0ad --- /dev/null +++ b/src/views/contractor/blackList/index.vue @@ -0,0 +1,271 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div class="basic_search"> + <span>单位名称:</span> + <el-input v-model="company" style="width:200px"> + </el-input> + </div> + <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-refresh" @click="refreshHandle">搜索</el-button> + <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-plus" @click="showUnitForm('','新增')">新增</el-button> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="blackData" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column type="index" label="序号" align="center" width="60"/> + <el-table-column label="单位名称" prop="company" align="center"> + </el-table-column> + <el-table-column label="创建人" prop="code" align="center"> + </el-table-column> + <el-table-column label="创建时间" prop="contactname" align="center"> + </el-table-column> + <el-table-column label="操作" align="center" width="280" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <el-button type="text" style="color: red" @click="deleteById(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + <br> + </div> + <el-dialog :title="title" :visible.sync="blackFormVisible" :modal-append-to-body="false" :close-on-click-modal="false" width="40%"> + <el-form ref="blackForm" :rules="blackFormRules" :model="blackForm" label-position="right" label-width="100px" style="margin-left:50px;width:500px;"> + <el-form-item label="单位名称" prop="company"> + <el-input v-model="blackForm.company"></el-input> + </el-form-item> + </el-form> + <div align="right"> + <el-button @click="unitFormVisible = false">取消</el-button> + <el-button type="primary" @click="submitUnit()">确认</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> + import { mapGetters } from 'vuex' + import { computePageCount } from '../../../utils' + import { addBlack, deleteBlack, getBlackList } from '../../../api/blackList' + import { getDistrict } from '../../../api/user' + import { parseError } from '../../../utils/messageDialog' + import { getCityListData } from '../../../api/area' + + export default { + name: 'index', + filters: { + parseMain(type){ + if(type === 1){ + return "是" + }else if(type === 0){ + return "否" + } + }, + }, + computed: { + ...mapGetters([ + 'userType' + ]) + }, + data() { + return { + tableKey: 0, + blackData: [], + listLoading: false, + pageSize: 10, + recordTotal: 0, + currentPage: 1, + pageTotal: 0, + title:'', + company:'', + code:'', + blackFormVisible:false, + blackFormRules:{company: [{ required: true, message: '单位名称不能为空', trigger: 'blur' }],}, + blackForm:{ + id:'', + company:'', + + }, + } + }, + created() { + this.getBlackData() + this.getProvince() + }, + methods: { + async getBlackData(){ + this.listLoading = true + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['company'] = this.company + let res = await getBlackList(params) + if(res.data.code === '200'){ + this.recordTotal = res.data.result.totalCount + this.pageSize = res.data.result.pageSize + this.pageTotal = computePageCount(res.data.result.totalCount, res.data.result.pageSize) + this.currentPage = res.data.result.pageIndex + this.blackData = res.data.result.result + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + this.listLoading = false + }, + showUnitForm(value,type){ + this.blackFormVisible = true + if(type === '新增'){ + this.title = '新增' + this.blackForm = { + id:'', + company:'', + } + }else{ + this.title = '修改' + this.blackForm = value + } + }, + submitUnit(){ + addBlack(this.blackForm).then((res)=>{ + if(res.data.code === '200'){ + this.blackFormVisible = false + this.getBlackData() + this.$notify({ + type:'success', + duration:2000, + message:'新增成功', + title:'成功' + }) + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }) + }, + deleteById(val){ + this.$confirm('取消拉黑,是否继续','提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(()=> { + deleteBlack({company:val.company}).then( ()=>{ + this.getBlackData() + this.$notify({ + title:'成功', + message:'删除成功', + type:'success', + duration:2000, + }) + }) + }) + }, + refreshHandle(){ + this.getBlackData() + }, + handleSizeChange(val){ + this.pageSize = val + this.getBlackData() + }, + handleCurrentChange(val){ + this.currentPage = val + this.getBlackData() + }, + + getProvince(){ + const params = {} + params['parenttype'] = 0 + params['type'] = 1 + getDistrict(params).then(response => { + const res = response.data + if (res.code == 200){ + this.provinceList = res.result; + } else { + parseError({ error: res.data.message, vm: _this }) + } + }).catch(error => { + }) + }, + async changeArea(value){ + if(value === 'province'){ + this.unitForm.city = '' + this.unitForm.area = '' + this.unitForm.town = '' + this.unitForm.community = '' + this.areaListQuery = { + type: 2, + parenttype: 1, + parentname: this.unitForm.province, + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.cityList = res.data.result + } + }else if(value === 'city'){ + this.unitForm.area = '' + this.unitForm.town = '' + this.unitForm.community = '' + this.areaListQuery = { + type: 3, + parenttype: 2, + parentname: this.unitForm.city, + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.districtList = res.data.result + } + }else if(value === 'area'){ + this.unitForm.town = '' + this.unitForm.community = '' + this.areaListQuery = { + type: 4, + parenttype: 3, + parentname: this.unitForm.area, + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.streetList = res.data.result + } + }else if(value === 'town'){ + this.unitForm.community = '' + this.areaListQuery = { + type: 5, + parenttype: 4, + parentname: this.unitForm.town, + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.committeeList = res.data.result + } + } + },//市、镇、街道、委员会 + } + } +</script> +<style scoped> + .basic_search{ + display:inline-block; + padding-bottom: 10px; + } +</style> diff --git a/src/views/contractor/troubleStatistics/components/troubleDetail/index.vue b/src/views/contractor/troubleStatistics/components/troubleDetail/index.vue new file mode 100644 index 0000000..daead62 --- /dev/null +++ b/src/views/contractor/troubleStatistics/components/troubleDetail/index.vue @@ -0,0 +1,151 @@ +<template> + <el-dialog :title="title" :visible.sync="troubleDetailVisible" :modal-append-to-body="false" :close-on-click-modal="false" width="70%"> + <div class="app-container"> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="troubleDetailData" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column type="index" label="序号" align="center" width="80"/> + <el-table-column label="状态" prop="status" align="center" /> + <el-table-column label="作业编号" prop="taskcode" align="center" /> + <el-table-column label="隐患等级" prop="level" align="center" > + <template slot-scope="scope"> + <el-tag :type="scope.row.level == '紧急'?'danger':'warning'">{{scope.row.level}}</el-tag> + </template> + </el-table-column> + <el-table-column label="上报人" prop="requestor" align="center" /> + <el-table-column label="负责人" prop="principal" align="center" /> + <el-table-column label="整改人" prop="supervisor" align="center" /> + <el-table-column label="创建时间" prop="createtime" align="center" /> + <el-table-column label="图片" align="center" > + <template slot-scope="scope"> + <el-popover placement="top-start" trigger="click"> + <img slot="reference" v-for="(item,index) in scope.row.reportResources" :src="item.url" :key="index" style="width:40px;height:40px;margin-left:10px;cursor:pointer" @click="reportResources(item)"></img> + </el-popover> + </template> + </el-table-column> + </el-table> + <br> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + <br> + </div> + <el-dialog :visible.sync="dialogVisible" :append-to-body="true"> + <img width="100%" :src="dialogImageUrl" alt=""> + </el-dialog> + </div> + </el-dialog> +</template> + +<script> + import { mapGetters } from 'vuex' + import { getTroubleDetailList } from '../../../../../api/troubleStatistics' + import { computePageCount } from '../../../../../utils' + + export default { + name: 'index', + filters: { + parseMain(type){ + if(type === 1){ + return "是" + }else if(type === 0){ + return "否" + } + }, + }, + computed: { + ...mapGetters([ + 'userType' + ]) + }, + data() { + return { + tableKey: 0, + troubleDetailData: [], + listLoading: false, + pageSize: 10, + recordTotal: 0, + currentPage: 1, + pageTotal: 0, + title:'', + company:'', + starttime:'', + endtime:'', + troubleDetailVisible:false, + dialogImageUrl:'', + dialogVisible:false, + } + }, + created() { + }, + methods: { + showTroubleDetail(company,starttime,endtime){ + this.troubleDetailVisible = true + this.starttime = starttime + this.endtime = endtime + this.company = company + this.getTroubleData() + }, + async getTroubleData(){ + this.listLoading = true + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['company'] = this.company + params['starttime'] = this.starttime + params['endtime'] = this.endtime + let res = await getTroubleDetailList(params) + if(res.data.code === '200'){ + this.recordTotal = res.data.result.totalCount + this.pageSize = res.data.result.pageSize + this.pageTotal = computePageCount(res.data.result.totalCount, res.data.result.pageSize) + this.currentPage = res.data.result.pageIndex + this.troubleDetailData = res.data.result.result + for(let i=0;i<this.troubleDetailData.length;i++){ + if(this.troubleDetailData[i].reportResources.length != 0) { + for (let j = 0; j < this.troubleDetailData[i].reportResources.length; j++) { + this.troubleDetailData[i].reportResources[j].url = process.env.IMG_API + this.troubleDetailData[i].reportResources[j].url + } + } + } + }else{ + } + this.listLoading = false + }, + reportResources(file){ + this.dialogImageUrl = file.url; + this.dialogVisible = true; + }, + handleSizeChange(val){ + this.pageSize = val + this.getTroubleData() + }, + handleCurrentChange(val){ + this.currentPage = val + this.getTroubleData() + }, + } + } +</script> +<style scoped> + .basic_search{ + display:inline-block; + padding-bottom: 10px; + } +</style> diff --git a/src/views/contractor/troubleStatistics/index.vue b/src/views/contractor/troubleStatistics/index.vue new file mode 100644 index 0000000..815c6d0 --- /dev/null +++ b/src/views/contractor/troubleStatistics/index.vue @@ -0,0 +1,156 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div class="basic_search"> + <span>单位名称:</span> + <el-input v-model="company" style="width:200px"> + </el-input> + </div> + <div class="basic_search"> + <span>开始时间:</span> + <el-date-picker + v-model="starttime" + align="right" + value-format="yyyy-MM-dd" + placeholder="开始时间"> + </el-date-picker> + </div> + <div class="basic_search"> + <span>结束时间:</span> + <el-date-picker + v-model="endtime" + align="right" + value-format="yyyy-MM-dd" + placeholder="开始时间"> + </el-date-picker> + </div> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-refresh" @click="refreshHandle">搜索</el-button> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="troubleData" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column label="单位名称" prop="constructionunit" align="center"> + </el-table-column> + <el-table-column label="隐患数量" prop="countNum" align="center"> + </el-table-column> + <el-table-column label="操作" align="center" width="280" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <el-button type="text" @click="showTroubleDetail(scope.row)">详情</el-button> + </template> + </el-table-column> + </el-table> + + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + <br> + <trouble-detail ref="troubleDetail"></trouble-detail> + </div> + </div> +</template> + +<script> + import troubleDetail from './components/troubleDetail/index' + import { mapGetters } from 'vuex' + import { computePageCount } from '../../../utils' + import { getTroubleList, } from '../../../api/troubleStatistics' + + export default { + name: 'index', + filters: { + parseMain(type){ + if(type === 1){ + return "是" + }else if(type === 0){ + return "否" + } + }, + }, + components:{ + troubleDetail + }, + computed: { + ...mapGetters([ + 'userType' + ]) + }, + data() { + return { + tableKey: 0, + troubleData: [], + listLoading: false, + pageSize: 10, + recordTotal: 0, + currentPage: 1, + pageTotal: 0, + company:'', + starttime:'', + endtime:'', + } + }, + created() { + this.getTroubleData() + }, + methods: { + async getTroubleData(){ + this.listLoading = true + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['company'] = this.company + params['starttime'] = this.starttime + params['endtime'] = this.endtime + let res = await getTroubleList(params) + if(res.data.code === '200'){ + this.recordTotal = res.data.result.totalCount + this.pageSize = res.data.result.pageSize + this.pageTotal = computePageCount(res.data.result.totalCount, res.data.result.pageSize) + this.currentPage = res.data.result.pageIndex + this.troubleData = res.data.result.result + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + this.listLoading = false + }, + showTroubleDetail(val){ + this.$refs.troubleDetail.showTroubleDetail(val.constructionunit,this.starttime,this.endtime) + }, + refreshHandle(){ + this.getTroubleData() + }, + handleSizeChange(val){ + this.pageSize = val + this.getTroubleData() + }, + handleCurrentChange(val){ + this.currentPage = val + this.getTroubleData() + }, + } + } +</script> +<style scoped> + .basic_search{ + display:inline-block; + padding-bottom: 10px; + } +</style> diff --git a/src/views/contractor/unitManage/index.vue b/src/views/contractor/unitManage/index.vue new file mode 100644 index 0000000..28654bb --- /dev/null +++ b/src/views/contractor/unitManage/index.vue @@ -0,0 +1,443 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div class="basic_search"> + <span>单位名称:</span> + <el-input v-model="company" style="width:200px"> + </el-input> + </div> + <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-refresh" @click="refreshHandle">搜索</el-button> + <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-plus" @click="showUnitForm('','新增')">新增</el-button> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="unitData" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column label="单位名称" prop="company" align="center"> + </el-table-column> + <el-table-column label="单位代码" prop="code" align="center"> + </el-table-column> + <el-table-column label="是否为主体单位" prop="ismain" align="center"> + <template slot-scope="scope"> + {{ scope.row.ismain | parseMain}} + </template> + </el-table-column> + <el-table-column label="联系人" prop="contactname" align="center"> + </el-table-column> + <el-table-column label="联系电话" prop="contactphone" align="center"> + </el-table-column> + <el-table-column label="地址" prop="address" align="center"> + <template slot-scope="scope"> + <div> + <span>{{scope.row.province}}</span> + <span v-if="scope.row.city !== null && scope.row.city !== '' && scope.row.province !== undefined">{{"-" + scope.row.city}}</span> + <span v-if="scope.row.area !== null && scope.row.area !== '' && scope.row.city !== undefined">{{"-" + scope.row.area}}</span> + <span v-if="scope.row.town !== null && scope.row.town !== '' && scope.row.town !== undefined">{{"-" + scope.row.town}}</span> + <span v-if="scope.row.committee !== null && scope.row.committee !== '' && scope.row.committee !== undefined">{{"-" + scope.row.committee}}</span> + </div> + <div></div> + </template> + </el-table-column> + <el-table-column label="创建者" prop="createdby" align="center"> + </el-table-column> + <el-table-column label="创建时间" prop="createddate" align="center"> + </el-table-column> + <el-table-column label="是否黑名单" prop="isbanned" align="center"> + <template slot-scope="scope"> + <span>{{ scope.row.isbanned | parseIsBanned }}</span> + </template> + </el-table-column> + <el-table-column label="操作" align="center" width="280" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <el-button type="text" @click="showUnitForm(scope.row,'编辑')">编辑</el-button> + <el-button type="text" style="color: red" @click="deleteById(scope.row)">删除</el-button> + <el-button type="text" style="color: red" @click="addBlack(scope.row)">黑名单</el-button> + </template> + </el-table-column> + </el-table> + + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + <br> + </div> + <el-dialog :title="title" :visible.sync="unitFormVisible" :modal-append-to-body="false" :close-on-click-modal="false" width="40%"> + <el-form ref="dataForm" :rules="unitFormRules" :model="unitForm" label-position="right" label-width="100px" style="margin-left:50px;width:500px;"> + <el-form-item label="单位名称"> + <el-input v-model="unitForm.company"></el-input> + </el-form-item> + <el-form-item label="单位代码"> + <el-input v-model="unitForm.code"></el-input> + </el-form-item> + <el-form-item label="是否为主体单位:" prop="ismain"> + <el-select v-model.trim="unitForm.ismain" auto-complete="on" style="width:100%;"> + <el-option + v-for="item in isMainList" + :key="item.id" + :value="item.id" + :label="item.name" + > + </el-option> + </el-select> + </el-form-item> + <el-form-item label="联系人"> + <el-input v-model="unitForm.contactname"></el-input> + </el-form-item> + <el-form-item label="联系电话"> + <el-input v-model="unitForm.contactphone"></el-input> + </el-form-item> + <el-form-item label="省"> + <el-select v-model="unitForm.province" clearable filterable @change="changeArea('province')" style="width:100%;"> + <el-option + v-for="item in provinceList" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-select> + </el-form-item> + <el-form-item label="市"> + <el-select v-model="unitForm.city" prop="city" clearable filterable @change="changeArea('city')" style="width:100%;"> + <el-option + v-for="item in cityList" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-select> + </el-form-item> + <el-form-item label="区"> + <el-select v-model="unitForm.area" clearable filterable @change="changeArea('area')" style="width:100%;"> + <el-option + v-for="item in districtList" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-select> + </el-form-item> + <el-form-item label="街道"> + <el-select v-model="unitForm.town" clearable filterable @change="changeArea('town')" style="width:100%;"> + <el-option + v-for="item in streetList" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-select> + </el-form-item> + <el-form-item label="居委会"> + <el-select v-model="unitForm.community" clearable filterable style="width:100%;"> + <el-option + v-for="item in committeeList" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-select> + </el-form-item> + </el-form> + <div align="right"> + <el-button @click="unitFormVisible = false">取消</el-button> + <el-button type="primary" @click="submitUnit()">确认</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> + import { mapGetters } from 'vuex' + import { computePageCount } from '../../../utils' + import { addUnit, deleteUnit, getUnitList, updateUnit } from '../../../api/unitManage' + import { getDistrict } from '../../../api/user' + import { parseError } from '../../../utils/messageDialog' + import { getCityListData } from '../../../api/area' + import { addBlack } from '../../../api/blackList' + + export default { + name: 'index', + filters: { + parseMain(type){ + if(type === 1){ + return "是" + }else if(type === 0){ + return "否" + } + }, + parseIsBanned(value){ + if(value === 1){ + return "是" + }else if(value === 0){ + return "否" + } + }, + }, + computed: { + ...mapGetters([ + 'userType' + ]) + }, + data() { + return { + tableKey: 0, + unitData: [], + listLoading: false, + pageSize: 10, + recordTotal: 0, + currentPage: 1, + pageTotal: 0, + title:'', + company:'', + code:'', + unitFormVisible:false, + unitFormRules:{}, + unitForm:{ + id:'', + company:'', + code:'', + contactname:'', + contactphone:'', + province:'', + city:'', + area:'', + town:'', + committee:'', + isbanned:'', + }, + provinceList:[], + cityList:[], + districtList:[], + committeeList:[], + streetList:[], + isMainList:[{id:1,name:'是'},{id:0,name:'否'}], + } + }, + created() { + this.getUnitData() + this.getProvince() + }, + methods: { + async getUnitData(){ + this.listLoading = true + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['company'] = this.company + let res = await getUnitList(params) + if(res.data.code === '200'){ + this.recordTotal = res.data.result.totalCount + this.pageSize = res.data.result.pageSize + this.pageTotal = computePageCount(res.data.result.totalCount, res.data.result.pageSize) + this.currentPage = res.data.result.pageIndex + this.unitData = res.data.result.result + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + this.listLoading = false + }, + showUnitForm(value,type){ + this.unitFormVisible = true + if(type === '新增'){ + this.title = '新增' + this.unitForm = { + id:'', + company:'', + code:'', + contactname:'', + contactphone:'', + province:'', + city:'', + area:'', + town:'', + committee:'', + isbanned:'', + } + }else{ + this.title = '修改' + this.unitForm = value + } + }, + submitUnit(){ + if(this.title === '新增'){ + addUnit(this.unitForm).then((res)=>{ + if(res.data.code === '200'){ + this.unitFormVisible = false + this.getUnitData() + this.$notify({ + type:'success', + duration:2000, + message:'新增成功', + title:'成功' + }) + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }) + }else{ + updateUnit(this.unitForm).then((res)=>{ + if(res.data.code === '200'){ + this.unitFormVisible = false + this.getUnitData() + this.$notify({ + type:'success', + duration:2000, + title:'成功', + message:'编辑成功' + }) + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }) + } + }, + deleteById(val){ + this.$confirm('删除此条信息,是否继续','提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(()=> { + deleteUnit({id:val.id}).then( ()=>{ + this.getUnitData() + this.$notify({ + title:'成功', + message:'删除成功', + type:'success', + duration:2000, + }) + }) + }) + }, + addBlack(val){ + this.$confirm('将此单位添加黑名单,是否继续','提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(()=> { + addBlack({company:val.company}).then( ()=>{ + this.getUnitData() + this.$notify({ + title:'成功', + message:'删除成功', + type:'success', + duration:2000, + }) + }) + }) + }, + refreshHandle(){ + this.getUnitData() + }, + handleSizeChange(val){ + this.pageSize = val + this.getUnitData() + }, + handleCurrentChange(val){ + this.currentPage = val + this.getUnitData() + }, + + getProvince(){ + const params = {} + params['parenttype'] = 0 + params['type'] = 1 + getDistrict(params).then(response => { + const res = response.data + if (res.code == 200){ + this.provinceList = res.result; + } else { + parseError({ error: res.data.message, vm: _this }) + } + }).catch(error => { + }) + }, + async changeArea(value){ + if(value === 'province'){ + this.unitForm.city = '' + this.unitForm.area = '' + this.unitForm.town = '' + this.unitForm.community = '' + this.areaListQuery = { + type: 2, + parenttype: 1, + parentname: this.unitForm.province, + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.cityList = res.data.result + } + }else if(value === 'city'){ + this.unitForm.area = '' + this.unitForm.town = '' + this.unitForm.community = '' + this.areaListQuery = { + type: 3, + parenttype: 2, + parentname: this.unitForm.city, + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.districtList = res.data.result + } + }else if(value === 'area'){ + this.unitForm.town = '' + this.unitForm.community = '' + this.areaListQuery = { + type: 4, + parenttype: 3, + parentname: this.unitForm.area, + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.streetList = res.data.result + } + }else if(value === 'town'){ + this.unitForm.community = '' + this.areaListQuery = { + type: 5, + parenttype: 4, + parentname: this.unitForm.town, + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.committeeList = res.data.result + } + } + },//市、镇、街道、委员会 + } + } +</script> +<style scoped> + .basic_search{ + display:inline-block; + padding-bottom: 10px; + } +</style> diff --git a/src/views/contractor/userManage/components/workLicense/index.vue b/src/views/contractor/userManage/components/workLicense/index.vue new file mode 100644 index 0000000..2a8acb9 --- /dev/null +++ b/src/views/contractor/userManage/components/workLicense/index.vue @@ -0,0 +1,260 @@ +<template> + <el-dialog + :visible.sync="workLicenseDialog" + :close-on-click-modal="false" + title="工作证" + width="60%" + > + <div class="app-container"> + <div class="filter-container"> + <div class="basic_search"> + <el-button type="primary" @click="showLicenseForm('','新增')">新增</el-button> + <el-button type="primary" icon="el-icon-search">查询</el-button> + </div> + </div> + <div class="table_content"> + <el-table :data="workLicenseData" v-loading="listLoading" :key="tableKey" fit border highlight-current-row style="width: 100%;"> + <el-table-column type="index" label="" align="center" width="60"/> + <el-table-column label="姓名" prop="realname" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="手机号" prop="mobile" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="身份证" prop="idcard" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="特殊作业工种" prop="branch" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="特殊作业证件号" prop="certname" align="center" sortable="custom"> + </el-table-column> + <el-table-column label="文件路径" prop="certpath" align="center" sortable="custom"> + <template slot-scope="scope"> + <a :href="baseUrl+scope.row.certpath" target="_blank">{{baseUrl+scope.row.url}}</a> + </template> + </el-table-column> + <el-table-column label="有效期开始时间" prop="starttime" align="center" > + </el-table-column> + <el-table-column label="有效期结束时间" prop="endtime" align="center" > + </el-table-column> + <el-table-column label="操作" align="center" width="250" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <el-button type="text" @click="showLicenseForm(scope.row,'编辑')">编辑</el-button> + <el-button type="text" style="color: red" @click="deleteById(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + </div> + <el-dialog + :visible.sync="LicenseFormDialog" + :close-on-click-modal="false" + :append-to-body="true" + :title="title" + width="30%" + > + <el-form ref="licenseForm" :rules="licenseRules" :model="licenseForm" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中..."> + <el-form-item label="真实姓名:" prop="realname"> + <el-input v-model.trim="licenseForm.realname" :disabled="true"/> + </el-form-item> + <el-form-item label="联系方式:" prop="mobile"> + <el-input v-model.trim="licenseForm.mobile" :disabled="true"/> + </el-form-item> + <el-form-item label="身份证:" prop="idcard"> + <el-input v-model.trim="licenseForm.idcard" :disabled="true"/> + </el-form-item> + <el-form-item label="特种作业工种:" prop="branch"> + <el-select v-model.trim="licenseForm.branch"/> + <el-option + v-for="item in branchList" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-form-item> + <el-form-item label="特种作业证件号:" prop="certname"> + <el-input v-model.trim="licenseForm.certname"/> + </el-form-item> + <el-form-item label="有效期开始时间:" prop="starttime"> + <el-date-picker + value-format="yyyy-MM-dd" + v-model="licenseForm.starttime" + type="date" + placeholder="选择日期时间"> + </el-date-picker> + </el-form-item> + <el-form-item label="有效期结束时间:" prop="endtime"> + <el-date-picker + value-format="yyyy-MM-dd" + v-model="licenseForm.endtime" + type="date" + placeholder="选择日期时间"> + </el-date-picker> + </el-form-item> + <el-form-item label="文件:" prop="upload"> + <input id="upload" ref="upload" type="file"/> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button @click="LicenseFormDialog = false">取消</el-button> + <el-button type="primary" @click="submit()">确定</el-button> + </div> + </el-dialog> + </el-dialog> +</template> + +<script> +import { addWorkLicense, deleteWorkLicense, getWorkLicenseList, updateWorkLicense } from '../../../../../api/user' +import { parseError } from '../../../../../utils/messageDialog' +import { deleteUnit } from '../../../../../api/unitManage' + +export default { + name: 'index', + data(){ + return{ + baseUrl: process.env.IMG_API, + title:'', + tableKey:'', + mobile:'', + listLoading:false, + workLicenseData:[], + branchList:[{id:1,name:'电工作业'},{id:2,name:'焊接与热切割作业'},{id:3,name:'高处作业'},{id:4,name:'制冷与空调作业'},{id:5,name:'煤矿安全作业'},{id:6,name:'压力容器作业'},{id:7,name:'采掘(剥)作业'},{id:8,name:'矿山提升运输作业'},{id:9,name:'矿山安全检查作业'},{id:10,name:'矿山通风作业'},{id:11,name:'矿山排水作业'},], + workLicenseDialog:false, + LicenseFormDialog:false, + licenseForm:{ + id:'', + realname:'', + mobile:'', + idcard:'', + certname:'', + starttime:'', + endtime:'', + branch:'', + }, + licenseRules:{ + + } + } + }, + methods:{ + openWorkLicense(row){ + this.workLicenseDialog = true + this.licenseForm.realname = row.realname + this.licenseForm.mobile = row.username + this.licenseForm.idcard = row.idcard + this.licenseForm.branch = row.branch + this.getWorkLicenseData() + }, + async getWorkLicenseData(){ + let res = await getWorkLicenseList(this.licenseForm.mobile) + if(res.data.code === '200'){ + this.workLicenseData = res.data.result + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }, + showLicenseForm(value,type){ + this.LicenseFormDialog = true + if(type === '新增'){ + this.licenseForm.certname = '' + this.licenseForm.starttime = '' + this.licenseForm.endtime = '' + this.licenseForm.branch = '' + this.title = '新增' + }else{ + this.title = '编辑' + this.licenseForm = value + } + }, + submit(){ + if(this.title === '新增'){ + const formData = new FormData(); + for (const i in this.licenseForm) { + if ( + this.licenseForm[i] != undefined && + this.licenseForm[i].toString() != "" + ) { + formData.append(i, this.licenseForm[i]); + } + } + if(this.$refs["upload"].files.length !== 0){ + formData.append('file', this.$refs["upload"].files[0]) + } + addWorkLicense(formData).then(res =>{ + if(res.data.code === '200'){ + this.LicenseFormDialog = false + this.getWorkLicenseData() + this.$notify({ + title:'成功', + message:'新增成功', + duration:2000, + type:'success' + }) + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }).catch(error => { + parseError({ error: error, vm: this }) + }) + }else{ + const formData = new FormData(); + for (const i in this.licenseForm) { + if ( + this.licenseForm[i] != undefined && + this.licenseForm[i].toString() != "" + ) { + formData.append(i, this.licenseForm[i]); + } + } + if(this.$refs["upload"].files.length !== 0){ + formData.append('file', this.$refs["upload"].files[0]) + } + updateWorkLicense(formData).then(res =>{ + if(res.data.code === '200'){ + this.LicenseFormDialog = false + this.getWorkLicenseData() + this.$notify({ + type:'success', + message:'新增成功', + duration:2000, + title:'成功' + }) + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + }).catch(error =>{ + parseError({error:error,vm:this}) + }) + } + }, + deleteById(row){ + this.$confirm('删除此条工作证,是否继续','提示',{ + confirmButtonText:'确定', + cancelButtonText:'取消', + type:'warning', + }).then(()=> { + deleteWorkLicense({id:row.id}).then( ()=>{ + this.getWorkLicenseData() + this.$notify({ + title:'成功', + message:'删除成功', + type:'success', + duration:2000, + }) + }) + }).catch(error => parseError({error:error, vm:this})) + } + } +} +</script> + +<style scoped> + +</style> diff --git a/src/views/contractor/userManage/index.vue b/src/views/contractor/userManage/index.vue new file mode 100644 index 0000000..e949659 --- /dev/null +++ b/src/views/contractor/userManage/index.vue @@ -0,0 +1,1157 @@ +<template> + <div class="app-container"> + <div> + <el-form :inline="true" :model="queryForm"> + <el-form-item label="用户名"> + <el-input + v-model="queryForm.username" + class="filter-item" + placeholder="" + style="width: 150px;" + @keyup.enter.native="queryHandle" + /> + </el-form-item> + <el-form-item label="单位"> + <el-input + v-model="queryForm.company" + class="filter-item" + placeholder="" + style="width: 200px;" + @keyup.enter.native="queryHandle" + /> + </el-form-item> + <el-form-item label="部门"> + <el-input + v-model="queryForm.department" + class="filter-item" + placeholder="" + style="width: 150px;" + @keyup.enter.native="queryHandle" + /> + </el-form-item> + <el-form-item label="职务"> + <el-input + v-model="queryForm.job" + class="filter-item" + placeholder="" + style="width: 150px;" + @keyup.enter.native="queryHandle" + /> + </el-form-item> + <el-form-item> + <el-button + class="filter-item" + type="primary" + icon="el-icon-search" + @click="queryHandle" + /> + </el-form-item> + <el-form-item> + <el-button + v-if="getBtnPermission('add')" + v-show="userType != 3" + class="filter-item" + style="margin-left: 10px;" + type="primary" + icon="el-icon-plus" + @click="showCreateHandle" + >新增</el-button> + </el-form-item> + <el-form-item> + <el-button + v-if="getBtnPermission('import')" + v-show="userType != 3" + class="filter-item" + style="margin-left: 10px;" + type="primary" + icon="el-icon-upload2" + @click="showImportHandle" + >导入</el-button> + </el-form-item> + </el-form> + </div> + <!-- <div style="display: block;margin-top: -10px;margin-bottom: 10px">--> + <!-- <div class="basic_search">--> + <!-- <span>区域:</span>--> + <!-- <el-select v-model="queryForm.province" clearable filterable @change="changeArea('province')">--> + <!-- <el-option--> + <!-- v-for="item in provinceList"--> + <!-- :key="item.id"--> + <!-- :label="item.name"--> + <!-- :value="item.name"--> + <!-- >--> + <!-- </el-option>--> + <!-- </el-select>--> + <!-- </div>--> + <!-- <div class="basic_search">--> + <!-- <el-select v-model="queryForm.city" prop="city" clearable filterable @change="changeArea('city')">--> + <!-- <el-option--> + <!-- v-for="item in cityList"--> + <!-- :key="item.id"--> + <!-- :label="item.name"--> + <!-- :value="item.name"--> + <!-- >--> + <!-- </el-option>--> + <!-- </el-select>--> + <!-- </div>--> + <!-- <div class="basic_search">--> + <!-- <el-select v-model="queryForm.area" clearable filterable @change="changeArea('area')">--> + <!-- <el-option--> + <!-- v-for="item in districtList"--> + <!-- :key="item.id"--> + <!-- :label="item.name"--> + <!-- :value="item.name"--> + <!-- >--> + <!-- </el-option>--> + <!-- </el-select>--> + <!-- </div>--> + <!-- <div class="basic_search">--> + <!-- <el-select v-model="queryForm.town" clearable filterable @change="changeArea('town')" >--> + <!-- <el-option--> + <!-- v-for="item in streetList"--> + <!-- :key="item.id"--> + <!-- :label="item.name"--> + <!-- :value="item.name"--> + <!-- >--> + <!-- </el-option>--> + <!-- </el-select>--> + <!-- </div>--> + <!-- <div class="basic_search">--> + <!-- <el-select v-model="queryForm.community" clearable filterable>--> + <!-- <el-option--> + <!-- v-for="item in committeeList"--> + <!-- :key="item.id"--> + <!-- :label="item.name"--> + <!-- :value="item.name"--> + <!-- >--> + <!-- </el-option>--> + <!-- </el-select>--> + <!-- </div>--> + <!-- </div>--> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="userData" + border + fit + highlight-current-row + style="width: 100%;" + @sort-change="sortUserChange" + > + <el-table-column type="index" label="" align="center" width="60"/> + <el-table-column label="用户名" prop="username" align="center" sortable="custom" width="100px"> + <template slot-scope="scope"> + <span>{{ scope.row.username }}</span> + </template> + </el-table-column> + <el-table-column label="真实姓名" prop="realname" align="center" sortable="custom" width="100px"> + <template slot-scope="scope"> + <span>{{ scope.row.realname }}</span> + </template> + </el-table-column> + <el-table-column label="身份证号" prop="idcard" align="center" sortable="custom" width="100px"> + <template slot-scope="scope"> + <span>{{ scope.row.idcard }}</span> + </template> + </el-table-column> + <el-table-column label="部门" prop="department" align="center" sortable="custom" width="100px"> + <template slot-scope="scope"> + <span>{{ scope.row.department }}</span> + </template> + </el-table-column> + <el-table-column label="职位" prop="job" align="center" sortable="custom" width="100px"> + <template slot-scope="scope"> + <span>{{ scope.row.job }}</span> + </template> + </el-table-column> + <el-table-column label="用户类型" prop="type" align="center" width="100px"> + <template slot-scope="scope"> + <span>{{ scope.row.type | parseType}}</span> + </template> + </el-table-column> + <el-table-column label="角色" prop="role" align="center" width="100px"> + <template slot-scope="scope"> + <span>{{ scope.row.roles | parseRoles }}</span> + </template> + </el-table-column> + + <el-table-column label="人脸数据" prop="code" align="center" width="100px"> + <template slot-scope="scope"> + <span>{{ scope.row.code == null || scope.row.code === '' ?"":"已采集" }}</span> + </template> + </el-table-column> + <el-table-column label="是否通过考试" prop="ispass" align="center" width="100px"> + <template slot-scope="scope"> + <div v-for="item in isList"> + <div v-if="item.id === scope.row.ispass"> + <span>{{item.name}}</span> + </div> + </div> + </template> + </el-table-column> + <el-table-column label="考试合格有效期" prop="starttime" align="center" width="300px"> + <template slot-scope="scope"> + <span>{{ scope.row.starttime}}</span> + <span>-</span> + <span>{{ scope.row.endtime}}</span> + </template> + + </el-table-column> + <el-table-column label="是否单位负责人" prop="iscompany" align="center" width="100px"> + <template slot-scope="scope"> + <div v-for="item in isList"> + <div v-if="item.id === scope.row.iscompany"> + <span>{{item.name}}</span> + </div> + </div> + </template> + </el-table-column> + <el-table-column label="是否部门负责人" prop="isdepartment" align="center" width="100px"> + <template slot-scope="scope"> + <div v-for="item in isList"> + <div v-if="item.id === scope.row.isdepartment"> + <span>{{item.name}}</span> + </div> + </div> + </template> + </el-table-column> + <el-table-column label="状态" prop="status" align="center" width="100px"> + <template slot-scope="scope"> + <span>{{ scope.row.status | parseStatus }}</span> + </template> + </el-table-column> + <!-- <el-table-column label="更新时间" prop="lastmodifieddate" align="center" sortable="custom">--> + <!-- <template slot-scope="scope">--> + <!-- <span>{{ scope.row.lastmodifieddate | parseTime('{y}-{m}-{d}') }}</span>--> + <!-- </template>--> + <!-- </el-table-column>--> + <el-table-column label="操作" align="center" width="250" class-name="small-padding fixed-width" fixed="right"> + <template slot-scope="scope"> + <el-button type="text" @click="showEditHandle(scope.row)">编辑</el-button> + <el-button type="text" @click="showWorkLicense(scope.row)">查看工作证</el-button> + <el-button v-show="userType != 3" :disabled="scope.row.type==1" type="text" style="color:red;" @click="deleteHandle(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <br> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <el-dialog :title="dialogStatus==='create'?'新增':'编辑'" :visible.sync="dialogFormVisible" :modal-append-to-body="false" :close-on-click-modal="false" width="50%"> + <el-form ref="dataForm" :rules="dialogStatus==='create'?dataFormRules:rules" :model="dataForm" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中..."> + <el-row> + <el-col :span="12"> + <el-form-item label="用户名(手机号):" prop="username"> + <el-input v-model.trim="dataForm.username"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="真实姓名:" prop="realname"> + <el-input v-model.trim="dataForm.realname"/> + </el-form-item> + </el-col> + </el-row> + <div v-if="dialogStatus=='create'"> + <el-row> + <el-col :span="12"> + <el-form-item label="密码:" prop="password"> + <el-input v-model.trim="dataForm.password" :type="passwordType" placeholder="请输入密码"> + <el-button slot="append" icon="el-icon-view" @click="showPwd"/> + </el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="确认密码:" prop="confirmPassword"> + <el-input v-model.trim="dataForm.confirmPassword" :type="confirmPasswordType" placeholder="请输入确认密码" @change="passwordChangeEvent"> + <el-button slot="append" icon="el-icon-view" @click="showConfirmPwd"/> + </el-input> + </el-form-item> + </el-col> + </el-row> + + </div> + <div v-else> + <el-row> + <el-col :span="12"> + <el-form-item label="密码:" prop="password"> + <el-input v-model.trim="dataForm.password" :type="passwordType" placeholder="请输入密码"> + <el-button slot="append" icon="el-icon-view" @click="showPwd"/> + </el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="确认密码:" prop="confirmPassword"> + <el-input v-model.trim="dataForm.confirmPassword" :type="confirmPasswordType" placeholder="请输入确认密码" @change="passwordChangeEvent"> + <el-button slot="append" icon="el-icon-view" @click="showConfirmPwd"/> + </el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <el-row> + <el-col :span="12"> + <el-form-item label="身份证号:" prop="idcard"> + <el-input v-model.trim="dataForm.idcard"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="邮箱:" prop="email"> + <el-input v-model.trim="dataForm.email"/> + </el-form-item> + </el-col> + + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="单位:" prop="company"> + <el-select v-model.trim="dataForm.company" auto-complete="on" style="width:100%;"> + <el-option + v-for="item in companyList" + :key="item.id" + :value="item.company" + :label="item.company" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="部门:" prop="department"> + <el-select v-model.trim="dataForm.department" auto-complete="on" style="width:100%;"> + <el-option + v-for="item in departmentList" + :key="item.id" + :value="item.department" + :label="item.department" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="职务:" prop="job"> + <el-input v-model.trim="dataForm.job"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="用户类型:" prop="type"> + <el-select v-model.trim="dataForm.type" placeholder="请选择用户类型" auto-complete="on" style="width:100%;"> + <el-option + v-for="item in typeList" + :key="item.id" + :value="item.id" + :label="item.name" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="是否单位负责人:" prop="iscompany"> + <el-select v-model.trim="dataForm.iscompany" style="width:100%;"> + <el-option + v-for="item in isList" + :key="item.id" + :value="item.id" + :label="item.name" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="是否部门负责人:" prop="isdepartment"> + <el-select v-model.trim="dataForm.isdepartment" style="width:100%;"> + <el-option + v-for="item in isList" + :key="item.id" + :value="item.id" + :label="item.name" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="状态:" prop="status"> + <el-select v-model.trim="dataForm.status" auto-complete="on" style="width:100%;"> + <el-option + v-for="item in statusList" + :key="item.id" + :value="item.id" + :label="item.name" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button @click="dialogFormVisible = false">取消</el-button> + <el-button type="primary" @click="dialogStatus==='create'?createHandle():updateHandle()">确认</el-button> + </div> + </el-dialog> + <el-dialog + :visible.sync="importDialogFormVisible" + :modal-append-to-body="false" + :close-on-click-modal="false" + title="用户导入" + width="700px" + > + <el-form + ref="importForm" + label-position="right" + label-width="120px" + style="margin-left:50px;width:500px;" + element-loading-text="导入中..." + > + <el-form-item label="导入文件:"> + <input ref="importLabInput" type="file" accept=".xls, .xlsx" > + </el-form-item> + <el-form-item label="excel参考模板:"> + <el-button type="text" @click="viewHandle">下载模板</el-button> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button @click="importDialogFormVisible = false">取消</el-button> + <el-button :disabled="importDisabled" type="primary" @click="importHandle()">导入</el-button> + </div> + </el-dialog> + <div style="clear: both;"/> + <workLicense ref="workLicense"></workLicense> + </div> +</template> + +<script> + import workLicense from './components/workLicense/index' + import { mapGetters } from 'vuex' + import { userList, createUser, deleteUser, updateUser, importUser, importDistrict,getDistrict,getDistrictByName,updateUserRole} from '@/api/user' + import { checkBtnPermission } from '@/utils/permission' + import { roleList } from '@/api/role' + import { parseTime, computePageCount, parseUserType } from '@/utils' + import { parseError } from '@/utils/messageDialog' + import Cookies from 'js-cookie' + import { Message, MessageBox } from 'element-ui' + import {getCityListData, getProvinceListData} from "@/api/area"; + import { getAllCompany } from '../../../api/unitManage' + import { getAllDepartment } from '../../../api/departmentManage' + import { importSupplierUser } from '../../../api/user' + const exampleFile = require('@/assets/example/contractoruser.xlsx') + export default { + name: 'UserTable', + filters: { + parseRoles(roles) { + if (!roles) { + return + } + let message = '' + for (const role of roles) { + message += role.name + ',' + } + if (message) { + message = message.substring(0, message.lastIndexOf(',')) + } + return message + }, + parseType(type){ + let typeList = [{id:1,name:'超级管理员'},{id:2,name:'管理员'},{id:3,name:'普通用户'}] + if(type){ + let a = typeList.find(item => item.id === type) + return a.name + } + }, + parseStatus(status){ + if(status === 1){ + return "正常" + }else if(status === 0){ + return "正常" + } + }, + filterSafety(value) { + if (value) { + return '是' + } else { + return '否' + } + }, + filterUserType(value) { + return parseUserType(value) + }, + parseGX(value){ + let arr = value.split('-'); + let guanxia=''; + for (let i = 0; i < arr.length; i++){ + if (arr[i] == null || arr[i] == '' || arr[i] == 'null'){ + if (i == 0){ + guanxia = '全部省份'; + } + if (i == 1){ + guanxia += '-全部城市'; + } + if (i == 2){ + guanxia += '-全部区县'; + } + if (i == 3){ + guanxia += '-全部街道'; + } + if (i == 4){ + guanxia += '-全部居委会'; + } + }else { + if (i == 0){ + guanxia = arr[i]; + }else { + guanxia += '-'+arr[i]; + } + } + } + return guanxia; + } + }, + computed: { + ...mapGetters([ + 'userType', + 'username' + ]) + }, + components:{ + workLicense + }, + data() { + let _ref = this; + const validateEmail = (rule, value, callback) => { + + if (value == null || value == '') { + callback() + } else { + // 对电子邮件的验证 + const myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\-|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/ + if (!myreg.test(value)) { + return callback(new Error('请输入有效的邮箱格式')) + } + callback() + } + } + + return { + sort:'username', + order:'asc', + pageSize: 10, + recordTotal: 0, + currentPage: 1, + pageTotal: 0, + tableKey: 0, + userData: null, + listLoading: true, + iscompanyList:[{id:1,name:'否'},{id:0,name:'是'}], + queryForm: { + username: '', + company:'', + department:'', + job:'', + province:'', + city:'', + area:'', + town:'', + community:'', + }, + dataForm: { + id: '', + username: '', + password: '', + realname:'', + idcard:'', + email:'', + company:'', + department:'', + job:'', + type:'', + iscompany:'', + isdepartment:'', + ispass:'', + starttime:'', + endtime:'', + status:'', + createdby:'', + createddate:'', + lastmodifiedby:'', + lastmodifieddate:'', + }, + importDialogFormVisible: false, + importDisabled: false, + dialogFormVisible: false, + dialogStatus: '', + dataFormRules: { + username: [{ required: true, message: '用户名不能为空', trigger: 'blur' }], + realname: [{ required: true, message: '真实姓名不能为空', trigger: 'blur' }], + // email: [{ validator: validateEmail, trigger: 'blur' }], + password: [{ required: true, message: '密码不能为空', trigger: 'blur' }], + confirmPassword: [{ required: true, message: '确认密码不能为空', trigger: 'blur' }], + type: [{ required: true, message: '用户类型不能为空', trigger: 'change' }], + status: [{ required: true, message: '状态不能为空', trigger: 'change' }] + }, + rules: { + username: [{ required: true, message: '用户名不能为空', trigger: 'blur' }], + realname: [{ required: true, message: '真实姓名不能为空', trigger: 'blur' }], + // email: [{ validator: validateEmail, trigger: 'blur' }], + // password: [{ required: true, message: '密码不能为空', trigger: 'blur' }], + // confirmPassword: [{ required: true, message: '确认密码不能为空', trigger: 'blur' }], + type: [{ required: true, message: '用户类型不能为空', trigger: 'change' }], + status: [{ required: true, message: '状态不能为空', trigger: 'change' }] + }, + isList:[{id:1,name:'是'},{id:0,name:'否'}], + typeList:[{id:1,name:'超级管理员'},{id:2,name:'管理员'},{id:3,name:'普通用户'}], + dialogUserRoleFormVisible: false, + userRoleDataForm: { + userRoles: [], + userId: '' + }, + userRoleDataFormRules: { + userRoles: [{ type: 'array', required: true, message: '角色不能为空', trigger: 'change' }] + }, + roleList: [], + passwordType: 'password', + confirmPasswordType: 'password', + templateRadio: '', + instituteList: [], + departmentList: [], + companyList:[], + statusList:[{id:1,name:'正常'},{id:0,name:'停用'}], + } + }, + created() { + console.log(this.userType) + this.getUserList() + this.getProvince() + this.getDepartmentData() + this.getCompanyData() + }, + methods: { + refreshHandle: function() { + this.getUserList() + }, + queryHandle: function() { + this.currentPage = 1 + this.getUserList() + }, + sortUserChange: function(param) { + this.sort = param.prop; + this.order = param.order; + this.getUserList() + }, + getUserList() { + const _this = this + const params = {} + params['sort'] = _this.sort + params['order'] = _this.order + params['pageIndex'] = _this.currentPage + params['pageSize'] = _this.pageSize + params['type'] = _this.userType + for (const i in _this.queryForm) { + if (_this.queryForm[i] != undefined && _this.queryForm[i].toString() != '') { + params[i] = _this.queryForm[i] + } + } + _this.listLoading = true + userList(params).then(response => { + const res = response.data + if (res.code == 200) { + const result = res.result + _this.recordTotal = result.totalCount + _this.pageSize = result.pageSize + _this.pageTotal = computePageCount(result.totalCount, result.pageSize) + _this.currentPage = result.pageIndex + _this.userData = result.result + } else { + parseError({ error: res.data.message, vm: _this }) + } + _this.listLoading = false + }).catch(error => { + _this.listLoading = false + parseError({ error: error, vm: _this }) + }) + }, + + showWorkLicense(row){ + this.$refs.workLicense.openWorkLicense(row) + }, + + createHandle: function() { + this.$refs['dataForm'].validate((valid) => { + const _this = this + if (valid) { + if (_this.dataForm.password != _this.dataForm.confirmPassword) { + parseError({ error: '密码输入不一致', vm: _this }) + return + } + const userName = Cookies.get('userName') + _this.dataForm['operator'] = userName + createUser(_this.dataForm).then(response => { + const res = response.data + if (res.code == 200) { + _this.dialogFormVisible = false + _this.$message({ + message: '创建成功', + type: 'success' + }) + _this.getUserList() + } else { + parseError({ error: res.data.message, vm: _this }) + } + }).catch(error => { + parseError({ error: error, vm: _this }) + }) + } + }) + }, + deleteHandle: function(row) { + const _this = this + MessageBox.confirm('确定删除用户' + row.username + '信息', '确定删除', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + _this.deleteAction(row) + }).catch(() => { + console.log('已取消删除') + }) + }, + deleteAction: function(row) { + const _this = this + const params = {} + params['id'] = row.id + const userName = Cookies.get('userName') + const name = Cookies.get('name') + params['operator'] = name + '(' + userName + ')' + deleteUser(params).then(response => { + const res = response.data + if (res.code == 200) { + _this.$message({ + message: '删除成功', + type: 'success' + }) + _this.getUserList() + } else { + parseError({ error: res.data.message, vm: _this }) + } + }).catch(error => { + parseError({ error: error, vm: _this }) + }) + }, + resetDataForm() { + this.dataForm = { + id: '', + username: '', + password: '', + realname:'', + idcard:'', + email:'', + company:'', + department:'', + job:'', + type:'', + iscompany:'', + isdepartment:'', + ispass:'', + starttime:'', + endtime:'', + status:'', + createdby:'', + createddate:'', + lastmodifiedby:'', + lastmodifieddate:'', + } + }, + getDepartmentData(){ + getAllDepartment().then(res=>{ + if(res.data.code === '200'){ + this.departmentList = res.data.result + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }).catch(error =>{ + parseError({error:error,vm:this}) + }) + }, + getCompanyData(){ + getAllCompany().then(res=>{ + if(res.data.code === '200'){ + this.companyList = res.data.result + }else{ + this.$message({ + type:'warning', + message:res.data.message + }) + } + }).catch(error =>{ + parseError({error:error,vm:this}) + }) + }, + showCreateHandle() { + this.resetDataForm() + this.dialogStatus = 'create' + this.dialogFormVisible = true + this.$nextTick(() => { + this.$refs['dataForm'].clearValidate() + }) + }, + updateHandle() { + this.$refs['dataForm'].validate((valid) => { + const _this = this + if (valid) { + if (_this.dataForm.password || _this.dataForm.confirmPassword) { + if (_this.dataForm.password != _this.dataForm.confirmPassword) { + parseError({ error: '密码输入不一致', vm: _this }) + return + } + } + const userName = Cookies.get('userName') + _this.dataForm['lastmodifiedby'] = userName + updateUser(_this.dataForm).then(response => { + const res = response.data + if (res.code == 200) { + _this.dialogFormVisible = false + _this.$message({ + message: '更新成功', + type: 'success' + }) + _this.getUserList() + } else { + parseError({ error: res.data.message, vm: _this }) + } + }).catch(error => { + parseError({ error: error, vm: _this }) + }) + } + }) + }, + getRoleList: async function() { + const _this = this + const params = {} + roleList(params).then(response => { + const res = response.data + if (res.code == 200) { + const roleList = res.result + _this.roleList = roleList + } else { + parseError({ error: res.data.message, vm: _this }) + } + }) + }, + showAssignRole: async function(row) { + await this.getRoleList() + + this.userRoleDataForm.userId = row.id + + this.$nextTick(() => { + const assigedRoles = [] + if (row.roles) { + for (const role of row.roles) { + assigedRoles.push(role.id) + } + } + this.userRoleDataForm.userRoles = assigedRoles + }) + this.dialogUserRoleFormVisible = true + this.$nextTick(() => { + this.$refs['userRoleDataForm'].clearValidate() + }) + }, + assignUserRoleHandle: function() { + const _this = this + this.$refs['userRoleDataForm'].validate((valid) => { + if (valid) { + const userName = Cookies.get('userName') + const params = {} + params['id'] = _this.userRoleDataForm.userId + params['roles'] = _this.userRoleDataForm.userRoles + updateUserRole(params).then(response => { + const res = response.data + if (res.code == 200) { + _this.dialogUserRoleFormVisible = false + _this.$message({ + message: '角色分配成功', + type: 'success' + }) + _this.getUserList() + } else { + parseError({ error: res.data.message, vm: _this }) + } + }) + } + }) + }, + showEditHandle: function(row) { + this.resetDataForm() + this.dataForm = row + this.dataForm.password = null + this.dialogStatus = 'update' + this.dialogFormVisible = true + this.$nextTick(() => { + this.$refs['dataForm'].clearValidate() + }) + + }, + passwordChangeEvent: function(value) { + if (this.dataForm.password != value) { + parseError({ error: '密码输入不一致', vm: this }) + } + }, + showPwd() { + if (this.passwordType === 'password') { + this.passwordType = '' + } else { + this.passwordType = 'password' + } + }, + showConfirmPwd() { + if (this.confirmPasswordType === 'password') { + this.confirmPasswordType = '' + } else { + this.confirmPasswordType = 'password' + } + }, + handleSizeChange: function(val) { + this.pageSize = val + this.currentPage = 1 + this.getUserList() + }, + handleCurrentChange: function(val) { + this.currentPage = val + this.getUserList() + }, + getTemplateRow(row) { + console.log(row, '22222') + }, + handleInstituteChange(value) { + if (value) { + this.dataForm.departmentId = '' + } + }, + disableRole(row) { + if (row.type == 1) { + return true + } else { + return false + } + }, + getRoleInfo(role) { + return role.name + }, + getBtnPermission(btnType) { + return checkBtnPermission(this.userType, btnType) + }, + showImportHandle() { + this.importDisabled = false + this.importDialogFormVisible = true + }, + viewHandle() { + window.open(exampleFile, '_blank') + }, + importHandle() { + const _this = this + const formData = new FormData() + const userName = Cookies.get('userName') + formData.append('operator', userName) + const files = this.$refs['importLabInput'].files + if (files && files.length > 0) { + formData.append('file', files[0]) + } + formData.append('action', 'import') + importSupplierUser(formData) + .then((response) => { + const res = response.data + if (res.code == 200) { + _this.importDialogFormVisible = false + _this.$message({ + message: '导入成功', + type: 'success' + }) + _this.getUserList() + } else { + parseError({ error: res.data.message, vm: _this }) + } + }) + .catch((error) => { + parseError({ error: error, vm: _this }) + }) + }, + getProvince(){ + const _this = this + const params = {} + params['parenttype'] = 0 + params['type'] = 1 + getDistrict(params).then(response => { + const res = response.data + if (res.code == 200){ + this.provinceList = res.result; + } else { + parseError({ error: res.data.message, vm: _this }) + } + }).catch(error => { + }) + }, + resetCity(name){ + const _this = this + const params = {} + params['parentname'] = name + params['parenttype'] = 1 + params['type'] = 2 + getDistrict(params).then(response => { + const res = response.data + if (res.code == 200){ + this.cityList = res.result; + this.areaList = []; + this.townList = []; + this.communityList = []; + this.dataForm.city = ''; + this.dataForm.area = ''; + this.dataForm.town = ''; + this.dataForm.community = ''; + } else { + parseError({ error: res.data.message, vm: _this }) + } + }).catch(error => { + }) + }, + resetArea(name){ + const _this = this + const params = {} + params['parentname'] = name + params['parenttype'] = 2 + params['type'] = 3 + getDistrict(params).then(response => { + const res = response.data + if (res.code == 200){ + this.areaList = res.result; + this.townList = []; + this.communityList = []; + this.dataForm.area = ''; + this.dataForm.town = ''; + this.dataForm.community = ''; + } else { + parseError({ error: res.data.message, vm: _this }) + } + }).catch(error => { + }) + }, + resetTown(name){ + const _this = this + const params = {} + params['parentname'] = name + params['parenttype'] = 3 + params['type'] = 4 + getDistrict(params).then(response => { + const res = response.data + if (res.code == 200){ + this.townList = res.result; + this.communityList = []; + this.dataForm.town = ''; + this.dataForm.community = ''; + } else { + parseError({ error: res.data.message, vm: _this }) + } + }).catch(error => { + }) + }, + resetCommunity(name){ + const _this = this + const params = {} + params['parentname'] = name + params['parenttype'] = 4 + params['type'] = 5 + getDistrict(params).then(response => { + const res = response.data + if (res.code == 200){ + this.communityList = res.result; + this.dataForm.community = ''; + } else { + parseError({ error: res.data.message, vm: _this }) + } + }).catch(error => { + }) + }, + async changeArea(value){ + if(value === 'province'){ + this.queryForm.city = '' + this.queryForm.area = '' + this.queryForm.town = '' + this.queryForm.community = '' + this.areaListQuery = { + type: 2, + parenttype: 1, + parentname: this.queryForm.province, + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.cityList = res.data.result + } + }else if(value === 'city'){ + this.queryForm.area = '' + this.queryForm.town = '' + this.queryForm.community = '' + this.areaListQuery = { + type: 3, + parenttype: 2, + parentname: this.queryForm.city, + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.districtList = res.data.result + } + }else if(value === 'area'){ + this.queryForm.town = '' + this.queryForm.community = '' + this.areaListQuery = { + type: 4, + parenttype: 3, + parentname: this.queryForm.area, + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.streetList = res.data.result + } + }else if(value === 'town'){ + this.queryForm.community = '' + this.areaListQuery = { + type: 5, + parenttype: 4, + parentname: this.queryForm.town, + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.committeeList = res.data.result + } + } + },//市、镇、街道、委员会 + } + } +</script> +<style lang="scss" scoped> + .basic_search{ + display:inline-block; + } +</style> diff --git a/src/views/contractor/workStatistics/index.vue b/src/views/contractor/workStatistics/index.vue new file mode 100644 index 0000000..9680eed --- /dev/null +++ b/src/views/contractor/workStatistics/index.vue @@ -0,0 +1,206 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div class="basic_search"> + <span>单位名称:</span> + <el-input v-model="company" style="width:150px" @change="getTroubleData"> + </el-input> + </div> + <div class="basic_search"> + <span>作业状态:</span> + <el-select v-model="status" style="width:150px" clearable @change="getTroubleData"> + <el-option + v-for="item in statusList" + :key="item.id" + :label="item.name" + :value="item.id" + > + </el-option> + </el-select> + </div> + <div class="basic_search"> + <span>审批状态:</span> + <el-select v-model="flag" style="width:150px" clearable @change="getTroubleData"> + <el-option + v-for="item in flagList" + :key="item.id" + :label="item.name" + :value="item.id" + > + </el-option> + </el-select> + </div> + <div class="basic_search"> + <span>开始时间:</span> + <el-date-picker + @change="getTroubleData" + v-model="starttime" + align="right" + value-format="yyyy-MM-dd" + placeholder="开始时间"> + </el-date-picker> + </div> + <div class="basic_search"> + <span>结束时间:</span> + <el-date-picker + @change="getTroubleData" + v-model="endtime" + align="right" + value-format="yyyy-MM-dd" + placeholder="开始时间"> + </el-date-picker> + </div> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-refresh" @click="refreshHandle">搜索</el-button> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="troubleData" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column label="单位名称" prop="constructionunit" align="center"> + </el-table-column> + <el-table-column label="作业类型" prop="type" align="center"> + </el-table-column> + <el-table-column label="作业数量" prop="countNum" align="center"> + </el-table-column> + <el-table-column label="操作" align="center" width="280" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <el-button type="text" @click="showTroubleDetail(scope.row)">详情</el-button> + </template> + </el-table-column> + </el-table> + <br> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + <br> + <work-detail ref="workDetail"></work-detail> + </div> + </div> +</template> + +<script> + import workDetail from './workDetail/index' + import { mapGetters } from 'vuex' + import { computePageCount } from '../../../utils' + import { getWorkList } from '../../../api/troubleStatistics' + + export default { + name: 'index', + filters: { + parseMain(type){ + if(type === 1){ + return "是" + }else if(type === 0){ + return "否" + } + }, + }, + components:{ + workDetail + }, + computed: { + ...mapGetters([ + 'userType' + ]) + }, + data() { + return { + tableKey: 0, + troubleData: [], + statusList:[ + {id:0,name:'已驳回'}, + {id:1,name:'未提交'}, + {id:2,name:'已提交'}, + {id:3,name:'施工单位已确认'}, + {id:4,name:'动火部位负责人审批通过'}, + {id:5,name:'相关部门审批通过'}, + {id:6,name:'安全部门审批通过'}, + {id:7,name:'审批通过'}, + ], + flagList:[ + {id:0,name:'待提交'}, + {id:1,name:'作业中止'}, + {id:2,name:'等待检查'}, + {id:3,name:'等待开始'}, + {id:4,name:'作业中'}, + {id:5,name:'作业完成'}, + ], + listLoading: false, + pageSize: 10, + recordTotal: 0, + currentPage: 1, + pageTotal: 0, + company:'', + starttime:'', + endtime:'', + status:'', + flag:'', + } + }, + created() { + this.getTroubleData() + }, + methods: { + async getTroubleData(){ + this.listLoading = true + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['company'] = this.company + params['starttime'] = this.starttime + params['endtime'] = this.endtime + params['status'] = this.status + params['flag'] = this.flag + let res = await getWorkList(params) + if(res.data.code === '200'){ + this.recordTotal = res.data.result.totalCount + this.pageSize = res.data.result.pageSize + this.pageTotal = computePageCount(res.data.result.totalCount, res.data.result.pageSize) + this.currentPage = res.data.result.pageIndex + this.troubleData = res.data.result.result + }else{ + this.$message({ + message:res.data.message, + type:'warning' + }) + } + this.listLoading = false + }, + showTroubleDetail(val){ + this.$refs.workDetail.showTroubleDetail(val.constructionunit,this.status,this.flag,this.starttime,this.endtime,val.type) + }, + refreshHandle(){ + this.getTroubleData() + }, + handleSizeChange(val){ + this.pageSize = val + this.getTroubleData() + }, + handleCurrentChange(val){ + this.currentPage = val + this.getTroubleData() + }, + } + } +</script> +<style scoped> + .basic_search{ + display:inline-block; + padding-bottom: 10px; + } +</style> diff --git a/src/views/contractor/workStatistics/workDetail/index.vue b/src/views/contractor/workStatistics/workDetail/index.vue new file mode 100644 index 0000000..3f75392 --- /dev/null +++ b/src/views/contractor/workStatistics/workDetail/index.vue @@ -0,0 +1,197 @@ +<template> + <el-dialog :title="title" :visible.sync="troubleDetailVisible" :modal-append-to-body="false" :close-on-click-modal="false" width="70%"> + <div class="app-container"> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="troubleDetailData" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column type="index" label="序号" align="center" width="80"/> + <el-table-column label="单位名称" prop="unit" align="center"> + </el-table-column> + <el-table-column label="单位代码" prop="code" align="center"> + </el-table-column> + <el-table-column label="申请人" prop="applicant" align="center"> + </el-table-column> + <el-table-column label="施工单位" prop="constructionunit" align="center"> + </el-table-column> + <el-table-column label="作业内容" prop="area" align="center"> + </el-table-column> + <el-table-column label="开始时间" prop="starttime" align="center"> + </el-table-column> + <el-table-column label="结束时间" prop="endtime" align="center"> + </el-table-column> + <el-table-column label="作业级别" prop="level" align="center"> + <template slot-scope="scope"> + <div v-for="item in levelList"> + <div v-if="scope.row.level === item.id"> + <span>{{item.name}}</span> + <!-- <el-tag v-if="scope.row.level ===0" type="success">{{item.name}}</el-tag>--> + <!-- <el-tag v-if="scope.row.level ===1" type="warning">{{item.name}}</el-tag>--> + <!-- <el-tag v-if="scope.row.level ===2" type="danger">{{item.name}}</el-tag>--> + </div> + </div> + </template> + </el-table-column> + <el-table-column label="任务审批状态" prop="status" align="center"> + <template slot-scope="scope"> + <div v-for="item in statusList"> + <div v-if="scope.row.status === item.id"> + <span>{{item.name}}</span> + </div> + </div> + </template> + </el-table-column> + <el-table-column label="作业状态" prop="flag" align="center"> + <template slot-scope="scope"> + <div v-for="item in flagList"> + <div v-if="scope.row.flag === item.id"> + <span>{{item.name}}</span> + </div> + </div> + </template> + </el-table-column> + </el-table> + <br> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + style="float:right;" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + <br> + </div> + <el-dialog :visible.sync="dialogVisible" :append-to-body="true"> + <img width="100%" :src="dialogImageUrl" alt=""> + </el-dialog> + </div> + </el-dialog> +</template> + +<script> + import { mapGetters } from 'vuex' + import { getWorkDetailList } from '../../../../api/troubleStatistics' + import { computePageCount } from '../../../../utils' + + export default { + name: 'index', + filters: { + parseMain(type){ + if(type === 1){ + return "是" + }else if(type === 0){ + return "否" + } + }, + }, + computed: { + ...mapGetters([ + 'userType' + ]) + }, + data() { + return { + tableKey: 0, + troubleDetailData: [], + levelList:[{id:2,name:'特级'},{id:1,name:'一级'},{id:0,name:'二级'},], + statusList:[ + {id:0,name:'已驳回'}, + {id:1,name:'未提交'}, + {id:2,name:'已提交'}, + {id:3,name:'施工单位已确认'}, + {id:4,name:'动火部位负责人审批通过'}, + {id:5,name:'相关部门审批通过'}, + {id:6,name:'安全部门审批通过'}, + {id:7,name:'审批通过'}, + ], + flagList:[ + {id:0,name:'待提交'}, + {id:1,name:'作业中止'}, + {id:2,name:'等待检查'}, + {id:3,name:'等待开始'}, + {id:4,name:'作业中'}, + {id:5,name:'作业完成'}, + ], + listLoading: false, + pageSize: 10, + recordTotal: 0, + currentPage: 1, + pageTotal: 0, + title:'', + company:'', + starttime:'', + endtime:'', + status:'', + flag:'', + troubleDetailVisible:false, + dialogImageUrl:'', + dialogVisible:false, + } + }, + created() { + }, + methods: { + showTroubleDetail(company,status,flag,starttime,endtime,type){ + this.troubleDetailVisible = true + this.starttime = starttime + this.status = status + this.flag = flag + this.endtime = endtime + this.company = company + this.type = type + this.getTroubleData() + }, + async getTroubleData(){ + this.listLoading = true + let params = {} + params['pageIndex'] = this.currentPage + params['pageSize'] = this.pageSize + params['company'] = this.company + params['starttime'] = this.starttime + params['endtime'] = this.endtime + params['status'] = this.status + params['flag'] = this.flag + params['type'] = this.type + let res = await getWorkDetailList(params) + if(res.data.code === '200'){ + this.recordTotal = res.data.result.totalCount + this.pageSize = res.data.result.pageSize + this.pageTotal = computePageCount(res.data.result.totalCount, res.data.result.pageSize) + this.currentPage = res.data.result.pageIndex + this.troubleDetailData = res.data.result.result + }else{ + } + this.listLoading = false + }, + reportResources(file){ + this.dialogImageUrl = file.url; + this.dialogVisible = true; + }, + handleSizeChange(val){ + this.pageSize = val + this.getTroubleData() + }, + handleCurrentChange(val){ + this.currentPage = val + this.getTroubleData() + }, + } + } +</script> +<style scoped> + .basic_search{ + display:inline-block; + padding-bottom: 10px; + } +</style> -- Gitblit v1.9.2