已重命名1个文件
已修改17个文件
已添加4个文件
已删除1个文件
| | |
| | | //将拦截器整体导入 |
| | | import request from '@/util/request'//导入已经写好的拦截器 |
| | | |
| | | export function Login(data){ |
| | | export function login(data){ |
| | | return request({ |
| | | url:'/account/auth/login', |
| | | method:'post', |
| | |
| | | }) |
| | | } |
| | | |
| | | export function loginOut(){ |
| | | return request({ |
| | | url:'/account/auth/logout', |
| | | method:'get' |
| | | }) |
| | | } |
| | | |
| | | export function getMenuAdmin(){ |
| | | return request({ |
| | | url:'/sys/menu/get/u', |
| | |
| | | //将拦截器整体导入 |
| | | import request from '@/util/request'//导入已经写好的拦截器 |
| | | |
| | | // 用户管理 |
| | | export function getUser(data){ |
| | | return request({ |
| | | url:'/account/user/find/user/list', |
| | | method:'post', |
| | | data:data, |
| | | url: '/account/user/find/user/list', |
| | | method: 'post', |
| | | data: data, |
| | | }) |
| | | } |
| | | |
| | | export function addUser(data){ |
| | | return request({ |
| | | url:'/account/user/add', |
| | | method:'post', |
| | | url: '/account/user/add', |
| | | method: 'post', |
| | | data: data, |
| | | }) |
| | | } |
| | | } |
| | | |
| | | export function delUser(id){ |
| | | return request({ |
| | | url: '/account/user/deleteUser?userId=' + id, |
| | | method: 'get', |
| | | }) |
| | | } |
| | | |
| | | export function updatePwd(data){ |
| | | return request({ |
| | | url: '/account/user/update/password', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // 平级接收人管理 |
| | | export function getRecipient(data){ |
| | | return request({ |
| | | url:'/mesmanager/recipient/page', |
| | | method:'post', |
| | | data:data, |
| | | }) |
| | | } |
| | | |
| | | export function getRecipientById(data){ |
| | | return request({ |
| | | url:'/mesmanager/recipient/findById', |
| | | method:'post', |
| | | data:data, |
| | | }) |
| | | } |
| | | |
| | | export function addRecipient(data){ |
| | | return request({ |
| | | url:'/mesmanager/recipient/page', |
| | | method:'post', |
| | | data:data, |
| | | }) |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | |
| | | MenuPath: "/torelease",
|
| | | },
|
| | | {
|
| | | MenuID: "24",
|
| | | MenuID: "22",
|
| | | MenuTitle: "信息审核",
|
| | | MenuPath: "/msgReview",
|
| | | },
|
| | | {
|
| | | MenuID: "23",
|
| | | MenuTitle: "信息发布",
|
| | | MenuPath: "/report",
|
| | | },
|
| | | {
|
| | | MenuID: "22",
|
| | | MenuID: "24",
|
| | | MenuTitle: "历史信息",
|
| | | MenuPath: "/history",
|
| | | },
|
| | | {
|
| | | MenuID: "23",
|
| | | MenuID: "25",
|
| | | MenuTitle: "叫应记录",
|
| | | MenuPath: "/callRecord",
|
| | | },
|
| | |
| | | Children: [{
|
| | | MenuID: "31",
|
| | | MenuTitle: "常规群发",
|
| | | MenuPath: "/module",
|
| | | MenuPath: "/massSend",
|
| | | },
|
| | | {
|
| | | MenuID: "32",
|
| | |
| | | {
|
| | | MenuID: "42",
|
| | | MenuTitle: "短信平台设置",
|
| | | MenuPath: "/smssetting",
|
| | | MenuPath: "/smsSetting",
|
| | | },
|
| | | // {
|
| | | // MenuID: "43",
|
| | |
| | | |
| | | //设置组件默认中文 |
| | | import 'moment/locale/zh-cn'; |
| | | import '@/util/permission' |
| | | import {message,Modal} from "ant-design-vue"; |
| | | moment.locale('zh-cn'); |
| | | |
| | | Vue.config.productionTip = false |
| | |
| | | return moment(value).from(moment()) |
| | | } |
| | | }) |
| | | |
| | | Vue.prototype.$message = message; |
| | | Vue.prototype.$confirm = Modal.confirm; |
| | | message.config({ |
| | | duration: 2 |
| | | }) |
| | | new Vue({ |
| | | router, |
| | | store, |
| | |
| | | path: '/torelease', |
| | | name: 'torelease', |
| | | meta: { title: '信息编辑' }, |
| | | component: () => import('@/views/Admin/Notice'), |
| | | component: () => import('@/views/Admin/notice'), |
| | | }, |
| | | { |
| | | path: '/msgReview', |
| | | name: '/msgReview', |
| | | meta: { title: '信息审核' }, |
| | | component: () => import('@/views/Admin/msgReview'), |
| | | }, |
| | | { |
| | | path: '/report', |
| | | name: 'report', |
| | |
| | | component: () => import('@/views/Admin/callRecord'), |
| | | }, |
| | | { |
| | | path: '/massSend', |
| | | name: 'massSend', |
| | | meta: { title: '常规群发' }, |
| | | component: () => import('@/views/Admin/massSend'), |
| | | }, |
| | | { |
| | | path: '/msgRecord', |
| | | name: 'msgRecord', |
| | | meta: { title: '短信记录' }, |
| | |
| | | component: () => import('@/views/Admin/userManage'), |
| | | }, |
| | | { |
| | | path: '/menu', |
| | | name: 'menu', |
| | | meta: { title: '菜单管理' }, |
| | | component: () => import('@/views/Admin/menuManage'), |
| | | path: '/smsSetting', |
| | | name: 'smsSetting', |
| | | meta: { title: '短信平台设置' }, |
| | | component: () => import('@/views/Admin/smsSetting'), |
| | | }, |
| | | // { |
| | | // path: '/menu', |
| | | // name: 'menu', |
| | | // meta: { title: '菜单管理' }, |
| | | // component: () => import('@/views/Admin/menuManage'), |
| | | // }, |
| | | ] |
| | | }, |
| | | ]; |
| | |
| | | message |
| | | } from "ant-design-vue"; |
| | | Vue.use(Alert).use(Pagination).use(Tag).use(Switch).use(FormModel).use(Modal).use(Cascader).use(TreeSelect).use(Button).use(Layout).use(Menu).use(Icon).use(Form).use(Input).use(Tabs).use(Checkbox).use(Row).use(Col).use(Avatar).use(Divider).use(Card).use(List).use(Tooltip).use(Dropdown).use(Select).use(Radio).use(DatePicker).use(Table); |
| | | Vue.prototype.$message = message; |
对比新文件 |
| | |
| | | import router from '@/router/index'; |
| | | import Cookies from "js-cookie"; |
| | | import {message} from "ant-design-vue"; |
| | | // 这里就可以进行vue-router的beforeEach拦截了,你也可以放其他地方,我比较喜欢放这 |
| | | router.beforeEach((to, from, next) => { |
| | | // 这里先获取下用户信息,我偷懒用sessionStorage存了 |
| | | // 里面包含了用户权限,用户各种信息等 |
| | | const token = Cookies.get('resTk') |
| | | // 这里必须加上to.path !== 'login'的判断,不然会陷入无限循环, |
| | | // 因为逻辑是第一次进来,判断用户信息不存在,即!user为true,由于使用的是next('/login')而非next(), |
| | | // 会再次进入路由跳转,next()方法没有参数是直接进入页面,不会再次进入路由拦截,有参数则会,因为跳转, |
| | | // 所以再次进入路由,再次判断,再次进入路由,再次判断,循环往复无限循环 |
| | | // 所以一定要加to.path !== 'login'的判断 |
| | | if (!token && to.path !== '/') { |
| | | message.error('用户信息已过期,请重新登录'); |
| | | next('/'); |
| | | }else { |
| | | next(); |
| | | } |
| | | }); |
| | |
| | | import axios from "axios";//原生的axios |
| | | import Cookies from 'js-cookie'; |
| | | import { Session } from '@/util/storage'; |
| | | import {message} from "ant-design-vue"; |
| | | import { loginOut } from "@/api/login"; |
| | | //用来拦截用的 |
| | | axios.defaults.headers.post["Content-Type"] = "application/json;charset=utf-8"; |
| | | //创建一个单例 |
| | |
| | | (response) => { |
| | | // 对响应数据做点什么 |
| | | if (response.data.code && response.data.code === 'A0213') { |
| | | this.$message.error('用户uid不存在'); |
| | | message.error('用户uid不存在'); |
| | | // useLoginApi() |
| | | // .signOut() |
| | | // .then(() => { |
| | |
| | | // window.location.href = '/'; |
| | | // }); |
| | | } else if (response.data.code && response.data.code === 405) { |
| | | this.$message.error('token失效'); |
| | | // useLoginApi() |
| | | // .signOut() |
| | | // .then(() => { |
| | | // Session.clear(); |
| | | // window.location.href = '/'; |
| | | // }); |
| | | message.error('token失效'); |
| | | loginOut() |
| | | .then(() => { |
| | | Session.clear(); |
| | | window.location.href = '/'; |
| | | }); |
| | | } |
| | | return Promise.resolve(response); |
| | | }, |
| | | (error) => { |
| | | // 对响应错误做点什么 |
| | | if (error.message.indexOf('timeout') != -1) { |
| | | this.$message.error('网络超时'); |
| | | message.error('网络超时'); |
| | | setTimeout(() => { |
| | | Session.clear(); |
| | | window.location.href = '/'; |
| | | }, 1000); |
| | | } else if (error.message == 'Network Error') { |
| | | this.$message.error('网络连接错误'); |
| | | message.error('网络连接错误'); |
| | | setTimeout(() => { |
| | | Session.clear(); |
| | | window.location.href = '/'; |
| | | }, 1000); |
| | | } else { |
| | | if (error.response.data) this.$message.error(error.response.data.error); |
| | | else this.$message.error('接口路径找不到'); |
| | | if (error.response.data) message.error(error.response.data.error); |
| | | else message.error('接口路径找不到'); |
| | | } |
| | | return Promise.reject(error); |
| | | } |
| | |
| | | export const Session = { |
| | | // 设置临时缓存 |
| | | set(key, val) { |
| | | if (key === 'token') return Cookies.set(key, val); |
| | | if (key === 'resTk') return Cookies.set(key, val); |
| | | window.sessionStorage.setItem(key, JSON.stringify(val)); |
| | | }, |
| | | // 获取临时缓存 |
| | | get(key) { |
| | | if (key === 'token') return Cookies.get(key); |
| | | if (key === 'resTk') return Cookies.get(key); |
| | | let json = window.sessionStorage.getItem(key); |
| | | return JSON.parse(json); |
| | | }, |
| | | // 移除临时缓存 |
| | | remove(key) { |
| | | if (key === 'token') return Cookies.remove(key); |
| | | if (key === 'resTk') return Cookies.remove(key); |
| | | window.sessionStorage.removeItem(key); |
| | | }, |
| | | // 移除全部临时缓存 |
| | | clear() { |
| | | Cookies.remove('token'); |
| | | Cookies.remove('resTk'); |
| | | window.sessionStorage.clear(); |
| | | }, |
| | | }; |
| | |
| | | <div class="content-left"> |
| | | <img src="./../../assets/user.png" alt=""> |
| | | <div class="user"> |
| | | <h2>{{ dateTime + ',李静,欢迎使用自治区自然灾害综合风险预警发布及响应联动系统。' }}</h2> |
| | | <h2>{{ dateTime}},{{userName}},欢迎使用自治区自然灾害综合风险预警发布及响应联动系统</h2> |
| | | <p>自治区预警中心干部 工作人员</p> |
| | | </div> |
| | | </div> |
| | |
| | | import QuickNavigation from '@/components/Home/QuickNavigation' |
| | | import IndexEcharts from '@/components/Home/IndexEcharts' |
| | | import Team from '@/components/Home/Team' |
| | | import Cookies from "js-cookie"; |
| | | |
| | | export default { |
| | | name: 'home-default', |
| | |
| | | IndexEcharts, |
| | | Team |
| | | }, |
| | | data() { |
| | | return { |
| | | userName: '' |
| | | }; |
| | | }, |
| | | created() { |
| | | this.userName = JSON.parse(Cookies.get('userInfo')).realName |
| | | }, |
| | | computed: { |
| | | dateTime () { |
| | | let date = new Date() |
| | |
| | | <template> |
| | | <a-modal |
| | | title="重置密码" |
| | | centered |
| | | :visible="visible" |
| | | :confirm-loading="confirmLoading" |
| | | width="50%" |
| | |
| | | :afterClose="clearMod" |
| | | > |
| | | <a-form-model ref="ruleForm" :rules="rules" :model="form" :label-col="labelCol" :wrapper-col="wrapperCol" :colon="false"> |
| | | <a-form-model-item label="请输入新密码" prop="newPwd"> |
| | | <a-input v-model="form.newPwd"/> |
| | | <a-form-model-item label="原密码" prop="oldPwd"> |
| | | <!-- <a-input v-model="form.oldPwd"/>--> |
| | | <a-input-password v-model="form.oldPwd" placeholder="请输入原密码" /> |
| | | </a-form-model-item> |
| | | <a-form-model-item label="确认密码" prop="checkPwd"> |
| | | <a-input v-model="form.checkPwd"/> |
| | | <a-form-model-item label="新密码" prop="newPwd"> |
| | | <!-- <a-input v-model="form.newPwd"/>--> |
| | | <a-input-password v-model="form.newPwd" placeholder="请输入新密码" /> |
| | | </a-form-model-item> |
| | | <a-form-model-item label="重复新密码" prop="reNewPwd"> |
| | | <a-input-password v-model="form.reNewPwd" placeholder="请再次输入新密码" /> |
| | | </a-form-model-item> |
| | | </a-form-model> |
| | | </a-modal> |
| | |
| | | |
| | | <script> |
| | | import {verifyPasswordPowerful, verifyPhone, verifyTelPhone} from "@/util/validate"; |
| | | |
| | | import { updatePwd } from '@/api/user' |
| | | import {loginOut} from "@/api/login"; |
| | | import {Session} from "@/util/storage"; |
| | | export default { |
| | | name: 'pwdMod', |
| | | data () { |
| | |
| | | confirmLoading: false, |
| | | labelCol: { span: 4 }, |
| | | wrapperCol: { span: 14 }, |
| | | updateType: 0, |
| | | form: { |
| | | id: null, |
| | | uid: null, |
| | | oldPwd: '', |
| | | newPwd: '', |
| | | checkPwd: '' |
| | | reNewPwd: '' |
| | | }, |
| | | rules: { |
| | | newPwd: [{ required: true, validator: validatePwd, trigger: 'blur'}], |
| | | checkPwd: [{ required: true, validator: validatePwd2, trigger: 'blur'}] |
| | | // oldPwd: [{ required: true, validator: validatePwd, trigger: 'blur'}], |
| | | // newPwd: [{ required: true, validator: validatePwd, trigger: 'blur'}], |
| | | // reNewPwd: [{ required: true, validator: validatePwd2, trigger: 'blur'}] |
| | | oldPwd: [{ required: true, message: '请输入原密码', trigger: 'blur'}], |
| | | newPwd: [{ required: true, message: '请输入新密码', trigger: 'blur'}], |
| | | reNewPwd: [{ required: true, validator: validatePwd2, trigger: 'blur'}] |
| | | } |
| | | } |
| | | }, |
| | |
| | | methods:{ |
| | | clearMod(){ |
| | | this.$refs.ruleForm.clearValidate() |
| | | this.$refs.ruleForm.resetFields() |
| | | }, |
| | | |
| | | onSubmit() { |
| | | this.$refs.ruleForm.validate(valid => { |
| | | if (valid) { |
| | | alert('submit!'); |
| | | this.visible = false |
| | | let {reNewPwd, ...data} = this.form |
| | | updatePwd(data).then(res=>{ |
| | | if(res.data.code == 100){ |
| | | if(this.updateType == 1){ |
| | | this.$message.success('密码修改成功,需重新登录'); |
| | | loginOut().then(res=>{ |
| | | if (res.data.code === 100) { |
| | | Session.clear(); // 清除缓存/token等 |
| | | // 使用 reload 时,不需要调用 resetRoute() 重置路由 |
| | | this.$router.push('/') |
| | | // window.location.reload(); |
| | | } else { |
| | | this.$message.warning(res.data.msg); |
| | | } |
| | | }) |
| | | }else{ |
| | | this.$message.success('密码修改成功'); |
| | | this.$emit('refresh') |
| | | } |
| | | this.visible = false |
| | | }else{ |
| | | this.$message.warning(res.data.msg); |
| | | } |
| | | }) |
| | | } else { |
| | | console.log('error submit!!'); |
| | | return false; |
| | |
| | | <a-modal |
| | | :title="title" |
| | | :visible="visible" |
| | | centered |
| | | :confirm-loading="confirmLoading" |
| | | width="50%" |
| | | cancelText="取消" |
| | |
| | | alert('submit!'); |
| | | this.visible = false |
| | | } else { |
| | | console.log('error submit!!'); |
| | | return false; |
| | | } |
| | | }); |
| | |
| | | <a-modal |
| | | :title="title" |
| | | :visible="visible" |
| | | centered |
| | | :confirm-loading="confirmLoading" |
| | | width="50%" |
| | | cancelText="取消" |
| | |
| | | :afterClose="clearMod" |
| | | > |
| | | <a-form-model ref="ruleForm" :rules="rules" :model="form" :label-col="labelCol" :wrapper-col="wrapperCol" :colon="false"> |
| | | <a-form-model-item label="姓名" prop="name"> |
| | | <a-input v-model="form.name"/> |
| | | <a-form-model-item label="姓名" prop="realName"> |
| | | <a-input v-model="form.realName"/> |
| | | </a-form-model-item> |
| | | <a-form-model-item label="手机号码" prop="phone"> |
| | | <a-input v-model="form.phone"/> |
| | | </a-form-model-item> |
| | | <a-form-model-item label="用户名" prop="userName"> |
| | | <a-input v-model="form.userName"/> |
| | | <a-form-model-item label="用户名" prop="name"> |
| | | <a-input v-model="form.name"/> |
| | | </a-form-model-item> |
| | | <a-form-model-item label="密码" v-if="title== '新增用户'" prop="password"> |
| | | <a-input v-model="form.password"/> |
| | | <a-form-model-item label="密码" v-if="title== '新增用户'" prop="pwd"> |
| | | <a-input v-model="form.pwd"/> |
| | | </a-form-model-item> |
| | | <a-form-model-item label="重复密码" v-if="title== '新增用户'" prop="rePassword"> |
| | | <a-input v-model="form.rePassword"/> |
| | | <a-form-model-item label="重复密码" v-if="title== '新增用户'" prop="dupPwd"> |
| | | <a-input v-model="form.dupPwd"/> |
| | | </a-form-model-item> |
| | | <a-form-model-item label="性别" prop="sex"> |
| | | <a-radio-group v-model="form.sex" :default-value="0" button-style="solid"> |
| | | <a-radio-button :value="0">男</a-radio-button> |
| | | <a-radio-button :value="1">女</a-radio-button> |
| | | <a-radio-group v-model="form.sex" :default-value="1" button-style="solid"> |
| | | <a-radio-button :value="1">男</a-radio-button> |
| | | <a-radio-button :value="0">女</a-radio-button> |
| | | </a-radio-group> |
| | | </a-form-model-item> |
| | | <a-form-model-item label="选择级别" prop="level"> |
| | | <a-select v-model="form.level" placeholder="监管级别"> |
| | | <a-form-model-item label="选择级别" prop="unittype"> |
| | | <a-select v-model="form.unittype" placeholder="监管级别"> |
| | | <a-select-option :value="1"> |
| | | 省级 |
| | | </a-select-option> |
| | |
| | | <a-input v-model="unitName"/> |
| | | </a-form-model-item> |
| | | <a-form-model-item label="角色" prop="role"> |
| | | <a-select v-model="form.role" placeholder="角色"> |
| | | <a-select-option :value="1"> |
| | | <a-select v-model="form.roleId" placeholder="角色"> |
| | | <a-select-option :value="2"> |
| | | 领导 |
| | | </a-select-option> |
| | | <a-select-option :value="2"> |
| | | 公司人员 |
| | | <a-select-option :value="3"> |
| | | 工作人员 |
| | | </a-select-option> |
| | | </a-select> |
| | | </a-form-model-item> |
| | |
| | | areaData: [], |
| | | unitName: '', |
| | | form: { |
| | | name: '', |
| | | realName: '', |
| | | phone: '', |
| | | userName: '', |
| | | password: '', |
| | | rePassword: '', |
| | | name: '', |
| | | pwd: '', |
| | | dupPwd: '', |
| | | sex: null, |
| | | level: null, |
| | | unittype: null, |
| | | area: null, |
| | | role: null |
| | | roleId: null |
| | | }, |
| | | rules: { |
| | | name: [{ required: true, message: '请输入姓名', trigger: 'blur'}], |
| | | realName: [{ required: true, message: '请输入姓名', trigger: 'blur'}], |
| | | phone: [{ required: true, message: '请输入手机号', trigger: 'blur'}], |
| | | userName: [{ required: true, message: '请输入用户名', trigger: 'blur'}], |
| | | password: [{ required: true, message: '请输入密码', trigger: 'blur'}], |
| | | rePassword: [{ required: true, message: '请再次输入密码', trigger: 'blur'}], |
| | | name: [{ required: true, message: '请输入用户名', trigger: 'blur'}], |
| | | pwd: [{ required: true, message: '请输入密码', trigger: 'blur'}], |
| | | dupPwd: [{ required: true, message: '请再次输入密码', trigger: 'blur'}], |
| | | sex: [{ required: true, message: '请选择性别', trigger: 'change'}], |
| | | level: [{ required: true, message: '请选择监管级别', trigger: 'change'}], |
| | | unittype: [{ required: true, message: '请选择监管级别', trigger: 'change'}], |
| | | area: [{ required: true, message: '请选择行政区划', trigger: 'change'}], |
| | | role: [{ required: true, message: '请选择角色', trigger: 'change'}] |
| | | roleId: [{ required: true, message: '请选择角色', trigger: 'change'}] |
| | | } |
| | | } |
| | | }, |
| | |
| | | if(type == 'add'){ |
| | | t.title = '新增用户' |
| | | t.form = { |
| | | name: '', |
| | | realName: '', |
| | | phone: '', |
| | | userName: '', |
| | | password: '', |
| | | rePassword: '', |
| | | name: '', |
| | | pwd: '', |
| | | dupPwd: '', |
| | | sex: undefined, |
| | | level: undefined, |
| | | unittype: undefined, |
| | | area: undefined, |
| | | role: undefined |
| | | roleId: null |
| | | } |
| | | }else{ |
| | | t.title = '编辑用户' |
| | | t.form = data |
| | | data.roleId = data.role.roleId |
| | | const { realName,phone,name,sex,unittype,roleId } = data |
| | | t.form = { realName,phone,name,sex,unittype,roleId } |
| | | } |
| | | t.visible = true |
| | | }, |
| | |
| | | onSubmit() { |
| | | this.$refs.ruleForm.validate(valid => { |
| | | if (valid) { |
| | | alert('submit!'); |
| | | this.visible = false |
| | | if(this.title == '新增用户') |
| | | addUser(this.form).then((res)=>{ |
| | | if(res.data.code == 100){ |
| | | console.log(res,'res') |
| | | } |
| | | }) |
| | | } else { |
| | | console.log('error submit!!'); |
| | | return false; |
| | |
| | | <a-range-picker
|
| | | format="YYYY-MM-DD"
|
| | | :placeholder="['开始时间', '结束时间']"
|
| | | @change="onChange"
|
| | | @ok="onOk"
|
| | | @change="timeChange"
|
| | | @ok="timeOk"
|
| | | style="width: 100%"
|
| | | />
|
| | | </a-col>
|
| | |
| | | <!-- 表格实体部分-->
|
| | | <div class="table-cont">
|
| | | <a-table :columns="columns" :data-source="data" bordered>
|
| | | <template slot="time" slot-scope="text,record">
|
| | | <template #time="text,record">
|
| | | <a v-if="!record.readed" style="color:red">[未读]</a>{{text}}
|
| | | </template>
|
| | | <span slot="level" slot-scope="text">
|
| | | <template #level="text">
|
| | | <a-tag :color="text === '黄色' ? 'yellow' :text === '橙色'? 'orange':text === '红色'?'red':'blue'">
|
| | | {{ text }}
|
| | | </a-tag>
|
| | | </span>
|
| | | <template slot="attachment" slot-scope="text">
|
| | | </template>
|
| | | <template #attachment="text">
|
| | | <span v-if="text==='无'">无</span>
|
| | | <a v-else><b><a-icon type="paper-clip" /> {{text}}</b></a>
|
| | | </template >
|
| | | <template slot="receipt" slot-scope="text">
|
| | | <template #receipt="text">
|
| | | <span v-if="text=='待叫应'"
|
| | | style='background-color:blue;padding:5px;color:#fff;border-radius: 5px;'>{{text}}</span>
|
| | | <span v-else-if="text=='已叫应'"
|
| | |
| | | <span v-else style='background-color:red;padding:5px;color:#fff;border-radius: 5px;'>{{text}}
|
| | | </span>
|
| | | </template>
|
| | | <template slot="operation" slot-scope="text, record, index">
|
| | | <template #operation="text, record, index">
|
| | | <div class="editable-row-operations">
|
| | | <div v-if="record.receipt==='待叫应'">
|
| | | <a @click="showModal" style="color:orangered"><a-icon type="notification" />
|
| | |
| | | popupScroll() {
|
| | | console.log('popupScroll');
|
| | | },
|
| | | onChange(date, dateString) {
|
| | | timeChange(date, dateString) {
|
| | | console.log(date, dateString);
|
| | | },
|
| | | onOk(value) {
|
| | | console.log('onOk: ', value);
|
| | | timeOk(value) {
|
| | | console.log('timeOk: ', value);
|
| | | },
|
| | | //叫应回执时间
|
| | | showModal() {
|
对比新文件 |
| | |
| | | <template> |
| | | <div class="inner"> |
| | | <h2>预警信息发布</h2> |
| | | <a-form-model :model="form" :wrapper-col="wrapperCol"> |
| | | <div class="left"> |
| | | <a-form-model-item prop="title"> |
| | | <a-input v-model="form.title" placeholder="请输入标题" style="height: 50px; font-size: 20px;" /> |
| | | </a-form-model-item> |
| | | <!-- <a-row>--> |
| | | <!-- <a-col :span="12" style="display: flex;align-items: center">--> |
| | | <!-- <span style="display: block;margin-bottom: 24px">相关灾种</span>--> |
| | | |
| | | <!-- </a-col>--> |
| | | <!-- <a-col :span="12" style="display: flex;align-items: center;justify-content: right">--> |
| | | <!-- <span style="display: block;margin-bottom: 24px">预警级别:</span>--> |
| | | |
| | | <!-- </a-col>--> |
| | | <!-- </a-row>--> |
| | | |
| | | <a-row> |
| | | <a-col :span="12"> |
| | | <a-form-model-item prop="type"> |
| | | <a-radio-group v-model="form.type" default-value="a" button-style="solid"> |
| | | <a-radio-button value="a"> |
| | | 常规 |
| | | </a-radio-button> |
| | | <a-radio-button value="b"> |
| | | 紧临 |
| | | </a-radio-button> |
| | | </a-radio-group> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | <a-col :span="12" style="display: flex;align-items: center;justify-content: right"> |
| | | <a-form-model-item prop="riskType" style="margin-right: 20px"> |
| | | <a-select placeholder="请选择相关灾种" v-model="form.riskType" style="width: 240px" allowClear @change="handleRisk"> |
| | | <a-select-option v-for="item in riskOptions" :key="item.value" :value="item.value"> |
| | | {{ item.name }} |
| | | </a-select-option> |
| | | </a-select> |
| | | </a-form-model-item> |
| | | <a-form-model-item prop="level"> |
| | | <a-select placeholder="请选择预警级别" v-model="form.level" style="width: 240px" allowClear @change="handleLevel"> |
| | | <a-select-option v-for="item in levelOptions" :key="item.value" :value="item.value"> |
| | | {{ item.name }} |
| | | </a-select-option> |
| | | </a-select> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | </a-row> |
| | | <a-form-model-item prop="message"> |
| | | <a-textarea v-model="form.message" placeholder="请输入短信通知内容部分" :auto-size="{ minRows: 3, maxRows: 5 }" /> |
| | | </a-form-model-item> |
| | | <a-row> |
| | | <a-col :span="12"> |
| | | <a-button>上传附件</a-button> |
| | | </a-col> |
| | | <a-col :span="12" style="display: flex;align-items: center;justify-content: right"> |
| | | <b style="margin-bottom: 24px">超时设置:</b> |
| | | <a-form-model-item prop="overTime"> |
| | | <a-input v-model="form.overTime" style="width:200px;" placeholder="输入时间" suffix="分钟"/> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | </a-row> |
| | | <span><b>发布单位:</b>{{department}}</span> |
| | | <br/><br/> |
| | | <!-- 子单位--> |
| | | <a-row :gutter="24"> |
| | | <a-col :span="12"> |
| | | <b style="margin-bottom: 6px">选择接收单位:</b> |
| | | <a-form-model-item prop="svalue"> |
| | | <a-tree-select |
| | | show-search |
| | | tree-checkable |
| | | treeCheckStrictly |
| | | style="width: 100%" |
| | | v-model="form.svalue" |
| | | :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" |
| | | placeholder="选择工作通知接收单位" |
| | | allow-clear |
| | | multiple |
| | | tree-default-expand-all |
| | | @change="onChanges" |
| | | @search="onSearch" |
| | | @select="onSelect" |
| | | > |
| | | <a-tree-select-node key="0" value="all" title="全选"> |
| | | </a-tree-select-node> |
| | | <a-tree-select-node key="0-1" value="乌鲁木齐" title="乌鲁木齐(张XX 13268813610)"> |
| | | <a-tree-select-node key="0-1-1" value="米东区" title="米东区(张XX 13268813610)"> |
| | | <a-tree-select-node key="0-1-1-1" value="XX村1" title="XX村(李有田 13268813610)" /> |
| | | </a-tree-select-node> |
| | | <a-tree-select-node key="0-1-2" value="天山区" title="天山区"> |
| | | <a-tree-select-node key="0-1-2-1" value="XX村2"> |
| | | <b slot="title" style="color: #08c">XX村</b> |
| | | </a-tree-select-node> |
| | | </a-tree-select-node> |
| | | </a-tree-select-node> |
| | | </a-tree-select> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | <a-col :span="12"> |
| | | <b style="margin-bottom: 6px">平级接收人选择:</b> |
| | | <a-form-model-item prop="sameDep"> |
| | | <a-select mode="multiple" placeholder="选择平级接收单位" v-model="form.sameDep" @change="handle"> |
| | | <a-select-option v-for="item in filteredOptions" :key="item" :value="item"> |
| | | {{ item }} |
| | | </a-select-option> |
| | | </a-select> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | </a-row> |
| | | <!-- <div>--> |
| | | <!-- <b>选择审批领导:</b> --> |
| | | <!-- <a-select show-search placeholder="请选择审批领导"--> |
| | | <!-- option-filter-prop="children" style="width: 300px" :filter-option="filterOption"--> |
| | | <!-- @focus="handleFocus" @blur="handleBlur" @change="handleChange">--> |
| | | <!-- <a-select-option value="jack">--> |
| | | <!-- 裴小威--> |
| | | <!-- </a-select-option>--> |
| | | <!-- <a-select-option value="lucy">--> |
| | | <!-- 赵东升--> |
| | | <!-- </a-select-option>--> |
| | | <!-- <a-select-option value="tom">--> |
| | | <!-- 王卫萍--> |
| | | <!-- </a-select-option>--> |
| | | <!-- </a-select>--> |
| | | <!-- </div>--> |
| | | <div style="display: flex;justify-content: right"> |
| | | <a-button type="primary" style="width: 250px;"> |
| | | 确认发送 |
| | | </a-button> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="right"> |
| | | <h2>短信预览</h2> |
| | | <div class="mobile"> |
| | | <div class="mesg"> |
| | | <P>【{{form.title}}】{{form.message}}。发布单位:{{department}}</P> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | </a-form-model> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | |
| | | const OPTIONS = ['自治区消防(李XX)', '自治区公安厅(王XX)', '自治区自然资源厅(刘XX)']; |
| | | export default { |
| | | name: "release", |
| | | data() { |
| | | return { |
| | | message: '', |
| | | signname: '自然灾害风险预警提示', |
| | | department: '自治区自然灾害综合监测预警中心', |
| | | wrapperCol: { span: 24 }, |
| | | form: { |
| | | title: '', |
| | | riskType: 1, |
| | | level: 1, |
| | | type: 'a', |
| | | svalue: undefined, |
| | | sameDep: [], |
| | | message: '', |
| | | overTime: '' |
| | | }, |
| | | riskOptions: [ |
| | | {name: '地震',value: 1}, |
| | | {name: '洪涝',value: 2}, |
| | | {name: '气象',value: 3}, |
| | | {name: '泥石流',value: 4}, |
| | | {name: '水旱',value: 5}, |
| | | {name: '森林草原火灾',value: 6} |
| | | ], |
| | | levelOptions: [ |
| | | {name: '红色预警',value: 1}, |
| | | {name: '橙色预警',value: 2}, |
| | | {name: '黄色预警',value: 3}, |
| | | {name: '蓝色预警',value: 4}, |
| | | {name: '其他短信通知',value: 5} |
| | | ] |
| | | }; |
| | | }, |
| | | components: {}, |
| | | computed: { |
| | | filteredOptions() { |
| | | return OPTIONS.filter(o => !this.form.sameDep.includes(o)); |
| | | }, |
| | | }, |
| | | methods: { |
| | | //选择子部门部分 |
| | | onChanges(value) { |
| | | if(value.find(i=>i.value == 'all')){ |
| | | console.log('全选了') |
| | | }else{ |
| | | this.svalue = value; |
| | | } |
| | | console.log(this.svalue); |
| | | }, |
| | | onSearch() { |
| | | console.log(...arguments); |
| | | }, |
| | | onSelect() { |
| | | console.log(...arguments); |
| | | }, |
| | | //选择平级部门部分 |
| | | handleRisk(selectedItems) { |
| | | // this.selectedItems = selectedItems; |
| | | }, |
| | | handleLevel(selectedItems) { |
| | | // this.selectedItems = selectedItems; |
| | | }, |
| | | handle(selectedItems) { |
| | | // this.selectedItems = selectedItems; |
| | | }, |
| | | onChange(){ |
| | | console.log(this.value) |
| | | }, |
| | | handleChange(value) { |
| | | console.log(`selected ${value}`); |
| | | }, |
| | | handleBlur() { |
| | | console.log('blur'); |
| | | }, |
| | | handleFocus() { |
| | | console.log('focus'); |
| | | }, |
| | | filterOption(input, option) { |
| | | return ( |
| | | option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 |
| | | ); |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style lang="less" scoped> |
| | | .left { |
| | | width: 58%; |
| | | float: left; |
| | | } |
| | | |
| | | .right { |
| | | width: 39%; |
| | | float: right; |
| | | border-left: 1px silver solid; |
| | | padding-left: 18px; |
| | | |
| | | .mobile { |
| | | position: relative; |
| | | background: black; |
| | | border: 1px solid black; |
| | | width: 280px; |
| | | min-height: 500px; |
| | | border-radius: 25px; |
| | | margin-left: 20px; |
| | | |
| | | .mesg { |
| | | width: 260px; |
| | | margin: 25px auto; |
| | | min-height: 450px; |
| | | background: white; |
| | | padding-top: 10px; |
| | | |
| | | p { |
| | | padding: 15px; |
| | | background-color: #f5f5f5; |
| | | border-radius: 10px; |
| | | font-size: 16px; |
| | | margin: 15px 10px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | </style> |
对比新文件 |
| | |
| | | <template> |
| | | <div class="inner"> |
| | | <a-row type="flex" justify="space-between" style="margin-bottom: 20px"> |
| | | <a-col :span="8"> |
| | | <a-radio-group v-model="category"> |
| | | <a-radio-button :value="0"> |
| | | 全部 |
| | | </a-radio-button> |
| | | <a-radio-button :value="1"> |
| | | 审核通过 |
| | | </a-radio-button> |
| | | <a-radio-button :value="2"> |
| | | 未审核 |
| | | </a-radio-button> |
| | | <a-radio-button :value="3"> |
| | | 审核驳回 |
| | | </a-radio-button> |
| | | </a-radio-group> |
| | | </a-col> |
| | | <a-col :span="16"> |
| | | <a-row type="flex" justify="end" :gutter="12"> |
| | | <a-col :span="8"> |
| | | <a-range-picker |
| | | format="YYYY-MM-DD" |
| | | :placeholder="['开始时间', '结束时间']" |
| | | @change="timeChange" |
| | | @ok="timeOk" |
| | | style="width: 100%" |
| | | /> |
| | | </a-col> |
| | | <a-col :span="4"> |
| | | <a-button type="primary">查询</a-button> |
| | | <a-button style="margin-left: 12px">重置</a-button> |
| | | </a-col> |
| | | </a-row> |
| | | </a-col> |
| | | </a-row> |
| | | |
| | | <div class="table-cont"> |
| | | <a-table :columns="columns" :data-source="data" bordered> |
| | | <template #level="level"> |
| | | <a-tag :color="level === '黄色' ? 'yellow' :level === '橙色'? 'orange':level === '红色'?'red':'blue'"> |
| | | {{ level }} |
| | | </a-tag> |
| | | </template> |
| | | <template #attachment="text"> |
| | | <span v-if="text==='无'">无</span> |
| | | <a v-else><b><a-icon type="paper-clip" /> {{text}}</b></a> |
| | | </template > |
| | | <template #status="status"> |
| | | <a-tag |
| | | :color="status === 1 ? 'green' : status === 2 ? 'blue' : 'red'" |
| | | > |
| | | {{ status==1?'审核通过':status==2?'未审核':'审核驳回' }} |
| | | </a-tag> |
| | | </template> |
| | | <template #operation="text, record, index"> |
| | | <a-button type="link" v-if="record.status == 1 || record.status == 3">查看信息详情</a-button> |
| | | <a-button type="primary" v-if="record.status == 2">查看并审核</a-button> |
| | | </template> |
| | | </a-table> |
| | | </div> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | export default { |
| | | name: 'msgReview', |
| | | components: {}, |
| | | data () { |
| | | return { |
| | | category: 0, |
| | | columns: [ |
| | | { |
| | | title: '序号', |
| | | dataIndex: 'key', |
| | | width: '5%', |
| | | }, |
| | | { |
| | | title: '提交审核时间', |
| | | dataIndex: 'time', |
| | | width: '15%', |
| | | scopedSlots: { |
| | | customRender: 'time' |
| | | }, //设置定制化表格数据 |
| | | }, |
| | | { |
| | | title: '发布单位', |
| | | dataIndex: 'department', |
| | | width: '12%', |
| | | }, |
| | | { |
| | | title: '类别', |
| | | dataIndex: 'category', |
| | | width: '8%', |
| | | }, |
| | | { |
| | | title: '级别', |
| | | dataIndex: 'level', |
| | | scopedSlots: { |
| | | customRender: 'level' |
| | | }, //设置定制化表格数据 |
| | | width: '8%', |
| | | }, |
| | | { |
| | | title: '信息标题', |
| | | dataIndex: 'title', |
| | | width: '16%', |
| | | }, |
| | | { |
| | | title: '附件', |
| | | dataIndex: 'attachment', |
| | | width: '6%', |
| | | scopedSlots: { |
| | | customRender: 'attachment' |
| | | }, |
| | | }, |
| | | { |
| | | title: '审核情况', |
| | | dataIndex: 'status', |
| | | width: '10%', |
| | | scopedSlots: { |
| | | customRender: 'status' |
| | | }, //设置定制化表格数据 |
| | | }, |
| | | { |
| | | title: '操作', |
| | | dataIndex: 'operation', |
| | | scopedSlots: { |
| | | customRender: 'operation' |
| | | }, |
| | | }, |
| | | ], |
| | | data: [ |
| | | { |
| | | key: 1, |
| | | id:1001, |
| | | time: '2023-05-02 15:30', |
| | | department: '自治区预警中心', |
| | | category: '气象', |
| | | level: '黄色', |
| | | title: '全疆高温红色预警', |
| | | attachment: '1', |
| | | status: 1 |
| | | }, |
| | | { |
| | | key: 2, |
| | | id:1002, |
| | | time: '2023-05-02 15:30', |
| | | department: '自治区预警中心', |
| | | category: '气象', |
| | | level: '橙色', |
| | | title: '全疆高温红色预警', |
| | | attachment: '1', |
| | | status: 2 |
| | | }, |
| | | { |
| | | key: 3, |
| | | id:1003, |
| | | time: '2023-05-02 15:30', |
| | | department: '自治区预警中心', |
| | | category: '气象', |
| | | level: '橙色', |
| | | title: '全疆高温红色预警', |
| | | attachment: '1', |
| | | status: 3 |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | created() { |
| | | const t = this |
| | | }, |
| | | methods:{ |
| | | timeChange(date, dateString) { |
| | | console.log(date, dateString); |
| | | }, |
| | | timeOk(value) { |
| | | console.log('timeOk: ', value); |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="less" scoped> |
| | | |
| | | </style> |
文件名从 src/views/Admin/Notice.vue 修改 |
| | |
| | |
|
| | | <br /><br />
|
| | | <a-textarea v-model="message" placeholder="请输入短信通知内容部分" :auto-size="{ minRows: 3, maxRows: 5 }" />
|
| | | <br /><br /> |
| | | <a-button>上传附件</a-button> <div style="float: right;width:50%;text-align: right;">超时设置: <a-input style="width:100px;" placeholder="输入时间" /> 分钟</div> |
| | | <br /><br />
|
| | | <span><b>发布单位:</b>{{department}}</span> |
| | | <br/><br/> |
| | | <!-- 子单位--> |
| | | <b>选择接收单位:</b> |
| | | <a-tree-select |
| | | show-search |
| | | style="width: 100%" |
| | | :value="svalue" |
| | | :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" |
| | | placeholder="选择工作通知接收单位" |
| | | allow-clear |
| | | multiple |
| | | tree-default-expand-all |
| | | @change="onChanges" |
| | | @search="onSearch" |
| | | @select="onSelect" |
| | | > |
| | | <a-tree-select-node key="0-1" value="乌鲁木齐" title="乌鲁木齐(张XX 13268813610)"> |
| | | <a-tree-select-node key="0-1-1" value="米东区" title="米东区(张XX 13268813610)"> |
| | | <a-tree-select-node key="0-1-1-1" value="XX村1" title="XX村(李有田 13268813610)" /> |
| | | </a-tree-select-node> |
| | | <a-tree-select-node key="0-1-2" value="天山区" title="天山区"> |
| | | <a-tree-select-node key="0-1-2-1" value="XX村2"> |
| | | <b slot="title" style="color: #08c">XX村</b> |
| | | </a-tree-select-node> |
| | | </a-tree-select-node> |
| | | </a-tree-select-node> |
| | | </a-tree-select> |
| | | |
| | | <a-button>上传附件</a-button> <div style="float: right;width:50%;text-align: right;">超时设置: <a-input style="width:100px;" placeholder="输入时间" /> 分钟</div>
|
| | | <br /><br />
|
| | | <span><b>发布单位:</b>{{department}}</span>
|
| | | <br/><br/>
|
| | | <!-- 子单位-->
|
| | | <div style="margin-bottom: 10px">选择接收单位:</div>
|
| | | <a-tree-select
|
| | | show-search
|
| | | tree-checkable
|
| | | treeCheckStrictly
|
| | | style="width: 100%"
|
| | | v-model="svalue"
|
| | | :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
|
| | | placeholder="选择工作通知接收单位"
|
| | | allow-clear
|
| | | multiple
|
| | | tree-default-expand-all
|
| | | @change="onChanges"
|
| | | @search="onSearch"
|
| | | @select="onSelect"
|
| | | >
|
| | | <a-tree-select-node key="0" value="all" title="全选">
|
| | | </a-tree-select-node>
|
| | | <a-tree-select-node key="0-1" value="乌鲁木齐" title="乌鲁木齐(张XX 13268813610)">
|
| | | <a-tree-select-node key="0-1-1" value="米东区" title="米东区(张XX 13268813610)">
|
| | | <a-tree-select-node key="0-1-1-1" value="XX村1" title="XX村(李有田 13268813610)" />
|
| | | </a-tree-select-node>
|
| | | <a-tree-select-node key="0-1-2" value="天山区" title="天山区">
|
| | | <a-tree-select-node key="0-1-2-1" value="XX村2">
|
| | | <b slot="title" style="color: #08c">XX村</b>
|
| | | </a-tree-select-node>
|
| | | </a-tree-select-node>
|
| | | </a-tree-select-node>
|
| | | </a-tree-select>
|
| | | |
| | | <br/><br/>
|
| | | <div style="float: right;"><b>选择审批领导:</b> <a-select show-search placeholder="请选择审批领导"
|
| | | option-filter-prop="children" style="width: 200px" :filter-option="filterOption"
|
| | |
| | | message: '',
|
| | | signname: '自然灾害风险预警提示',
|
| | | department: '自治区自然灾害综合监测预警中心',
|
| | | selectedItems: [], |
| | | selectedItems: [],
|
| | | svalue:undefined,
|
| | | };
|
| | | },
|
| | |
| | | return OPTIONS.filter(o => !this.selectedItems.includes(o));
|
| | | },
|
| | | },
|
| | | methods: { |
| | | //选择子部门部分 |
| | | onChanges(value) { |
| | | console.log(value); |
| | | this.svalue = value; |
| | | }, |
| | | onSearch() { |
| | | console.log(...arguments); |
| | | }, |
| | | onSelect() { |
| | | console.log(...arguments); |
| | | }, |
| | | methods: {
|
| | | //选择子部门部分
|
| | | onChanges(value) {
|
| | | if(value.find(i=>i.value == 'all')){
|
| | | console.log('全选了')
|
| | | }else{
|
| | | this.svalue = value;
|
| | | }
|
| | | console.log(this.svalue);
|
| | | },
|
| | | onSearch() {
|
| | | console.log(...arguments);
|
| | | },
|
| | | onSelect() {
|
| | | console.log(...arguments);
|
| | | },
|
| | | //选择平级部门部分
|
| | | handle(selectedItems) {
|
| | | this.selectedItems = selectedItems;
|
| | | }, |
| | | onChange(){ |
| | | console.log(this.value) |
| | | },
|
| | | onChange(){
|
| | | console.log(this.value)
|
| | | },
|
| | | handleChange(value) {
|
| | | console.log(`selected ${value}`);
|
| | |
| | | <a-cascader :options="areaData" v-model="areaVal" placeholder="行政规划" expandTrigger="hover" changeOnSelect @change="onChange" style="width: 100%"/> |
| | | </a-col> |
| | | <a-col :span="4"> |
| | | <a-button type="primary" @click="getUserList">查询</a-button> |
| | | <a-button type="primary">查询</a-button> |
| | | <a-button style="margin-left: 12px" @click="resetSearch">重置</a-button> |
| | | </a-col> |
| | | </a-row> |
| | |
| | | </a-row> |
| | | <div class="table-cont"> |
| | | <a-table :columns="columns" :data-source="tableData" :pagination="pagination" :rowKey="record=>record.name" bordered> |
| | | <template #levels="level"> |
| | | <template #unittype="unittype"> |
| | | <a-tag |
| | | :color="level === 1 ? 'pink' : level === 2 ? 'blue' : 'green'" |
| | | :color="unittype === 1 ? 'purple' : unittype === 2 ? 'blue' : unittype === 3 ? 'cyan' : 'green'" |
| | | > |
| | | {{ level === 1 ? '省级' : level === 2 ? '地(市、州)级' : level === 3 ? '区县级' : '村(乡、镇)级' }} |
| | | {{ unittype==1?'省级':unittype==2?'地(市、州)级':unittype==3?'区县级':'村(乡、镇)级' }} |
| | | </a-tag> |
| | | </template> |
| | | <template #area="area"> |
| | | {{findAreaById(areaData,area)}} |
| | | <template #area="text,row"> |
| | | <span v-if="row.province !== null && row.province !== ''">{{row.province}}</span> |
| | | <span v-if="row.city !== null && row.city !== ''">-{{row.city}}</span> |
| | | <span v-if="row.area !== null && row.area !== ''">-{{row.area}}</span> |
| | | <span v-if="row.town !== null && row.town !== ''">-{{row.town}}</span> |
| | | </template> |
| | | <template #action="action,row"> |
| | | <a-button type="link" @click="editData('edit',row)">编辑</a-button> |
| | |
| | | </template> |
| | | </a-table> |
| | | </div> |
| | | <same-level-mod ref="sameLevelMod" @refrech="getUserList"></same-level-mod> |
| | | <same-level-mod ref="sameLevelMod" @refrech=""></same-level-mod> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import {getUser} from '@/api/user' |
| | | import {getRecipient} from '@/api/user' |
| | | import sameLevelMod from "@/views/Admin/components/sameLevelMod" |
| | | export default { |
| | | name: 'sameLevel', |
| | |
| | | pageIndex: 1, |
| | | pageSize: 10, |
| | | searchParams:{ |
| | | districtId: null |
| | | province: '', |
| | | city: '', |
| | | area: '', |
| | | town: '' |
| | | } |
| | | }, |
| | | columns:[ |
| | | { |
| | | title: '单位名称', |
| | | dataIndex: 'depName', |
| | | key: 'depName' |
| | | dataIndex: 'company', |
| | | key: 'company' |
| | | }, |
| | | { |
| | | title: '接收人姓名', |
| | | dataIndex: 'name', |
| | | key: 'name' |
| | | dataIndex: 'recipientName', |
| | | key: 'recipientName' |
| | | }, |
| | | { |
| | | title: '手机号码', |
| | |
| | | }, |
| | | { |
| | | title: '级别', |
| | | dataIndex: 'level', |
| | | key: 'level', |
| | | scopedSlots: { customRender: 'levels' } |
| | | dataIndex: 'unittype', |
| | | // key: 'unittype', |
| | | scopedSlots: { customRender: 'unittype' } |
| | | }, |
| | | { |
| | | title: '行政区划', |
| | | dataIndex: 'area', |
| | | key: 'area', |
| | | // key: 'area', |
| | | scopedSlots: { customRender: 'area' } |
| | | }, |
| | | { |
| | |
| | | scopedSlots: { customRender: 'action' } |
| | | }, |
| | | ], |
| | | tableData: [ |
| | | { |
| | | depName: '阿勒泰地区自然资源局', |
| | | name: 'John Brown', |
| | | phone: '15261806177', |
| | | level: 1, |
| | | area: 111 |
| | | }, |
| | | { |
| | | depName: '阿勒泰地区公安局', |
| | | name: 'Jim Green', |
| | | phone: '15261806178', |
| | | level: 2, |
| | | area: 211 |
| | | }, |
| | | { |
| | | depName: '阿勒泰地区自然资源局', |
| | | name: 'Joe Black', |
| | | phone: '15261806176', |
| | | level: 3, |
| | | area: 11 |
| | | }, |
| | | ], |
| | | tableData: [], |
| | | pagination: { |
| | | current: 1, |
| | | defaultCurrent: 1, |
| | | defaultPageSize: 10, |
| | | total: 11, |
| | | total: 0, |
| | | onChange: ( page, pageSize ) => this.onPageChange(page,pageSize) |
| | | }, |
| | | areaData: [ |
| | |
| | | }, |
| | | created() { |
| | | const t = this |
| | | t.getUserList() |
| | | t.getSameLevel() |
| | | }, |
| | | methods:{ |
| | | async getUserList(){ |
| | | async getSameLevel(){ |
| | | const t = this |
| | | const res = await getUser(t.search) |
| | | const res = await getRecipient(t.search) |
| | | if(res.data.code == 100){ |
| | | t.tableData = res.data.data |
| | | t.pagination.total = res.data.total |
| | | }else{ |
| | | t.$message.warning(res.data.msg); |
| | | } |
| | | }, |
| | | |
| | | resetSearch(){ |
| | |
| | | pageIndex: 1, |
| | | pageSize: 10, |
| | | searchParams:{ |
| | | districtId: null |
| | | province: '', |
| | | city: '', |
| | | area: '', |
| | | town: '' |
| | | } |
| | | } |
| | | t.getUserList() |
| | |
| | | }, |
| | | onChange(value) { |
| | | const t = this |
| | | t.search.searchParams.districtId = value[value.length - 1] |
| | | // t.search.searchParams.districtId = value[value.length - 1] |
| | | }, |
| | | |
| | | findAreaById(data,value) { |
对比新文件 |
| | |
| | | <template> |
| | | <div class="inner"> |
| | | 短信平台设置 |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | </script> |
| | |
| | | <div class="table-cont"> |
| | | <a-table :columns="columns" :data-source="tableData" :pagination="pagination" :rowKey="record=>record.id" bordered> |
| | | <template #sex="sex"> |
| | | {{ sex == 0?'男':'女' }} |
| | | {{ sex == 1?'男':'女'}} |
| | | </template> |
| | | <template #level="level"> |
| | | <template #unittype="unittype"> |
| | | <a-tag |
| | | :key="level" |
| | | :color="level === 1 ? 'pink' : level === 2 ? 'blue' : 'green'" |
| | | :color="unittype === 1 ? 'purple' : unittype === 2 ? 'blue' : unittype === 3 ? 'cyan' : 'green'" |
| | | > |
| | | {{ level==1?'省级':level==2?'地(市、州)级':level==3?'区县级':'村(乡、镇)级' }} |
| | | {{ unittype==1?'省级':unittype==2?'地(市、州)级':unittype==3?'区县级':'村(乡、镇)级' }} |
| | | </a-tag> |
| | | </template> |
| | | <template #area="area"> |
| | | {{findAreaById(areaData,area)}} |
| | | <template #area="text,row"> |
| | | <span v-if="row.province !== null && row.province !== ''">{{row.province}}</span> |
| | | <span v-if="row.city !== null && row.city !== ''">-{{row.city}}</span> |
| | | <span v-if="row.area !== null && row.area !== ''">-{{row.area}}</span> |
| | | <span v-if="row.town !== null && row.town !== ''">-{{row.town}}</span> |
| | | </template> |
| | | <template #role="role"> |
| | | {{ role == 1?'领导':'工作人员'}} |
| | | {{ role.roleName}} |
| | | </template> |
| | | <template #action="action,row"> |
| | | <a-button type="link" @click="editData('edit',row)">编辑</a-button> |
| | | <a-button type="link" class="delBtn">删除</a-button> |
| | | <a-button type="link" class="delBtn" @click="delData(row)">删除</a-button> |
| | | <a-button type="link" @click="editPwd(row)">重置密码</a-button> |
| | | </template> |
| | | </a-table> |
| | | </div> |
| | | <user-mod ref="userMod" @refrech="getUserList"></user-mod> |
| | | <pwd-mod ref="pwdMod" @refrech="getUserList"></pwd-mod> |
| | | <user-mod ref="userMod" @refresh="getUserList"></user-mod> |
| | | <pwd-mod ref="pwdMod" @refresh="getUserList"></pwd-mod> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import {getUser} from '@/api/user' |
| | | import {getUser,delUser} from '@/api/user' |
| | | import userMod from "@/views/Admin/components/userMod" |
| | | import pwdMod from "@/views/Admin/components/pwdMod"; |
| | | import {loginOut} from "@/api/login"; |
| | | import {Session} from "@/util/storage"; |
| | | export default { |
| | | name: 'user', |
| | | components: { |
| | |
| | | searchParams:{ |
| | | realName: '', |
| | | districtId: null, |
| | | unittype: undefined |
| | | unittype: null |
| | | } |
| | | }, |
| | | columns:[ |
| | |
| | | }, |
| | | { |
| | | title: '姓名', |
| | | dataIndex: 'name', |
| | | key: 'name' |
| | | dataIndex: 'realName', |
| | | key: 'realName' |
| | | }, |
| | | { |
| | | title: '手机号码', |
| | |
| | | }, |
| | | { |
| | | title: '用户名', |
| | | dataIndex: 'userName', |
| | | key: 'userName' |
| | | dataIndex: 'name', |
| | | key: 'name' |
| | | }, |
| | | { |
| | | title: '性别', |
| | |
| | | }, |
| | | { |
| | | title: '级别', |
| | | dataIndex: 'level', |
| | | key: 'level', |
| | | scopedSlots: { customRender: 'level' } |
| | | dataIndex: 'unittype', |
| | | // key: 'unittype', |
| | | scopedSlots: { customRender: 'unittype' } |
| | | }, |
| | | { |
| | | title: '行政区划', |
| | | dataIndex: 'area', |
| | | key: 'area', |
| | | // key: 'area', |
| | | scopedSlots: { customRender: 'area' } |
| | | }, |
| | | { |
| | |
| | | scopedSlots: { customRender: 'action' }, |
| | | }, |
| | | ], |
| | | tableData: [ |
| | | { |
| | | id: 1, |
| | | name: 'John Brown', |
| | | phone: '15261806177', |
| | | userName: 'JBrown', |
| | | sex: 0, |
| | | level: 1, |
| | | area: 111, |
| | | role: 1 |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: 'Jim Green', |
| | | phone: '15261806178', |
| | | userName: 'JGreen', |
| | | sex: 1, |
| | | level: 2, |
| | | area: 211, |
| | | role: 2 |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: 'Joe Black', |
| | | phone: '15261806176', |
| | | userName: 'JBlack', |
| | | sex: 0, |
| | | level: 3, |
| | | area: 11, |
| | | role: 1 |
| | | }, |
| | | ], |
| | | tableData: [], |
| | | pagination: { |
| | | current: 1, |
| | | defaultCurrent: 1, |
| | | defaultPageSize: 10, |
| | | total: 11, |
| | | total: 0, |
| | | onChange: ( page, pageSize ) => this.onPageChange(page,pageSize) |
| | | }, |
| | | areaData: [ |
| | |
| | | async getUserList(){ |
| | | const t = this |
| | | const res = await getUser(t.search) |
| | | if(res.data.code == 100){ |
| | | t.tableData = res.data.data |
| | | t.pagination.total = res.data.total |
| | | }else{ |
| | | t.$message.warning(res.data.msg); |
| | | } |
| | | }, |
| | | |
| | | async delData(row){ |
| | | const t = this |
| | | this.$confirm({ |
| | | title: '提示', |
| | | content: h => <div>是否删除该条用户信息?</div>, |
| | | cancelText: '取消', |
| | | okText: '确认', |
| | | centered: true, |
| | | async onOk() { |
| | | let res = await delUser(row.id) |
| | | if(res.data.code == 100){ |
| | | t.$message.success('删除用户信息成功'); |
| | | t.getUserList() |
| | | }else{ |
| | | t.$message.warning(res.data.msg); |
| | | } |
| | | }, |
| | | onCancel() { |
| | | console.log('Cancel'); |
| | | }, |
| | | }); |
| | | }, |
| | | |
| | | resetSearch(){ |
| | |
| | | searchParams:{ |
| | | realName: '', |
| | | districtId: null, |
| | | unittype: undefined |
| | | unittype: null |
| | | } |
| | | } |
| | | t.getUserList() |
| | |
| | | |
| | | editPwd(record){ |
| | | const t = this |
| | | t.$refs.pwdMod.form.id = record.id |
| | | t.$refs.pwdMod.form.uid = record.id |
| | | t.$refs.pwdMod.updateType = 2 |
| | | t.$refs.pwdMod.visible = true |
| | | }, |
| | | |
| | |
| | | @click="() => (collapsed = !collapsed)"/>
|
| | | <a-dropdown>
|
| | | <a class="ant-dropdown-link" @click="e => e.preventDefault()">
|
| | | 您好,李静 <a-icon type="down"/>
|
| | | 您好,{{userInfo.realName}} <a-icon type="down"/>
|
| | | </a>
|
| | | <a-menu slot="overlay">
|
| | | <a-menu-item>
|
| | | <a href="javascript:;">修改密码</a>
|
| | | <a href="javascript:;" @click="editPwd">修改密码</a>
|
| | | </a-menu-item>
|
| | | <a-menu-item>
|
| | | <a href="javascript:;">回到首页</a>
|
| | | <a href="javascript:;" @click="backHome">回到首页</a>
|
| | | </a-menu-item>
|
| | | <a-menu-item>
|
| | | <a @click="logout">退出登录</a>
|
| | |
| | | }">
|
| | | <!-- Content -->
|
| | | <router-view ref="tabContent"></router-view>
|
| | | <div style="height: 30px"></div>
|
| | | <div style="height: 30px;text-align: center;line-height: 30px">
|
| | | 技术支持:中国科学院
|
| | | </div>
|
| | | </a-layout-content>
|
| | | </a-layout>
|
| | |
|
| | | </a-layout>
|
| | | <pwd-mod ref="pwdMod"></pwd-mod>
|
| | | <!-- <center style="textAlign: center;margin-left: 5%;margin-top:50px;">-->
|
| | | <!-- 技术支持:中国科学院-->
|
| | | <!-- </center>-->
|
| | |
| | | <script>
|
| | | import menuSider from "@/layout/menuSider";
|
| | | import TabsHeader from '@/components/TabsHeader';
|
| | | import pwdMod from "@/views/Admin/components/pwdMod";
|
| | | import { loginOut } from "@/api/login";
|
| | | import { Session } from '@/util/storage';
|
| | | import Cookies from 'js-cookie';
|
| | | export default {
|
| | | name: "Home",
|
| | | data() {
|
| | | return {
|
| | | userInfo: {},
|
| | | collapsed: false, //返回logo图片或表述
|
| | | pageList: [],
|
| | | activePage: '',
|
| | |
| | | components: {
|
| | | menuSider,
|
| | | TabsHeader,
|
| | | pwdMod
|
| | | },
|
| | | created() {
|
| | | this.userInfo = JSON.parse(Cookies.get('userInfo'))
|
| | | const route = this.$route
|
| | | if (this.pageList.findIndex(item => item.path === route.path) === -1) {
|
| | | this.pageList.push(this.createPage(route))
|
| | |
| | | }
|
| | | },
|
| | | methods: {
|
| | | backHome(){
|
| | | this.$router.push('/home')
|
| | | },
|
| | |
|
| | | editPwd(){
|
| | | const t = this
|
| | | t.$refs.pwdMod.updateType = 1
|
| | | t.$refs.pwdMod.form.uid = t.userInfo.uid
|
| | | t.$refs.pwdMod.visible = true
|
| | | },
|
| | |
|
| | | logout(){
|
| | | this.$router.push('/')
|
| | | const t = this
|
| | | this.$confirm({
|
| | | title: '提示',
|
| | | content: h => <div>该操作将登出,是否继续?</div>,
|
| | | cancelText: '取消',
|
| | | okText: '确认',
|
| | | centered: true,
|
| | | async onOk() {
|
| | | const res = await loginOut()
|
| | | if (res.data.code === 100) {
|
| | | Session.clear(); // 清除缓存/token等
|
| | | // 使用 reload 时,不需要调用 resetRoute() 重置路由
|
| | | t.$router.push('/')
|
| | | // window.location.reload();
|
| | | } else {
|
| | | this.$message.warning(res.data.msg);
|
| | | }
|
| | | },
|
| | | onCancel() {
|
| | | console.log('Cancel');
|
| | | },
|
| | | class: 'test',
|
| | | });
|
| | | },
|
| | | changePage(key) {
|
| | | this.activePage = key
|
| | |
| | | placeholder="请输入用户" |
| | | size="large" |
| | | v-model="form.name" |
| | | autocomplete="new-password" |
| | | > |
| | | <a-icon slot="prefix" type="user" style="color:rgba(0,0,0,.25)" /> |
| | | </a-input> |
| | |
| | | placeholder="请输入密码" |
| | | size="large" |
| | | v-model="form.pwd" |
| | | autocomplete="new-password" |
| | | > |
| | | <a-icon slot="prefix" type="lock" style="color:rgba(0,0,0,.25)" /> |
| | | </a-input-password> |
| | |
| | | <!-- </a-tab-pane>--> |
| | | <!-- </a-tabs>--> |
| | | <div style="margin-bottom: 20px"> |
| | | <a-checkbox :checked="true" style="color:#fff;">自动登录</a-checkbox> |
| | | <a style="float: right">忘记密码</a> |
| | | <a-checkbox :checked="isAuto" style="color:#fff;">自动登录</a-checkbox> |
| | | <!-- <a style="float: right">忘记密码</a>--> |
| | | </div> |
| | | <a-form-item style="text-align: center"> |
| | | <a-button |
| | |
| | | style="width: 100%" |
| | | size="large" |
| | | @click="handleSubmit" |
| | | :loading="isLoading" |
| | | > |
| | | 登录 |
| | | </a-button> |
| | |
| | | |
| | | <script> |
| | | |
| | | import { Login, getMenuAdmin } from "@/api/login"; |
| | | import { login, getMenuAdmin } from "@/api/login"; |
| | | import Cookies from 'js-cookie'; |
| | | export default { |
| | | name: "login", |
| | | data() { |
| | | return { |
| | | isLoading: false, |
| | | isAuto: false, |
| | | // hasErrors, |
| | | // form: this.$form.createForm(this), |
| | | form: { |
| | |
| | | menu: [] |
| | | }; |
| | | }, |
| | | mounted() { |
| | | created() { |
| | | // this.$nextTick(() => { |
| | | // this.form.validateFields(); |
| | | // }); |
| | |
| | | handleSubmit() { |
| | | this.$refs.ruleForm.validate(async (valid) => { |
| | | if (valid) { |
| | | const res = await Login(this.form) |
| | | this.isLoading = true |
| | | const res = await login(this.form) |
| | | if (res.data.code === 100) { |
| | | Cookies.set('resTk', res.data.data.tk); |
| | | Cookies.set('resUid', res.data.data.uid); |
| | | Cookies.set('userInfo',JSON.stringify(res.data.data),{expires: 7}) |
| | | this.$router.push('/home') |
| | | } else { |
| | | console.log(res.data.msg) |
| | | this.$message.warning(res.data.msg); |
| | | } |
| | | this.isLoading = false |
| | | } else { |
| | | console.log('error submit!!'); |
| | | return false; |
| | |
| | | } |
| | | .hedaer { |
| | | margin: 0px auto; |
| | | padding-top:100px; |
| | | padding-top:200px; |
| | | width: 1000px; |
| | | text-align: center; |
| | | text-shadow:0 0 1px #000; |