Commit 26cfc50d authored by 胡占生's avatar 胡占生 🇨🇳

fix: 项目初始化

parent f7468fc3
[*.{js,jsx,ts,tsx,vue}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true
module.exports = {
root: true,
env: {
node: true
},
'extends': [
'plugin:vue/essential'
],
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
},
parserOptions: {
parser: 'babel-eslint'
}
}
*.js linguist-language=vue
*.css linguist-language=vue
*.html linguist-language=vue
\ No newline at end of file
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
module.exports = {
plugins: {
'autoprefixer': {
overrideBrowserslist: [
"Android 4.1",
"iOS 7.1",
"Chrome > 31",
"ff > 31",
"ie >= 8"
//'last 10 versions', // 所有主流浏览器最近10版本用
],
grid: true
},
'postcss-pxtorem': {
rootValue: 37.5, //vant-UI的官方根字体大小是37.5
propList: ['*']
}
}
}
This diff is collapsed.
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
],
plugins: [
['import', {
libraryName: 'vant',
libraryDirectory: 'es',
style: true
}, 'vant']
]
}
var server = require('pushstate-server');
server.start({
port: 5000,
directory: './dist'
});
This diff is collapsed.
{
"name": "vue-newbee-shop",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"axios": "^0.19.2",
"better-scroll": "^1.15.2",
"core-js": "^3.4.3",
"file-saver": "^2.0.5",
"image-tools": "^1.4.0",
"js-base64": "^3.7.2",
"js-cookie": "^2.2.1",
"js-md5": "^0.7.3",
"lib-flexible": "^0.3.2",
"lodash": "^4.17.21",
"lodash.debounce": "^4.0.8",
"postcss-px2rem": "^0.3.0",
"pushstate-server": "^3.1.0",
"s": "^1.0.0",
"uuid": "^8.3.2",
"vant": "^2.12.30",
"vue": "^2.6.10",
"vue-amap": "^0.5.10",
"vue-awesome-mui": "^1.7.3",
"vue-esign": "^1.0.5",
"vue-html5plus": "^1.0.0",
"vue-router": "^3.0.7",
"vue2-verify": "^1.1.5",
"vuex": "^3.1.2"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.1.0",
"@vue/cli-plugin-eslint": "^4.1.0",
"@vue/cli-plugin-router": "^4.1.0",
"@vue/cli-plugin-vuex": "^4.1.0",
"@vue/cli-service": "^4.1.0",
"@vue/eslint-config-standard": "^4.0.0",
"babel-eslint": "^10.0.3",
"babel-plugin-import": "^1.13.0",
"eslint": "^5.16.0",
"eslint-plugin-vue": "^5.0.0",
"less": "^3.0.4",
"less-loader": "^5.0.0",
"postcss-pxtorem": "^4.0.1",
"vue-template-compiler": "^2.6.10"
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>第三官网分公司App</title>
<link rel="stylesheet" href="//at.alicdn.com/t/font_1623819_3g3arzgtlmk.css">
</head>
<body>
<noscript>
<strong>We're sorry but vue-newbee-shop doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
<template>
<div id="app">
<transition>
<keep-alive :include="cachePage">
<router-view class="router-view" />
</keep-alive>
</transition>
</div>
</template>
<script>
export default {
data() {
return {
cachePage: [],
};
},
};
</script>
<style lang="less">
body{
background-color: #f0f1f5;
}
#app {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #2c3e50;
}
.router-view {
width: 100%;
height: auto;
position: absolute;
top: 0;
bottom: 0;
margin: 0 auto;
-webkit-overflow-scrolling: touch;
}
input{
border: none;
outline: none;
-webkit-appearance: none;
-webkit-appearance: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
</style>
export default {
//转换日期格式
//time : 要转换的时间
//type : DT1 转换为 2019-01-01 8:12:42格式
//type : DT2 转换为 2019-01-01格式
//type : DT3 转换为 2019/01/01 8:12:42格式
//type : DT4 转换为 2019/01/01格式
//type : DT5 转换为 时间戳格式
//type : DT6 转换为 2019年01月01日 8时12分42秒
//type : DT7 转换为 2019年01月01日
//zero : 时分秒是否补零(2000-01-01 08:02:06)
//num : 要加的天数,正数为加,负数为减,不加不减就不用传
timestampToTime (time,type,zero,num) {
if(!time){return ''}
try{
var date = new Date(time)
if(num&&typeof parseInt(num)=="number"){
date = new Date(new Date(time).getTime()+num*60*60*24*1000)//时间戳以毫秒为单位,也可用其他日期格式
}
let yy = date.getFullYear();//年
let mm = date.getMonth()+1;//月
let dd = date.getDate();//日
let hh = date.getHours();//小时
let mf = date.getMinutes()<10 ? '0'+date.getMinutes() : date.getMinutes();//分钟
let ss = date.getSeconds()<10 ? '0'+date.getSeconds() : date.getSeconds();//秒
if(zero){
if(mm<10){mm='0'+mm}
if(dd<10){dd='0'+dd}
if(hh<10){hh='0'+hh}
}
if(type=="DT1"){
return yy+'-'+mm+'-'+dd+' '+hh+':'+mf+':'+ss;//yyyy-mm-dd hh:mf:ss
}else if(type=="DT2"){
return yy+'-'+mm+'-'+dd;//yyyy-mm-dd
}else if(type=="DT3"){
return yy+'/'+mm+'/'+dd+' '+hh+':'+mf+':'+ss;//yyyy/mm/dd hh:mf:ss
}else if(type=="DT4"){
return yy+'-'+mm+'-'+dd;//yyyy/mm/dd
}else if(type=="DT5"){
return date.getTime();//时间戳 秒数
}else if(type=="DT6"){
return yy+''+mm+''+dd+''+hh+''+mf+''+ss+'';//yyyy年mm月dd日 hh时mf分ss秒
}else if(type=="DT7"){
return yy+''+mm+''+dd+'';//yyyy年mm月dd日
}
}catch(e){
console.log("timestampToTime Error");return ""
}
},
}
\ No newline at end of file
<template>
<div class="tarbar">
<!-- 占位导航栏div,防止导航栏挡住内容 -->
<van-tabbar v-model="active" @change="onChange">
<van-tabbar-item
v-for="(item,index) in tabBarList"
:key="index"
:icon="active==item.name?item.imgUrlActive: item.imgUrl"
>{{ item.text }}</van-tabbar-item
>
</van-tabbar>
</div>
</template>
<script>
export default {
props:{
index: {
type: Number,
default: 0
},
},
data() {
return {
active: "0",
tabBarList: [
{
key: "1",
name:'0',
imgUrl: require("@/assets/tabBar/new.png"),
imgUrlActive: require("@/assets/tabBar/new-active.png"),
path: "/message-center",
text: "任务列表"
},
{
key: "2",
name:'1',
imgUrl: require("@/assets/tabBar/workbench.png"),
imgUrlActive: require("@/assets/tabBar/workbench-active.png"),
path: "/save-workbench",
text: "我的任务"
},
{
key: "3",
name:'2',
imgUrl: require("@/assets/tabBar/my.png"),
imgUrlActive: require("@/assets/tabBar/my-active.png"),
path: "/my",
text: "我的资料"
}
]
};
},
mounted() {
this.active = this.index
},
methods: {
onChange(index) {
this.active = index;
if(this.active==index){
this.tabBarList.forEach((item)=>{
if(item.name==this.active){
this.$router.replace(item.path)
}
})
}else{
}
}
}
};
</script>
<style scoped>
/* @import url(); 引入css类 */
.tarbar{
padding-top:50px;
}
</style>
<!--
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2020 陈尼克 all rights reserved.
* 版权所有,侵权必究!
*
-->
<template>
<div>
<van-sticky>
<header class="header">
<van-icon @click="to" name="arrow-left" class="iconColorLeft"/>
<span>{{text}}</span>
<!-- <van-icon name="bars" class="iconColorRight"/> -->
</header>
</van-sticky>
</div>
</template>
<script>
export default {
props:{
text:{
default:"未知",
type:String
}
},
data() {
return {
}
},
mounted() {
},
methods: {
/* 左侧图标跳转方法 */
to(){
history.go(-1)
}
}
}
</script>
<style lang="less" scoped>
.header{
width:100%;
height:1.5rem;
background:#2980F7;
text-align: center;
line-height: 1.5rem;
}
.iconColorLeft{
color: white;
transform: scale(2);
float: left;
position: relative;
top: 40%;
left: 5%;
}
.header span{
color: white;
font-size: 16px;
margin: auto;
font-family: 'Microsoft YaHei';
}
.header .iconColorRight{
color: white;
float: right;
position: relative;
top: 40%;
right: 5%;
transform: scale(2);
}
</style>
import Vue from 'vue'
import md5 from 'js-md5';
import App from './App.vue'
import router from './router'
import store from './store'
import qs from 'qs';
import './permission'
import Cookies from 'js-cookie'
import util from './api/util.js'
import { Divider, Popup, Overlay, Loading, Dialog, ContactCard, Form, AddressEdit, AddressList, Field, CellGroup, Cell, SwipeCell, Icon, Stepper, Card, Checkbox, CheckboxGroup, Button, Swipe, SwipeItem, PullRefresh, List, Tab, Tabs, GoodsAction, GoodsActionIcon, GoodsActionButton, SubmitBar, Toast ,Search,Picker,Uploader,Notify ,ContactList,Calendar,Radio,RadioGroup,Tag,Tabbar,TabbarItem,Sticky, Grid, GridItem,Skeleton,Col,Row, Image as VanImage, Badge,NoticeBar,DatetimePicker,
Step, Steps } from 'vant'
import 'lib-flexible/flexible'
import vueEsign from 'vue-esign'
Vue.use(vueEsign)
Vue.prototype.util = util
Vue.use(Divider).use(Popup).use(Overlay).use(Loading).use(Dialog).use(Toast).use(ContactCard).use(Form).use(AddressEdit).use(AddressList).use(Field).use(CellGroup).use(Cell).use(SwipeCell).use(Icon).use(Stepper).use(Card).use(Button).use(Swipe).use(SwipeItem).use(PullRefresh).use(List).use(Tab).use(Tabs).use(GoodsAction).use(GoodsActionIcon).use(GoodsActionButton).use(SubmitBar).use(Checkbox).use(CheckboxGroup).use(Search).use(Picker).use(Uploader).use(Notify)
.use(ContactList).use(Calendar).use(Radio).use(RadioGroup).use(Tag).use(Tabbar).use(TabbarItem).use(Sticky)
.use(Grid).use(GridItem).use(Skeleton).use(Col).use(Row).use(VanImage).use(Badge).use(NoticeBar).use(DatetimePicker).use(Step).use(Steps)
// 引用高德地图组件 main.js
import VueAMap from 'vue-amap'
Vue.use(VueAMap)
// 初始化
VueAMap.initAMapApiLoader({
key: '9b16720c3ea21877cfbe73229bba9032',
plugin: [ // 依赖配置,根据自己的需求引入
'AMap.PlaceSearch',//POI搜索插件
'AMap.Scale',
'AMap.Geocoder',
"AMap.Autocomplete", //输入提示插件
"AMap.OverView", //地图鹰眼插件
"AMap.ToolBar", //地图工具条
"AMap.MapType", //类别切换控件,实现默认图层与卫星图、实施交通图层之间切换的控制
"AMap.PolyEditor", //编辑 折线多边形
"AMap.CircleEditor", //圆形编辑器插件
"AMap.Geolocation", //定位控件,用来获取和展示用户主机所在的经纬度位置
"AMap.MouseTool",
"AMap.Map",
"mouseTool.polygon",
"AMap.Polygon",
"AMap.ControlBar",
"AMap.DistrictSearch",
"AMap.Heatmap", // 绘制热力图插件
],
// 默认高德 sdk 版本为 1.4.4
v: '1.4.4'
})
// 引入此插件 可解决HBuilderX打包,返回键直接退出
import Mui from 'vue-awesome-mui';
Vue.config.productionTip = false
Vue.use(Mui)
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
Vue.prototype.$md5 = md5;
Vue.prototype.qs = qs;
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
}
import router from './router'
//设置白名单,指不需要登录就可以直接进入的页面
var whiteList = ["/login"]
import { getToken } from '@/utils/auth' // get token from cookie
import { getUserInfo} from '@/utils/userInfo'
//这里使用cookie.js,登录成功后将后台返回的token保存在cookie中
// Cookies.set('admin_token','token_value');
router.beforeEach(async(to, from, next) => {
//to: 即将要进入的目标 [路由对象]
//from:当前导航正要离开的路由
//next:一定要调用该方法来 resolve 这个钩子
const hasToken = getToken()//确定用户是否已登录
const hasUserInfo = getUserInfo()// 确认session 是否有用户信息
if (hasToken && hasUserInfo) {
if (to.path === '/login') {
next({ path: '/save-workbench' })
} else {
next()
}
}else {
if (whiteList.indexOf(to.path) !== -1) {
next()//这里是即将进入的页面是白名单的页面就直接进入
} else {
next({ path: '/login' })//这里是即将进入的页面不是白名单的页面又没有token的情况下重定向到登录页面进行登录操作
}
}
})
\ No newline at end of file
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const routes = [{
path: '/',
redirect: '/login'
},
// 登录页
{
path: '/login',
name: 'login',
component: () => import('../views/login.vue'),
},
// 我的地盘页面
{
path: '/my',
name: 'my',
component: () => import('../views/my'),
},
{
path: '/my-role',
name: 'my-role',
meta: {
title: '我的权限'
},
component: () => import('@/views/my/role')
},
{
path: '/my-reset-pas',
name: 'my-reset-pas',
meta: {
title: '修改密码'
},
component: () => import('@/views/my/resetPas')
},
// 安全工作台页面
{
path: '/save-workbench',
name: 'save-workbench',
component: () => import('../views/saveWorkbench'),
},
// 创建任务页面
{
path: '/create-task',
name: 'create-task',
component: () => import('../views/createTask'),
},
// 选择任务类型
{
path: '/task-type',
name: 'task-type',
component: () => import('../views/createTask/taskSubPage/taskType.vue'),
},
// 选择作业任务
{
path: '/work-task',
name: 'work-task',
component: () => import('../views/createTask/taskSubPage/workTask'),
},
// 选择作业综合班
{
path: '/work-class',
name: 'work-class',
component: () => import('../views/createTask/taskSubPage/workClass'),
},
// 选择作业综合组
{
path: '/work-group',
name: 'work-group',
component: () => import('../views/createTask/taskSubPage/workGroup'),
},
// 选择作业负责人
{
path: '/work-leader',
name: 'work-leader',
component: () => import('../views/createTask/taskSubPage/workLeader'),
},
// 选择作业其他人员
{
path: '/work-other-per',
name: 'work-other-per',
component: () => import('../views/createTask/taskSubPage/workOtherPer'),
},
// 选择微流域
{
path: '/micro-watersh',
name: 'micro-watersh',
component: () => import('../views/createTask/taskSubPage/microWatersh'),
},
// 选择管段
{
path: '/pipe-section',
name: 'pipe-section',
component: () => import('../views/createTask/taskSubPage/pipeSection'),
},
// 选择车牌号
{
path: '/license-plate',
name: 'license-plate',
component: () => import('../views/createTask/taskSubPage/licensePlate'),
},
// 选择手杆爬行器
{
path: '/work-device',
name: 'work-device',
component: () => import('../views/createTask/taskSubPage/workDevice'),
}
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
export default router
import request from '@/utils/axios'
/*get请求*/
export function getFun(url,params) {
return request({
url: +url,
method: 'get',
params
})
}
/* post请求 */
export function postFun(url,data) {
return request({
url: url,
method: 'post',
data
})
}
/*文件下载get请求*/
export function fileDownFun(url,params) {
return request({
url:url,
method: 'GET',
params,
responseType: 'blob'/*下载文件必填项*/
})
}
/*文件下载post请求*/
export function fileDownFuns(url,data) {
return request({
url: url,
method: 'POST',
data,
responseType: 'blob'/*下载文件必填项*/
})
}
\ No newline at end of file
export default {
//保存数据
saveUploadImg({ commit }, imgArr) {
commit('SAVE_UPLOAD_IMG',imgArr)
},
//清除数据
clearUploadkImg({ commit }) {
commit("CLEAR_UPLOAD_IMG");
},
}
import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import actions from './actions'
import mutations from './mutations'
Vue.use(Vuex)
export default new Vuex.Store({
state,
mutations,
actions,
modules: {}
})
export default {
//保存数据
SAVE_UPLOAD_IMG(state, imgArr) {
state.uploadImgArr = imgArr
},
//清除数据
CLEAR_UPLOAD_IMG(state){
state.uploadImgArr = []
}
}
export default {
uploadImgArr: []
}
import Cookies from 'js-cookie'
const TokenKey = 'Admin-Token'
export function getToken() {
return Cookies.get(TokenKey)
}
export function setToken(token) {
return Cookies.set(TokenKey, token)
}
export function removeToken() {
return Cookies.remove(TokenKey)
}
import axios from 'axios'
import router from '../router'
import { Toast } from 'vant';
import { Notify } from 'vant';
import { Dialog } from 'vant';
import { getToken ,removeToken} from '@/utils/auth' // get token from cookie
const service = axios.create({
// baseURL: '/aqpt/app-api', //前缀路径
baseURL: '/dev-api', //前缀路径
headers: {//请求头部
// "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"content-type": "application/json",
"data-type": "json"
}
})
//拦截接口请求
service.interceptors.request.use(config => {
if (getToken()) {
config.headers['token'] = getToken()
}
return config
},error => {
return Promise.reject(error)
})
service.interceptors.response.use(response => {
Toast.clear(); // 关闭之前的弹出信息
const code = response.status//获取请求响应码
const res = response.data//获取请求返回数据
if(code == 200) {//请求响应码200 代表已经请求到接口
if (res.code !== 0 && res.code !== 200 && res.code !== 402 && res.code !== 403&&res.code !== undefined) {
if(res.code === 500 && res.msg == "运行时异常:token已过期,请重新登录"){
Dialog.alert({
title: '提示',
message: res.msg,
theme: 'round-button',
}).then(() => {
removeToken()
location.reload()
});
} else if(res.code === 401 && res.errorMessage == "图片类型错误"){
Dialog.alert({
title: '提示',
message: res.errorMessage,
theme: 'round-button',
}).then(() => {
router.go(-1);
});
} else{
Toast.fail({
title: '提示',
forbidClick: true,
message: res.msg ||'数据异常请稍后再试',
})
}
return Promise.reject(res);
} else {
return res;
}
}else{
Toast.fail({
title: '提示',
forbidClick: true,
message: '接口请求失败',
})
}
},err=>{
Toast.fail('接口请求失败');
return Promise.reject(err)
})
export default service
\ No newline at end of file
/**
* 函数防抖
*/
export function debounce(fn, delay) {
// 记录上一次的延时器
var timer = null;
var delay = delay || 200;
return function() {
var args = arguments;
var that = this;
// 清除上一次延时器
clearTimeout(timer)
timer = setTimeout(function() {
fn.apply(that,args)
}, delay);
}
}
// 图片旋转处理 -> base64
export const rotateBase64Img = (src, edg, callback) => {
try {
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
let imgW = 0 // 图片宽度
let imgH = 0 // 图片高度
let size = 0 // canvas初始大小
if (edg % 90 !== 0) {
throw new Error('旋转角度必须是90的倍数!')
}
(edg < 0) && (edg = (edg % 360) + 360)
const quadrant = (edg / 90) % 4 // 旋转象限
const cutCoor = { sx: 0, sy: 0, ex: 0, ey: 0 } // 裁剪坐标
const image = new Image()
image.src = src
image.crossOrigin = 'anonymous'
image.onload = function () {
imgW = image.width
imgH = image.height
size = imgW > imgH ? imgW : imgH
canvas.width = size * 2
canvas.height = size * 2
switch (quadrant) {
case 0:
cutCoor.sx = size
cutCoor.sy = size
cutCoor.ex = size + imgW
cutCoor.ey = size + imgH
break
case 1:
cutCoor.sx = size - imgH
cutCoor.sy = size
cutCoor.ex = size
cutCoor.ey = size + imgW
break
case 2:
cutCoor.sx = size - imgW
cutCoor.sy = size - imgH
cutCoor.ex = size
cutCoor.ey = size
break
case 3:
cutCoor.sx = size
cutCoor.sy = size - imgW
cutCoor.ex = size + imgH
cutCoor.ey = size + imgW
break
}
ctx.translate(size, size)
ctx.rotate(edg * Math.PI / 180)
ctx.drawImage(image, 0, 0)
const imgData = ctx.getImageData(cutCoor.sx, cutCoor.sy, cutCoor.ex, cutCoor.ey)
if (quadrant % 2 === 0) {
canvas.width = imgW
canvas.height = imgH
} else {
canvas.width = imgH
canvas.height = imgW
}
ctx.putImageData(imgData, 0, 0)
if (typeof callback === 'function') {
callback(canvas.toDataURL('image/png', 0.7))
}
}
} catch (e) {
console.log(e)
}
}
\ No newline at end of file
export function timestampToTime (time,type,zero,num) {
if(!time){return ''}
try{
var date = new Date(time)
if(num&&typeof parseInt(num)=="number"){
date = new Date(new Date(time).getTime()+num*60*60*24*1000)//时间戳以毫秒为单位,也可用其他日期格式
}
let yy = date.getFullYear();//年
let mm = date.getMonth()+1;//月
let dd = date.getDate();//日
let hh = date.getHours();//小时
let mf = date.getMinutes()<10 ? '0'+date.getMinutes() : date.getMinutes();//分钟
let ss = date.getSeconds()<10 ? '0'+date.getSeconds() : date.getSeconds();//秒
if(zero){
if(mm<10){mm='0'+mm}
if(dd<10){dd='0'+dd}
if(hh<10){hh='0'+hh}
}
if(type=="DT1"){
return yy+'-'+mm+'-'+dd+' '+hh+':'+mf+':'+ss;//yyyy-mm-dd hh:mf:ss
}else if(type=="DT2"){
return yy+'-'+mm+'-'+dd;//yyyy-mm-dd
}else if(type=="DT3"){
return yy+'/'+mm+'/'+dd+' '+hh+':'+mf+':'+ss;//yyyy/mm/dd hh:mf:ss
}else if(type=="DT4"){
return yy+'-'+mm+'-'+dd;//yyyy/mm/dd
}else if(type=="DT5"){
return date.getTime();//时间戳 秒数
}else if(type=="DT6"){
return yy+''+mm+''+dd+''+hh+''+mf+''+ss+'';//yyyy年mm月dd日 hh时mf分ss秒
}else if(type=="DT7"){
return yy+''+mm+''+dd+'';//yyyy年mm月dd日
}else if(type=="DT8"){
return yy+'-'+mm+'-'+dd+' '+hh+':'+mf;//yyyy-mm-dd hh:mf
}
}catch(e){
console.log("timestampToTime Error");return ""
}
}
export function generateId (prefix) {
var year = new Date().getFullYear();
var month = new Date().getMonth()+1;
var date = new Date().getDate();
var hours = new Date().getHours();
var minutes = new Date().getMinutes();
var seconds = new Date().getSeconds();
if (month < 10) month = "0" + month;
if (date < 10) date = "0" + date;
if (hours < 10) hours = "0" + hours;
if (minutes < 10) minutes = "0" + minutes;
if (seconds < 10) seconds = "0" + seconds;
let uuid = year + "-" + month + "-" + date + "-" +hours+minutes+seconds;
return prefix + "-" + uuid
}
const UserInfo = 'userInfo'
const LocalUserInfo = 'LocalUserInfo'
export function getUserInfo() {
return JSON.parse(sessionStorage.getItem(UserInfo))
}
export function setUserInfo(userInfo) {
return sessionStorage.setItem(UserInfo,JSON.stringify(userInfo))
}
export function removeUserInfo() {
return sessionStorage.removeItem(UserInfo)
}
export function getLocalUserInfo() {
return JSON.parse(localStorage.getItem(LocalUserInfo))
}
export function setLocalUserInfo(userInfo) {
return localStorage.setItem(LocalUserInfo,JSON.stringify(userInfo))
}
export function removeLocalUserInfo() {
return localStorage.removeItem(LocalUserInfo)
}
\ No newline at end of file
<template>
<div>
<!-- 头部标签 -->
<LHeader v-bind:text="text"></LHeader>
<van-form
@submit="onSubmit"
:show-error="false"
validate-trigger="onSubmit"
:scroll-to-error="true"
>
<van-field
required
v-model="fromObj.taskId"
name="任务编号"
label="任务编号"
placeholder="请输入与平台相关的任务编号"
:rules="[{ required: true, message: '任务编号不能为空' }]"
/>
<van-field
required
readonly
v-model="fromObj.taskType"
name="任务类型"
label="任务类型"
@click="goSelectTaskType"
placeholder="请选择任务类型"
:rules="[{ required: true, message: '请选择任务类型' }]"
/>
<van-field
required
readonly
v-model="fromObj.workType"
name="作业任务"
label="作业任务"
@click="goSelectWorkType"
placeholder="请选择作业任务"
:rules="[{ required: true, message: '请选择作业任务' }]"
/>
<van-field
required
readonly
clickable
name="hdDiscoveryTime"
:value="fromObj.PlanTime"
label="作业计划开始时间"
placeholder="点击选择作业计划开始时间"
@click="
showPlanTime = true;
currentDate = new Date();
"
:rules="[{ required: true, message: '作业计划开始时间不能为空' }]"
/>
<van-popup v-model="showPlanTime" position="bottom">
<van-datetime-picker
type="datetime"
@confirm="onConPlanTime"
@cancel="showPlanTime = false"
v-model="currentDate"
/>
</van-popup>
<van-field
required
readonly
v-model="fromObj.workSynthesisClass"
name="作业综合班"
label="作业综合班"
@click="goSelectWorkSynthesisClass"
placeholder="请选择作业综合班"
:rules="[{ required: true, message: '作业综合班不能为空' }]"
/>
<van-field
required
readonly
v-model="fromObj.workSynthesisGroup"
name="作业综合组"
label="作业综合组"
@click="goSelectWorkSynthesisGroup"
placeholder="请选择作业综合组"
:rules="[{ required: true, message: '作业综合组不能为空' }]"
/>
<van-field
required
readonly
v-model="fromObj.workPerson"
name="作业负责人"
label="作业负责人"
@click="goSelectWorkPerson"
placeholder="请选择作业负责人"
:rules="[{ required: true, message: '请选择作业负责人' }]"
/>
<van-field
required
readonly
v-model="fromObj.workOther"
name="作业组其他人员"
label="作业组其他人员"
@click="goSelectWorkOther"
placeholder="请选择作业组其他人员"
:rules="[{ required: true, message: '请选择作业组其他人员不能为空' }]"
/>
<van-field
required
readonly
v-model="fromObj.area"
name="微流域"
label="微流域"
@click="goSelectArea"
placeholder="请选择微流域"
:rules="[{ required: true, message: '微流域不能为空' }]"
/>
<van-field
required
readonly
v-model="fromObj.pipeline"
name="管段"
label="管段"
@click="goSelectPipeline"
placeholder="请选择管段"
:rules="[{ required: true, message: '管段不能为空' }]"
/>
<van-field
required
v-model="fromObj.workPlace"
name="作业地点"
label="作业地点"
placeholder="请输入作业地点"
:rules="[{ required: true, message: '作业地点不能为空' }]"
/>
<van-field
required
readonly
v-model="fromObj.carNumber"
name="车牌号"
label="车牌号"
@click="goSelectCarNumber"
placeholder="请选择车牌号"
:rules="[{ required: true, message: '车牌号不能为空' }]"
/>
<van-field
required
readonly
v-model="fromObj.hand"
name="手杆/爬行器设备编号"
label="手杆/爬行器设备编号"
@click="goSelectHand"
placeholder="请选择手杆/爬行器设备编号"
:rules="[{ required: true, message: '手杆/爬行器设备编号不能为空' }]"
/>
<van-field name="radio" label="是否开展有限空间作业">
<template #input>
<van-radio-group v-model="fromObj.radio1" direction="horizontal">
<van-radio name="1"></van-radio>
<van-radio name="2"></van-radio>
</van-radio-group>
</template>
</van-field>
<van-field name="radio2" label="是否跨班作业">
<template #input>
<van-radio-group v-model="fromObj.radio2" direction="horizontal">
<van-radio name="1"></van-radio>
<van-radio name="2"></van-radio>
</van-radio-group>
</template>
</van-field>
<div style="margin: 16px">
<van-button round block type="info" native-type="submit"
>提交</van-button
>
</div>
</van-form>
<div style="margin: 10px 16px 0px; padding-bottom: 16px">
<van-button round block plain type="info" @click.native="cancel"
>取消</van-button
>
</div>
<!-- tanBar -->
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
import { getFun, postFun } from "@/service/table";
export default {
components: {
LHeader: LHeader,
},
data() {
return {
text: "新建任务",
showPlanTime: false, //作业计划开始时间
currentDate: "", //默认日期
fromObj: {
taskId: "",
taskType: "",
workType: "",
PlanTime: "",
workSynthesisClass: "",
workSynthesisGroup: "",
workPerson: "",
workOther: "",
area: "",
pipeline: "",
workPlace: "",
carNumber: "",
hand: "",
radio1: "1",
radio2: "2",
},
};
},
created() {},
methods: {
onSubmit() {},
cancel() {},
onConPlanTime(date) {
this.PlanTime = this.util.timestampToTime(date, "DT1", true);
this.showPlanTime = false;
},
//任务类型跳转
goSelectTaskType() {
this.$router.push("/task-type");
},
//作业类型跳转
goSelectWorkType() {
this.$router.push("/work-task");
},
//作业综合班跳转
goSelectWorkSynthesisClass() {
this.$router.push("/work-class");
},
//作业综合组跳转
goSelectWorkSynthesisGroup() {
this.$router.push("/work-group");
},
//作业负责人跳转
goSelectWorkPerson() {
this.$router.push("/work-leader");
},
//作业组其他人员跳转
goSelectWorkOther() {
this.$router.push("/work-other-per");
},
//微流域跳转
goSelectArea() {
this.$router.push("/micro-watersh");
},
//管段跳转
goSelectPipeline() {
this.$router.push("/pipe-section");
},
//车牌号跳转
goSelectCarNumber() {
this.$router.push("/license-plate");
},
//手杆/爬行器跳转
goSelectHand() {
this.$router.push("/work-device");
},
},
};
</script>
<style lang="less" scoped>
</style>
<template>
<div>
<LHeader :text="text"></LHeader>
<div class="content-wrap">
<div class="search-wrap">
<van-search v-model="searchVal" placeholder="搜索" @search="onSearch" />
</div>
<!-- 种类 -->
<div class="type-wrap">
<van-cell-group>
<van-checkbox-group
v-model="result"
ref="checkboxGroup"
@change="checked"
>
<van-cell v-for="item in typeList" clickable :key="item.id">
<van-checkbox :name="item.name" shape="square">
<span>{{ item.name }}</span>
</van-checkbox>
</van-cell>
</van-checkbox-group>
</van-cell-group>
</div>
</div>
<!-- 底部信息 -->
<footer class="footer">
<van-cell-group>
<div class="allSelect">
<van-checkbox v-model="allChecked" shape="square" @click="checkAll"
>全选</van-checkbox
>
</div>
<div class="operate">
<van-button
size="small"
type="info"
plain
native-type="button"
style="border-radius: 5px; background-color: #ffffff"
@click.native="cancel"
>取消</van-button
>
<van-button
size="small"
type="info"
native-type="button"
style="margin: 0 10px 0 20px; border-radius: 5px"
@click.native="confirm"
>确定</van-button
>
</div>
</van-cell-group>
</footer>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
export default {
name: "license-plate",
components: {
LHeader,
},
data() {
return {
text: "选择管段",
searchVal: "",
result: [],
allChecked: false, // 全选状态
typeList: [
{
name: "京A123456: 吸泥车",
id: "1",
},
{
name: "京A123456: 水车",
id: "2",
},
{
name: "京A123456: 皮卡",
id: "3",
},
{
name: "京A123456: 新能源车",
id: "4",
},
{
name: "京A123456: 汽车",
id: "5",
},
],
};
},
mounted() {},
methods: {
onSearch() {},
checked() {
if (this.result.length == this.typeList.length) {
this.allChecked = true;
} else {
this.allChecked = false;
}
},
checkAll() {
this.$refs.checkboxGroup.toggleAll(this.allChecked);
},
confirm() {
console.log(this.result);
history.go(-1);
},
cancel() {
this.$router.go(-1);
},
},
};
</script>
<style lang="less" scoped>
/* @import url(); 引入css类 */
.content-wrap {
padding-bottom: 1.6rem;
background-color: #f0f1f5;
}
// 搜索
.search-wrap {
margin: 0.26667rem;
.van-search {
border-radius: 5px;
padding: 5px 12px;
}
.van-search__content {
background-color: #ffffff;
}
}
.type-wrap {
/deep/ .van-cell__value--alone {
margin: 0.08rem 0;
}
}
.footer {
width: 100%;
height: 1.5rem;
z-index: 9;
position: fixed;
bottom: 0px;
.van-cell-group {
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.allSelect {
margin-left: 0.533333rem;
.van-checkbox {
display: flex;
align-items: flex-end;
}
}
.operate {
height: 1.333333rem;
display: flex;
justify-content: flex-end;
align-items: center;
.van-button {
width: 1.6rem;
}
}
}
}
</style>
<template>
<div>
<LHeader :text="text"></LHeader>
<div class="content-wrap">
<div class="search-wrap">
<van-search v-model="searchVal" placeholder="搜索" @input="onSearch" />
</div>
<!-- 种类 -->
<div class="type-wrap">
<van-cell-group>
<van-radio-group v-model="radio">
<van-cell v-for="item in typeList" clickable :key="item.no">
<van-radio :name="item.name">{{ item.name }}</van-radio>
</van-cell>
</van-radio-group>
</van-cell-group>
</div>
</div>
<!-- 底部信息 -->
<footer class="footer">
<van-cell-group>
<div class="operate">
<van-button
size="small"
type="info"
plain
native-type="button"
style="border-radius: 5px; background-color: #ffffff"
@click.native="cancel"
>取消</van-button
>
<van-button
size="small"
type="info"
native-type="button"
style="margin: 0 10px 0 20px; border-radius: 5px"
@click.native="confirm"
>确定</van-button
>
</div>
</van-cell-group>
</footer>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
export default {
name: "micro-watersh",
components: {
LHeader,
},
data() {
return {
text: "选择微流域",
searchVal: "",
radio: "",
typeList: [
{
no: "1",
name: "安宁庄路",
},
{
no: "2",
name: "国际创业园",
},
{
no: "3",
name: "西二旗",
},
{
no: "4",
name: "北京体育大学",
},
{
no: "5",
name: "建清园",
},
{
no: "6",
name: "林业大学",
},
{
no: "7",
name: "小关",
}
],
};
},
mounted() {},
methods: {
onSearch() {},
confirm() {
console.log(this.radio);
history.go(-1);
},
cancel() {
this.$router.go(-1);
},
},
};
</script>
<style lang="less" scoped>
/* @import url(); 引入css类 */
.content-wrap {
padding-bottom: 1.6rem;
background-color: #f0f1f5;
}
// 搜索
.search-wrap {
margin: 0.26667rem;
.van-search {
border-radius: 5px;
padding: 5px 12px;
}
.van-search__content {
background-color: #ffffff;
}
}
.type-wrap {
/deep/ .van-cell__value--alone {
margin: 0.08rem 0;
}
}
.footer {
width: 100%;
height: 1.5rem;
z-index: 9;
position: fixed;
bottom: 0px;
.van-cell-group {
height: 100%;
display: flex;
align-items: center;
justify-content: flex-end;
.operate {
height: 1.333333rem;
display: flex;
justify-content: flex-end;
align-items: center;
.van-button {
width: 1.6rem;
}
}
}
}
</style>
<template>
<div>
<LHeader :text="text"></LHeader>
<div class="content-wrap">
<div class="search-wrap">
<van-search v-model="searchVal" placeholder="搜索" @search="onSearch" />
</div>
<!-- 种类 -->
<div class="type-wrap">
<van-cell-group>
<van-checkbox-group
v-model="result"
ref="checkboxGroup"
@change="checked"
>
<van-cell v-for="item in typeList" clickable :key="item.id">
<van-checkbox :name="item.name" shape="square">
<span>{{ item.name }}</span>
</van-checkbox>
</van-cell>
</van-checkbox-group>
</van-cell-group>
</div>
</div>
<!-- 底部信息 -->
<footer class="footer">
<van-cell-group>
<div class="allSelect">
<van-checkbox v-model="allChecked" shape="square" @click="checkAll"
>全选</van-checkbox
>
</div>
<div class="operate">
<van-button
size="small"
type="info"
plain
native-type="button"
style="border-radius: 5px; background-color: #ffffff"
@click.native="cancel"
>取消</van-button
>
<van-button
size="small"
type="info"
native-type="button"
style="margin: 0 10px 0 20px; border-radius: 5px"
@click.native="confirm"
>确定</van-button
>
</div>
</van-cell-group>
</footer>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
export default {
name: "pipe-section",
components: {
LHeader,
},
data() {
return {
text: "选择管段",
searchVal: "",
result: [],
allChecked: false, // 全选状态
typeList: [
{
name: "S17T555550: 污水(1000, 100)",
id: "1",
},
{
name: "S19T546550: 合流(1006, 150)",
id: "2",
},
{
name: "S16T55220: 雨水(100, 100)",
id: "3",
},
{
name: "S15T5635550: 污水(1000, 100)",
id: "4",
},
{
name: "S19T55550: 合流(1009, 120)",
id: "5",
},
],
};
},
mounted() {},
methods: {
onSearch() {},
checked() {
if (this.result.length == this.typeList.length) {
this.allChecked = true;
} else {
this.allChecked = false;
}
},
checkAll() {
this.$refs.checkboxGroup.toggleAll(this.allChecked);
},
confirm() {
console.log(this.result);
history.go(-1);
},
cancel() {
this.$router.go(-1);
},
},
};
</script>
<style lang="less" scoped>
/* @import url(); 引入css类 */
.content-wrap {
padding-bottom: 1.6rem;
background-color: #f0f1f5;
}
// 搜索
.search-wrap {
margin: 0.26667rem;
.van-search {
border-radius: 5px;
padding: 5px 12px;
}
.van-search__content {
background-color: #ffffff;
}
}
.type-wrap {
/deep/ .van-cell__value--alone {
margin: 0.08rem 0;
}
}
.footer {
width: 100%;
height: 1.5rem;
z-index: 9;
position: fixed;
bottom: 0px;
.van-cell-group {
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.allSelect {
margin-left: 0.533333rem;
.van-checkbox {
display: flex;
align-items: flex-end;
}
}
.operate {
height: 1.333333rem;
display: flex;
justify-content: flex-end;
align-items: center;
.van-button {
width: 1.6rem;
}
}
}
}
</style>
<template>
<div>
<LHeader :text="text"></LHeader>
<div class="content-wrap">
<div class="search-wrap">
<van-search v-model="searchVal" placeholder="搜索" @search="onSearch" />
</div>
<!-- 种类 -->
<div class="type-wrap">
<van-cell-group>
<van-checkbox-group
v-model="result"
ref="checkboxGroup"
@change="checked"
>
<van-cell v-for="item in typeList" clickable :key="item.id">
<van-checkbox :name="item.name" shape="square">
<span>{{ item.name }}</span>
</van-checkbox>
</van-cell>
</van-checkbox-group>
</van-cell-group>
</div>
</div>
<!-- 底部信息 -->
<footer class="footer">
<van-cell-group>
<div class="allSelect">
<van-checkbox v-model="allChecked" shape="square" @click="checkAll"
>全选</van-checkbox
>
</div>
<div class="operate">
<van-button
size="small"
type="info"
plain
native-type="button"
style="border-radius: 5px; background-color: #ffffff"
@click.native="cancel"
>取消</van-button
>
<van-button
size="small"
type="info"
native-type="button"
style="margin: 0 10px 0 20px; border-radius: 5px"
@click.native="confirm"
>确定</van-button
>
</div>
</van-cell-group>
</footer>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
export default {
name: "task-type",
components: {
LHeader,
},
data() {
return {
text: "选择任务类型",
searchVal: "",
result: [],
allChecked: false, // 全选状态
typeList: [
{
name: "常规养护任务",
id: "1",
},
{
name: "管线赋值任务",
id: "2",
},
{
name: "设施检测任务",
id: "3",
},
{
name: "设施维保任务",
id: "4",
},
{
name: "其他生成任务",
id: "5",
},
{
name: "其他综合任务",
id: "6",
},
],
};
},
mounted() {},
methods: {
onSearch() {},
checked() {
if (this.result.length == this.typeList.length) {
this.allChecked = true;
} else {
this.allChecked = false;
}
},
checkAll() {
this.$refs.checkboxGroup.toggleAll(this.allChecked);
},
confirm() {
console.log(this.result);
history.go(-1);
},
cancel() {
this.$router.go(-1);
},
},
};
</script>
<style lang="less" scoped>
/* @import url(); 引入css类 */
.content-wrap {
padding-bottom: 1.6rem;
background-color: #f0f1f5;
}
// 搜索
.search-wrap {
margin: 0.26667rem;
.van-search {
border-radius: 5px;
padding: 5px 12px;
}
.van-search__content {
background-color: #ffffff;
}
}
.type-wrap {
/deep/ .van-cell__value--alone {
margin: 0.08rem 0;
}
}
.footer {
width: 100%;
height: 1.5rem;
z-index: 9;
position: fixed;
bottom: 0px;
.van-cell-group {
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.allSelect {
margin-left: 0.533333rem;
.van-checkbox {
display: flex;
align-items: flex-end;
}
}
.operate {
height: 1.333333rem;
display: flex;
justify-content: flex-end;
align-items: center;
.van-button {
width: 1.6rem;
}
}
}
}
</style>
<template>
<div>
<LHeader :text="text"></LHeader>
<div class="content-wrap">
<div class="search-wrap">
<van-search v-model="searchVal" placeholder="搜索" @input="onSearch" />
</div>
<!-- 种类 -->
<div class="type-wrap">
<van-cell-group>
<van-radio-group v-model="radio">
<van-cell v-for="item in typeList" clickable :key="item.no">
<van-radio :name="item.name">{{ item.name }}</van-radio>
</van-cell>
</van-radio-group>
</van-cell-group>
</div>
</div>
<!-- 底部信息 -->
<footer class="footer">
<van-cell-group>
<div class="operate">
<van-button
size="small"
type="info"
plain
native-type="button"
style="border-radius: 5px; background-color: #ffffff"
@click.native="cancel"
>取消</van-button
>
<van-button
size="small"
type="info"
native-type="button"
style="margin: 0 10px 0 20px; border-radius: 5px"
@click.native="confirm"
>确定</van-button
>
</div>
</van-cell-group>
</footer>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
export default {
name: "work-class",
components: {
LHeader,
},
data() {
return {
text: "选择作业综合班",
searchVal: "",
radio: "",
typeList: [
{
no: "1",
name: "第三官网分公司运行一班",
},
{
no: "2",
name: "第三官网分公司运行二班",
},
{
no: "3",
name: "第三官网分公司运行三班",
},
{
no: "4",
name: "第三官网分公司运行四班",
},
{
no: "5",
name: "第三官网分公司运行五班",
},
{
no: "6",
name: "第三官网分公司运行六班",
},
],
};
},
mounted() {},
methods: {
onSearch() {},
confirm() {
console.log(this.radio);
history.go(-1);
},
cancel() {
this.$router.go(-1);
},
},
};
</script>
<style lang="less" scoped>
/* @import url(); 引入css类 */
.content-wrap {
padding-bottom: 1.6rem;
background-color: #f0f1f5;
}
// 搜索
.search-wrap {
margin: 0.26667rem;
.van-search {
border-radius: 5px;
padding: 5px 12px;
}
.van-search__content {
background-color: #ffffff;
}
}
.type-wrap {
/deep/ .van-cell__value--alone {
margin: 0.08rem 0;
}
}
.footer {
width: 100%;
height: 1.5rem;
z-index: 9;
position: fixed;
bottom: 0px;
.van-cell-group {
height: 100%;
display: flex;
align-items: center;
justify-content: flex-end;
.operate {
height: 1.333333rem;
display: flex;
justify-content: flex-end;
align-items: center;
.van-button {
width: 1.6rem;
}
}
}
}
</style>
<template>
<div>
<LHeader :text="text"></LHeader>
<div class="content-wrap">
<div class="search-wrap">
<van-search v-model="searchVal" placeholder="搜索" @search="onSearch" />
</div>
<!-- 种类 -->
<div class="type-wrap">
<van-cell-group>
<van-checkbox-group
v-model="result"
ref="checkboxGroup"
@change="checked"
>
<van-cell v-for="item in typeList" clickable :key="item.id">
<van-checkbox :name="item.name" shape="square">
<span>{{ item.name }}</span>
</van-checkbox>
</van-cell>
</van-checkbox-group>
</van-cell-group>
</div>
</div>
<!-- 底部信息 -->
<footer class="footer">
<van-cell-group>
<div class="allSelect">
<van-checkbox v-model="allChecked" shape="square" @click="checkAll"
>全选</van-checkbox
>
</div>
<div class="operate">
<van-button
size="small"
type="info"
plain
native-type="button"
style="border-radius: 5px; background-color: #ffffff"
@click.native="cancel"
>取消</van-button
>
<van-button
size="small"
type="info"
native-type="button"
style="margin: 0 10px 0 20px; border-radius: 5px"
@click.native="confirm"
>确定</van-button
>
</div>
</van-cell-group>
</footer>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
export default {
name: "work-device",
components: {
LHeader,
},
data() {
return {
text: "选择手杆爬行器",
searchVal: "",
result: [],
allChecked: false, // 全选状态
typeList: [
{
name: "302011001:车载式电视检查",
id: "1",
},
{
name: "302011002:车载式电视检查",
id: "2",
},
{
name: "302011003:车载式电视检查",
id: "3",
},
{
name: "302011004:手持电视检查设备",
id: "4",
},
{
name: "302011005:手持电视检查设备",
id: "5",
},
],
};
},
mounted() {},
methods: {
onSearch() {},
checked() {
if (this.result.length == this.typeList.length) {
this.allChecked = true;
} else {
this.allChecked = false;
}
},
checkAll() {
this.$refs.checkboxGroup.toggleAll(this.allChecked);
},
confirm() {
console.log(this.result);
history.go(-1);
},
cancel() {
this.$router.go(-1);
},
},
};
</script>
<style lang="less" scoped>
/* @import url(); 引入css类 */
.content-wrap {
padding-bottom: 1.6rem;
background-color: #f0f1f5;
}
// 搜索
.search-wrap {
margin: 0.26667rem;
.van-search {
border-radius: 5px;
padding: 5px 12px;
}
.van-search__content {
background-color: #ffffff;
}
}
.type-wrap {
/deep/ .van-cell__value--alone {
margin: 0.08rem 0;
}
}
.footer {
width: 100%;
height: 1.5rem;
z-index: 9;
position: fixed;
bottom: 0px;
.van-cell-group {
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.allSelect {
margin-left: 0.533333rem;
.van-checkbox {
display: flex;
align-items: flex-end;
}
}
.operate {
height: 1.333333rem;
display: flex;
justify-content: flex-end;
align-items: center;
.van-button {
width: 1.6rem;
}
}
}
}
</style>
<template>
<div>
<LHeader :text="text"></LHeader>
<div class="content-wrap">
<div class="search-wrap">
<van-search v-model="searchVal" placeholder="搜索" @input="onSearch" />
</div>
<!-- 种类 -->
<div class="type-wrap">
<van-cell-group>
<van-radio-group v-model="radio">
<van-cell v-for="item in typeList" clickable :key="item.no">
<van-radio :name="item.name">{{ item.name }}</van-radio>
</van-cell>
</van-radio-group>
</van-cell-group>
</div>
</div>
<!-- 底部信息 -->
<footer class="footer">
<van-cell-group>
<div class="operate">
<van-button
size="small"
type="info"
plain
native-type="button"
style="border-radius: 5px; background-color: #ffffff"
@click.native="cancel"
>取消</van-button
>
<van-button
size="small"
type="info"
native-type="button"
style="margin: 0 10px 0 20px; border-radius: 5px"
@click.native="confirm"
>确定</van-button
>
</div>
</van-cell-group>
</footer>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
export default {
name: "work-group",
components: {
LHeader,
},
data() {
return {
text: "选择作业综合组",
searchVal: "",
radio: "",
typeList: [
{
no: "1",
name: "第三官网分公司运行一组",
},
{
no: "2",
name: "第三官网分公司运行二组",
},
{
no: "3",
name: "第三官网分公司运行三组",
},
{
no: "4",
name: "第三官网分公司运行四组",
},
{
no: "5",
name: "第三官网分公司运行五组",
},
{
no: "6",
name: "第三官网分公司运行六组",
},
],
};
},
mounted() {},
methods: {
onSearch() {},
confirm() {
console.log(this.radio);
history.go(-1);
},
cancel() {
this.$router.go(-1);
},
},
};
</script>
<style lang="less" scoped>
/* @import url(); 引入css类 */
.content-wrap {
padding-bottom: 1.6rem;
background-color: #f0f1f5;
}
// 搜索
.search-wrap {
margin: 0.26667rem;
.van-search {
border-radius: 5px;
padding: 5px 12px;
}
.van-search__content {
background-color: #ffffff;
}
}
.type-wrap {
/deep/ .van-cell__value--alone {
margin: 0.08rem 0;
}
}
.footer {
width: 100%;
height: 1.5rem;
z-index: 9;
position: fixed;
bottom: 0px;
.van-cell-group {
height: 100%;
display: flex;
align-items: center;
justify-content: flex-end;
.operate {
height: 1.333333rem;
display: flex;
justify-content: flex-end;
align-items: center;
.van-button {
width: 1.6rem;
}
}
}
}
</style>
<template>
<div>
<LHeader :text="text"></LHeader>
<div class="content-wrap">
<div class="search-wrap">
<van-search v-model="searchVal" placeholder="搜索" @input="onSearch" />
</div>
<!-- 种类 -->
<div class="type-wrap">
<van-cell-group>
<van-radio-group v-model="radio">
<van-cell v-for="item in typeList" clickable :key="item.no">
<van-radio :name="item.name">{{ item.name }}</van-radio>
</van-cell>
</van-radio-group>
</van-cell-group>
</div>
</div>
<!-- 底部信息 -->
<footer class="footer">
<van-cell-group>
<div class="operate">
<van-button
size="small"
type="info"
plain
native-type="button"
style="border-radius: 5px; background-color: #ffffff"
@click.native="cancel"
>取消</van-button
>
<van-button
size="small"
type="info"
native-type="button"
style="margin: 0 10px 0 20px; border-radius: 5px"
@click.native="confirm"
>确定</van-button
>
</div>
</van-cell-group>
</footer>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
export default {
name: "work-leader",
components: {
LHeader,
},
data() {
return {
text: "选择作业负责人",
searchVal: "",
radio: "",
typeList: [
{
no: "1",
name: "赵青",
},
{
no: "2",
name: "王家兴",
},
{
no: "3",
name: "张三",
},
{
no: "4",
name: "李四",
}
],
};
},
mounted() {},
methods: {
onSearch() {},
confirm() {
console.log(this.radio);
history.go(-1);
},
cancel() {
this.$router.go(-1);
},
},
};
</script>
<style lang="less" scoped>
/* @import url(); 引入css类 */
.content-wrap {
padding-bottom: 1.6rem;
background-color: #f0f1f5;
}
// 搜索
.search-wrap {
margin: 0.26667rem;
.van-search {
border-radius: 5px;
padding: 5px 12px;
}
.van-search__content {
background-color: #ffffff;
}
}
.type-wrap {
/deep/ .van-cell__value--alone {
margin: 0.08rem 0;
}
}
.footer {
width: 100%;
height: 1.5rem;
z-index: 9;
position: fixed;
bottom: 0px;
.van-cell-group {
height: 100%;
display: flex;
align-items: center;
justify-content: flex-end;
.operate {
height: 1.333333rem;
display: flex;
justify-content: flex-end;
align-items: center;
.van-button {
width: 1.6rem;
}
}
}
}
</style>
<template>
<div>
<LHeader :text="text"></LHeader>
<div class="content-wrap">
<div class="search-wrap">
<van-search v-model="searchVal" placeholder="搜索" @search="onSearch" />
</div>
<!-- 种类 -->
<div class="type-wrap">
<van-cell-group>
<van-checkbox-group
v-model="result"
ref="checkboxGroup"
@change="checked"
>
<van-cell v-for="item in typeList" clickable :key="item.id">
<van-checkbox :name="item.name" shape="square">
<span>{{ item.name }}</span>
</van-checkbox>
</van-cell>
</van-checkbox-group>
</van-cell-group>
</div>
</div>
<!-- 底部信息 -->
<footer class="footer">
<van-cell-group>
<div class="allSelect">
<van-checkbox v-model="allChecked" shape="square" @click="checkAll"
>全选</van-checkbox
>
</div>
<div class="operate">
<van-button
size="small"
type="info"
plain
native-type="button"
style="border-radius: 5px; background-color: #ffffff"
@click.native="cancel"
>取消</van-button
>
<van-button
size="small"
type="info"
native-type="button"
style="margin: 0 10px 0 20px; border-radius: 5px"
@click.native="confirm"
>确定</van-button
>
</div>
</van-cell-group>
</footer>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
export default {
name: "work-other-per",
components: {
LHeader,
},
data() {
return {
text: "选择任务类型",
searchVal: "",
result: [],
allChecked: false, // 全选状态
typeList: [
{
name: "张三1",
id: "1",
},
{
name: "张三2",
id: "2",
},
{
name: "张三3",
id: "3",
},
{
name: "张三4",
id: "4",
},
{
name: "张三5",
id: "5",
},
{
name: "张三6",
id: "6",
},
],
};
},
mounted() {},
methods: {
onSearch() {},
checked() {
if (this.result.length == this.typeList.length) {
this.allChecked = true;
} else {
this.allChecked = false;
}
},
checkAll() {
this.$refs.checkboxGroup.toggleAll(this.allChecked);
},
confirm() {
console.log(this.result);
history.go(-1);
},
cancel() {
this.$router.go(-1);
},
},
};
</script>
<style lang="less" scoped>
/* @import url(); 引入css类 */
.content-wrap {
padding-bottom: 1.6rem;
background-color: #f0f1f5;
}
// 搜索
.search-wrap {
margin: 0.26667rem;
.van-search {
border-radius: 5px;
padding: 5px 12px;
}
.van-search__content {
background-color: #ffffff;
}
}
.type-wrap {
/deep/ .van-cell__value--alone {
margin: 0.08rem 0;
}
}
.footer {
width: 100%;
height: 1.5rem;
z-index: 9;
position: fixed;
bottom: 0px;
.van-cell-group {
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.allSelect {
margin-left: 0.533333rem;
.van-checkbox {
display: flex;
align-items: flex-end;
}
}
.operate {
height: 1.333333rem;
display: flex;
justify-content: flex-end;
align-items: center;
.van-button {
width: 1.6rem;
}
}
}
}
</style>
<template>
<div>
<LHeader :text="text"></LHeader>
<div class="content-wrap">
<div class="search-wrap">
<van-search v-model="searchVal" placeholder="搜索" @search="onSearch" />
</div>
<!-- 种类 -->
<div class="type-wrap" v-for="item in workKinds" :key="item.index">
<div class="type-title">
<strong>{{ item.title }}</strong>
</div>
<van-cell-group>
<van-checkbox-group
v-model="result"
:ref="`checkboxGroup${item.index}`"
@change="checked"
>
<van-cell v-for="data in item.typeList" clickable :key="data.id">
<van-checkbox :name="data.name" shape="square">
<span>{{ data.name }}</span>
</van-checkbox>
</van-cell>
</van-checkbox-group>
</van-cell-group>
</div>
</div>
<!-- 底部信息 -->
<footer class="footer">
<van-cell-group>
<div class="allSelect">
<van-checkbox v-model="allChecked" shape="square" @click="checkAll"
>全选</van-checkbox
>
</div>
<div class="operate">
<van-button
size="small"
type="info"
plain
native-type="button"
style="border-radius: 5px; background-color: #ffffff"
@click.native="cancel"
>取消</van-button
>
<van-button
size="small"
type="info"
native-type="button"
style="margin: 0 10px 0 20px; border-radius: 5px"
@click.native="confirm"
>确定</van-button
>
</div>
</van-cell-group>
</footer>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
import { getFun,postFun, putFunTwo, postFunTwo } from '@/service/table'
export default {
name: "work-task",
components: {
LHeader,
},
data() {
return {
text: "选择任务类型",
searchVal: "",
result: [],
allChecked: false, // 全选状态
workKinds: [
{
index: 0,
title: "常规养护任务",
typeList: [
{
name: "水冲管道",
id: "1",
},
{
name: "水冲截流",
id: "2",
},
{
name: "水冲倒虹吸",
id: "3",
},
],
},
{
index: 1,
title: "管线赋值任务",
typeList: [
{
name: "设施赋值同步检测",
id: "4",
},
],
},
]
};
},
mounted() {
},
methods: {
onSearch() {},
checked() {
let allTypeList = [];
allTypeList = this.workKinds.map((e) => {
return e.typeList;
});
if (this.result.length == allTypeList.flat().length) {
this.allChecked = true;
} else {
this.allChecked = false;
}
},
checkAll() {
// let allCheckedFlag = this.allChecked
if (this.allChecked) {
let allTypeList = [];
allTypeList = this.workKinds.map((e) => {
return e.typeList;
});
this.result = allTypeList.flat().map(e => e.name);
} else {
this.result = [];
}
// this.$refs.checkboxGroup[0].toggleAll(allCheckedFlag)
},
confirm() {
console.log(this.result);
history.go(-1);
},
cancel() {
this.$router.go(-1);
},
},
};
</script>
<style lang="less" scoped>
/* @import url(); 引入css类 */
.content-wrap {
padding-bottom: 1.6rem;
background-color: #f0f1f5;
}
// 搜索
.search-wrap {
margin: 0.26667rem;
.van-search {
border-radius: 5px;
padding: 5px 12px;
}
.van-search__content {
background-color: #ffffff;
}
}
.type-wrap {
.type-title {
padding: 10px 19px;
font-size: 16px;
}
/deep/ .van-cell__value--alone {
margin: 0.08rem 0;
}
}
.footer {
width: 100%;
height: 1.5rem;
z-index: 9;
position: fixed;
bottom: 0px;
.van-cell-group {
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.allSelect {
margin-left: 0.533333rem;
.van-checkbox {
display: flex;
align-items: flex-end;
}
}
.operate {
height: 1.333333rem;
display: flex;
justify-content: flex-end;
align-items: center;
.van-button {
width: 1.6rem;
}
}
}
}
</style>
<template>
<div class="login" :style="{ backgroundImage: `url(${bg})` }">
<div class="title">
<div class="login-logo">
第三管网分公司
</div>
<div class="login-name">作业人员任务数据填报系统</div>
</div>
<div class="con" :style="{ backgroundImage: `url(${conBg})` }">
<div class="hello">Hello!</div>
<div class="welcome">
欢迎登录<span>作业人员任务数据填报系统</span>!
</div>
<div class="login-form">
<van-form @submit="onSubmit" :show-error-message="false" validate-trigger="onSubmit">
<div class="username-wrap">
<div class="username-icon">
<van-image :src="require('@/assets/login/login-username.png')" />
</div>
<van-field
v-model="username"
name="username"
label=""
placeholder="账号"
:rules="[{ required: true, message: '请填写账号' }]"
/>
</div>
<div class="passworld-wrap">
<div class="passworld-icon">
<van-image :src="require('@/assets/login/login-passworld.png')" />
</div>
<van-field
v-model="password"
type="password"
name="password"
placeholder="密码"
:rules="[{ required: true, message: '请填写密码' }]"
/>
</div>
<div style="margin: 16px;">
<van-button round block type="info" native-type="submit"
>登录</van-button
>
</div>
</van-form>
</div>
</div>
</div>
</template>
<script>
import { getFun,postFun } from '@/service/table'
import { setToken } from '@/utils/auth'
import { setUserInfo ,getUserInfo, getLocalUserInfo, setLocalUserInfo} from '@/utils/userInfo'
//引入
const Base64 = require("js-base64").Base64
export default {
data() {
return {
bg: require("@/assets/login/login-bg.png"),
conBg: require("@/assets/login/login-center.png"),
username: "",
password: ""
};
},
mounted(){
let height= document.documentElement.clientHeight; //获取当前可视区域的高度
document.getElementsByClassName('login')[0].style.height= height + 'px'//给根布局设置高度
// 判断localStorage中是否有用户信息
if(getLocalUserInfo()){
this.username = getLocalUserInfo().loginName
// 获取解密后的密码
// console.log(Base64.decode(getLocalUserInfo().loginPassword)); // base64解密
}
},
methods: {
onSubmit(values) {
this.$toast.loading({
message:'登录中...',
forbidClick: true,
loadingType: 'spinner',
duration: 0
})
postFun('/login',values).then((Response)=>{
if(Response.code==200){
this.$toast.clear()
this.$toast.success({
message:'登录成功',
duration: 2000
})
var userInfo={
token:Response.token,
}
var user={
username:values.username
}
/* 存储用户信息 */
setUserInfo(userInfo)
setLocalUserInfo(user)
setToken(Response.token)
this.$router.push('/save-workbench')
}else{
this.$toast.clear()
this.$toast.fail({
message:Response.msg,
duration: 2000
})
}
})
}
}
};
</script>
<style lang="less" scoped>
/* @import url(); 引入css类 */
.login {
background-size: cover;
background-repeat: no-repeat;
// background-position: center;
// background-attachment: fixed;
height: 100vh;
overflow: hidden;
.title{
padding-top: 22%;
.login-logo {
margin: 0 auto;
font-size: 27px;
text-align: center;
color: white;
font-weight: bolder;
}
.login-name {
width: 100%;
text-align: center;
margin-top: 20px;
color: #fafbfe;
font-size: 18px;
}
}
.con {
width: 345px;
height: 340px;
margin: 62px auto 0;
padding: 35px 25px;
box-sizing: border-box;
background-size: cover;
background-repeat: no-repeat;
.hello {
color: #004fb1;
font-size: 20px;
font-weight: bold;
}
.welcome {
margin: 15px 0;
color: #7795e0;
span {
color: #71aaf2;
}
}
.login-form {
.username-wrap {
position: relative;
border-bottom: 1px solid #d2dcf5;
.username-icon {
width: 20px;
position: absolute;
left: 5px;
top: 9px;
z-index: 100;
}
/deep/ .van-field__body {
padding-left: 20px;
box-sizing: border-box;
}
/deep/ .van-field__error-message {
padding-left: 20px;
}
}
.passworld-wrap {
position: relative;
border-bottom: 1px solid #d2dcf5;
.passworld-icon {
width: 20px;
position: absolute;
left: 5px;
top: 9px;
z-index: 100;
}
/deep/ .van-field__body {
padding-left: 20px;
box-sizing: border-box;
}
/deep/ .van-field__error-message {
padding-left: 20px;
}
}
}
}
}
</style>
<template>
<div>
<!-- 头部标签 -->
<van-sticky>
<header class="header-wrap">
我的
</header>
</van-sticky>
<!-- 内容 -->
<div class="con">
<!-- 个人信息 -->
<van-cell-group inset>
<van-row gutter="20" class="user-box">
<van-col span="6">
<div>
<van-image
width="2rem"
height="2rem"
fit="fill"
:src="userInfo.portrait"
/>
</div>
</van-col>
<van-col span="18">
<div class="user-info-wrap">
<div class="user-name">{{ userInfo.name }}</div>
<p>{{ userInfo.position }}</p>
<div class="tag-wrap">
<!-- <van-tag color="#cbcdfb">隐患上报人</van-tag>
<van-tag color="#b5e2f1">隐患整改人</van-tag>
<van-tag color="#bed9fd">检查专员</van-tag> -->
</div>
</div>
</van-col>
</van-row>
</van-cell-group>
<!-- 设置 -->
<!-- <van-cell-group inset class="my-cell-group">
<div class="set-wrap">
<van-image
width="0.613rem"
height="0.613rem"
fit="fill"
:src="require('@/assets/myTerritory/set.png')"
/>
<span>设置</span>
</div>
</van-cell-group> -->
<van-cell-group inset class="my-cell-group">
<div
class="set-wrap"
v-for="(item, key) in menus"
:key="key"
@click="$router.push({ name: item['name'] })"
>
<van-image
width="0.613rem"
height="0.613rem"
fit="fill"
:src="item['img']"
/>
<span>{{ item["title"] }}</span>
</div>
</van-cell-group>
</div>
<!-- 退出系统 -->
<footer class="sign-out">
<van-button type="info" block @click="logout">退出系统</van-button>
</footer>
<!-- tanBar -->
<tab-bar :index="2"></tab-bar>
</div>
</template>
<script>
import tabBar from "@/components/TabBar";
import { removeToken } from '@/utils/auth' // get token from cookie
import { getUserInfo,removeLocalUserInfo,removeUserInfo} from '@/utils/userInfo'
export default {
components: {
tabBar
},
data() {
return {
menus: [
// 菜单
{
title: "我的权限",
img:require("@/assets/myTerritory/role.png"),
name: "my-role",
},
{
title: "修改密码",
img: require("@/assets/myTerritory/set.png"),
name: "my-reset-pas",
},
],
userInfo: {
portrait: require("@/assets/myTerritory/touxiang.png"),
name: getUserInfo()?getUserInfo().userName:"xxx",
position: getUserInfo()?getUserInfo().deptName:"xxx部",
}
};
},
mounted() {},
methods: {
logout() {
removeToken()
removeLocalUserInfo()
removeUserInfo()
sessionStorage.clear()
this.$router.push("/login");
// location.reload();
}
}
};
</script>
<style lang="less" scoped>
/* @import url(); 引入css类 */
.header-wrap {
width: 100%;
height: 50px;
background-color: #2980f7;
font-size: 17px;
line-height: 50px;
color: white;
text-align: center;
}
.con {
// height: calc(100% - 110px);
padding: 10px 0 50px 0;
background-color: #f0f1f5;
position: relative;
.user-box{
display: flex;
align-items: center;
}
.user-info-wrap {
display: flex;
flex-direction: column;
justify-content: space-between;
.user-name {
font-size: 17px;
font-weight: bold;
}
.tag-wrap {
.van-tag {
margin-right: 10px;
margin-top: 3px;
padding: 2px 4px;
}
}
}
// .my-cell-group {
// padding: 10px 10px !important;
// .set-wrap {
// height: 0.8rem;
// display: flex;
// align-items: center;
// span {
// margin-left: 0.2666rem;
// font-size: 15px;
// font-weight: bold;
// }
// }
// }
.my-cell-group {
padding: 10px 10px !important;
.set-wrap {
height: 1.1rem;
display: flex;
align-items: center;
border-bottom: 1px solid #e8e8e8;
&:last-child {
border-bottom: none;
}
span {
margin-left: 0.2666rem;
font-size: 13px;
font-weight: none;
}
}
}
}
.sign-out {
width: 96%;
position: fixed;
bottom: 1.86667rem;
left: 0px;
right: 0;
margin: auto;
overflow: hidden;
border-radius: 5px;
button {
font-size: 15px;
font-weight: bold;
}
}
.van-cell-group--inset {
margin: 0 10px 10px;
padding: 10px 10px 15px;
}
</style>
<template>
<div>
<!-- 修改密码页面 -->
<!-- 头部标签 -->
<LHeader :text="$route.meta.title"></LHeader>
<van-form
@submit="onSubmit"
:scroll-to-error="true"
:show-error="false"
validate-trigger="onSubmit"
>
<van-field
v-model="form.oldPassword"
required
type="text"
name="oldPassword"
label="旧密码"
placeholder="请输入旧密码"
:rules="[{ required: true, message: '请填写密码' }]"
autocomplete
/>
<van-field
required
v-model="form.newPassword"
type="password"
name="newPassword"
label="新密码"
placeholder="请输入新密码"
:rules="[
{ required: true, message: '请填写密码' },
{
message: '密码必须大于6个字符小于20个字符',
validator: (val) => {
return val['length'] >= 6 && val['length'] < 20;
},
},
]"
autocomplete
/>
<van-field
required
v-model="form.confirm"
type="password"
name="confirm"
label="再次输入"
placeholder="再次输入新密码"
:rules="[
{ validator, required: true, message: '二次输入不正确' },
{
message: '密码必须大于6个字符小于20个字符',
validator: (val) => {
return val['length'] >= 6 && val['length'] < 20;
},
},
]"
autocomplete
/>
<div style="margin: 16px">
<van-button round block type="info" native-type="submit"
>提交
</van-button>
</div>
</van-form>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
import { getFun, postFun } from "@/service/table.js";
export default {
components: {
LHeader,
},
data() {
return {
form: {
oldPassword: "",
newPassword: "",
confirm: "",
},
};
},
mounted() {},
methods: {
validator(val) {
return this.form.newPassword == val;
},
onSubmit(val) {
this.$toast.loading({
message: "请求中...",
forbidClick: true,
loadingType: "spinner",
duration: 0,
});
postFun("/dhzyreport/resetPwd", this.obj2formdata(val))
.then((data) => {
if (data.code == 0) {
this.$toast.clear();
this.$toast.success('密码修改成功!');
this.$router.back()
}
})
},
obj2formdata(data) {
let fd = new FormData();
for (let k in data) {
if (data[k]) {
fd.append(k, data[k]);
}
}
return fd;
},
},
};
</script>
<style>
</style>
\ No newline at end of file
<template>
<div>
<!-- 我的权限页面 my-role -->
<LHeader :text="$route.meta.title"></LHeader>
<!-- 权限卡片 -->
<div v-if="myRoles">
<template>
<div class="title">我的角色</div>
<van-cell-group inset>
<div class="tag-wrap">
<van-tag v-for="(item, index) in myRoles" :key="index" :color="getColor()" plain round>{{item.roleName}}</van-tag>
</div>
</van-cell-group>
</template>
</div>
<!-- 权限卡片 -->
<div v-if="role_list.length>0">
<template>
<div class="title">作业人员不安全行为监测预警系统</div>
<van-cell-group inset>
<div class="tag-wrap">
<van-tag v-for="(item, index) in role_list" :key="index" :color="getColor()" plain round>{{item}}</van-tag>
</div>
</van-cell-group>
</template>
</div>
</div>
</template>
<script>
import LHeader from "@/components/header.vue";
import { getFunTwo } from "@/service/table";
import { getUserInfo } from "@/utils/userInfo";
export default {
components: {
LHeader,
},
mounted() {
this.getRoleList();
},
data() {
return {
tabColor: ["#07c160", "#1989fa", "#ee0a24", "#ff976a"],
userId: getUserInfo() ? getUserInfo().userId :"",
myRoles: getUserInfo() ? getUserInfo().roles :"",
role_list: "",
};
},
methods: {
async getRoleList() {
let res = await getFunTwo(`project/role/${this.userId}`);
if (res) {
this.role_list = res.data;
} else {
this.$toast.fail("加载失败,请稍后再试");
}
},
// 获得一个随机色
getColor() {
return this.tabColor[
Math.floor(Math.random() * [this.tabColor["length"]])
];
},
},
};
</script>
<style scoped lang="less">
/* @import url(); 引入css类 */
.van-cell-group--inset {
margin: 0 10px 10px;
padding: 10px 10px 8px;
min-height: 1.5rem;
}
.title {
padding: 0.2rem .266667rem;
font-size: 0.4rem;
}
.tag-wrap > span {
margin-right: 0.3rem;
margin-bottom: 0.3rem;
}
.van-tag {
padding: 0.03rem 0.2rem;
font-size: 0.25rem;
}
</style>
\ No newline at end of file
<template>
<div>
<!-- 头部标签 -->
<van-sticky>
<header class="header-wrap">
我的任务
</header>
</van-sticky>
<van-search
v-model="value"
placeholder="搜索"
@search="onSearch"
>
<template #right-icon>
<van-icon name="add" @click="createdClick"/>
</template>
</van-search>
<!-- tanBar -->
<tab-bar :index="1"></tab-bar>
</div>
</template>
<script>
import tabBar from "@/components/TabBar";
import { getFun,postFun } from '@/service/table'
export default {
components: {
tabBar
},
data() {
return {
value:''
};
},
created() {
},
methods: {
onSearch(){
},
createdClick(){
this.$router.push('/create-task')
}
}
};
</script>
<style lang="less" scoped>
/* @import url(); 引入css类 */
.header-wrap {
width: 100%;
height: 50px;
background-color: #2980f7;
font-size: 17px;
line-height: 50px;
color: white;
text-align: center;
}
</style>
module.exports = {
productionSourceMap: false,
devServer: {
open: true,
host: 'localhost',
port: 8080,
https: false,
//以上的ip和端口是我们本机的;下面为需要跨域的
proxy: { //配置跨域
'/dev-api': {
target: 'http://192.168.10.137:8080/', //这里是后台的地址
ws: true,
changOrigin: true, //允许跨域
// logLevel: 'debug', // 显示代理调试信息
pathRewrite: {
'^/dev-api': '' //请求的时候使用这个api就可以
}
},
// '/ps_ceninss': {
// target: 'http://192.168.3.80:8080', //这里是后台的地址
// ws: true,
// changOrigin: true, //允许跨域
// pathRewrite: {
// '^/ps_ceninss': 'ps_ceninss' //请求的时候使用这个api就可以
// }
// }
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment