1、用户管理新增和编辑用户时设置工单为必填项
2、新增终端登录、首页、设备点检、故障上报、上下班打卡、停机原因维护页面(未与后端联调且客户未确定页面设计)并调整全局路由守卫相关逻辑
3、调整设备结构树设备层级和车间层级区分的判断条件
4、调整电子样板检索与部件借用弹窗列表与搜索区域样式
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="full-screen-container"> |
| | | <router-view class="router-view"> |
| | | <template v-slot:function> |
| | | <a-space> |
| | | <button class="button" @click="handleLogout">åæ¢ç¨æ·</button> |
| | | <button class="button" @click="backToIndex">è¿å主页</button> |
| | | <button class="button">设置</button> |
| | | </a-space> |
| | | </template> |
| | | </router-view> |
| | | |
| | | <div class="footer" v-if="$route.path!=='/terminal/login'"> |
| | | <div>å§åï¼{{nickname()}}</div> |
| | | <div>å½åæ¶é´ï¼{{currentDateAndTime}}</div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { mapActions, mapGetters } from 'vuex' |
| | | |
| | | import moment from 'moment' |
| | | |
| | | export default { |
| | | name: 'TerminalLayout', |
| | | data() { |
| | | return { |
| | | currentDateAndTime: null, |
| | | getDateAndTimeInterval: null |
| | | } |
| | | }, |
| | | watch: { |
| | | '$route.path': { |
| | | handler(val) { |
| | | if (val === '/terminal/index' || val === '/terminal/login') document.title = 'MDCæºæ
§è½¦é´' |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | this.getCurrentDateAndTime() |
| | | |
| | | }, |
| | | beforeDestroy() { |
| | | if (this.getDateAndTimeInterval) { |
| | | clearInterval(this.getDateAndTimeInterval) |
| | | this.getDateAndTimeInterval = null |
| | | } |
| | | }, |
| | | methods: { |
| | | ...mapActions(['Logout']), |
| | | |
| | | ...mapGetters(['nickname']), |
| | | |
| | | handleLogout() { |
| | | const that = this |
| | | |
| | | this.$confirm({ |
| | | title: 'æç¤º', |
| | | content: 'ç¡®å®è¦åæ¢ç¨æ·å ?', |
| | | onOk() { |
| | | return that.Logout({}).then(() => { |
| | | window.location.reload() |
| | | }).catch(err => { |
| | | that.$message.error({ |
| | | title: 'é误', |
| | | description: err.message |
| | | }) |
| | | }) |
| | | }, |
| | | onCancel() { |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | backToIndex() { |
| | | if (this.$route.path !== '/terminal/index') this.$router.push('/terminal/index') |
| | | }, |
| | | |
| | | // è·åå½åæ¥æåæ¶é´ï¼1ç§æ´æ°1æ¬¡ï¼ |
| | | getCurrentDateAndTime() { |
| | | this.getDateAndTimeInterval = setInterval(() => this.currentDateAndTime = moment().format('YYYY-MM-DD HH:mm:ss'), 1000) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | .full-screen-container { |
| | | display: flex; |
| | | flex-direction: column; |
| | | height: 100vh; |
| | | |
| | | .router-view { |
| | | flex: 1; |
| | | padding: 24px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | } |
| | | } |
| | | |
| | | .button { |
| | | font-weight: bold; |
| | | padding: 15px 15px; |
| | | border: 1px solid rgba(0, 0, 0, .2); |
| | | border-radius: 5px; |
| | | cursor: pointer; |
| | | box-shadow: 6px 6px 16px rgba(0, 0, 0, 0.2), |
| | | -6px -6px 16px rgba(255, 255, 255, 0.8), |
| | | inset 0 0 0 transparent; |
| | | |
| | | &:hover { |
| | | box-shadow: 0 0 0 transparent, |
| | | inset 6px 6px 12px rgba(0, 0, 0, 0.2), |
| | | inset -6px -6px 12px rgba(255, 255, 255, 0.8); |
| | | } |
| | | } |
| | | |
| | | .footer { |
| | | font-size: 16px; |
| | | padding: 12px 24px; |
| | | color: #000; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | </style> |
| | |
| | | import RouteView from '@/components/layouts/RouteView' |
| | | import PageView from '@/components/layouts/PageView' |
| | | import TabLayout from '@/components/layouts/TabLayout' |
| | | import TerminalLayout from '@/components/layouts/TerminalLayout' |
| | | |
| | | export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView, TabLayout } |
| | | export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView, TabLayout, TerminalLayout } |
| | |
| | | import { UserLayout, TabLayout, RouteView, BlankLayout, PageView } from '@/components/layouts' |
| | | import { UserLayout, TabLayout, RouteView, BlankLayout, PageView, TerminalLayout } from '@/components/layouts' |
| | | |
| | | /** |
| | | * èµ°èåï¼èµ°æéæ§å¶ |
| | |
| | | path: 'alteration', |
| | | name: 'alteration', |
| | | component: () => import(/* webpackChunkName: "user" */ '@/views/user/alteration/Alteration') |
| | | }, |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | |
| | | path: 'login', |
| | | name: 'oauth2-app-login', |
| | | component: () => import(/* webpackChunkName: "oauth2-app.login" */ '@/views/user/oauth2/OAuth2Login') |
| | | }, |
| | | } |
| | | ] |
| | | }, |
| | | |
| | |
| | | component: () => import('@/views/mdc/base/MdcWorkshopSignage.vue') |
| | | }, |
| | | { |
| | | path: '/terminal', |
| | | redirect: '/terminal/login', |
| | | component: TerminalLayout, |
| | | children: [ |
| | | { |
| | | path: 'login', |
| | | name: 'operatorLogin', |
| | | component: () => import('@/views/dnc/base/OperatorLogin.vue') |
| | | }, |
| | | { |
| | | path: 'index', |
| | | name: 'terminalIndex', |
| | | component: () => import('@/views/dnc/base/TerminalIndex.vue') |
| | | }, |
| | | { |
| | | path: 'work', |
| | | name: 'equipmentStartWork', |
| | | component: () => import('@/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue') |
| | | }, |
| | | { |
| | | path: 'fault', |
| | | name: 'reportEquipmentFault', |
| | | component: () => import('@/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue') |
| | | }, |
| | | { |
| | | path: 'close', |
| | | name: 'reportEquipmentClose', |
| | | component: () => import('@/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue') |
| | | }, |
| | | { |
| | | path: 'spotCheck', |
| | | name: 'equipmentSpotCheck', |
| | | component: () => import('@/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue') |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/404', |
| | | component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404') |
| | | }, |
| | | } |
| | | |
| | | ] |
| | |
| | | |
| | | NProgress.configure({ showSpinner: false }) // NProgress Configuration |
| | | |
| | | const whiteList = ['/user/login', '/user/register', '/user/register-result','/user/alteration'] // no redirect whitelist |
| | | const whiteList = ['/user/login', '/user/register', '/user/register-result', '/user/alteration', '/terminal/login'] // no redirect whitelist |
| | | whiteList.push(OAUTH2_LOGIN_PAGE_PATH) |
| | | |
| | | router.beforeEach((to, from, next) => { |
| | |
| | | if (to.path === '/user/login' || to.path === OAUTH2_LOGIN_PAGE_PATH) { |
| | | next({ path: INDEX_MAIN_PAGE_PATH }) |
| | | NProgress.done() |
| | | } else { |
| | | } |
| | | else { |
| | | if (store.getters.permissionList.length === 0) { |
| | | store.dispatch('GetPermissionList').then(res => { |
| | | const menuData = res.result.menu; |
| | | const menuData = res.result.menu |
| | | //console.log(res.message) |
| | | if (menuData === null || menuData === "" || menuData === undefined) { |
| | | return; |
| | | if (menuData === null || menuData === '' || menuData === undefined) { |
| | | return |
| | | } |
| | | let constRoutes = []; |
| | | constRoutes = generateIndexRouter(menuData); |
| | | let constRoutes = [] |
| | | constRoutes = generateIndexRouter(menuData) |
| | | // æ·»å 主çé¢è·¯ç± |
| | | store.dispatch('UpdateAppRouter', { constRoutes }).then(() => { |
| | | // æ ¹æ®rolesæéçæå¯è®¿é®çè·¯ç±è¡¨ |
| | |
| | | next({ ...to, replace: true }) |
| | | } else { |
| | | // 跳转å°ç®çè·¯ç± |
| | | if (to.path !== '/terminal/login' && from.path !== '/terminal/login' && redirect.split('/')[1] === 'terminal') { |
| | | next({ path: '/terminal/login' }) |
| | | } else { |
| | | next({ path: redirect }) |
| | | } |
| | | } |
| | | }) |
| | | }) |
| | |
| | | next({ path: '/user/login', query: { redirect: to.fullPath } }) |
| | | }) |
| | | }) |
| | | } |
| | | else { |
| | | // 跳转å°ç®çè·¯ç± |
| | | if (to.path !== '/terminal/login' && from.path !== '/' && from.path.split('/') [1] !== 'terminal' && to.path.split('/')[1] === 'terminal') { |
| | | next({ path: '/terminal/login' }) |
| | | } else { |
| | | next() |
| | | } |
| | | } |
| | | } else { |
| | | } |
| | | } |
| | | else { |
| | | if (whiteList.indexOf(to.path) !== -1) { |
| | | // å¨å
ç»å½ç½ååï¼å¦æè¿å
¥ç页颿¯login页é¢å¹¶ä¸å½åæ¯OAuth2appç¯å¢ï¼å°±è¿å
¥OAuth2ç»å½é¡µé¢ |
| | | if (to.path === '/user/login' && isOAuth2AppEnv()) { |
| | |
| | | next() |
| | | } |
| | | NProgress.done() |
| | | } else { |
| | | } |
| | | else { |
| | | // 妿å½åæ¯å¨OAuth2APPç¯å¢ï¼å°±è·³è½¬å°OAuth2ç»å½é¡µé¢ |
| | | let path = isOAuth2AppEnv() ? OAUTH2_LOGIN_PAGE_PATH : '/user/login' |
| | | let path |
| | | if (isOAuth2AppEnv()) path = OAUTH2_LOGIN_PAGE_PATH |
| | | else { |
| | | if (to.path.split('/')[1] !== 'terminal') path = '/user/login' |
| | | else path = '/terminal/login' |
| | | } |
| | | next({ path: path, query: { redirect: to.fullPath } }) |
| | | NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="login-bg"> |
| | | <div class="login-container"> |
| | | <a-card class="login-card"> |
| | | <h2 class="title">ç»å½</h2> |
| | | |
| | | <a-form-model :model="model" ref="form" :rules="validateRules" @keyup.enter.native="handleLogin"> |
| | | <!-- å·å¡ç»å½è¾å
¥æ¡ --> |
| | | <a-form-model-item prop="workNo" :has-feedback="feedbackConfig.workNoFeedback"> |
| | | <a-input v-model="model.workNo" placeholder="请å·å¡æè¾å
¥å¡å·" size="large" autocomplete="off" |
| | | @change="clearAnotherLoginInfo('workNo')"> |
| | | <a-icon slot="prefix" type="credit-card"/> |
| | | </a-input> |
| | | </a-form-model-item> |
| | | |
| | | <div class="divider"> |
| | | <span class="line"></span> |
| | | <span class="text">æ</span> |
| | | <span class="line"></span> |
| | | </div> |
| | | |
| | | <!-- 常è§ç»å½è¡¨å --> |
| | | <a-form-model-item prop="username" :has-feedback="feedbackConfig.usernameFeedback"> |
| | | <a-input |
| | | v-model="model.username" |
| | | placeholder="ç¨æ·å" |
| | | size="large" |
| | | @change="clearAnotherLoginInfo('username')" |
| | | autocomplete="off" |
| | | > |
| | | <a-icon slot="prefix" type="user"/> |
| | | </a-input> |
| | | </a-form-model-item> |
| | | |
| | | <a-form-model-item prop="password" :has-feedback="feedbackConfig.passwordFeedback"> |
| | | <a-input-password |
| | | v-model="model.password" |
| | | placeholder="å¯ç " |
| | | size="large" |
| | | @change="clearAnotherLoginInfo('password')" |
| | | autocomplete="off" |
| | | > |
| | | <a-icon slot="prefix" type="lock"/> |
| | | </a-input-password> |
| | | </a-form-model-item> |
| | | |
| | | <a-button type="primary" size="large" block :loading="loading" @click="handleLogin">ç»å½</a-button> |
| | | </a-form-model> |
| | | <!--<div class="footer">--> |
| | | <!--<a @click="handleRegister">注åè´¦å·</a>--> |
| | | <!--<a @click="handleForget">å¿è®°å¯ç </a>--> |
| | | <!--</div>--> |
| | | </a-card> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { mapActions } from 'vuex' |
| | | import { timeFix } from '@/utils/util' |
| | | |
| | | export default { |
| | | name: 'OperatorLogin', |
| | | data() { |
| | | return { |
| | | model: { |
| | | isOperator: true // 夿æ¯åªä¸ªç»å½é¡µç»å½ |
| | | }, |
| | | feedbackConfig: { |
| | | workNoFeedback: true, |
| | | usernameFeedback: true, |
| | | passwordFeedback: true |
| | | }, |
| | | loading: false, |
| | | validateRules: { |
| | | workNo: [ |
| | | { validator: this.checkWorkNo, trigger: 'blur' } |
| | | ], |
| | | username: [ |
| | | { validator: this.checkUsername, trigger: 'blur' } |
| | | ], |
| | | password: [ |
| | | { validator: this.checkPassword, trigger: 'blur' } |
| | | ] |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | ...mapActions(['Login']), |
| | | |
| | | handleLogin() { |
| | | this.$refs.form.validate(valid => { |
| | | if (valid) { |
| | | this.loading = true |
| | | |
| | | if (this.model.workNo) this.$refs.form.clearValidate(['username', 'password']) |
| | | else this.$refs.form.clearValidate('workNo') |
| | | |
| | | console.log('ç»å½ä¿¡æ¯:', this.model) |
| | | |
| | | this.Login(this.model) |
| | | .then((res) => { |
| | | this.loginSuccess(res.result) |
| | | }) |
| | | .catch((err) => { |
| | | this.loginFailed(err, this.model.username) |
| | | }) |
| | | } else { |
| | | return false |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | loginSuccess() { |
| | | this.$router.push({ path: '/terminal/index' }).catch(() => { |
| | | }) |
| | | |
| | | this.$notification.success({ |
| | | message: '欢è¿', |
| | | description: `${timeFix()}ï¼æ¬¢è¿åæ¥` |
| | | }) |
| | | this.loading = false |
| | | }, |
| | | |
| | | //ç»å½åå°å¤±è´¥ |
| | | loginFailed(err, username) { |
| | | let description = ((err.response || {}).data || {}).message || err.message || '请æ±åºç°é误ï¼è¯·ç¨ååè¯' |
| | | |
| | | this.$notification.error({ |
| | | message: 'ç»å½å¤±è´¥', |
| | | description: description |
| | | }) |
| | | this.loading = false |
| | | }, |
| | | |
| | | /** |
| | | * è¾å
¥æ¡å¼æ¹åæ¶è§¦å |
| | | * @param inputProp è¾å
¥æ¡å¯¹åºå±æ§ |
| | | */ |
| | | clearAnotherLoginInfo(inputProp) { |
| | | this.feedbackConfig[inputProp + 'Feedback'] = true |
| | | |
| | | if (inputProp === 'workNo') { |
| | | delete this.model.username |
| | | delete this.model.password |
| | | this.$refs.form.clearValidate(['username', 'password']) |
| | | } else { |
| | | delete this.model.workNo |
| | | this.$refs.form.clearValidate('workNo') |
| | | } |
| | | }, |
| | | |
| | | checkWorkNo(rule, value, callback) { |
| | | if (!this.model.username && !this.model.password) { |
| | | if (!value) { |
| | | callback(new Error('请å·å¡æè¾å
¥å¡å·ï¼')) |
| | | this.feedbackConfig.usernameFeedback = this.feedbackConfig.passwordFeedback = true |
| | | } else { |
| | | callback() |
| | | } |
| | | } else { |
| | | this.feedbackConfig.workNoFeedback = false |
| | | callback() |
| | | } |
| | | }, |
| | | |
| | | checkUsername(rule, value, callback) { |
| | | if (!this.model.workNo) { |
| | | if (!value) { |
| | | callback(new Error('请è¾å
¥ç¨æ·åï¼')) |
| | | if (!this.model.password) this.feedbackConfig.workNoFeedback = true |
| | | } else { |
| | | callback() |
| | | } |
| | | } else { |
| | | this.feedbackConfig.usernameFeedback = false |
| | | callback() |
| | | } |
| | | }, |
| | | |
| | | checkPassword(rule, value, callback) { |
| | | if (!this.model.workNo) { |
| | | if (!value) { |
| | | callback(new Error('请è¾å
¥å¯ç ï¼')) |
| | | if (!this.model.username) this.feedbackConfig.workNoFeedback = true |
| | | } else { |
| | | callback() |
| | | } |
| | | } else { |
| | | this.feedbackConfig.passwordFeedback = false |
| | | callback() |
| | | } |
| | | } |
| | | |
| | | // handleRegister() { |
| | | // this.$router.push('/register') |
| | | // }, |
| | | // handleForget() { |
| | | // this.$message.info('请è系管çåéç½®å¯ç ') |
| | | // } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="less" scoped> |
| | | .login-bg { |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | min-height: 100vh; |
| | | background: linear-gradient(rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7)), |
| | | url('../../../assets/operator-login-bg.png') no-repeat center; |
| | | background-size: cover; |
| | | |
| | | .login-container { |
| | | width: 100%; |
| | | max-width: 420px; |
| | | padding: 0 20px; |
| | | |
| | | .login-card { |
| | | border-radius: 8px; |
| | | box-shadow: 0 6px 16px rgba(0, 0, 0, 0.3); |
| | | background: rgba(255, 255, 255, 0.95); |
| | | |
| | | .title { |
| | | margin-bottom: 24px; |
| | | text-align: center; |
| | | color: #1890ff; |
| | | font-size: 24px; |
| | | font-weight: 500; |
| | | } |
| | | |
| | | .divider { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 20px 0; |
| | | |
| | | .line { |
| | | flex: 1; |
| | | height: 1px; |
| | | background: rgba(0, 0, 0, 0.15); |
| | | } |
| | | |
| | | .text { |
| | | padding: 0 16px; |
| | | color: rgba(0, 0, 0, 0.45); |
| | | } |
| | | } |
| | | |
| | | .footer { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 16px; |
| | | |
| | | a { |
| | | color: #1890ff; |
| | | cursor: pointer; |
| | | |
| | | &:hover { |
| | | text-decoration: underline; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page-view-container"> |
| | | <slot name="function"/> |
| | | <div class="header-container">ç°åºæ
åµä¸æ¥å¹³å°</div> |
| | | <div class="content-container"> |
| | | <a-row> |
| | | <a-col :span="8"> |
| | | <div class="button" @click="navigateTo('work','ä¸ç')">ä¸ç</div> |
| | | </a-col> |
| | | <a-col :span="8"> |
| | | <div class="button">ä¸ç</div> |
| | | </a-col> |
| | | <a-col :span="8"> |
| | | <div class="button" @click="navigateTo('fault','è®¾å¤æ
é')">è®¾å¤æ
é</div> |
| | | </a-col> |
| | | </a-row> |
| | | <a-row> |
| | | <a-col :span="8"> |
| | | <div class="button" @click="navigateTo('close','åæºä¸æ¥')">åæºä¸æ¥</div> |
| | | </a-col> |
| | | <a-col :span="8"> |
| | | <div class="button" @click="navigateTo('spotCheck','ç¹æ£')">ç¹æ£</div> |
| | | </a-col> |
| | | <a-col :span="8"> |
| | | <div class="button">åæ ¼ç</div> |
| | | </a-col> |
| | | </a-row> |
| | | <a-row> |
| | | <a-col :span="8"> |
| | | <div class="button">ç¨åºå¼å«</div> |
| | | </a-col> |
| | | <a-col :span="8"> |
| | | <div class="button">å¼å·¥å®å·¥</div> |
| | | </a-col> |
| | | <a-col :span="8"> |
| | | <div class="button">ç¨åºåä¼ </div> |
| | | </a-col> |
| | | </a-row> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'TerminalIndex', |
| | | methods: { |
| | | navigateTo(url, projectTitle) { |
| | | this.$router.push('/terminal/' + url) |
| | | document.title = 'MDCæºæ
§è½¦é´-' + projectTitle |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | .page-view-container { |
| | | background: linear-gradient(to bottom, #fff -15%, #000 55%,); |
| | | |
| | | .header-container { |
| | | font-size: 50px; |
| | | color: #eee; |
| | | text-align: center; |
| | | height: 15%; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: flex-end; |
| | | -webkit-align-items: flex-end; |
| | | } |
| | | |
| | | .content-container { |
| | | flex: 1; |
| | | display: flex; |
| | | flex-direction: column; |
| | | padding: 3% 10%; |
| | | |
| | | .ant-row { |
| | | flex: 1; |
| | | |
| | | .ant-col { |
| | | height: 100%; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | |
| | | .button { |
| | | width: 250px; |
| | | height: 125px; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | background-color: #E3F2D9; |
| | | font-size: 45px; |
| | | border: 2px solid #33579D; |
| | | box-shadow: inset -5px 5px 12px rgba(0, 0, 0, 0.6); |
| | | cursor: pointer; |
| | | transition: all .1s ease-in-out; |
| | | |
| | | &:hover { |
| | | transform: scale(1.05); |
| | | } |
| | | } |
| | | } |
| | | /*display: flex;*/ |
| | | /*flex-direction: column;*/ |
| | | } |
| | | } |
| | | } |
| | | |
| | | </style> |
| | |
| | | * @param treeNode |
| | | */ |
| | | setTreeNodeIcon(treeNode) { |
| | | if (!treeNode.equipmentId) { |
| | | if (+treeNode.type === 1) { |
| | | treeNode.slots = { icon: 'workshop' } |
| | | } else { |
| | | treeNode.slots = { icon: 'device' } |
| | |
| | | <div class="table-page-search-wrapper"> |
| | | <a-form layout="inline" @keyup.enter.native="searchQuery"> |
| | | <a-row :gutter="24"> |
| | | <a-col :md="7" :sm="7"> |
| | | <a-col :md="5" :sm="5"> |
| | | <a-form-item label="é¨ä»¶åç§°"> |
| | | <a-input placeholder="请è¾å
¥é¨ä»¶åç§°" v-model="queryParam.componentName" allow-clear></a-input> |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <a-col :md="7" :sm="7"> |
| | | <a-col :md="5" :sm="5"> |
| | | <a-form-item label="é¨ä»¶ä»£å·"> |
| | | <a-input placeholder="请è¾å
¥é¨ä»¶ä»£å·" v-model="queryParam.componentCode" allow-clear></a-input> |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <a-col :md="7" :sm="7"> |
| | | <a-col :md="5" :sm="5"> |
| | | <a-form-item label="é¨ä»¶åå·"> |
| | | <a-input placeholder="请è¾å
¥é¨ä»¶åå·" v-model="queryParam.componentModel" allow-clear></a-input> |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <a-col :md="7" :sm="7"> |
| | | <a-col :md="4" :sm="4"> |
| | | <a-form-item label="è§æ ¼"> |
| | | <a-input placeholder="请è¾å
¥è§æ ¼" v-model="queryParam.componentScale" allow-clear></a-input> |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <a-col :md="7" :sm="7"> |
| | | <a-col :md="4" :sm="4"> |
| | | <a-form-item label="æè´¨"> |
| | | <a-input placeholder="请è¾å
¥æè´¨" v-model="queryParam.structureType" allow-clear></a-input> |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <a-col :md="4" :sm="4"> |
| | | <a-space> |
| | | <a-button type="primary" @click="searchQuery" icon="search">æ¥è¯¢</a-button> |
| | | <a-button type="primary" @click="searchReset" icon="reload">éç½®</a-button> |
| | | </a-space> |
| | | </a-col> |
| | | </a-row> |
| | | </a-form> |
| | | </div> |
| | | |
| | | <!-- æä½æé®åºå --> |
| | | <div class="table-operator"> |
| | | <a-button type="primary" @click="searchQuery" icon="search">æ¥è¯¢</a-button> |
| | | <a-button type="primary" @click="searchReset" icon="reload">éç½®</a-button> |
| | | </div> |
| | | |
| | | <a-table :columns="columns" :data-source="dataSource" bordered :pagination="ipagination" :loading="loading" |
| | |
| | | title: 'å建æ¶é´', |
| | | dataIndex: 'createTime', |
| | | align: 'center', |
| | | width: 150, |
| | | width: 100, |
| | | }, |
| | | { |
| | | title: 'å建人', |
| | | dataIndex: 'createBy_dictText', |
| | | align: 'center', |
| | | width: 100, |
| | | width: 60, |
| | | } |
| | | ], |
| | | searchValue: '', |
| | |
| | | |
| | | <style scoped lang="less"> |
| | | /deep/ .ant-modal { |
| | | .ant-modal-body{ |
| | | padding: 0 24px 12px; |
| | | } |
| | | |
| | | .tabs-container { |
| | | display: flex; |
| | | justify-content: space-between; |
| | |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <a-col :md="4" :sm="4"> |
| | | <a-col :md="2" :sm="2"> |
| | | <a-button type="primary" @click="searchQuery" icon="search">æ¥è¯¢</a-button> |
| | | </a-col> |
| | | </a-row> |
| | |
| | | dataIndex: 'docDispatchStatus_dictText', |
| | | key: 'docDispatchStatus', |
| | | align: 'center', |
| | | width: 60, |
| | | width: 80, |
| | | filters: [ |
| | | { text: 'ç¼å¶', value: 1 }, |
| | | { text: 'æ ¡å¯¹', value: 2 }, |
| | |
| | | |
| | | <style scoped lang="less"> |
| | | /deep/ .ant-modal { |
| | | .ant-modal-body{ |
| | | padding: 0 24px 12px; |
| | | } |
| | | |
| | | .tabs-container { |
| | | display: flex; |
| | | justify-content: space-between; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <slot name="function"/> |
| | | |
| | | <div class="content-container"> |
| | | <!-- æ¥è¯¢åºå --> |
| | | <div class="table-page-search-wrapper" style="width: 100%"> |
| | | <a-form-model ref="form" :model="model" layout="inline" :rules="validateRules"> |
| | | <a-row :gutter="64" type="flex" justify="center"> |
| | | <a-col :span="5"> |
| | | <a-form-model-item label="设å¤" prop="equipmentId"> |
| | | <a-select placeholder="è¯·éæ©è®¾å¤" v-model="model.equipmentId"> |
| | | <a-select-option v-for="item in equipmentList" :key="item.key"> |
| | | {{item.label}} |
| | | </a-select-option> |
| | | </a-select> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | <a-col :span="5"> |
| | | <a-form-model-item label="ç¹æ£æ¥æ" prop="checkDate"> |
| | | <a-date-picker style="width: 100%" placeholder="è¯·éæ©å¼å§æ¶é´" v-model="model.checkDate"/> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | </a-row> |
| | | </a-form-model> |
| | | </div> |
| | | |
| | | <div class="check-content-container"> |
| | | <div v-for="item in checkList" :key="item.id"> |
| | | <div>{{item.content}}</div> |
| | | <div> |
| | | <a-radio-group v-model="item.status"> |
| | | <a-radio :value="1">æ£å¸¸</a-radio> |
| | | <a-radio :value="2">å¼å¸¸</a-radio> |
| | | <a-radio :value="3">已维修</a-radio> |
| | | </a-radio-group> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="button-container"> |
| | | <a-button @click="handleSubmit" icon="check" :loading="loading">ä¿å</a-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'EquipmentSpotCheck', |
| | | data() { |
| | | return { |
| | | model: {}, |
| | | validateRules: { |
| | | equipmentId: [{ required: true, message: 'è¯·éæ©è®¾å¤ï¼', trigger: 'change' }], |
| | | checkDate: [{ required: true, message: 'è¯·éæ©ç¹æ£æ¥æï¼', trigger: 'change' }] |
| | | }, |
| | | equipmentList: [ |
| | | { |
| | | key: '3140221', |
| | | label: '3140221' |
| | | }, |
| | | { |
| | | key: '3121542', |
| | | label: '3121542' |
| | | }, |
| | | { |
| | | key: '3150324', |
| | | label: '3150324' |
| | | } |
| | | ], |
| | | checkList: [ |
| | | { |
| | | content: 'æ£æ¥è®¾å¤å¨å´æ£çº±ãå·¥å
·ãé¶ä»¶ãå·¥ä½å¨å
·çæ¯å¦æè§å®å®ç½®ææ¾', |
| | | status: 1 |
| | | }, |
| | | { |
| | | content: 'æ£æ¥è®¾å¤PE线æ¥å°æ¯å¦å®å¥½æ ç ´æ', |
| | | status: 1 |
| | | }, |
| | | { |
| | | content: 'æ£æ¥è®¾å¤åå¼å
³æ¯å¦çµæ´»ï¼å¯é ', |
| | | status: 1 |
| | | }, |
| | | { |
| | | content: 'æ£æ¥æ²¹ç®±æ²¹é¢æ¯å¦å¨å»åº¦çº¿ä¸ãæ²¹æ¯å¦åè´¨ãè¿æ»¤ç½æ¯å¦å µå¡ãæ²¹æ°ç®¡è·¯æ¯å¦æ¼æ²¹æ¼æ°', |
| | | status: 1 |
| | | }, |
| | | { |
| | | content: 'ä¿æè®¾å¤è¡¨é¢æ¸
æ´ï¼æ£æ¥æºå¨ä¸ææ 油污ä¸å¼ç©ï¼è¥æé¡»åæ¶æ¸
ç', |
| | | status: 1 |
| | | }, |
| | | { |
| | | content: 'æ£æ¥è®¾å¤åç±»è¡ç¨éä½ï¼èéä¿æ¤è£
ç½®ã鲿¤ç½©åå
¶ä»ä¿æ¤è£
ç½®å®å¥½ï¼å¯é ', |
| | | status: 1 |
| | | }, |
| | | { |
| | | content: 'æ£æ¥è®¾å¤ä»ªå¨ä»ªè¡¨è®¾å¤ç¶ææ 示æ¯å¦å¨æææå
', |
| | | status: 1 |
| | | }, |
| | | { |
| | | content: 'æ£æ¥è®¾å¤å¯å¨ååå¤è¿è¡(转)æ¯å¦æå¼åå¼è£
', |
| | | status: 1 |
| | | } |
| | | ], |
| | | loading: false |
| | | } |
| | | }, |
| | | methods: { |
| | | handleSubmit() { |
| | | const that = this |
| | | this.$refs.form.validate(valid => { |
| | | if (valid) { |
| | | that.loading = true |
| | | |
| | | setTimeout(() => { |
| | | that.loading = false |
| | | }, 2000) |
| | | } else { |
| | | return false |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | .content-container { |
| | | flex: 1; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | align-items: center; |
| | | |
| | | .check-content-container { |
| | | display: flex; |
| | | flex-direction: column; |
| | | margin: 40px auto; |
| | | width: 70%; |
| | | |
| | | > div { |
| | | display: flex; |
| | | justify-content: center; |
| | | border-bottom: 1px dashed #bbb; |
| | | margin-bottom: 20px; |
| | | padding-bottom: 5px; |
| | | |
| | | > div:first-child { |
| | | flex: 0.5; |
| | | text-align: right; |
| | | margin-right: 30px; |
| | | } |
| | | |
| | | > div:last-child { |
| | | flex: 0.5; |
| | | |
| | | /deep/ .ant-radio-wrapper { |
| | | margin-right: 30px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .button-container { |
| | | text-align: center; |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="full-screen-container"> |
| | | <slot name="function"/> |
| | | |
| | | <a-tabs default-active-key="1"> |
| | | <a-tab-pane tab="æå¡ä¸ä¸ç" key="1" dataset="first"> |
| | | <a-space> |
| | | <div>设å¤åç§°ï¼</div> |
| | | <a-select style="width: 250px"> |
| | | |
| | | </a-select> |
| | | </a-space> |
| | | |
| | | |
| | | <div class="button">ä¸ç</div> |
| | | </a-tab-pane> |
| | | |
| | | <a-tab-pane tab="å½å设å¤ç¶æ" key="2"> |
| | | <a-table :dataSource="dataSource" :columns="columns" rowKey="id" bordered :pagination="false"/> |
| | | </a-tab-pane> |
| | | </a-tabs> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'EquipmentStartWork', |
| | | data() { |
| | | return { |
| | | columns: [ |
| | | { |
| | | title: 'ç¨æ·ç¼å·', |
| | | align: 'center', |
| | | dataIndex: 'userId' |
| | | }, |
| | | { |
| | | title: 'ç¨æ·åç§°', |
| | | align: 'center', |
| | | dataIndex: 'username' |
| | | }, |
| | | { |
| | | title: '设å¤ç¼å·', |
| | | align: 'center', |
| | | dataIndex: 'equipmentId' |
| | | }, |
| | | { |
| | | title: 'ä¸çæå¡æ¶é´', |
| | | align: 'center', |
| | | dataIndex: 'startWorkTime' |
| | | }, |
| | | { |
| | | title: 'ä¸çæå¡æ¶é´', |
| | | align: 'center', |
| | | dataIndex: 'finishWorkTime' |
| | | } |
| | | ], |
| | | dataSource: [ |
| | | { |
| | | id: 1, |
| | | equipmentId: '3140132', |
| | | userId: '140016', |
| | | username: 'æéª', |
| | | startWorkTime: '2023/11/13 9:29', |
| | | finishWorkTime: '' |
| | | }, |
| | | { |
| | | id: 2, |
| | | equipmentId: '3140130', |
| | | userId: '140016', |
| | | username: 'æéª', |
| | | startWorkTime: '2023/11/13 9:29', |
| | | finishWorkTime: '' |
| | | } |
| | | ], |
| | | url: { |
| | | list: '' |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | .full-screen-container { |
| | | padding: 24px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | |
| | | /deep/ .ant-tabs { |
| | | flex: 1; |
| | | display: flex; |
| | | flex-direction: column; |
| | | |
| | | .ant-tabs-content { |
| | | width: 100%; |
| | | flex: 1; |
| | | |
| | | .ant-tabs-tabpane[dataset='first'] { |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | align-items: center; |
| | | |
| | | .button { |
| | | font-weight: bold; |
| | | padding: 40px 80px; |
| | | border: 1px solid rgba(0, 0, 0, .2); |
| | | border-radius: 10px; |
| | | margin-top: 200px; |
| | | cursor: pointer; |
| | | box-shadow: 6px 6px 16px rgba(0, 0, 0, 0.2), |
| | | -6px -6px 16px rgba(255, 255, 255, 0.8), |
| | | inset 0 0 0 transparent; |
| | | |
| | | &:hover { |
| | | box-shadow: 0 0 0 transparent, |
| | | inset 6px 6px 12px rgba(0, 0, 0, 0.2), |
| | | inset -6px -6px 12px rgba(255, 255, 255, 0.8); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page-view-container"> |
| | | <slot name="function"/> |
| | | |
| | | <a-card :bordered="false"> |
| | | <!-- æ¥è¯¢åºå --> |
| | | <div class="table-page-search-wrapper"> |
| | | <a-form layout="inline"> |
| | | <a-row :gutter="24"> |
| | | <a-col :span="4"> |
| | | <a-form-item label="设å¤"> |
| | | <a-select placeholder="è¯·éæ©è®¾å¤" v-model="queryParam.equipmentId"></a-select> |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <a-col :span="4"> |
| | | <a-form-item label="å¼å§æ¶é´"> |
| | | <a-date-picker style="width: 100%" show-time placeholder="è¯·éæ©å¼å§æ¶é´" v-model="queryParam.startTime"/> |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <a-col :span="4"> |
| | | <a-form-item label="ç»ææ¶é´"> |
| | | <a-date-picker style="width: 100%" show-time placeholder="è¯·éæ©ç»ææ¶é´" v-model="queryParam.endTime"/> |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <a-col :span="4"> |
| | | <a-form-item label="åæºåå "> |
| | | <a-select placeholder="è¯·éæ©åæºåå " v-model="queryParam.closeReason"></a-select> |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <a-col :span="4"> |
| | | <a-form-item label="åæºæ¶é´"> |
| | | <a-date-picker style="width: 100%" placeholder="è¯·éæ©åæºæ¶é´" v-model="queryParam.closeTime"/> |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <a-col :span="4"> |
| | | <a-space> |
| | | <a-button type="primary" @click="searchQuery" icon="search">æ¥è¯¢</a-button> |
| | | <a-button @click="searchReset" icon="reload">éç½®</a-button> |
| | | </a-space> |
| | | </a-col> |
| | | </a-row> |
| | | |
| | | |
| | | </a-form> |
| | | </div> |
| | | |
| | | <!-- æä½æé®åºå --> |
| | | <div class="table-operator"> |
| | | <a-button type="primary" @click="handleMaintainShutdown">ç»´æ¤åæº</a-button> |
| | | <a-button type="primary" @click="handleSplitShutdownInfo">æååæºä¿¡æ¯</a-button> |
| | | </div> |
| | | |
| | | <a-table :dataSource="dataSource" :columns="columns" rowKey="id" bordered :pagination="false" |
| | | :rowSelection="{selectedRowKeys, onChange: onSelectChange}"/> |
| | | </a-card> |
| | | |
| | | <maintain-shutdown-modal ref="maintainShutdownModal"/> |
| | | |
| | | <split-shutdown-info-modal ref="splitShutdownInfoModal"/> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { JeecgListMixin } from '@/mixins/JeecgListMixin' |
| | | import MaintainShutdownModal from './ReportEquipmentClose/MaintainShutdownModal' |
| | | import SplitShutdownInfoModal from './ReportEquipmentClose/SplitShutdownInfoModal' |
| | | |
| | | export default { |
| | | name: 'ReportEquipmentClose', |
| | | components: { SplitShutdownInfoModal, MaintainShutdownModal }, |
| | | mixins: [JeecgListMixin], |
| | | data() { |
| | | return { |
| | | columns: [ |
| | | { |
| | | title: '设å¤ç¼å·', |
| | | align: 'center', |
| | | dataIndex: 'equipmentId', |
| | | width: 150 |
| | | }, |
| | | { |
| | | title: '设å¤åç§°', |
| | | align: 'center', |
| | | dataIndex: 'equipmentName' |
| | | }, |
| | | { |
| | | title: 'åæºç¼å·', |
| | | align: 'center', |
| | | dataIndex: 'shutdownId' |
| | | }, |
| | | { |
| | | title: 'åæºç±»å', |
| | | align: 'center', |
| | | dataIndex: 'shutdownType' |
| | | }, |
| | | { |
| | | title: 'åæºæ¶é´', |
| | | align: 'center', |
| | | width: 150, |
| | | dataIndex: 'shutdownDuration' |
| | | }, |
| | | { |
| | | title: 'å¼å§æ¶é´', |
| | | align: 'center', |
| | | width: 200, |
| | | dataIndex: 'startTime' |
| | | }, |
| | | { |
| | | title: 'ç»ææ¶é´', |
| | | align: 'center', |
| | | width: 200, |
| | | dataIndex: 'endTime' |
| | | }, |
| | | { |
| | | title: 'å½å
¥ç±»å', |
| | | align: 'center', |
| | | width: 100, |
| | | dataIndex: 'recordType' |
| | | } |
| | | ], |
| | | dataSource: [ |
| | | { |
| | | id: 1, |
| | | equipmentId: '3140221', |
| | | equipmentName: 'æ°æ§æºåº', |
| | | shutdownDuration: 360, |
| | | startTime: '2025-05-20 02:21:49', |
| | | endTime: '2525-05-20 08:21:59', |
| | | recordType: 'èªå¨ä¸æ¥' |
| | | }, |
| | | { |
| | | id: 2, |
| | | equipmentId: '3140221', |
| | | equipmentName: 'æ°æ§æºåº', |
| | | shutdownDuration: 360, |
| | | startTime: '2025-05-20 02:21:49', |
| | | endTime: '2525-05-20 08:21:59', |
| | | recordType: 'èªå¨ä¸æ¥' |
| | | }, |
| | | { |
| | | id: 3, |
| | | equipmentId: '3140221', |
| | | equipmentName: 'æ°æ§æºåº', |
| | | shutdownDuration: 360, |
| | | startTime: '2025-05-20 02:21:49', |
| | | endTime: '2525-05-20 08:21:59', |
| | | recordType: 'èªå¨ä¸æ¥' |
| | | } |
| | | ], |
| | | url: { |
| | | list: '' |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | handleMaintainShutdown() { |
| | | this.$refs.maintainShutdownModal.visible = true |
| | | this.$refs.maintainShutdownModal.model = {} |
| | | }, |
| | | |
| | | handleSplitShutdownInfo() { |
| | | this.$refs.splitShutdownInfoModal.visible = true |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <a-modal :visible="visible" title="ç»´æ¤åæº" @ok="handleSubmit" @cancel="handleCancel"> |
| | | <a-form-model ref="form" :model="model" :rules="validateRules" :labelCol="{span:5}" :wrapperCol="{span:18}"> |
| | | <a-form-model-item prop="closeReason" label="åæºåå "> |
| | | <a-select v-model="model.closeReason" placeholder="è¯·éæ©åæºåå "> |
| | | <a-select-option v-for="item in closeReasonList" :key="item.id"> |
| | | {{item.label}} |
| | | </a-select-option> |
| | | </a-select> |
| | | </a-form-model-item> |
| | | </a-form-model> |
| | | </a-modal> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'MaintainShutdownModal', |
| | | data() { |
| | | return { |
| | | visible: false, |
| | | model: {}, |
| | | validateRules: { |
| | | closeReason: [{ required: true, message: 'è¯·éæ©åæºåå ï¼' }] |
| | | }, |
| | | closeReasonList: [ |
| | | { |
| | | id: 1, |
| | | label: 'å饿¶é´ä¼æ¯' |
| | | }, |
| | | { |
| | | id: 2, |
| | | label: '工使¶é´ä¼æ¯' |
| | | }, |
| | | { |
| | | id: 3, |
| | | label: 'è®¡åæ§åçµ' |
| | | }, |
| | | { |
| | | id: 4, |
| | | label: 'å¾
æåæº' |
| | | }, |
| | | { |
| | | id: 5, |
| | | label: 'é¦ä»¶è°è¯' |
| | | }, |
| | | { |
| | | id: 6, |
| | | label: 'åéå
·åå¤' |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | methods: { |
| | | handleSubmit() { |
| | | |
| | | }, |
| | | |
| | | handleCancel() { |
| | | this.$refs.form.clearValidate() |
| | | this.visible = false |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <a-modal :visible="visible" :width="800" title="æååæºä¿¡æ¯" @ok="handleSubmit" @cancel="handleCancel"> |
| | | <a-form-model ref="form" :model="model" :rules="validateRules" :labelCol="{span:8}" :wrapperCol="{span:12}"> |
| | | <a-row> |
| | | <a-col :span="10"> |
| | | <a-form-model-item prop="startTime" label="å¼å§æ¶é´"> |
| | | <a-date-picker show-time value-format="YYYY-MM-DD HH:mm:ss" v-model="model.startTime"/> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | </a-row> |
| | | |
| | | <div v-for="item in splitList" :key="item.title"> |
| | | <a-divider orientation="left">{{item.title}}</a-divider> |
| | | |
| | | <a-row> |
| | | <a-col :span="10"> |
| | | <a-form-model-item prop="endTime" label="ç»ææ¥æ"> |
| | | <a-date-picker show-time value-format="YYYY-MM-DD HH:mm:ss" v-model="item.splitParams.endTime"/> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | |
| | | <a-col :span="10"> |
| | | <a-form-model-item prop="closeReason" label="åæºåå "> |
| | | <a-select v-model="item.splitParams.closeReason" placeholder="è¯·éæ©åæºåå "> |
| | | <a-select-option v-for="item in closeReasonList" :key="item.id"> |
| | | {{item.label}} |
| | | </a-select-option> |
| | | </a-select> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | |
| | | <a-col :span="4"> |
| | | <a-form-model-item label="éæ©"> |
| | | <a-checkbox @change="handleCheckboxChange(item,$event)"/> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | </a-row> |
| | | </div> |
| | | </a-form-model> |
| | | </a-modal> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'SplitShutdownInfoModal', |
| | | data() { |
| | | return { |
| | | visible: false, |
| | | model: {}, |
| | | validateRules: { |
| | | startTime: [{ required: true, message: 'è¯·éæ©å¼å§æ¶é´ï¼', trigger: 'change' }] |
| | | }, |
| | | closeReasonList: [ |
| | | { |
| | | id: 1, |
| | | label: 'å饿¶é´ä¼æ¯' |
| | | }, |
| | | { |
| | | id: 2, |
| | | label: '工使¶é´ä¼æ¯' |
| | | }, |
| | | { |
| | | id: 3, |
| | | label: 'è®¡åæ§åçµ' |
| | | }, |
| | | { |
| | | id: 4, |
| | | label: 'å¾
æåæº' |
| | | }, |
| | | { |
| | | id: 5, |
| | | label: 'é¦ä»¶è°è¯' |
| | | }, |
| | | { |
| | | id: 6, |
| | | label: 'åéå
·åå¤' |
| | | } |
| | | ], |
| | | splitList: [ |
| | | { |
| | | title: 'æå䏿®µ', |
| | | splitParams: {} |
| | | }, |
| | | { |
| | | title: 'æåäºæ®µ', |
| | | splitParams: {} |
| | | }, |
| | | { |
| | | title: 'æå䏿®µ', |
| | | splitParams: {} |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | methods: { |
| | | handleCheckboxChange(record, event) { |
| | | console.log('record', record) |
| | | record.splitParams.checked = event.target.checked |
| | | }, |
| | | |
| | | handleSubmit() { |
| | | this.$refs.form.validate(valid => { |
| | | if (valid) { |
| | | |
| | | } else { |
| | | return false |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | handleCancel() { |
| | | this.$refs.form.clearValidate() |
| | | this.visible = false |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <slot name="function"/> |
| | | |
| | | <div class="content-container"> |
| | | <a-form-model ref="form" :model="model" :rules="validateRules" :labelCol="{span:10}" :wrapperCol="{span:6}"> |
| | | <a-form-model-item label="设å¤åç§°" prop="equipmentId"> |
| | | <a-select placeholder="è¯·éæ©è®¾å¤" v-model="model.equipmentId"></a-select> |
| | | </a-form-model-item> |
| | | <a-form-model-item label="æ
éåå " prop="faultReasonId"> |
| | | <a-select placeholder="è¯·éæ©æ
éåå " v-model="model.faultReasonId"></a-select> |
| | | </a-form-model-item> |
| | | <a-form-model-item label="æ
éæè¿°" prop="faultDescription"> |
| | | <a-textarea placeholder="请è¾å
¥æ
éæè¿°" v-model="model.faultDescription"/> |
| | | </a-form-model-item> |
| | | |
| | | <div style="text-align: center"> |
| | | <a-space> |
| | | <a-button @click="handleReportFault">æ
é䏿¥</a-button> |
| | | <a-button>æ
éè§£é¤</a-button> |
| | | </a-space> |
| | | </div> |
| | | </a-form-model> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'ReportEquipmentFault', |
| | | data() { |
| | | return { |
| | | model: {}, |
| | | validateRules: { |
| | | equipmentId: [{ required: true, message: 'è¯·éæ©è®¾å¤ï¼' }], |
| | | faultReasonId: [{ required: true, message: 'è¯·éæ©æ
éåå ï¼' }], |
| | | faultDescription: [{ required: true, message: '请è¾å
¥æ
éæè¿°ï¼' }] |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | handleReportFault() { |
| | | this.$refs.form.validate(valid => { |
| | | if (valid) { |
| | | |
| | | } else { |
| | | return false |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | .content-container { |
| | | flex: 1; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | |
| | | /deep/ .ant-form { |
| | | width: 100%; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | disableSubmit: false, |
| | | dateFormat: 'YYYY-MM-DD', |
| | | validatorRules: { |
| | | workNo:[{ required: true, message: '请è¾å
¥å·¥å·!' }], |
| | | username: [{ required: true, message: '请è¾å
¥ç¨æ·è´¦å·!' }, |
| | | { validator: this.validateUsername }], |
| | | password: [ |
| | |
| | | // this.$router.push({ path: "/isps/userAnnouncement" }).catch(() => { |
| | | // console.log('ç»å½è·³è½¬é¦é¡µåºé,è¿ä¸ªé误ä»åªéæ¥ç') |
| | | // }) |
| | | |
| | | this.$router.push({ path: '/dashboard/analysis' }).catch(() => { |
| | | console.log('ç»å½è·³è½¬é¦é¡µåºé,è¿ä¸ªé误ä»åªéæ¥ç') |
| | | }) |
| | | |
| | | if(this.$route.query.redirect.split('/')[1] === 'terminal') return |
| | | |
| | | this.$notification.success({ |
| | | message: '欢è¿', |
| | | description: `${timeFix()}ï¼æ¬¢è¿åæ¥` |
| | |
| | | duration: 60, |
| | | icon: <a-icon type = 'exclamation-circle'style = 'color:red' / >, |
| | | }) |
| | | |
| | | } |
| | | } |
| | | }) |