Merge branch 'feature_1.0'
15 files added
5 files modified
| | |
| | | }, |
| | | "lodash": { |
| | | "version": "4.17.21", |
| | | "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.21.tgz?cache=0&sync_timestamp=1613835860585&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.21.tgz", |
| | | "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=" |
| | | "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", |
| | | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" |
| | | }, |
| | | "lodash.debounce": { |
| | | "version": "4.0.8", |
| | |
| | | "leaflet-velocity": "^1.7.0", |
| | | "less": "^4.1.1", |
| | | "less-loader": "^6.2.0", |
| | | "lodash": "^4.17.21", |
| | | "moment": "^2.29.4", |
| | | "node-sass": "^4.14.1", |
| | | "normalize.css": "7.0.0", |
New file |
| | |
| | | <template> |
| | | <div> |
| | | <el-upload |
| | | :limit="limit" |
| | | :action="uploadUrl" |
| | | accept="image/*,video/*" |
| | | :data="{sysCode}" |
| | | :file-list="UrlList" |
| | | :headers="{ token: token }" |
| | | list-type="picture-card" |
| | | :before-upload="before_upload" |
| | | :on-change="handleImgChange" |
| | | :on-success="handleUploadSuccess" |
| | | > |
| | | <i slot="default" class="el-icon-plus" /> |
| | | <div slot="file" slot-scope="{ file }"> |
| | | <img |
| | | v-if="file.type == 1" |
| | | class="el-upload-list__item-thumbnail" |
| | | :src="file.url" |
| | | alt="" |
| | | > |
| | | <video v-if="file.type == 2" :src="file.url" style="width: 100%"> |
| | | 您的浏览器不支持 video 标签。 |
| | | </video> |
| | | <audio |
| | | v-if="file.type == 3" |
| | | controls |
| | | :src="file.url" |
| | | style="width: 100%" |
| | | > |
| | | 您的浏览器不支持该音频格式。 |
| | | </audio> |
| | | <span class="el-upload-list__item-actions"> |
| | | <span |
| | | class="el-upload-list__item-preview" |
| | | @click="handlePictureCardPreview(file)" |
| | | > |
| | | <i class="el-icon-zoom-in" /> |
| | | </span> |
| | | <span |
| | | v-if="!disabled" |
| | | class="el-upload-list__item-delete" |
| | | @click="handleImgRemove(file)" |
| | | > |
| | | <i class="el-icon-delete" /> |
| | | </span> |
| | | </span> |
| | | </div> |
| | | </el-upload> |
| | | <el-dialog :visible.sync="dialogVisible" width="600px" append-to-body :modal-append-to-body="false" :destroy-on-close="true" @close="handleCancel"> |
| | | <div style="text-align: center;"> |
| | | <img |
| | | v-if="dialogType == 1" |
| | | class="el-upload-list__item-thumbnail" |
| | | style="width: 300px;height: 500px" |
| | | :src="dialogImageUrl" |
| | | alt="" |
| | | > |
| | | <video |
| | | v-if="dialogType == 2" |
| | | ref="video" |
| | | style="width: 300px;height: 500px" |
| | | :src="dialogImageUrl" |
| | | controls |
| | | autoplay |
| | | /> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { getToken } from '@/utils/auth' |
| | | import bus from '@/Bus' |
| | | export default { |
| | | name: 'UploadExcel', |
| | | props: { |
| | | uploadUrl: { |
| | | type: String, |
| | | required: true |
| | | }, |
| | | sysCode: { |
| | | type: String, |
| | | required: true |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | token: getToken(), |
| | | limit: 9, // 限制上传数量 |
| | | dialogImageUrl: null, |
| | | dialogVisible: false, |
| | | UrlList: [], |
| | | disabled: false, |
| | | dialogType: null, |
| | | fileBaseList: [], |
| | | fileChangeList: [] |
| | | } |
| | | }, |
| | | |
| | | methods: { |
| | | handleCancel(e) { |
| | | this.dialogVisible = false |
| | | |
| | | setTimeout(() => { |
| | | if (this.$refs.video) { |
| | | this.$refs.video.pause() |
| | | } |
| | | |
| | | this.dialogImageUrl = '' |
| | | }, 200) |
| | | }, |
| | | // 上传前 |
| | | before_upload(file) { |
| | | const fileSize = file.size |
| | | const FIVE_M = 100 * 1024 * 1024 |
| | | // 不允许上传大于2M |
| | | if (fileSize > FIVE_M) { |
| | | this.$message.error('最大上传1002M') |
| | | return false |
| | | } |
| | | const name = file.name.substring(file.name.lastIndexOf('.') + 1) |
| | | const nameList = ['png', 'jpg', 'jpeg', 'bmp', 'gif', 'jpe', 'mp4', 'm2v', 'mkv'] |
| | | if (!nameList.includes(name)) { |
| | | this.$message.error('只能上传图片和视频!') |
| | | return false |
| | | } |
| | | return true |
| | | }, |
| | | |
| | | handlePictureCardPreview(file) { |
| | | console.log('file', file) |
| | | // const baseUrl = `${requestObj.baseUrl}/static/img/` |
| | | this.dialogImageUrl = file.url |
| | | console.log('this.dialogImageUrl', file) |
| | | this.dialogType = file.type |
| | | this.dialogVisible = true |
| | | }, |
| | | // 图片改变 |
| | | handleImgChange(file, fileList) { |
| | | bus.$emit('changeFileAfterList', 'change', fileList) |
| | | |
| | | this.UrlList = fileList |
| | | }, |
| | | // 图片移除 |
| | | handleImgRemove(file, fileList) { |
| | | fileList = this.UrlList |
| | | const index = fileList.indexOf(file) |
| | | fileList.splice(index, 1) |
| | | bus.$emit('changeFileAfterList', 'detail', fileList) |
| | | }, |
| | | // 图片上传成功 |
| | | handleUploadSuccess(response, file, fileList) { |
| | | console.log(file) |
| | | this.UrlList.push({ |
| | | url: file.url |
| | | }) |
| | | bus.$emit('changeFileAfterList', 'success', fileList) |
| | | file.type = this.matchType(file.response.data.fileName) |
| | | }, |
| | | |
| | | // 根据文件名后缀区分 文件类型 |
| | | /* |
| | | * @param: fileName - 文件名称 |
| | | * @param: 数据返回 1) 无后缀匹配 - false |
| | | * @param: 数据返回 2) 匹配图片 - image |
| | | * @param: 数据返回 8) 匹配 视频 - video |
| | | * @param: 数据返回 9) 匹配 音频 - radio |
| | | * @param: 数据返回 10) 其他匹配项 - other |
| | | */ |
| | | matchType(fileName) { |
| | | // 后缀获取 |
| | | var suffix = '' |
| | | // 获取类型结果 |
| | | var result = '' |
| | | try { |
| | | var flieArr = fileName.split('.') |
| | | suffix = flieArr[flieArr.length - 1] |
| | | } catch (err) { |
| | | suffix = '' |
| | | } |
| | | // fileName无后缀返回 false |
| | | if (!suffix) { |
| | | result = false |
| | | return result |
| | | } |
| | | // 图片格式 |
| | | var imglist = ['png', 'jpg', 'jpeg', 'bmp', 'gif', 'jpe'] |
| | | // 进行图片匹配 |
| | | result = imglist.some(function(item) { |
| | | return item === suffix |
| | | }) |
| | | if (result) { |
| | | result = '1' |
| | | return result |
| | | } |
| | | // 匹配 视频 |
| | | var videolist = ['mp4', 'm2v', 'mkv'] |
| | | result = videolist.some(function(item) { |
| | | return item === suffix |
| | | }) |
| | | if (result) { |
| | | result = '2' |
| | | return result |
| | | } |
| | | // 匹配 音频 |
| | | var radiolist = ['mp3', 'wav', 'wmv', 'flac'] |
| | | result = radiolist.some(function(item) { |
| | | return item === suffix |
| | | }) |
| | | if (result) { |
| | | result = '3' |
| | | return result |
| | | } |
| | | // 其他 文件类型 |
| | | result = 'other' |
| | | return result |
| | | } |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | <style lang="scss" scope> |
| | | .avatar-uploader .el-upload { |
| | | border: 1px dashed #d9d9d9; |
| | | border-radius: 6px; |
| | | cursor: pointer; |
| | | position: relative; |
| | | overflow: hidden; |
| | | } |
| | | .avatar-uploader .el-upload:hover { |
| | | border-color: #409eff; |
| | | } |
| | | .avatar-uploader-icon { |
| | | font-size: 28px; |
| | | color: #8c939d; |
| | | width: 148px; |
| | | height: 148px; |
| | | line-height: 148px; |
| | | text-align: center; |
| | | } |
| | | .avatar { |
| | | width: 148px; |
| | | max-height: 148px; |
| | | display: block; |
| | | } |
| | | .avatar-video { |
| | | width: 200px; |
| | | max-height: 200px; |
| | | display: block; |
| | | } |
| | | </style> |
| | |
| | | component: () => import('@/views/dailyreport/index'), |
| | | meta: { title: '走航监测日报', icon: 'example' } |
| | | } |
| | | |
| | | // 业务交办 |
| | | const summaryPage = { |
| | | path: 'toCarryOutLegislativeReforms/summaryPage', |
| | | name: 'summaryPage', |
| | | component: () => import('@/views/toCarryOutLegislativeReforms/summaryPage/index'), |
| | | meta: { title: '业务汇总', icon: 'example' } |
| | | } |
| | | const reform = { |
| | | path: 'toCarryOutLegislativeReforms/reform', |
| | | name: 'reform', |
| | | component: () => import('@/views/toCarryOutLegislativeReforms/reform/index'), |
| | | meta: { title: '立行立改', icon: 'example' } |
| | | } |
| | | const delay = { |
| | | path: 'toCarryOutLegislativeReforms/delay', |
| | | name: 'delay', |
| | | component: () => import('@/views/toCarryOutLegislativeReforms/delay/index'), |
| | | meta: { title: '延期申请', icon: 'example' } |
| | | } |
| | | |
| | | // 映射路由,存入对象 |
| | | const ruleMapping = { |
| | |
| | | dailyreport, |
| | | sectionReport, |
| | | Listdata, |
| | | summaryPage, |
| | | reform, |
| | | delay |
| | | // Equidata |
| | | } |
| | | |
| | |
| | | export function routerMenus() { |
| | | const routersMenu = JSON.parse(store.state.user.menus) |
| | | // 路由分两块,左侧列表, 最右侧员工下拉菜单 |
| | | console.log('routersMenu',routersMenu) |
| | | const currentRoutes = router.options.routes |
| | | if (routersMenu.length > 0) { |
| | | routersMenu.forEach(item => { |
| | |
| | | if (temp !== undefined) { |
| | | currentRoutes[currentRoutes.length - 1].children.push(temp) |
| | | } else { |
| | | console.log('存在菜单配置给该用户,但是代码中无该组件') |
| | | console.log('存在菜单配置给该用户,但是代码中无该组件1') |
| | | } |
| | | }) |
| | | } else { |
New file |
| | |
| | | // 系统中封装好的axios |
| | | import requestObj from '@/utils/request' |
| | | const request = requestObj.service |
| | | export function getDict() { |
| | | request({ |
| | | url: '/dict/list', |
| | | method: 'get' |
| | | }) |
| | | .then((result) => { |
| | | // console.log('字典', result) |
| | | console.log('字典', objToArr(result.data)) |
| | | localStorage.setItem('dict', JSON.stringify(result.data)) |
| | | localStorage.setItem('dictObj', JSON.stringify(objToArr(result.data))) |
| | | }) |
| | | .catch((err) => { |
| | | console.log('err', err) |
| | | }) |
| | | } |
| | | // 字典数组转obj |
| | | export function arrToObj(arr) { |
| | | return arr.reduce((obj, item) => { |
| | | obj[item.value] = item.name |
| | | return obj |
| | | }, {}) |
| | | } |
| | | export function objToArr(obj) { |
| | | const objde = {} |
| | | |
| | | for (const key in obj) { |
| | | objde[key] = arrToObj(obj[key]) |
| | | } |
| | | return objde |
| | | } |
| | |
| | | import { getMenus } from '@/router/dynamicRouter.js' |
| | | // import store from '@/store' |
| | | import { getToken, removeToken } from '@/utils/auth' |
| | | |
| | | import { getDict } from '@/utils/dic.js' |
| | | export default { |
| | | name: 'Login', |
| | | data() { |
| | |
| | | .then((res) => { |
| | | new Promise((resolve, reject) => { |
| | | getMenus() |
| | | getDict() |
| | | resolve() |
| | | }).then(() => { |
| | | setTimeout(() => { |
| | |
| | | border |
| | | style="width: 100%" |
| | | :stripe="true" |
| | | > |
| | | ><el-table-column |
| | | prop="unitId" |
| | | label="责任单位" |
| | | :formatter="unitIdFormatter" |
| | | /> |
| | | <el-table-column |
| | | prop="account" |
| | | label="员工账号" |
| | |
| | | <el-form-item label="员工名称" :label-width="formLabelWidth" prop="userName"> |
| | | <el-input v-model="form.userName" autocomplete="off" /> |
| | | </el-form-item> |
| | | <el-form-item label="责任单位" :label-width="formLabelWidth"> |
| | | <el-select v-model="form.unitId" placeholder="请选择" size="small" style="width: 100%;"> |
| | | <el-option |
| | | v-for="item in unitList" |
| | | :key="item.unitId" |
| | | :label="item.unitName" |
| | | :value="item.unitId" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="手机" :label-width="formLabelWidth" prop="mobile"> |
| | | <el-input v-model="form.mobile" autocomplete="off" /> |
| | | </el-form-item> |
| | |
| | | </el-form-item> |
| | | <el-form-item label="员工名称" :label-width="formLabelWidth" prop="userName"> |
| | | <el-input v-model="formEdit.userName" autocomplete="off" /> |
| | | </el-form-item> |
| | | <el-form-item label="责任单位" :label-width="formLabelWidth"> |
| | | <el-select v-model="formEdit.unitId" placeholder="请选择" size="small" style="width: 100%;"> |
| | | <el-option |
| | | v-for="item in unitList" |
| | | :key="item.unitId" |
| | | :label="item.unitName" |
| | | :value="item.unitId" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="手机" :label-width="formLabelWidth" prop="mobile"> |
| | | <el-input v-model="formEdit.mobile" autocomplete="off" /> |
| | |
| | | // 这里存放数据 |
| | | return { |
| | | options: [], |
| | | unitList: [], |
| | | radio1: '', |
| | | value: '', |
| | | value1: '', |
| | |
| | | dialogEdit: false, |
| | | dialogRole: false, |
| | | form: { |
| | | unitId: '', |
| | | account: '', |
| | | password: '', |
| | | userName: '', |
| | |
| | | }, |
| | | formEdit: { |
| | | id: 0, |
| | | unitId: '', |
| | | account: '', |
| | | password: '', |
| | | userName: '', |
| | |
| | | }, |
| | | // 生命周期 - 创建完成(可以访问当前 this 实例) |
| | | created() { |
| | | this.getUnitList() |
| | | this.personnelList() |
| | | this.roleList() |
| | | }, |
| | |
| | | this.form.account = '' |
| | | this.form.password = '' |
| | | this.form.userName = '' |
| | | this.form.unitId = '' |
| | | this.form.mobile = '' |
| | | this.form.email = '' |
| | | this.form.wechat = '' |
| | |
| | | }) |
| | | }) |
| | | }, |
| | | unitIdFormatter(val) { |
| | | const data = this.unitList.find(item => item && item.unitId === val.unitId) |
| | | return data ? data.unitName : '' |
| | | }, |
| | | // 获取责任单位list |
| | | getUnitList() { |
| | | this.$request({ |
| | | url: '/allocation/unit', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | this.unitList = res.data |
| | | }) |
| | | }, |
| | | // 新建员工方法 |
| | | personnelAdd() { |
| | | if (this.form.account && this.form.password && this.form.userName) { |
| | |
| | | account: this.form.account, |
| | | password: this.$encrypt(this.form.password), |
| | | userName: this.form.userName, |
| | | unitId: Number(this.form.unitId), |
| | | mobile: this.form.mobile, |
| | | email: this.form.email, |
| | | wechat: this.form.wechat, |
| | |
| | | this.form.id = row.id |
| | | this.form.account = row.account |
| | | this.form.userName = row.userName |
| | | this.form.unitId = row.unitId |
| | | this.form.mobile = row.mobile |
| | | this.form.email = row.email |
| | | this.form.wechat = row.wechat |
| | |
| | | this.formEdit.userName = '' |
| | | this.formEdit.mobile = '' |
| | | this.formEdit.email = '' |
| | | this.formEdit.unitId = '' |
| | | this.formEdit.wechat = '' |
| | | this.formEdit.expireTime = '' |
| | | this.formEdit.password = '' |
| | |
| | | // 编辑员工方法 |
| | | personnelEdit() { |
| | | // return |
| | | if (this.formEdit.userName !== this.form.userName || this.formEdit.password !== this.form.password || this.formEdit.mobile !== this.form.mobile || this.formEdit.wechat !== this.form.wechat || this.formEdit.email !== this.form.email || this.formEdit.expireTime !== this.form.expireTime) { |
| | | if (this.formEdit.unitId !== this.form.unitId || this.formEdit.userName !== this.form.userName || this.formEdit.password !== this.form.password || this.formEdit.mobile !== this.form.mobile || this.formEdit.wechat !== this.form.wechat || this.formEdit.email !== this.form.email || this.formEdit.expireTime !== this.form.expireTime) { |
| | | this.$request({ |
| | | url: '/user/update', |
| | | method: 'post', |
| | |
| | | password: this.formEdit.password ? this.$encrypt(this.formEdit.password) : null, |
| | | userName: this.formEdit.userName ? this.formEdit.userName : null, |
| | | mobile: this.formEdit.mobile ? this.formEdit.mobile : null, |
| | | unitId: Number(this.formEdit.unitId) ? Number(this.formEdit.unitId) : null, |
| | | email: this.formEdit.email ? this.formEdit.email : null, |
| | | wechat: this.formEdit.wechat ? this.formEdit.wechat : null, |
| | | expireTime: this.formEdit.expireTime ? this.formEdit.expireTime : null |
New file |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :title="title" :visible.sync="visible" top="30px" width="900px" center :before-close="close"> |
| | | <div slot="title" class="titBox"> |
| | | <div>{{ parentFormData.allocationNum }}</div> |
| | | <div>{{ title }}</div> |
| | | </div> |
| | | <div> |
| | | <el-form ref="ruleForm" :disabled="pageState==='detail'" label-width="100px" :model="formData" class="demo-form-inline" :rules="rules"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="上报时间:" prop="escalationTime" class="span"> |
| | | <el-date-picker |
| | | v-model="formData.escalationTime" |
| | | value-format="yyyy-MM-dd" |
| | | size="small" |
| | | type="date" |
| | | placeholder="选择日期" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="污染位置:" prop="pollutePosition" class="span"> |
| | | <el-input v-model="formData.pollutePosition" type="text" placeholder="请选择" size="small" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="责任主体:" prop="unitId" class="span"> |
| | | <el-select v-model="formData.unitId" placeholder="请选择" size="small"> |
| | | <el-option |
| | | v-for="item in unitList" |
| | | :key="item.unitId" |
| | | :label="item.unitName" |
| | | :value="item.unitId" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="污染分类:" prop="polluteType" class="span"> |
| | | <el-select v-model="formData.polluteType" placeholder="请选择" size="small"> |
| | | <el-option |
| | | v-for="item in polluteList" |
| | | :key="item.dataKey" |
| | | :label="item.dataValue" |
| | | :value="item.dataKey" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="整改类型:" prop="changeType" class="span"> |
| | | <el-select v-model="formData.changeType" placeholder="请选择" size="small" @change="changeEnumList"> |
| | | <el-option |
| | | v-for="item in Dic.changeEnum" |
| | | :key="item.value" |
| | | :label="item.name" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="限期天数:" prop="changeDay" class="span"> |
| | | <el-input-number v-model="formData.changeDay" :disabled="formData.changeType===1" :min="0" label="请输入" /> |
| | | <!-- <el-input v-model.number="formData.changeDay" :disabled="formData.changeType===1" type="text" placeholder="请输入" size="small" /> --> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="上报单位:" prop="escalationUnitId" class="span"> |
| | | <el-select v-model="formData.escalationUnitId" placeholder="请选择" size="small"> |
| | | <el-option |
| | | v-for="item in unitList" |
| | | :key="item.unitId" |
| | | :label="item.unitName" |
| | | :value="item.unitId" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="上报人:" prop="escalationName" class="span"> |
| | | <el-input v-model="formData.escalationName" type="text" placeholder="请选择" size="small" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="排查方式:" prop="investigationType" class="span"> |
| | | <el-radio-group v-model="formData.investigationType" size="small"> |
| | | <el-radio v-for="(item) in Dic.investigationEnum" :key="item.value" :label="item.value">{{ item.name }}</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-form-item label="问题描述:" prop="problemDescribe" class="span"> |
| | | <el-input v-model="formData.problemDescribe" type="textarea" :rows="4" placeholder="请输入内容" /> |
| | | </el-form-item> |
| | | </el-row> |
| | | <el-row> |
| | | <el-form-item label="附件:"> |
| | | <div> |
| | | <div v-if="pageState==='edit'"> |
| | | <div v-for="(file,index) in fileBaseListCover" :key="file.fileId+index" class="block"> |
| | | <el-image |
| | | v-if="file.fileType ===1" |
| | | style="width: 100px; height: 100px" |
| | | :src="file.url" |
| | | :preview-src-list="getPreviewImages(file.fileId,fileBaseList)" |
| | | :initial-index="index" |
| | | /> |
| | | <video v-else :src="file.url" style="width: 100px; height: 100px" @click="openVideo(file)"> |
| | | 您的浏览器不支持 video 标签。 |
| | | </video> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <uploadFile v-if="pageState!=='detail'" :upload-url="uploadTermExcelUrl" :sys-code="sysCode" /> |
| | | </el-form-item> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="close">关闭</el-button> |
| | | <el-button v-if="pageState!=='detail'" type="info" @click="handleSubmit('9')">保存</el-button> |
| | | <el-button v-if="pageState!=='detail'" type="primary" @click="handleSubmit('10')">提交</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="videoVisible" width="600px" :modal-append-to-body="false" :destroy-on-close="true" @close="handleCancel"> |
| | | <div style="text-align: center;"> |
| | | <video |
| | | ref="video" |
| | | style="width: 300px;height: 500px" |
| | | :src="dialogImageUrl" |
| | | controls |
| | | autoplay |
| | | /> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import uploadFile from '@/components/UploadExcel/index' |
| | | import bus from '@/Bus' |
| | | import requestObj from '@/utils/request' |
| | | import _ from 'lodash' |
| | | export default { |
| | | components: { uploadFile }, |
| | | props: { |
| | | title: { type: String, default: '' }, |
| | | visible: { type: Boolean, required: true }, |
| | | pageState: { type: String, required: true, default: 'add' }, |
| | | parentFormData: { type: Object, default: () => {} } |
| | | }, |
| | | data() { |
| | | return { |
| | | videoVisible: false, |
| | | formData: { |
| | | fileBaseList: [], |
| | | escalationName: '', |
| | | changeDay: 0, |
| | | investigationType: 1 |
| | | }, |
| | | fileBaseList: [], |
| | | fileBaseListCover: [], |
| | | sysCode: '1010201', // |
| | | Dic: JSON.parse(localStorage.getItem('dict')), |
| | | unitList: [], |
| | | polluteList: [], |
| | | dialogImageUrl: '', |
| | | rules: { |
| | | escalationTime: [ |
| | | { required: true, message: '请选择上报时间', trigger: 'change' } |
| | | ], |
| | | pollutePosition: [ |
| | | { required: true, message: '请输入污染位置', trigger: 'blur' } |
| | | ], |
| | | unitId: [ |
| | | { required: true, message: '请选择责任主体', trigger: 'change' } |
| | | ], |
| | | polluteType: [ |
| | | { required: true, message: '请选择污染分类', trigger: 'change' } |
| | | ], |
| | | changeType: [ |
| | | { required: true, message: '请选择整改类型', trigger: 'change' } |
| | | ], |
| | | changeDay: [ |
| | | { required: true, message: '请输入天数', trigger: 'blur' } |
| | | ], |
| | | escalationUnitId: [ |
| | | { required: true, message: '请选择上报单位', trigger: 'change' } |
| | | ], |
| | | investigationType: [ |
| | | { required: true, message: '请选择排查方式', trigger: 'change' } |
| | | ], |
| | | escalationName: [ |
| | | { required: true, message: '请输入上报人', trigger: 'blur' } |
| | | ], |
| | | problemDescribe: [ |
| | | { required: true, message: '请输入问题描述', trigger: 'blur' } |
| | | ] |
| | | } |
| | | } |
| | | }, |
| | | computed: { |
| | | uploadTermExcelUrl() { |
| | | return `${requestObj.baseUrl}/file/upload` |
| | | } |
| | | }, |
| | | watch: { |
| | | 'pageState': { |
| | | handler(newVal) { |
| | | if (this.pageState === 'edit') { |
| | | if (this.parentFormData.fileBaseList && this.parentFormData.fileBaseList.length > 0) { |
| | | this.parentFormData.fileBaseList.forEach(item => { |
| | | if (item.fileType === 1) { |
| | | this.fileBaseList.push(`${requestObj.baseUrl}file/preview/${item.fileId}`) // 原图 |
| | | } |
| | | // const srcApi = item.fileType === 1 ? api + 'preview/' : api + 'preview/cover/' |
| | | // this.fileBaseList.push(`${requestObj.baseUrl}file/preview/${item.fileId}`) // 原图 |
| | | this.fileBaseListCover.push({ |
| | | url: item.fileType === 1 ? `${requestObj.baseUrl}file/preview/cover/${item.fileId}` : `${requestObj.baseUrl}file/preview/${item.fileId}`, |
| | | fileType: item.fileType, |
| | | fileId: item.fileId, |
| | | fileName: item.fileName |
| | | }) |
| | | }) |
| | | console.log('fileBaseList', this.fileBaseList) |
| | | } |
| | | } |
| | | }, |
| | | deep: true, |
| | | immediate: true |
| | | } |
| | | }, |
| | | created() { |
| | | console.log('oldValue', this.parentFormData) |
| | | if (!(JSON.stringify(this.parentFormData) === '{}')) { |
| | | this.formData = this.parentFormData |
| | | this.formData.polluteType = String(this.parentFormData.polluteType) |
| | | } else { |
| | | const name = this.$store.state.user.name |
| | | this.formData.escalationName = name |
| | | } |
| | | |
| | | this.getUnitList() |
| | | this.getContaminateList() |
| | | bus.$on('changeFileAfterList', (type, fileList) => { |
| | | this.formData.fileBaseList = [] |
| | | if (fileList.length > 0) { |
| | | fileList.map((item) => { |
| | | if (item.response) { |
| | | console.log('item.response.data', item.response.data) |
| | | this.formData.fileBaseList.push(item.response.data) |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | methods: { |
| | | getPreviewImages(index, list) { |
| | | let startIndex = 0 |
| | | const chechList = _.cloneDeep(list) |
| | | chechList.forEach((item, i) => { |
| | | const str = item.substring(item.lastIndexOf('/') + 1) |
| | | console.log('str', str) |
| | | if (Number(str) === Number(index)) { |
| | | startIndex = i |
| | | } |
| | | }) |
| | | |
| | | console.log('index', index) |
| | | console.log('startIndex', startIndex) |
| | | var imgList = [...list] |
| | | if (index === 0) return imgList |
| | | var start = imgList.splice(startIndex) |
| | | var remain = imgList.splice(0, startIndex) |
| | | return start.concat(remain) |
| | | }, |
| | | openVideo(item) { |
| | | console.log('item', item) |
| | | this.dialogImageUrl = item.url |
| | | this.videoVisible = true |
| | | }, |
| | | handleCancel() { |
| | | this.dialogImageUrl = '' |
| | | this.videoVisible = false |
| | | }, |
| | | changeEnumList(val) { |
| | | if (val === 1) { |
| | | this.formData.changeDay = 0 |
| | | } |
| | | }, |
| | | // 获取责任单位list |
| | | getUnitList() { |
| | | this.$request({ |
| | | url: '/allocation/unit', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | this.unitList = res.data |
| | | }) |
| | | }, |
| | | getContaminateList() { |
| | | this.$request({ |
| | | url: '/allocation/contaminate', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | this.polluteList = res.data |
| | | }) |
| | | }, |
| | | close() { |
| | | this.$nextTick(function() { |
| | | this.$refs.ruleForm.resetFields() |
| | | }) |
| | | this.$emit('update:visible', false) |
| | | }, |
| | | handleSubmit(val) { |
| | | console.log('this.formData', this.formData) |
| | | if (this.fileBaseListCover && this.fileBaseListCover.length > 0) { |
| | | this.fileBaseListCover.forEach(item => { |
| | | this.formData.fileBaseList.push({ |
| | | fileId: item.fileId, |
| | | fileName: item.fileName |
| | | }) |
| | | }) |
| | | } |
| | | this.formData.state = val |
| | | this.$refs.ruleForm.validate((valid) => { |
| | | if (valid) { |
| | | // this.formData.fileBaseList = [...this.parentFormData.fileBaseList, this.formData.fileBaseList] |
| | | this.$emit('handleSubmit', this.formData) |
| | | } else { |
| | | return false |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .titBox{ |
| | | position: relative; |
| | | font-size: 18px; |
| | | div:first-child{ |
| | | position: absolute; |
| | | left: 10px; |
| | | } |
| | | div{ |
| | | display: inline-block; |
| | | } |
| | | } |
| | | .block { |
| | | display: inline-block !important; |
| | | margin-right: 10px; |
| | | } |
| | | .textBox { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-left: 15px; |
| | | } |
| | | |
| | | .el-dialog__body>div { |
| | | border-bottom: 1px dashed rgba(187, 187, 187, 1); |
| | | } |
| | | .span{ |
| | | /deep/.el-form-item__content { |
| | | |
| | | div { |
| | | width: 100%; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .textare { |
| | | /deep/.el-form-item__content { |
| | | width: 800px; |
| | | |
| | | div { |
| | | width: 100%; |
| | | } |
| | | } |
| | | } |
| | | |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div> |
| | | <div class="search-form"> |
| | | <el-form :inline="true" :model="formData" class="demo-form-inline"> |
| | | <el-form-item label="交办单号:"> |
| | | <el-input v-model="formData.allocationNum" placeholder="请输入单号" size="small" clearable /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="开始时间:"> |
| | | <el-date-picker |
| | | v-model="formData.startTime" |
| | | style="width:92%" |
| | | size="small" |
| | | value-format="yyyy-MM-dd" |
| | | type="date" |
| | | placeholder="开始日期" |
| | | /> |
| | | |
| | | </el-form-item> |
| | | <el-form-item label="结束时间:"> |
| | | <el-date-picker |
| | | v-model="formData.endTime" |
| | | style="width:92%" |
| | | size="small" |
| | | value-format="yyyy-MM-dd" |
| | | type="date" |
| | | placeholder="结束时间" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="责任主体:" class="rddd"> |
| | | <el-select v-model="formData.unitId" size="small" clearable placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in unitList" |
| | | :key="item.unitId" |
| | | :label="item.unitName" |
| | | :value="item.unitId" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="污染分类:"> |
| | | <el-select v-model="formData.polluteType" size="small" clearable placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in polluteList" |
| | | :key="item.dataKey" |
| | | :label="item.dataValue" |
| | | :value="item.dataKey" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="排查方式:"> |
| | | <el-select v-model="formData.investigationType" size="small" clearable placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in Dic.investigationEnum" |
| | | :key="item.value" |
| | | :label="item.name" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="整改类型:"> |
| | | <el-select v-model="formData.changeType" placeholder="请选择" clearable size="small"> |
| | | <el-option |
| | | v-for="item in Dic.changeEnum" |
| | | :key="item.value" |
| | | :label="item.name" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="流程状态:"> |
| | | <el-select v-model="formData.state" size="small" clearable placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in Dic.allocationApproveEnum" |
| | | :key="item.value" |
| | | :label="item.name" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="是否作废:"> |
| | | <el-select v-model="formData.isInvalid " placeholder="请选择" clearable size="small"> |
| | | <el-option |
| | | v-for="item in Dic.yesOrNo" |
| | | :key="item.value" |
| | | :label="item.name" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" size="small" @click="onSubmit">查询</el-button> |
| | | <el-button type="primary" size="small" @click="handleAdd">新建</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | props: { |
| | | searchType: { type: String, default: '' } |
| | | }, |
| | | data() { |
| | | return { |
| | | formData: { |
| | | isInvalid: 0 |
| | | }, |
| | | unitList: [], |
| | | Dic: JSON.parse(localStorage.getItem('dict')), |
| | | polluteList: [], |
| | | valueTime: [], |
| | | isReform: false |
| | | } |
| | | }, |
| | | |
| | | created() { |
| | | this.getUnitList() |
| | | this.getContaminateList() |
| | | console.log('searchType', this.searchType) |
| | | }, |
| | | methods: { |
| | | // 获取责任单位list |
| | | getUnitList() { |
| | | this.$request({ |
| | | url: '/allocation/unit', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | this.unitList = res.data |
| | | }) |
| | | }, |
| | | getContaminateList() { |
| | | this.$request({ |
| | | url: '/allocation/contaminate', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | this.polluteList = res.data |
| | | }) |
| | | }, |
| | | onSubmit() { |
| | | this.$emit('handleSearch', this.formData) |
| | | }, |
| | | handleAdd() { |
| | | this.$emit('handleAdd', '12122') |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .search-form { |
| | | margin: 20px; |
| | | margin-bottom: 0px; |
| | | /deep/ .el-input__suffix{ |
| | | right: 20; |
| | | } |
| | | /deep/ .el-form-item__content{ |
| | | width: auto; |
| | | } |
| | | } |
| | | /deep/.el-form-item__label{ |
| | | font-size: 16px; |
| | | } |
| | | /deep/.el-form-item{ |
| | | margin-bottom: 5px; |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :title="dialogData.title" top="30px" :visible.sync="visible" width="900px" center :before-close="close"> |
| | | <div slot="title" class="titBox"> |
| | | <div>{{ parentFormData.allocationNum }}</div> |
| | | <div>{{ dialogData.title }}</div> |
| | | </div> |
| | | <div> |
| | | <div v-if="dialogData.pageType !=='delay'" class="stepsList"> |
| | | <el-steps :space="200" :active="parentFormData.approveList.length+1" align-center> |
| | | <el-step |
| | | v-for="(item,index) in setepList" |
| | | :key="index" |
| | | :title="'' + item.createName + ' ' + item.stateName" |
| | | :description="item.createTime" |
| | | /> |
| | | </el-steps> |
| | | </div> |
| | | <div class="inforData"> |
| | | <el-descriptions title="基本信息" :column="parseInt('4')"> |
| | | <el-descriptions-item label="上报时间" label-class-name="itemSpan">{{ parentFormData.escalationTime }}</el-descriptions-item> |
| | | <el-descriptions-item label="污染位置" label-class-name="itemSpan">{{ parentFormData.pollutePosition }}</el-descriptions-item> |
| | | <el-descriptions-item label="责任单位" label-class-name="itemSpan">{{ unitIdFormatter }}</el-descriptions-item> |
| | | <el-descriptions-item label="污染分类" label-class-name="itemSpan">{{ polluteTypeFormatter }}</el-descriptions-item> |
| | | <el-descriptions-item label="整改类型" label-class-name="itemSpan">{{ dictObj.changeEnum[parentFormData.changeType] }}</el-descriptions-item> |
| | | <el-descriptions-item label="期限天数" label-class-name="itemSpan">{{ parentFormData.changeDay }}</el-descriptions-item> |
| | | <el-descriptions-item label="上报单位" label-class-name="itemSpan">{{ updataUnitIdFormatter }}</el-descriptions-item> |
| | | <el-descriptions-item label="上报人" label-class-name="itemSpan">{{ parentFormData.escalationName }}</el-descriptions-item> |
| | | </el-descriptions> |
| | | <el-descriptions :column="parseInt('1')"> |
| | | <el-descriptions-item label="问题描述" label-class-name="itemSpan" :content-style="{'width': '80%'}">{{ parentFormData.problemDescribe }}</el-descriptions-item> |
| | | <el-descriptions-item label="附件" label-class-name="itemSpan" :content-style="{'width': '80%'}"> |
| | | <div> |
| | | <div v-for="(file,index) in fileBaseListCover" :key="file.id+index" class="block"> |
| | | <el-image |
| | | v-if="file.fileType ===1" |
| | | style="width: 100px; height: 100px" |
| | | :src="file.url" |
| | | :preview-src-list="getPreviewImages(file.id,fileBaseList)" |
| | | :initial-index="index" |
| | | /> |
| | | <video v-else :src="file.url" style="width: 100px; height: 100px" @click="openVideo(file)"> |
| | | 您的浏览器不支持 video 标签。 |
| | | </video> |
| | | </div> |
| | | </div> |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | </div> |
| | | <!-- 整改部分操作 --> |
| | | <div v-if="dialogData.pageType ==='work'" class="rectification"> |
| | | <div> |
| | | <el-form label-width="90px" class="demo-form-inline"> |
| | | <div style="display: flex;"> |
| | | <el-form-item label="是否整改:"> |
| | | <el-radio-group v-model="workForme.isChange"> |
| | | <el-radio :label="0">是</el-radio> |
| | | <el-radio :label="1">否</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="整改人:"> |
| | | <el-input v-model="workForme.changeName" size="mini" placeholder="请输入整改人" /> |
| | | </el-form-item> |
| | | </div> |
| | | <el-form-item label="整改反馈:"> |
| | | <el-input |
| | | v-model="workForme.changeDescribe" |
| | | type="textarea" |
| | | :autosize="{ minRows: 2, maxRows: 4}" |
| | | placeholder="请输入内容" |
| | | /> |
| | | </el-form-item> |
| | | <el-row> |
| | | <el-form-item label="附件:"> |
| | | <uploadFile :upload-url="uploadTermExcelUrl" :sys-code="dialogData.sysCode" /> |
| | | </el-form-item> |
| | | </el-row> |
| | | |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | <!-- 整改信息 --> |
| | | <div v-if="(dialogData.pageType ==='detail'||dialogData.pageType ==='approve' )&& parentFormData.state >=30"> |
| | | <el-row class="rectificationContent"> |
| | | <el-col :span="12"><div class="grid-content bg-purple" /> |
| | | <el-descriptions title="整改信息" :column="parseInt('2')"> |
| | | <el-descriptions-item label="是否整改" label-class-name="itemSpan">{{ parentFormData.changeType }}</el-descriptions-item> |
| | | <el-descriptions-item label="整改人" label-class-name="itemSpan">{{ parentFormData.changeName }}</el-descriptions-item> |
| | | </el-descriptions> |
| | | <el-descriptions :column="parseInt('1')"> |
| | | <el-descriptions-item label="整改反馈" label-class-name="itemSpan">{{ parentFormData.changeDescribe }}</el-descriptions-item> |
| | | </el-descriptions> |
| | | </el-col> |
| | | <el-col :span="12"><div class="grid-content bg-purple-light" /> |
| | | <el-row> |
| | | <el-col :span="3" style="margin-top: 40px;font-size: 15px;color: #101010;"><div class="grid-content bg-purple" />附件:</el-col> |
| | | <el-col :span="21"><div class="grid-content bg-purple-light" /> |
| | | <div> |
| | | <div v-for="(file,index) in fileChangeListCover" :key="file.id+index" class="block"> |
| | | <el-image |
| | | v-if="file.fileType ===1" |
| | | style="width: 100px; height: 100px" |
| | | :src="file.url" |
| | | :preview-src-list="getPreviewImages(file.id,fileChangeList)" |
| | | :initial-index="index" |
| | | /> |
| | | <video v-else :src="file.url" style="width: 100px; height: 100px" @click="openVideo(file)"> |
| | | 您的浏览器不支持 video 标签。 |
| | | </video> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <!-- 审批信息 --> |
| | | <div v-if="dialogData.pageType ==='detail'&& parentFormData.state>30"> |
| | | <el-row class="rectificationContent"> |
| | | <el-col :span="12"><div class="grid-content bg-purple" /> |
| | | <el-descriptions title="审批信息" :column="2"> |
| | | <el-descriptions-item label="考核打分" label-class-name="itemSpan">{{ parentFormData.checkScore }}</el-descriptions-item> |
| | | </el-descriptions> |
| | | <el-descriptions :column="1"> |
| | | <el-descriptions-item label="理由" label-class-name="itemSpan">{{ parentFormData.checkDescribe }}</el-descriptions-item> |
| | | </el-descriptions> |
| | | </el-col> |
| | | <el-col :span="12"><div class="grid-content bg-purple-light" /> |
| | | <el-row> |
| | | <el-col :span="3" style="margin-top: 40px;font-size: 15px;color: #101010;"><div class="grid-content bg-purple" />附件:</el-col> |
| | | <el-col :span="21"><div class="grid-content bg-purple-light" /> |
| | | <div> |
| | | <div> |
| | | <div v-for="(file,index) in fileApproveListCover" :key="file.id+index" class="block"> |
| | | <el-image |
| | | v-if="file.fileType ===1" |
| | | style="width: 100px; height: 100px" |
| | | :src="file.url" |
| | | :preview-src-list="getPreviewImages(file.id,fileApproveList)" |
| | | :initial-index="index" |
| | | /> |
| | | <video v-else :src="file.url" style="width: 100px; height: 100px" @click="openVideo(file)"> |
| | | 您的浏览器不支持 video 标签。 |
| | | </video> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <!-- 延期信息 --> |
| | | <div v-if="(dialogData.pageType ==='delay' && (dialogData.pageState ==='view' ||dialogData.pageState ==='edit'))"> |
| | | <el-row class="rectificationContent"> |
| | | <el-col :span="12"><div class="grid-content bg-purple" /> |
| | | <el-descriptions title="延期信息" :column="1"> |
| | | <el-descriptions-item label="延期天数" label-class-name="itemSpan">{{ parentFormData.extensionNum }}</el-descriptions-item> |
| | | <el-descriptions-item label="延期理由" label-class-name="itemSpan">{{ parentFormData.remake }}</el-descriptions-item> |
| | | </el-descriptions> |
| | | </el-col> |
| | | <el-col :span="12"><div class="grid-content bg-purple-light" /> |
| | | <el-row> |
| | | <el-col :span="3" style="margin-top: 40px;font-size: 15px;color: #101010;"><div class="grid-content bg-purple" />附件:</el-col> |
| | | <el-col :span="21"><div class="grid-content bg-purple-light" /> |
| | | <div> |
| | | <div v-for="(file,index) in fileDelayListCover" :key="file.id+index" class="block"> |
| | | <el-image |
| | | v-if="file.fileType ===1" |
| | | style="width: 100px; height: 100px" |
| | | :src="file.url" |
| | | :preview-src-list="getPreviewImages(file.id,fileDelayList)" |
| | | :initial-index="index" |
| | | /> |
| | | <video v-else :src="file.url" style="width: 100px; height: 100px" @click="openVideo(file)"> |
| | | 您的浏览器不支持 video 标签。 |
| | | </video> |
| | | </div> |
| | | </div></el-col> |
| | | </el-row> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <!-- 审批操作 --> |
| | | <div v-if="dialogData.pageType ==='approve'" class="examineAndApprove"> |
| | | <el-form label-width="90px" :model="rectificationFromData" class="demo-form-inline"> |
| | | <el-form-item label="考核打分:"> |
| | | <el-input v-model="approveForm.checkScore" style="width: 120px;" size="mini" /> |
| | | </el-form-item> |
| | | <el-form-item label="理由:"> |
| | | <el-input |
| | | v-model="approveForm.checkDescribe" |
| | | type="textarea" |
| | | :autosize="{ minRows: 2, maxRows: 4}" |
| | | placeholder="请输入内容" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="附件:"> |
| | | <uploadFile :upload-url="uploadTermExcelUrl" :sys-code="dialogData.sysCode" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <!-- 延期操作 --> |
| | | <div v-if="dialogData.pageType ==='delay' && ( dialogData.pageState ==='approve')" class="examineAndApprove"> |
| | | <el-form label-width="90px" :model="rectificationFromData" class="demo-form-inline"> |
| | | <el-form-item label="延期天数:"> |
| | | <el-input v-model="delayForm.extensionNum" style="width: 200px;" /> |
| | | </el-form-item> |
| | | <el-form-item label="延期理由:"> |
| | | <el-input |
| | | v-model="delayForm.remake" |
| | | type="textarea" |
| | | :autosize="{ minRows: 2, maxRows: 4}" |
| | | placeholder="请输入内容" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="附件:"> |
| | | <uploadFile :upload-url="uploadTermExcelUrl" :sys-code="dialogData.sysCode" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="close()">关闭</el-button> |
| | | <el-button v-if="dialogData.pageType ==='approve'" type="danger" @click="handleSubmit(50)">拒绝</el-button> |
| | | <el-button v-if="dialogData.pageType ==='delay'&& dialogData.pageState ==='edit'" type="danger" @click="handleDelaySubmit(50)">拒绝</el-button> |
| | | <el-button v-if="dialogData.pageType ==='delay'&& dialogData.pageState ==='edit'" type="primary" @click="handleDelaySubmit(40)">提交</el-button> |
| | | <el-button v-if="dialogData.pageType !=='detail'&& dialogData.pageState ==='approve'" type="primary" @click="handleSubmit(40)">提交</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="videoVisible" width="600px" :modal-append-to-body="false" :destroy-on-close="true" @close="handleCancel"> |
| | | <div style="text-align: center;"> |
| | | <video |
| | | ref="video" |
| | | style="width: 300px;height: 500px" |
| | | :src="dialogImageUrl" |
| | | controls |
| | | autoplay |
| | | /> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | p |
| | | <script> |
| | | import _ from 'lodash' |
| | | import uploadFile from '@/components/UploadExcel/index' |
| | | import Bus from '@/Bus' |
| | | import requestObj from '@/utils/request' |
| | | |
| | | export default { |
| | | components: { |
| | | uploadFile |
| | | }, |
| | | props: { |
| | | dialogData: { type: Object, default: () => {} }, |
| | | visible: { type: Boolean, required: true } |
| | | }, |
| | | data() { |
| | | return { |
| | | centerDialogVisible: true, |
| | | workForme: { |
| | | isChange: 0, |
| | | changeName: '', |
| | | changeDescribe: '' |
| | | }, |
| | | approveForm: { |
| | | checkScore: '', |
| | | checkDescribe: '' |
| | | }, |
| | | delayForm: { |
| | | remake: '', |
| | | extensionNum: '' |
| | | }, |
| | | rectificationFromData: { |
| | | |
| | | }, |
| | | dialogVisibleMainGraph: false, |
| | | hasFile: '', |
| | | setepListAdd: { |
| | | set1: [ |
| | | { createName: '', stateName: '整改', createTime: '' }, |
| | | { createName: '', stateName: '审批', createTime: '' }, |
| | | { createName: '', stateName: '完成', createTime: '' } |
| | | ], |
| | | set2: [ |
| | | { createName: '', stateName: '审批', createTime: '' }, |
| | | { createName: '', stateName: '完成', createTime: '' } |
| | | ], |
| | | set3: [ |
| | | { createName: '', stateName: '完成', createTime: '' } |
| | | ] |
| | | }, |
| | | unitList: [], |
| | | polluteList: [], |
| | | fileList: [], |
| | | Dic: JSON.parse(localStorage.getItem('dict')), |
| | | dictObj: JSON.parse(localStorage.getItem('dictObj')), |
| | | fileBaseList: [], |
| | | fileChangeList: [], |
| | | fileApproveList: [], |
| | | fileBaseListCover: [], |
| | | fileChangeListCover: [], |
| | | fileApproveListCover: [], |
| | | fileDelayListCover: [], |
| | | fileDelayList: [], |
| | | videoVisible: false, |
| | | dialogImageUrl: '' |
| | | } |
| | | }, |
| | | computed: { |
| | | uploadTermExcelUrl() { |
| | | return `${requestObj.baseUrl}/file/upload` |
| | | }, |
| | | parentFormData() { |
| | | console.log('parentFormData.approveList', this.dialogData.parentFormData) |
| | | return this.dialogData.parentFormData |
| | | }, |
| | | updataUnitIdFormatter: function() { |
| | | const data = this.unitList.find(item => item && item.unitId === this.dialogData.parentFormData.escalationUnitId) |
| | | return data ? data.unitName : '' |
| | | }, |
| | | unitIdFormatter: function() { |
| | | const data = this.unitList.find(item => item && item.unitId === this.dialogData.parentFormData.unitId) |
| | | return data ? data.unitName : '' |
| | | }, |
| | | polluteTypeFormatter: function() { |
| | | const data = this.polluteList.find(item => item && parseInt(item.dataKey) === this.dialogData.parentFormData.polluteType) |
| | | return data ? data.dataValue : '' |
| | | }, |
| | | setepList() { |
| | | const leng = this.dialogData.parentFormData.approveList.length |
| | | let data = _.cloneDeep(this.dialogData.parentFormData.approveList) |
| | | |
| | | if (leng === 1) { |
| | | data = [...data, ...this.setepListAdd.set1] |
| | | } |
| | | if (leng === 2) { |
| | | data = [...data, ...this.setepListAdd.set2] |
| | | } |
| | | if (leng === 3) { |
| | | data = [...data, ...this.setepListAdd.set3] |
| | | } |
| | | console.log('data', leng) |
| | | return data |
| | | } |
| | | }, |
| | | watch: { |
| | | 'parentFormData': { |
| | | handler(newVal) { |
| | | this.searchthisFileList(newVal) |
| | | }, |
| | | deep: true, |
| | | immediate: true |
| | | } |
| | | }, |
| | | created() { |
| | | const name = this.$store.state.user.name |
| | | this.workForme.changeName = name |
| | | this.getContaminateList() |
| | | this.getUnitList() |
| | | Bus.$on('changeFileAfterList', (type, fileList) => { |
| | | console.log('fileList', fileList) |
| | | this.fileList = [] |
| | | if (fileList.length > 0) { |
| | | fileList.map((item) => { |
| | | if (item.response) { |
| | | this.fileList.push(item.response.data) |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | methods: { |
| | | getPreviewImages(index, list) { |
| | | let startIndex = 0 |
| | | const chechList = _.cloneDeep(list) |
| | | chechList.forEach((item, i) => { |
| | | const str = item.substring(item.lastIndexOf('/') + 1) |
| | | if (Number(str) === Number(index)) { |
| | | startIndex = i |
| | | } |
| | | }) |
| | | console.log('startIndex', startIndex) |
| | | var imgList = [...list] |
| | | if (index === 0) return imgList |
| | | var start = imgList.splice(startIndex) |
| | | var remain = imgList.splice(0, startIndex) |
| | | return start.concat(remain) |
| | | }, |
| | | openVideo(item) { |
| | | console.log('item', item) |
| | | this.dialogImageUrl = item.url |
| | | this.videoVisible = true |
| | | }, |
| | | handleCancel() { |
| | | this.dialogImageUrl = '' |
| | | this.videoVisible = false |
| | | }, |
| | | searchthisFileList(newVal) { |
| | | if (newVal.fileBaseList && newVal.fileBaseList.length > 0) { |
| | | newVal.fileBaseList.forEach(item => { |
| | | if (item.fileType === 1) { |
| | | this.fileBaseList.push(`${requestObj.baseUrl}/file/preview/${item.fileId}`) // 原图 |
| | | } |
| | | |
| | | this.fileBaseListCover.push({ |
| | | url: item.fileType === 1 ? `${requestObj.baseUrl}/file/preview/cover/${item.fileId}` : `${requestObj.baseUrl}/file/preview/${item.fileId}`, |
| | | fileType: item.fileType, |
| | | id: item.fileId |
| | | }) |
| | | }) |
| | | console.log('fileBaseList', this.fileBaseList) |
| | | } |
| | | if (newVal.fileChangeList && newVal.fileChangeList.length > 0) { |
| | | newVal.fileChangeList.forEach(item => { |
| | | if (item.fileType === 1) { |
| | | this.fileChangeList.push(`${requestObj.baseUrl}/file/preview/${item.fileId}`) // 原图 |
| | | } |
| | | this.fileChangeListCover.push({ |
| | | url: item.fileType === 1 ? `${requestObj.baseUrl}/file/preview/cover/${item.fileId}` : `${requestObj.baseUrl}/file/preview/${item.fileId}`, |
| | | fileType: item.fileType, |
| | | id: item.fileId |
| | | }) |
| | | }) |
| | | } |
| | | if (newVal.fileApproveList && newVal.fileApproveList.length > 0) { |
| | | newVal.fileApproveList.forEach(item => { |
| | | if (item.fileType === 1) { |
| | | this.fileApproveList.push(`${requestObj.baseUrl}/file/preview/${item.fileId}`) // 原图 |
| | | } |
| | | this.fileApproveList.push(`${requestObj.baseUrl}/file/preview/${item.fileId}`) // 原图 |
| | | this.fileApproveListCover.push({ |
| | | url: item.fileType === 1 ? `${requestObj.baseUrl}/file/preview/cover/${item.fileId}` : `${requestObj.baseUrl}/file/preview/${item.fileId}`, |
| | | fileType: item.fileType, |
| | | id: item.fileId |
| | | }) |
| | | }) |
| | | } |
| | | if (newVal.fileList && newVal.fileList.length > 0) { |
| | | newVal.fileList.forEach(item => { |
| | | if (item.fileType === 1) { |
| | | this.fileDelayList.push(`${requestObj.baseUrl}/file/preview/${item.fileId}`) // 原图 |
| | | } |
| | | this.fileDelayList.push(`${requestObj.baseUrl}/file/preview/${item.fileId}`) // 原图 |
| | | this.fileDelayListCover.push({ |
| | | url: item.fileType === 1 ? `${requestObj.baseUrl}/file/preview/cover/${item.fileId}` : `${requestObj.baseUrl}/file/preview/${item.fileId}`, |
| | | fileType: item.fileType, |
| | | id: item.fileId |
| | | }) |
| | | }) |
| | | } |
| | | }, |
| | | close() { |
| | | this.$emit('update:visible', false) |
| | | }, |
| | | // 获取责任单位list |
| | | getUnitList() { |
| | | this.$request({ |
| | | url: '/allocation/unit', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | this.unitList = res.data |
| | | }) |
| | | }, |
| | | handleDelaySubmit(state) { |
| | | this.$request({ |
| | | url: '/allocationExtension/check', |
| | | method: 'get', |
| | | params: { |
| | | id: this.dialogData.parentFormData.id, |
| | | state: state |
| | | } |
| | | }).then((res) => { |
| | | if (res.code === 0) { |
| | | this.$emit('update:visible', false) |
| | | this.$emit('handeleSumit') |
| | | } else { |
| | | this.$message.error(res.message) |
| | | } |
| | | }) |
| | | }, |
| | | handleSubmit(state) { |
| | | // 整改 |
| | | let api = '/allocation/change' |
| | | let data = {} |
| | | console.log('this.dialogData.pageType', this.dialogData.pageType) |
| | | if (this.dialogData.pageType === 'work') { |
| | | api = '/allocation/change' |
| | | data = { |
| | | 'allocationId': this.dialogData.parentFormData.allocationId, |
| | | ...this.workForme, |
| | | 'fileChangeList': this.fileList, |
| | | state: 30 |
| | | } |
| | | } else if (this.dialogData.pageType === 'approve') { |
| | | api = '/allocation/check' |
| | | data = { |
| | | 'allocationId': this.dialogData.parentFormData.allocationId, |
| | | ...this.approveForm, |
| | | 'fileApproveList': this.fileList, |
| | | state: state |
| | | } |
| | | } else if (this.dialogData.pageType === 'delay') { |
| | | api = '/allocation/applyfor' |
| | | data = { |
| | | 'allocationId': this.dialogData.parentFormData.allocationId, |
| | | ...this.delayForm, |
| | | 'fileList': this.fileList |
| | | } |
| | | } |
| | | this.$request({ |
| | | url: api, |
| | | method: 'post', |
| | | data: data |
| | | }).then((res) => { |
| | | if (res.code === 0) { |
| | | this.$emit('update:visible', false) |
| | | this.$emit('handeleSumit') |
| | | } else { |
| | | this.$message.error(res.message) |
| | | } |
| | | }) |
| | | }, |
| | | getContaminateList() { |
| | | this.$request({ |
| | | url: '/allocation/contaminate', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | this.polluteList = res.data |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .titBox{ |
| | | position: relative; |
| | | font-size: 18px; |
| | | div:first-child{ |
| | | position: absolute; |
| | | left: 10px; |
| | | } |
| | | div{ |
| | | display: inline-block; |
| | | } |
| | | } |
| | | .stepsList { |
| | | border-bottom: 1px dashed rgba(187, 187, 187, 1); |
| | | padding-bottom: 10px; |
| | | } |
| | | .inforData{ |
| | | margin-top: 20px; |
| | | border-bottom: 1px dashed rgba(187, 187, 187, 1); |
| | | padding-bottom: 10px; |
| | | font-size: 15px!important; |
| | | color: rgba(16, 16, 16, 1)!important; |
| | | } |
| | | /deep/.itemSpan{ |
| | | width: 70px; |
| | | text-align: right; |
| | | font-size: 15px; |
| | | color: rgba(16, 16, 16, 1); |
| | | } |
| | | .rectification ,.examineAndApprove,.rectificationContent{ |
| | | margin-top: 20px; |
| | | border-bottom: 1px dashed rgba(187, 187, 187, 1); |
| | | margin-bottom: 10px; |
| | | } |
| | | .block { |
| | | display: inline-block; |
| | | margin-right: 10px; |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div> |
| | | <div class="search-form"> |
| | | <el-form :inline="true" :model="formData" class="demo-form-inline"> |
| | | <el-form-item label="交办单号:"> |
| | | <el-input v-model="formData.allocationNum" placeholder="请输入单号" size="small" clearable /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="开始时间:"> |
| | | <el-date-picker |
| | | v-model="formData.startTime" |
| | | style="width:92%" |
| | | size="small" |
| | | value-format="yyyy-MM-dd" |
| | | type="date" |
| | | placeholder="开始日期" |
| | | /> |
| | | |
| | | </el-form-item> |
| | | <el-form-item label="结束时间:"> |
| | | <el-date-picker |
| | | v-model="formData.endTime" |
| | | style="width:92%" |
| | | size="small" |
| | | value-format="yyyy-MM-dd" |
| | | type="date" |
| | | placeholder="结束时间" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="责任主体:"> |
| | | <el-select v-model="formData.unitId" size="small" clearable placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in unitList" |
| | | :key="item.unitId" |
| | | :label="item.unitName" |
| | | :value="item.unitId" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="污染分类:"> |
| | | <el-select v-model="formData.polluteType" size="small" clearable placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in polluteList" |
| | | :key="item.dataKey" |
| | | :label="item.dataValue" |
| | | :value="item.dataKey" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="整改类型:"> |
| | | <el-select v-model="formData.changeType" placeholder="请选择" clearable size="small"> |
| | | <el-option |
| | | v-for="item in Dic.changeEnum" |
| | | :key="item.value" |
| | | :label="item.name" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="审批状态:"> |
| | | <el-select v-model="formData.state" placeholder="请选择" clearable size="small"> |
| | | <el-option |
| | | v-for="item in Dic.allocationExtensionApproveEnum" |
| | | :key="item.value" |
| | | :label="item.name" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" size="small" @click="onSubmit">查询</el-button> |
| | | <el-button v-if="searchType==='reform'" type="primary" size="small" @click="handleAdd">新建</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | props: { |
| | | searchType: { type: String, default: '' } |
| | | }, |
| | | data() { |
| | | return { |
| | | formData: {}, |
| | | unitList: [], |
| | | Dic: JSON.parse(localStorage.getItem('dict')), |
| | | polluteList: [], |
| | | valueTime: [], |
| | | isReform: false |
| | | } |
| | | }, |
| | | |
| | | created() { |
| | | this.getUnitList() |
| | | this.getContaminateList() |
| | | console.log('searchType', this.searchType) |
| | | }, |
| | | methods: { |
| | | // 获取责任单位list |
| | | getUnitList() { |
| | | this.$request({ |
| | | url: '/allocation/unit', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | this.unitList = res.data |
| | | }) |
| | | }, |
| | | getContaminateList() { |
| | | this.$request({ |
| | | url: '/allocation/contaminate', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | this.polluteList = res.data |
| | | }) |
| | | }, |
| | | onSubmit() { |
| | | this.$emit('handleSearch', this.formData) |
| | | }, |
| | | handleAdd() { |
| | | this.$emit('handleAdd', '12122') |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | |
| | | .search-form { |
| | | margin: 20px; |
| | | margin-bottom: 0px; |
| | | /deep/ .el-input__suffix{ |
| | | right: 20; |
| | | } |
| | | /deep/ .el-form-item__content{ |
| | | width: auto; |
| | | } |
| | | } |
| | | /deep/.el-form-item__label{ |
| | | font-size: 16px; |
| | | } |
| | | /deep/.el-form-item{ |
| | | margin-bottom: 5px; |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div class="main"> |
| | | <div> |
| | | <searchBar v-if="searchType" :search-type="searchType" @handleSearch="handleSearch" @handleAdd="handleOpenDialog(null,'add')" /> |
| | | <div class="tab"> |
| | | <el-table |
| | | :data="tableData" |
| | | border |
| | | size="mini" |
| | | max-height="680" |
| | | style="width: 100%" |
| | | :header-cell-style="{ |
| | | color: '#101111', fontSize: '16px' |
| | | }" |
| | | > |
| | | <el-table-column |
| | | type="index" |
| | | label="序号" |
| | | width="60px" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="allocationNum" |
| | | label="单号" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="createTime" |
| | | label="时间" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="unitId" |
| | | label="责任单位" |
| | | :formatter="unitIdFormatter" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="polluteType" |
| | | label="污染分类" |
| | | :formatter="polluteTypeFormatter" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="changeType" |
| | | label="整改类型" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <div> {{ dictObj.changeEnum[scope.row.changeType] }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | prop="extensionNum" |
| | | width="60px" |
| | | label="延期天数" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <div> {{ scope.row.extensionNum }}天</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | prop="address" |
| | | width="80px" |
| | | label="状态" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag v-if="scope.row.state===40" type="success" size="medium "> |
| | | {{ stateFormatter(scope.row) }} |
| | | </el-tag> |
| | | <el-tag v-if="scope.row.state===50" type="danger" size="medium "> |
| | | {{ stateFormatter(scope.row) }} |
| | | </el-tag> |
| | | <el-tag v-if="scope.row.state===9" type="info" size="medium "> |
| | | {{ stateFormatter(scope.row) }} |
| | | </el-tag> |
| | | <el-tag v-if="scope.row.state===20" type="warning" size="medium "> |
| | | {{ stateFormatter(scope.row) }} |
| | | </el-tag> |
| | | <el-tag v-if="scope.row.state===10" type="warning" size="medium "> |
| | | {{ stateFormatter(scope.row) }} |
| | | </el-tag> |
| | | <el-tag v-if="scope.row.state===30" type="warning" size="medium "> |
| | | {{ stateFormatter(scope.row) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | > |
| | | <template slot="header"> |
| | | <div>上报单位</div> |
| | | <div>上报人</div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <div> {{ scope.row.escalationName }}</div> |
| | | <div> {{ updatUnitIdFormatter(scope.row) }}</div> |
| | | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | > |
| | | <template slot="header"> |
| | | <div>操作人</div> |
| | | <div>操作时间</div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <div>{{ scope.row.updateName }}</div> |
| | | <div>{{ scope.row.updateTime }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | prop="address" |
| | | width="100px" |
| | | label="操作" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" size="medium" @click="openWorkOrdinDialog(scope.row,'detail')">详情</el-button> |
| | | <el-button v-if="scope.row.state===30&&scope.row.isApprove===1" type="text" size="medium" @click="openWorkOrdinDialog(scope.row,'approve')">审批</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <div class="pagina"> |
| | | <el-pagination |
| | | background |
| | | :current-page="pagination.currentPage" |
| | | :page-sizes="pagination.pageSizes" |
| | | :page-size="pagination.pageSize" |
| | | :total="pagination.totalCount" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange" |
| | | /> |
| | | </div> |
| | | </div> |
| | | <workOrderInformation v-if="workOrdinDialogVisible" :dialog-data="dialogData" :visible.sync="workOrdinDialogVisible" @handeleSumit="handeleWorkSumbit" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import workOrderInformation from '@/views/toCarryOutLegislativeReforms/components/workOrderInformation' |
| | | import searchBar from '@/views/toCarryOutLegislativeReforms/delay/componets/queryForm' |
| | | export default { |
| | | components: { |
| | | searchBar, |
| | | workOrderInformation |
| | | }, |
| | | data() { |
| | | return { |
| | | Dic: JSON.parse(localStorage.getItem('dict')), |
| | | dictObj: JSON.parse(localStorage.getItem('dictObj')), |
| | | workOrdinDialogVisible: false, |
| | | formData: {}, |
| | | tableData: [], |
| | | polluteList: [], |
| | | unitList: [], |
| | | searchType: 'delay', |
| | | pagination: { |
| | | currentPage: 1, |
| | | // 总条数,根据接口获取数据长度(注意:这里不能为空) |
| | | totalCount: 0, |
| | | // 个数选择器(可修改) |
| | | pageSizes: [10, 20, 30, 40], |
| | | // 默认每页显示的条数(可修改) |
| | | pageSize: 10 |
| | | }, |
| | | searchData: {} |
| | | } |
| | | }, |
| | | created() { |
| | | this.getUnitList() |
| | | this.getContaminateList() |
| | | this.handleSearch() |
| | | }, |
| | | methods: { |
| | | handeleWorkSumbit() { |
| | | this.handleSearch() |
| | | }, |
| | | handleSearch(obj) { |
| | | this.searchData.isInvalid = 0 |
| | | if (obj) { |
| | | this.searchData = obj |
| | | } |
| | | this.$request({ |
| | | url: '/allocationExtension/page', |
| | | method: 'post', |
| | | data: { |
| | | ...obj, |
| | | 'page': this.pagination |
| | | } |
| | | }).then((res) => { |
| | | this.tableData = res.data.list |
| | | this.pagination.totalCount = res.data.page.totalNum |
| | | }) |
| | | }, |
| | | // 分页 |
| | | // 每页显示的条数 |
| | | handleSizeChange(val) { |
| | | // 改变每页显示的条数 |
| | | this.pagination.pageSize = val |
| | | // 注意:在改变每页显示的条数时,要将页码显示到第一页 |
| | | this.pagination.currentPage = 1 |
| | | this.handleSearch() |
| | | }, |
| | | // 显示第几页 |
| | | handleCurrentChange(val) { |
| | | // 改变默认的页数 |
| | | this.pagination.currentPage = val |
| | | this.handleSearch() |
| | | // console.log(val) |
| | | }, |
| | | openWorkOrdinDialog(row, type) { |
| | | this.$request({ |
| | | url: '/allocationExtension/detail', |
| | | method: 'get', |
| | | params: { |
| | | id: row.id |
| | | } |
| | | }).then((res) => { |
| | | this.parentFormData = res.data |
| | | this.workOrdinDialogVisible = true |
| | | if (type === 'detail') { |
| | | this.dialogData = { |
| | | title: '审批交办单', |
| | | parentFormData: res.data, |
| | | pageState: 'view', |
| | | pageType: 'delay', |
| | | sysCode: '1010202' |
| | | } |
| | | } else if (type === 'approve') { |
| | | this.dialogData = { |
| | | title: '延期申请审批', |
| | | parentFormData: res.data, |
| | | pageState: 'edit', |
| | | pageType: 'delay', |
| | | sysCode: '1010202' |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | updatUnitIdFormatter(val) { |
| | | const data = this.unitList.find(item => item && item.unitId === val.escalationUnitId) |
| | | return data ? data.unitName : '' |
| | | }, |
| | | unitIdFormatter(val) { |
| | | const data = this.unitList.find(item => item && item.unitId === val.unitId) |
| | | return data ? data.unitName : '' |
| | | }, |
| | | polluteTypeFormatter(val) { |
| | | const data = this.polluteList.find(item => item && parseInt(item.dataKey) === val.polluteType) |
| | | return data ? data.dataValue : '' |
| | | }, |
| | | investigationTypeFormatter(val) { |
| | | return this.dictObj.investigationEnum[val.investigationType] |
| | | }, |
| | | stateFormatter(val) { |
| | | return this.dictObj.allocationApproveEnum[val.state] |
| | | }, |
| | | isInvalidFormatter(val) { |
| | | return this.dictObj.yesOrNo[val.isInvalid] |
| | | }, |
| | | // 获取责任单位list |
| | | getUnitList() { |
| | | this.$request({ |
| | | url: '/allocation/unit', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | this.unitList = res.data |
| | | console.log(' JSON.stringify(this.unitList)', this.unitList) |
| | | }) |
| | | }, |
| | | getContaminateList() { |
| | | this.$request({ |
| | | url: '/allocation/contaminate', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | this.polluteList = res.data |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .main{ |
| | | padding: 20px; |
| | | padding-top: 0px; |
| | | height: 100%; |
| | | overflow: overlay; |
| | | } |
| | | .tab { |
| | | margin-top: 0px; |
| | | /deep/ .el-tag{ |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | // /deep/ .el-table__body-wrapper { |
| | | // overflow: scroll; |
| | | // position: relative; |
| | | // overflow-x: hidden; |
| | | // max-height: 400px; |
| | | // } |
| | | .pagina{ |
| | | margin-top: 10px; |
| | | } |
| | | /deep/ .el-table__row{ |
| | | font-size: 18px; |
| | | } |
| | | .el-pagination { |
| | | padding: 0; |
| | | .el-select{ |
| | | /deep/.el-input{ |
| | | margin:0; |
| | | } |
| | | } |
| | | |
| | | } |
| | | </style> |
| | | |
New file |
| | |
| | | <template> |
| | | <div class="main"> |
| | | <div> |
| | | <searchBar v-if="searchType" :search-type="'reform'" @handleSearch="handleSearch" @handleAdd="handleOpenDialog(null,'add')" /> |
| | | <newWorkOrder |
| | | v-if="centerDialogVisible" |
| | | ref="newWorkOrder" |
| | | :parent-form-data="parentFormData" |
| | | :title="title" |
| | | :page-state="pageState" |
| | | :visible.sync="centerDialogVisible" |
| | | @handleSubmit="newHandleSubmit" |
| | | /> |
| | | <div class="tab"> |
| | | <el-table |
| | | size="mini" |
| | | :data="tableData" |
| | | border |
| | | max-height="680" |
| | | style="width: 100%" |
| | | :header-cell-style="{ |
| | | color: '#101111', fontSize: '16px' |
| | | }" |
| | | > |
| | | <el-table-column |
| | | type="index" |
| | | label="序号" |
| | | width="60px" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | > |
| | | <template slot="header"> |
| | | <div>单号</div> |
| | | <div>上报时间</div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <div> {{ scope.row.allocationNum }}</div> |
| | | <div> {{ scope.row.escalationTime }}</div> |
| | | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | prop="unitId" |
| | | label="责任主体" |
| | | :formatter="unitIdFormatter" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="polluteType" |
| | | label="污染分类" |
| | | width="120px" |
| | | :formatter="polluteTypeFormatter" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | > |
| | | <template slot="header"> |
| | | <div>整改方式</div> |
| | | <div>剩余天数</div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <div> {{ dictObj.changeEnum[scope.row.changeType] }}</div> |
| | | <div v-show="scope.row.changeType && scope.row.changeType===2" :class="[Number(scope.row.residueDay) < 0 ? errorClass : '']"> |
| | | <span v-if="Number(scope.row.residueDay) < 0"> |
| | | 延期 {{ Math.abs(scope.row.residueDay) }}天 |
| | | </span> |
| | | <span v-else> |
| | | {{ scope.row.residueDay }}天 |
| | | </span> |
| | | |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | prop="investigationType" |
| | | label="排查方式" |
| | | width="100px" |
| | | :formatter="investigationTypeFormatter" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="state" |
| | | width="100px" |
| | | label="流程状态" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag v-if="scope.row.state===40" type="success"> |
| | | {{ stateFormatter(scope.row) }} |
| | | </el-tag> |
| | | <el-tag v-if="scope.row.state===50" type="danger"> |
| | | {{ stateFormatter(scope.row) }} |
| | | </el-tag> |
| | | <el-tag v-if="scope.row.state===9" type="info"> |
| | | {{ stateFormatter(scope.row) }} |
| | | </el-tag> |
| | | <el-tag v-if="scope.row.state===20" type="warning"> |
| | | {{ stateFormatter(scope.row) }} |
| | | </el-tag> |
| | | <el-tag v-if="scope.row.state===10" type="warning"> |
| | | {{ stateFormatter(scope.row) }} |
| | | </el-tag> |
| | | <el-tag v-if="scope.row.state===30" type="warning"> |
| | | {{ stateFormatter(scope.row) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | prop="isInvalid" |
| | | label="是否作废" |
| | | width="60px" |
| | | :formatter="isInvalidFormatter" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | > |
| | | <template slot="header"> |
| | | <div>上报单位</div> |
| | | <div>上报人</div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <div> {{ scope.row.escalationName }}</div> |
| | | <div> {{ updatUnitIdFormatter(scope.row) }}</div> |
| | | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | > |
| | | <template slot="header"> |
| | | <div>操作人</div> |
| | | <div>操作时间</div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <div>{{ scope.row.updateName }}</div> |
| | | <div>{{ scope.row.updateTime }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | prop="createTime" |
| | | width="100px" |
| | | label="操作" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" size="medium" @click="openWorkOrdinDialog(scope.row,'detail')">详情</el-button> |
| | | <el-button v-if="scope.row.state===9" type="text" size="medium" @click="handleOpenDialog(scope.row,'edit')">编辑</el-button> |
| | | <el-button v-if="scope.row.state>30&&scope.row.isInvalid===0" type="text" size="medium" @click="handleCancel(scope.row)">作废</el-button> |
| | | <el-button v-if="scope.row.state===20" type="text" size="medium" @click="openWorkOrdinDialog(scope.row,'work')">整改</el-button> |
| | | <el-button v-if="scope.row.state===30&&scope.row.isApprove===1" type="text" size="medium" @click="openWorkOrdinDialog(scope.row,'approve')">审批</el-button> |
| | | <el-button v-if="scope.row.state===20&&scope.row.changeType===2&&scope.row.applyState===0" type="text" size="medium" @click="openWorkOrdinDialog(scope.row,'delay')">延期申请</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <div class="pagina"> |
| | | <el-pagination |
| | | background |
| | | :current-page="pagination.currentPage" |
| | | :page-sizes="pagination.pageSizes" |
| | | :page-size="pagination.pageSize" |
| | | :total="pagination.totalCount" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange" |
| | | /> |
| | | </div> |
| | | </div> |
| | | <workOrderInformation v-if="workOrdinDialogVisible" :dialog-data="dialogData" :visible.sync="workOrdinDialogVisible" @handeleSumit="handeleSumit" /> |
| | | <el-dialog |
| | | title="作废" |
| | | :visible.sync="dialogVisible" |
| | | width="600px" |
| | | :before-close="handleClose" |
| | | center |
| | | > |
| | | <div> |
| | | <el-form label-width="100px"> |
| | | <el-form-item label="作废理由:" style="margin-right: 30px;"> |
| | | <el-input |
| | | v-model="invalidReason" |
| | | type="textarea" |
| | | :autosize="{ minRows: 2, maxRows: 10}" |
| | | placeholder="请输入内容" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="handleClose">取 消</el-button> |
| | | <el-button type="primary" @click="handleInvalid">确 定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import searchBar from '@/views/toCarryOutLegislativeReforms/components/queryForm' |
| | | import newWorkOrder from '@/views/toCarryOutLegislativeReforms/components/newWorkOrder' |
| | | import workOrderInformation from '@/views/toCarryOutLegislativeReforms/components/workOrderInformation' |
| | | export default { |
| | | components: { |
| | | searchBar, |
| | | newWorkOrder, |
| | | workOrderInformation |
| | | }, |
| | | data() { |
| | | return { |
| | | errorClass: 'errorClass', |
| | | searchType: 'reform', |
| | | pagination: { |
| | | currentPage: 1, |
| | | // 总条数,根据接口获取数据长度(注意:这里不能为空) |
| | | totalCount: 0, |
| | | // 个数选择器(可修改) |
| | | pageSizes: [10, 20, 30, 40], |
| | | // 默认每页显示的条数(可修改) |
| | | pageSize: 10 |
| | | }, |
| | | formData: {}, |
| | | tableData: [ |
| | | ], |
| | | dialogData: { |
| | | title: '整改', |
| | | parentFormData: {}, |
| | | pageState: 'work' |
| | | }, |
| | | pageStats: 'add', |
| | | workOrdinDialogVisible: false, |
| | | centerDialogVisible: false, |
| | | dialogVisible: false, |
| | | unitList: [], |
| | | polluteList: [], |
| | | Dic: JSON.parse(localStorage.getItem('dict')), |
| | | dictObj: JSON.parse(localStorage.getItem('dictObj')), |
| | | parentFormData: {}, |
| | | pageState: 'add', |
| | | invalidReason: '', |
| | | slectRow: {}, |
| | | title: '', |
| | | searchData: { |
| | | isInvalid: 0 |
| | | } |
| | | } |
| | | }, |
| | | |
| | | created() { |
| | | this.handleSearch() |
| | | this.getUnitList() |
| | | this.getContaminateList() |
| | | }, |
| | | methods: { |
| | | handleCancel(row) { |
| | | this.dialogVisible = true |
| | | this.slectRow = row |
| | | }, |
| | | handleClose() { |
| | | this.dialogVisible = false |
| | | }, |
| | | handleInvalid() { |
| | | this.$request({ |
| | | url: '/allocation/invalid', |
| | | method: 'get', |
| | | params: { |
| | | id: this.slectRow.allocationId, |
| | | invalidReason: this.invalidReason |
| | | } |
| | | }).then((res) => { |
| | | if (res.code === 0) { |
| | | this.$message({ |
| | | message: '处理成功', |
| | | type: 'success' |
| | | }) |
| | | this.dialogVisible = false |
| | | } else { |
| | | this.$message.error(res.message) |
| | | } |
| | | }) |
| | | }, |
| | | // 详情 |
| | | handleOpenDialog(row, type) { |
| | | this.pageState = type |
| | | this.parentFormData = {} |
| | | if (type === 'add') { |
| | | this.title = '新建交办单' |
| | | this.centerDialogVisible = true |
| | | } else { |
| | | this.title = '编辑交办单' |
| | | this.$request({ |
| | | url: '/allocation/detail', |
| | | method: 'get', |
| | | params: { |
| | | id: row.allocationId |
| | | } |
| | | }).then((res) => { |
| | | this.parentFormData = res.data |
| | | console.log(this.parentFormData) |
| | | this.centerDialogVisible = true |
| | | }) |
| | | } |
| | | }, |
| | | updatUnitIdFormatter(val) { |
| | | const data = this.unitList.find(item => item && item.unitId === val.escalationUnitId) |
| | | return data ? data.unitName : '' |
| | | }, |
| | | unitIdFormatter(val) { |
| | | const data = this.unitList.find(item => item && item.unitId === val.unitId) |
| | | return data ? data.unitName : '' |
| | | }, |
| | | polluteTypeFormatter(val) { |
| | | const data = this.polluteList.find(item => item && parseInt(item.dataKey) === val.polluteType) |
| | | return data ? data.dataValue : '' |
| | | }, |
| | | investigationTypeFormatter(val) { |
| | | return this.dictObj.investigationEnum[val.investigationType] |
| | | }, |
| | | stateFormatter(val) { |
| | | console.log('valval', val) |
| | | return this.dictObj.allocationApproveEnum[val.state] |
| | | }, |
| | | isInvalidFormatter(val) { |
| | | return this.dictObj.yesOrNo[val.isInvalid] |
| | | }, |
| | | // 获取责任单位list |
| | | getUnitList() { |
| | | this.$request({ |
| | | url: '/allocation/unit', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | if (res.code === 0) { |
| | | this.unitList = res.data |
| | | } else { |
| | | this.$message.error(res.message) |
| | | } |
| | | }) |
| | | }, |
| | | getContaminateList() { |
| | | this.$request({ |
| | | url: '/allocation/contaminate', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | if (res.code === 0) { |
| | | this.polluteList = res.data |
| | | } else { |
| | | this.$message.error(res.message) |
| | | } |
| | | }) |
| | | }, |
| | | handeleSumit() { |
| | | this.handleSearch() |
| | | }, |
| | | // 提交 |
| | | newHandleSubmit(obj) { |
| | | console.log(obj) |
| | | console.log(this.parentFormData) |
| | | let api = '/allocation/insert' |
| | | if (this.pageState !== 'add') { |
| | | api = '/allocation/update' |
| | | // obj.fileBaseList = [...this.parentFormData.fileBaseList, ... obj.fileBaseList] |
| | | } |
| | | this.$request({ |
| | | url: api, |
| | | method: 'post', |
| | | data: { |
| | | ...obj |
| | | } |
| | | }).then((res) => { |
| | | if (res.code === 0) { |
| | | this.centerDialogVisible = false |
| | | |
| | | this.handleSearch() |
| | | } else { |
| | | this.$message.error(res.message) |
| | | } |
| | | }) |
| | | }, |
| | | handleSearch(obj) { |
| | | this.searchData.isInvalid = 0 |
| | | if (obj) { |
| | | this.searchData = obj |
| | | } |
| | | this.$request({ |
| | | url: '/allocation/page', |
| | | method: 'post', |
| | | data: { |
| | | ...this.searchData, |
| | | 'page': this.pagination |
| | | } |
| | | }).then((res) => { |
| | | if (res.code === 0) { |
| | | this.tableData = res.data.list |
| | | this.pagination.totalCount = res.data.page.totalNum |
| | | } else { |
| | | this.$message.error(res.message) |
| | | } |
| | | }) |
| | | }, |
| | | // 分页 |
| | | // 每页显示的条数 |
| | | handleSizeChange(val) { |
| | | // 改变每页显示的条数 |
| | | this.pagination.pageSize = val |
| | | // 注意:在改变每页显示的条数时,要将页码显示到第一页 |
| | | this.pagination.currentPage = 1 |
| | | this.handleSearch() |
| | | }, |
| | | // 显示第几页 |
| | | handleCurrentChange(val) { |
| | | // 改变默认的页数 |
| | | this.pagination.currentPage = val |
| | | this.handleSearch() |
| | | // console.log(val) |
| | | }, |
| | | openWorkOrdinDialog(row, type) { |
| | | this.$request({ |
| | | url: '/allocation/detail', |
| | | method: 'get', |
| | | params: { |
| | | id: row.allocationId |
| | | } |
| | | }).then((res) => { |
| | | this.parentFormData = res.data |
| | | this.workOrdinDialogVisible = true |
| | | if (type === 'work') { |
| | | this.dialogData = { |
| | | title: '整改交办单', |
| | | parentFormData: res.data, |
| | | pageType: 'work', |
| | | pageState: 'approve', |
| | | sysCode: '1010202' |
| | | } |
| | | } else if (type === 'approve') { |
| | | this.dialogData = { |
| | | title: '审批交办单', |
| | | parentFormData: res.data, |
| | | pageType: 'approve', |
| | | pageState: 'approve', |
| | | sysCode: '1010203' |
| | | } |
| | | } else if (type === 'detail') { |
| | | this.dialogData = { |
| | | title: '交办单', |
| | | parentFormData: res.data, |
| | | pageType: 'detail' |
| | | } |
| | | } else if (type === 'delay') { |
| | | this.dialogData = { |
| | | title: '延期交办单', |
| | | parentFormData: res.data, |
| | | pageType: 'delay', |
| | | pageState: 'approve', |
| | | sysCode: '1251701' |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .main{ |
| | | padding: 20px; |
| | | padding-top: 0px; |
| | | height: 100%; |
| | | overflow: overlay; |
| | | } |
| | | .tab { |
| | | margin-top: 0px; |
| | | /deep/ .el-tag{ |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | // /deep/ .el-table__body-wrapper { |
| | | // overflow: scroll; |
| | | // position: relative; |
| | | // overflow-x: hidden; |
| | | // max-height: 400px; |
| | | // } |
| | | .pagina{ |
| | | margin-top: 10px; |
| | | } |
| | | /deep/ .el-table__row{ |
| | | font-size: 18px; |
| | | } |
| | | .el-pagination { |
| | | padding: 0; |
| | | .el-select{ |
| | | /deep/.el-input{ |
| | | margin:0; |
| | | } |
| | | } |
| | | |
| | | } |
| | | .errorClass{ |
| | | color: red; |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div :class="className" :style="{ height: height, width: width }" /> |
| | | </template> |
| | | |
| | | <script> |
| | | // import echarts from 'echarts' |
| | | import * as echarts from 'echarts' |
| | | require('echarts/theme/macarons') // echarts theme |
| | | // import resize from '@/components/Echarts/mixins/resize' |
| | | export default { |
| | | // mixins: [resize], |
| | | props: { |
| | | className: { |
| | | type: String, |
| | | default: 'chart' |
| | | }, |
| | | width: { |
| | | type: String, |
| | | default: '100%' |
| | | }, |
| | | height: { |
| | | type: String, |
| | | default: '290px' |
| | | }, |
| | | chartData: { |
| | | type: Array, |
| | | required: false, |
| | | default: () => [] |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | chart: null, |
| | | seriesData: [] |
| | | } |
| | | }, |
| | | watch: { |
| | | 'chartData': { |
| | | handler(newVal) { |
| | | console.log('newVal', newVal) |
| | | this.seriesData = [] |
| | | this.seriesData = newVal |
| | | this.$nextTick(() => { |
| | | this.initChart() |
| | | }) |
| | | }, |
| | | deep: true, |
| | | immediate: true |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.$nextTick(() => { |
| | | this.initChart() |
| | | }) |
| | | }, |
| | | beforeDestroy() { |
| | | if (!this.chart) { |
| | | return |
| | | } |
| | | this.chart.dispose() |
| | | this.chart = null |
| | | }, |
| | | methods: { |
| | | initChart() { |
| | | this.chart = echarts.init(this.$el, 'macarons') |
| | | this.chart.clear() |
| | | this.setOptions() |
| | | }, |
| | | setOptions() { |
| | | // function fontSize(res) { |
| | | // let clientWidth = |
| | | // window.innerWidth || |
| | | // document.documentElement.clientWidth || |
| | | // document.body.clientWidth |
| | | // if (!clientWidth) return |
| | | // let fontSize = 100 * (clientWidth / 1920) |
| | | // return res * fontSize |
| | | // } |
| | | |
| | | this.chart.setOption( |
| | | { |
| | | color: ['#F56463', '#00C6FF', '#F09615', '#0079E6', '#a814ff', '#03b915'], |
| | | legend: { |
| | | itemHeight: 14, |
| | | itemWidth: 14, |
| | | icon: 'rect', |
| | | orient: 'vertical', |
| | | top: 'center', |
| | | right: '5%', |
| | | textStyle: { |
| | | align: 'left', |
| | | color: '#', |
| | | verticalAlign: 'middle', |
| | | rich: { |
| | | name: { |
| | | width: 80, |
| | | fontSize: 16 |
| | | }, |
| | | value: { |
| | | width: 20, |
| | | align: 'right', |
| | | fontFamily: 'Medium', |
| | | fontSize: 16 |
| | | }, |
| | | rate: { |
| | | width: 10, |
| | | align: 'right', |
| | | fontSize: 16 |
| | | } |
| | | } |
| | | }, |
| | | data: this.seriesData, |
| | | formatter: (name) => { |
| | | if (this.seriesData.length) { |
| | | const item = this.seriesData.filter((item) => item.name === name)[0] |
| | | return `{name|${name}}{value| ${item.value}}` |
| | | } |
| | | } |
| | | }, |
| | | tooltip: { |
| | | trigger: 'item', |
| | | backgroundColor: 'rgba(255,255,255,.8)', // 通过设置rgba调节背景颜色与透明度 |
| | | color: 'gray' |
| | | }, |
| | | series: [ |
| | | { |
| | | name: '', |
| | | type: 'pie', |
| | | radius: ['30%', '80%'], |
| | | center: ['35%', '50%'], |
| | | roseType: 'radius', |
| | | label: { |
| | | formatter: '{d}%' |
| | | }, |
| | | labelLine: { |
| | | length: 1, |
| | | length2: 20 |
| | | }, |
| | | data: this.seriesData |
| | | } |
| | | ] |
| | | }, |
| | | true |
| | | ) |
| | | this.chart.resize() |
| | | window.onresize = this.chart.resize |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
New file |
| | |
| | | <template> |
| | | <div id="myPieChart" :style="{ height: height, width: width }" /> |
| | | </template> |
| | | |
| | | <script> |
| | | // import echarts from 'echarts' |
| | | import * as echarts from 'echarts' |
| | | require('echarts/theme/macarons') // echarts theme |
| | | // import resize from '@/components/Echarts/mixins/resize' |
| | | export default { |
| | | // mixins: [resize], |
| | | props: { |
| | | className: { |
| | | type: String, |
| | | default: 'chart' |
| | | }, |
| | | width: { |
| | | type: String, |
| | | default: '100%' |
| | | }, |
| | | height: { |
| | | type: String, |
| | | default: '290px' |
| | | }, |
| | | cylindricalityData: { |
| | | type: Array, |
| | | required: false, |
| | | default: () => [] |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | chart: null, |
| | | seriesData: [], |
| | | namelist: [] |
| | | } |
| | | }, |
| | | watch: { |
| | | 'cylindricalityData': { |
| | | handler(newVal) { |
| | | console.log('newVal', newVal) |
| | | this.seriesData = [] |
| | | this.namelist = [] |
| | | const arr = [] |
| | | |
| | | newVal.forEach(item => { |
| | | arr.push({ |
| | | name: item.name, |
| | | type: 'bar', |
| | | barWidth: '40%', |
| | | data: [item.value] |
| | | }) |
| | | this.namelist.push(item.name) |
| | | }) |
| | | this.seriesData = arr |
| | | this.$nextTick(() => { |
| | | this.initChart() |
| | | }) |
| | | }, |
| | | deep: true, |
| | | immediate: true |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.$nextTick(() => { |
| | | this.initChart() |
| | | }) |
| | | }, |
| | | beforeDestroy() { |
| | | if (!this.chart) { |
| | | return |
| | | } |
| | | this.chart.dispose() |
| | | this.chart = null |
| | | }, |
| | | methods: { |
| | | initChart() { |
| | | if (this.chart) { |
| | | this.chart.dispose() |
| | | } |
| | | const chartDom = document.getElementById('myPieChart') |
| | | this.chart = echarts.init(chartDom) |
| | | this.chart.clear() |
| | | this.setOptions() |
| | | }, |
| | | setOptions() { |
| | | // function fontSize(res) { |
| | | // let clientWidth = |
| | | // window.innerWidth || |
| | | // document.documentElement.clientWidth || |
| | | // document.body.clientWidth |
| | | // if (!clientWidth) return |
| | | // let fontSize = 100 * (clientWidth / 1920) |
| | | // return res * fontSize |
| | | // } |
| | | |
| | | this.chart.setOption( |
| | | { |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | backgroundColor: 'rgba(255,255,255,.8)', // 通过设置rgba调节背景颜色与透明度 |
| | | color: 'gray', |
| | | axisPointer: { |
| | | type: 'line' |
| | | } |
| | | }, |
| | | grid: { |
| | | left: '3%', |
| | | right: '4%', |
| | | bottom: '3%', |
| | | containLabel: true |
| | | }, |
| | | xAxis: [{ |
| | | type: 'category', |
| | | data: this.namelist, |
| | | axisTick: { |
| | | show: false, |
| | | alignWithLabel: true |
| | | }, |
| | | axisLine: { |
| | | show: false |
| | | }, |
| | | axisLabel: { |
| | | color: '#989898' |
| | | } |
| | | }], |
| | | yAxis: [{ |
| | | type: 'value', |
| | | axisTick: { |
| | | show: false |
| | | }, |
| | | axisLine: { |
| | | show: false |
| | | }, |
| | | splitLine: { |
| | | lineStyle: { |
| | | color: '#ebebeb' |
| | | } |
| | | }, |
| | | axisLabel: { |
| | | color: '#8c8c8c' |
| | | } |
| | | }], |
| | | series: this.seriesData |
| | | }, |
| | | true |
| | | ) |
| | | this.chart.resize() |
| | | window.onresize = this.chart.resize |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
New file |
| | |
| | | <template> |
| | | <div class="main"> |
| | | <div class="timeSelect"> |
| | | <el-radio-group |
| | | v-model="searchForm.number" |
| | | style="margin-left:20px" |
| | | @input="changeNumber" |
| | | > |
| | | <el-radio-button label="1">近1个月</el-radio-button> |
| | | <el-radio-button label="2">近2个月</el-radio-button> |
| | | <el-radio-button label="3">近3个月</el-radio-button> |
| | | <el-radio-button label="6">近6个月</el-radio-button> |
| | | <el-radio-button label="12">近12个月</el-radio-button> |
| | | </el-radio-group> |
| | | <el-date-picker |
| | | v-model="timeInterval" |
| | | el-time-picker |
| | | type="daterange" |
| | | value-format="yyyy-MM-dd" |
| | | range-separator="至" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | @change="changeNumber" |
| | | /> |
| | | </div> |
| | | <div class="agentSummary"> |
| | | <div class="circle"> |
| | | <div>总交办单</div> |
| | | <div>{{ responeForm.total }}</div> |
| | | </div> |
| | | <div class="circle"> |
| | | <div>进行中</div> |
| | | <div>{{ responeForm.unComplete }}</div> |
| | | </div> |
| | | <div class="circle"> |
| | | <div>已完成</div> |
| | | <div>{{ responeForm.complete }}</div> |
| | | </div> |
| | | <div class="circle"> |
| | | <div>逾期</div> |
| | | <div>{{ responeForm.overdue }}</div> |
| | | </div> |
| | | </div> |
| | | <div class="overviewAndDetails"> |
| | | <el-tabs |
| | | v-model="activeName" |
| | | @tab-click="handleClick" |
| | | > |
| | | <el-tab-pane |
| | | label="总览" |
| | | name="first" |
| | | > |
| | | <div> |
| | | <div class="tit"> |
| | | <span> |
| | | 责任单位交办单总览 |
| | | </span> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | size="small" |
| | | style="float: right;" |
| | | @click="ecxport" |
| | | > |
| | | 导出 |
| | | </el-button> |
| | | </div> |
| | | <div class="tab"> |
| | | <el-table |
| | | :data="tableData" |
| | | border |
| | | max-height="400" |
| | | style="width: 100%" |
| | | :header-cell-style="{ |
| | | background: '#99D4FF', color: '#101111', fontSize: '16px' |
| | | }" |
| | | > |
| | | <el-table-column |
| | | align="center" |
| | | prop="unitName" |
| | | label="责任单位" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="total" |
| | | label="总工单" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="number" |
| | | label="完成数" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="unNumber" |
| | | label="未成数" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="rate" |
| | | label="完成率" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="deduction" |
| | | label="扣分" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="marks" |
| | | label="加分" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | prop="totalPoints" |
| | | label="总得分" |
| | | /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </el-tab-pane> |
| | | <el-tab-pane |
| | | label="明细" |
| | | name="second" |
| | | > |
| | | <div> |
| | | <div> |
| | | <p style="text-align: center;"> |
| | | 责任单位: |
| | | <el-select v-model="unitId" size="small" placeholder="请选择" @change="changeUnitId"> |
| | | <el-option |
| | | v-for="item in unitList" |
| | | :key="item.unitId" |
| | | :label="item.unitName" |
| | | :value="item.unitId" |
| | | /> |
| | | </el-select> |
| | | </p> |
| | | </div> |
| | | <div class="chartsTitle"> |
| | | <p>污染分类</p> |
| | | <p>上报类型</p> |
| | | </div> |
| | | <div class="caets"> |
| | | <div> |
| | | <pollutionClassificationEcharts |
| | | v-if="activeName === 'second'" |
| | | ref="leftEcharts" |
| | | :chart-data="chartData" |
| | | /> |
| | | </div> |
| | | <div> |
| | | <reportTypeEcharts |
| | | v-if="activeName === 'second'" |
| | | ref="rightEcharts" |
| | | :cylindricality-data="cylindricalityData" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import pollutionClassificationEcharts from '@/views/toCarryOutLegislativeReforms/summaryPage/components/pollutionClassificationEcharts' |
| | | import reportTypeEcharts from '@/views/toCarryOutLegislativeReforms/summaryPage/components/reportTypeEcharts' |
| | | export default { |
| | | components: { |
| | | pollutionClassificationEcharts, |
| | | reportTypeEcharts |
| | | }, |
| | | data() { |
| | | return { |
| | | mount: '', |
| | | timeInterval: [], |
| | | polluteList: [], |
| | | unitList: [], |
| | | activeName: 'first', |
| | | tableData: [], |
| | | responsibleUnit: '', |
| | | searchForm: { |
| | | number: 1, |
| | | startTime: '', |
| | | endTime: '' |
| | | }, |
| | | unitId: '', |
| | | responeForm: { |
| | | total: '', |
| | | complete: '', |
| | | unComplete: '', |
| | | overdue: '' |
| | | }, |
| | | chartData: [], |
| | | cylindricalityData: [] |
| | | } |
| | | }, |
| | | created() { |
| | | this.getUnitList() |
| | | this.getContaminateList() |
| | | this.handleSearch() |
| | | }, |
| | | methods: { |
| | | ecxport() { |
| | | this.$request({ |
| | | url: '/allocation/unitExel', |
| | | method: 'get', |
| | | responseType: 'blob', |
| | | params: { |
| | | startTime: this.timeInterval[0], |
| | | endTime: this.timeInterval[1], |
| | | number: Number(this.searchForm.number) |
| | | } |
| | | }).then((res) => { |
| | | this.getOutExcel('列表数据导出.xlsx', res) |
| | | }) |
| | | }, |
| | | getOutExcel(fileName, res) { |
| | | const blob = new Blob([res], { type: 'application/x-xls' }) |
| | | if (window.navigator.msSaveOrOpenBlob) { |
| | | // 兼容 IE & EDGE |
| | | navigator.msSaveBlob(blob, fileName) |
| | | } else { |
| | | var link = document.createElement('a') |
| | | // 兼容不同浏览器的URL对象 |
| | | const url = window.URL || window.webkitURL || window.moxURL |
| | | // 创建下载链接 |
| | | link.href = url.createObjectURL(blob) |
| | | // 命名下载名称 |
| | | link.download = fileName |
| | | // 点击触发下载 |
| | | link.click() |
| | | // 下载完成进行释放 |
| | | url.revokeObjectURL(link.href) |
| | | } |
| | | }, |
| | | unitIdFormatter(val) { |
| | | const data = this.unitList.find(item => item && item.unitId === val.unitId) |
| | | return data ? data.unitName : '' |
| | | }, |
| | | changeNumber(val) { |
| | | this.handleSearch() |
| | | }, |
| | | handleClick(tab, event) { |
| | | console.log(tab) |
| | | }, |
| | | changeUnitId() { |
| | | this.$request({ |
| | | url: '/allocation/selectUnitView', |
| | | method: 'get', |
| | | params: { |
| | | startTime: this.timeInterval[0], |
| | | endTime: this.timeInterval[1], |
| | | number: Number(this.searchForm.number), |
| | | unitId: this.unitId |
| | | } |
| | | }).then((res) => { |
| | | if (res.code === 0) { |
| | | this.chartData = [] |
| | | this.chartData = this.cylindricalityData |
| | | this.chartData = res.data.polluteType |
| | | this.cylindricalityData = res.data.escalationType |
| | | } else { |
| | | this.$message.error(res.message) |
| | | } |
| | | }) |
| | | }, |
| | | handleSearch() { |
| | | this.$request({ |
| | | url: '/allocation/selectUnitView', |
| | | method: 'get', |
| | | params: { |
| | | startTime: this.timeInterval[0], |
| | | endTime: this.timeInterval[1], |
| | | number: Number(this.searchForm.number) |
| | | } |
| | | }).then((res) => { |
| | | if (res.code === 0) { |
| | | this.responeForm = res.data |
| | | this.tableData = res.data.unitView |
| | | this.chartData = res.data.polluteType |
| | | this.cylindricalityData = res.data.escalationType |
| | | } else { |
| | | this.$message.error(res.message) |
| | | } |
| | | }) |
| | | }, |
| | | // 获取责任单位list |
| | | getUnitList() { |
| | | this.$request({ |
| | | url: '/allocation/unit', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | this.unitList = res.data |
| | | console.log(' JSON.stringify(this.unitList)', this.unitList) |
| | | }) |
| | | }, |
| | | getContaminateList() { |
| | | this.$request({ |
| | | url: '/allocation/contaminate', |
| | | method: 'get' |
| | | }).then((res) => { |
| | | this.polluteList = res.data |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | $red: url('~@/assets/images/1.jpg') ; |
| | | $orange:url('~@/assets/images/2.png'); |
| | | $yellow:url('~@/assets/images/3.jpg'); |
| | | $green:url('~@/assets/images/4.png'); |
| | | $bgcolorlist: $red $orange $yellow $green; |
| | | |
| | | .main { |
| | | /deep/ .el-table__row{ |
| | | font-size: 18px; |
| | | } |
| | | background: #bbbbbb; |
| | | min-height: 800px; |
| | | padding: 15px 10px; |
| | | overflow: scroll; |
| | | |
| | | .timeSelect { |
| | | width: 100%; |
| | | height: 80px; |
| | | line-height: 80px; |
| | | background-color: rgba(255, 255, 255, 1); |
| | | color: rgba(16, 16, 16, 1); |
| | | font-size: 14px; |
| | | } |
| | | |
| | | .agentSummary { |
| | | display: flex; |
| | | justify-content: space-around; |
| | | align-items: center; |
| | | height: 195px; |
| | | background-color: rgba(255, 255, 255, 1); |
| | | margin-top: 20px; |
| | | |
| | | @for $i from 1 to length($bgcolorlist) + 1 { |
| | | .circle:nth-child(#{$i}) { |
| | | background-repeat: no-repeat; |
| | | background-size: cover; |
| | | background-position: center center; |
| | | background-image: nth($bgcolorlist, $i); |
| | | // background-image: radial-gradient(ellipse farthest-side at bottom right, rgba(153, 212, 255, 1), 50%, transparent 50%, transparent), |
| | | // radial-gradient(ellipse farthest-side at top right, rgba(153, 212, 255, 1), 30%, transparent 30%, transparent); |
| | | } |
| | | } |
| | | |
| | | .circle { |
| | | box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.4); |
| | | border-radius: 5px; |
| | | width: 200px; |
| | | height: 90px; |
| | | align-items: center; |
| | | color: rgba(255, 255, 255, 1); |
| | | font-size: 20px; |
| | | font-weight: 700; |
| | | display: flex; |
| | | justify-content: center; |
| | | flex-wrap: wrap; |
| | | flex-direction: column; |
| | | } |
| | | } |
| | | |
| | | .overviewAndDetails { |
| | | height: 550px; |
| | | margin-top: 20px; |
| | | background-color: rgba(255, 255, 255, 1); |
| | | padding: 15px; |
| | | |
| | | .tit { |
| | | width: 100%; |
| | | display: inline-block; |
| | | color: rgba(16, 16, 16, 1); |
| | | font-size: 24px; |
| | | text-align: center; |
| | | } |
| | | |
| | | .tab { |
| | | margin-top: 10px; |
| | | } |
| | | .caets { |
| | | width: 100%; |
| | | |
| | | div { |
| | | display: inline-block; |
| | | margin-top: 10px; |
| | | width: 49%; |
| | | height: 200px; |
| | | } |
| | | |
| | | div:nth-child(1) { |
| | | border-right: 1px dashed rgba(221, 221, 221, 1); |
| | | } |
| | | } |
| | | |
| | | .chartsTitle { |
| | | width: 100%; |
| | | |
| | | p { |
| | | display: inline-block; |
| | | width: 49%; |
| | | text-align: center; |
| | | font-size: 24px; |
| | | font-weight: 700; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |