From e14ed882d12df3b48e59390eba364442cdff70bd Mon Sep 17 00:00:00 2001 From: lyh <925863403@qq.com> Date: 星期三, 28 五月 2025 15:46:32 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/views/tms/requirement/ToolSharpeningList .vue | 249 src/views/flowable/workflow/inboundOrder/InboundOrderHandle.vue | 445 + src/views/tms/modules/baseTools/BaseToolsListLeft.vue | 9 src/views/tms/requirement/modules/ToolsModal.vue | 221 src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningModal.vue | 60 src/views/system/modules/UserModal.vue | 1 src/views/tms/modules/inbound/InboundListLeft.vue | 323 + src/views/tms/modules/outBound/OutboundModal.vue | 312 + src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningForm.vue | 221 src/views/tms/modules/toolsClassify/ToolsClassifyListRight.vue | 14 src/views/tms/lossBound/LossboundDetailList.vue | 180 src/views/tms/modules/toolsClassify/ToolsClassifyForm.vue | 2 src/views/dnc/base/TerminalIndex.vue | 109 src/views/eam/dispose/EamEquipmentSealUpList.vue | 37 src/views/flowable/workflow/lossBound/lossBoundHandle.vue | 505 + src/views/tms/modules/inboundOrder/InboundOrderModel.vue | 600 ++ src/permission.js | 90 src/views/eam/dispose/EamEquipmentLeanOutList.vue | 2 src/views/flowable/workflow/scrap/EquipmentScrapApprovalModal.vue | 223 src/views/tms/InboundList.vue | 39 src/views/tms/modules/outBound/OutboundDetailSelectList.vue | 215 src/views/tms/lossBound/modules/LossboundModal.vue | 434 + src/views/tms/modules/inbound/InboundListRight.vue | 515 + src/views/tms/lossBound/modules/LossboundDetailModal.vue | 141 src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue | 156 src/views/tms/stocktakingBound/ToolsStocktakingBoundList.vue | 322 + src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue | 66 src/views/tms/modules/inboundOrder/JSelectToolingModal.vue | 254 src/views/eam/dispose/modules/EamEquipmentTransferModal.vue | 93 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue | 68 src/views/tms/modules/baseTools/BaseToolsListRight.vue | 30 src/views/tms/modules/inboundOrder/JSelectReturnListModal.vue | 290 + src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue | 121 src/views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue | 524 + src/views/tms/modules/outBound/OutboundListRight.vue | 430 + src/views/eam/dispose/modules/EamEquipmentScrapModal.vue | 243 src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue | 128 src/views/tms/stocktakingBound/ToolsStocktaKingBoundDetail.vue | 224 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue | 175 src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue | 14 src/components/layouts/TerminalLayout.vue | 126 src/views/user/Login.vue | 5 src/views/eam/spare/EamSparePartRequisitionList.vue | 932 ++- src/views/eam/dispose/EamEquipmentScrapList.vue | 379 src/views/eam/maintenance/EamThirdMaintenanceOrderList.vue | 14 src/views/tms/storeEarlyWarning/ToolsStoreEarlyWarningList.vue | 315 + src/views/eam/dispose/modules/EamEquipmentLeanOutModal.vue | 11 src/views/tms/OutboundList.vue | 39 src/views/eam/equipment/EamEquipmentList.vue | 28 src/views/tms/lossBound/LossboundList.vue | 317 + src/views/tms/InboundOrderList.vue | 241 src/views/dnc/base/modules/ProductStructure/Document/NcComponentBorrowModal.vue | 31 src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue | 169 src/config/router.config.js | 45 src/views/tms/modules/outBound/OutboundOrderModal.vue | 16 src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue | 221 src/views/flowable/workflow/FlowTodo.vue | 844 +- src/views/tms/stocktakingBound/modules/ToolsStocktakingBoundModal.vue | 515 + src/views/tms/stocktakingBound/modules/ToolSelectorModal.vue | 216 src/components/layouts/index.js | 3 src/views/dnc/base/OperatorLogin.vue | 268 + src/views/tms/modules/inboundOrder/JSelectSharpenListModal.vue | 273 + src/views/eam/dispose/EamEquipmentTransferList.vue | 387 src/views/tms/modules/inbound/InboundModel.vue | 535 ++ src/views/tms/requirement/modules/ToolsSharpeningModal.vue | 286 + src/views/tms/modules/outBound/JSelectOutboundToolModal.vue | 12 src/assets/operator-login-bg.png | 0 /dev/null | 124 src/views/flowable/workflow/transfer/EquipmentTransferApprovalModal.vue | 235 src/views/tms/modules/outBound/OutboundListLeft.vue | 322 + src/views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchModal.vue | 10 src/views/tms/modules/outBound/OutboundOrderSelectList.vue | 330 + src/views/tms/modules/inboundOrder/InboundDetailList.vue | 88 src/views/eam/dispose/modules/EamEquipmentSealUpModal.vue | 7 src/views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue | 59 src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue | 2 src/views/flowable/workflow/FlowCompleted.vue | 466 src/views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue | 3 78 files changed, 14,209 insertions(+), 1,750 deletions(-) diff --git a/src/assets/operator-login-bg.png b/src/assets/operator-login-bg.png new file mode 100644 index 0000000..55de0cf --- /dev/null +++ b/src/assets/operator-login-bg.png Binary files differ diff --git a/src/components/layouts/TerminalLayout.vue b/src/components/layouts/TerminalLayout.vue new file mode 100644 index 0000000..01ef462 --- /dev/null +++ b/src/components/layouts/TerminalLayout.vue @@ -0,0 +1,126 @@ +<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> \ No newline at end of file diff --git a/src/components/layouts/index.js b/src/components/layouts/index.js index 7cf0f77..644c25b 100644 --- a/src/components/layouts/index.js +++ b/src/components/layouts/index.js @@ -4,5 +4,6 @@ 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 } \ No newline at end of file +export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView, TabLayout, TerminalLayout } \ No newline at end of file diff --git a/src/config/router.config.js b/src/config/router.config.js index 2154e1f..9f2dac3 100644 --- a/src/config/router.config.js +++ b/src/config/router.config.js @@ -1,4 +1,4 @@ -import { UserLayout, TabLayout, RouteView, BlankLayout, PageView } from '@/components/layouts' +import { UserLayout, TabLayout, RouteView, BlankLayout, PageView, TerminalLayout } from '@/components/layouts' /** * 璧拌彍鍗曪紝璧版潈闄愭帶鍒� @@ -49,7 +49,7 @@ path: 'alteration', name: 'alteration', component: () => import(/* webpackChunkName: "user" */ '@/views/user/alteration/Alteration') - }, + } ] }, { @@ -63,7 +63,7 @@ path: 'login', name: 'oauth2-app-login', component: () => import(/* webpackChunkName: "oauth2-app.login" */ '@/views/user/oauth2/OAuth2Login') - }, + } ] }, @@ -84,8 +84,45 @@ 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') - }, + } ] diff --git a/src/permission.js b/src/permission.js index fe8d825..ddd93e2 100644 --- a/src/permission.js +++ b/src/permission.js @@ -4,12 +4,12 @@ import NProgress from 'nprogress' // progress bar import 'nprogress/nprogress.css' // progress bar style import notification from 'ant-design-vue/es/notification' -import { ACCESS_TOKEN,INDEX_MAIN_PAGE_PATH, OAUTH2_LOGIN_PAGE_PATH } from '@/store/mutation-types' +import { ACCESS_TOKEN, INDEX_MAIN_PAGE_PATH, OAUTH2_LOGIN_PAGE_PATH } from '@/store/mutation-types' import { generateIndexRouter, isOAuth2AppEnv } from '@/utils/util' 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) => { @@ -21,8 +21,8 @@ to.matched.splice(2, to.matched.length - 3) } //update-end---author:scott ---date::2022-10-13 for锛歔jeecg-boot/issues/4091]澶氱骇璺敱缂撳瓨闂 #4091-------------- - - + + NProgress.start() // start progress bar if (Vue.ls.get(ACCESS_TOKEN)) { @@ -30,57 +30,75 @@ 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; - //console.log(res.message) - if (menuData === null || menuData === "" || menuData === undefined) { - return; + const menuData = res.result.menu + //console.log(res.message) + if (menuData === null || menuData === '' || menuData === undefined) { + return + } + let constRoutes = [] + constRoutes = generateIndexRouter(menuData) + // 娣诲姞涓荤晫闈㈣矾鐢� + store.dispatch('UpdateAppRouter', { constRoutes }).then(() => { + // 鏍规嵁roles鏉冮檺鐢熸垚鍙闂殑璺敱琛� + // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛� + router.addRoutes(store.getters.addRouters) + const redirect = decodeURIComponent(from.query.redirect || to.path) + if (to.path === redirect) { + // hack鏂规硶 纭繚addRoutes宸插畬鎴� ,set the replace: true so the navigation will not leave a history record + 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 }) } - let constRoutes = []; - constRoutes = generateIndexRouter(menuData); - // 娣诲姞涓荤晫闈㈣矾鐢� - store.dispatch('UpdateAppRouter', { constRoutes }).then(() => { - // 鏍规嵁roles鏉冮檺鐢熸垚鍙闂殑璺敱琛� - // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛� - router.addRoutes(store.getters.addRouters) - const redirect = decodeURIComponent(from.query.redirect || to.path) - if (to.path === redirect) { - // hack鏂规硶 纭繚addRoutes宸插畬鎴� ,set the replace: true so the navigation will not leave a history record - next({ ...to, replace: true }) - } else { - // 璺宠浆鍒扮洰鐨勮矾鐢� - next({ path: redirect }) - } - }) - }) + } + }) + }) .catch(() => { - /* notification.error({ - message: '绯荤粺鎻愮ず', - description: '璇锋眰鐢ㄦ埛淇℃伅澶辫触锛岃閲嶈瘯锛�' - })*/ + /* notification.error({ + message: '绯荤粺鎻愮ず', + description: '璇锋眰鐢ㄦ埛淇℃伅澶辫触锛岃閲嶈瘯锛�' + })*/ store.dispatch('Logout').then(() => { next({ path: '/user/login', query: { redirect: to.fullPath } }) }) }) - } else { - next() + } + 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椤甸潰骞朵笖褰撳墠鏄疧Auth2app鐜锛屽氨杩涘叆OAuth2鐧诲綍椤甸潰 if (to.path === '/user/login' && isOAuth2AppEnv()) { - next({path: OAUTH2_LOGIN_PAGE_PATH}) + next({ path: OAUTH2_LOGIN_PAGE_PATH }) } else { // 鍦ㄥ厤鐧诲綍鐧藉悕鍗曪紝鐩存帴杩涘叆 next() } NProgress.done() - } else { + } + else { // 濡傛灉褰撳墠鏄湪OAuth2APP鐜锛屽氨璺宠浆鍒癘Auth2鐧诲綍椤甸潰 - 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 } diff --git a/src/views/dnc/base/OperatorLogin.vue b/src/views/dnc/base/OperatorLogin.vue new file mode 100644 index 0000000..1f57fad --- /dev/null +++ b/src/views/dnc/base/OperatorLogin.vue @@ -0,0 +1,268 @@ +<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> diff --git a/src/views/dnc/base/TerminalIndex.vue b/src/views/dnc/base/TerminalIndex.vue new file mode 100644 index 0000000..0289c4e --- /dev/null +++ b/src/views/dnc/base/TerminalIndex.vue @@ -0,0 +1,109 @@ +<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> \ No newline at end of file diff --git a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue index 3003661..41d4ac9 100644 --- a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue +++ b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue @@ -242,7 +242,7 @@ * @param treeNode */ setTreeNodeIcon(treeNode) { - if (!treeNode.equipmentId) { + if (+treeNode.type === 1) { treeNode.slots = { icon: 'workshop' } } else { treeNode.slots = { icon: 'device' } diff --git a/src/views/dnc/base/modules/ProductStructure/Document/NcComponentBorrowModal.vue b/src/views/dnc/base/modules/ProductStructure/Document/NcComponentBorrowModal.vue index 95d5ab0..8dd02fc 100644 --- a/src/views/dnc/base/modules/ProductStructure/Document/NcComponentBorrowModal.vue +++ b/src/views/dnc/base/modules/ProductStructure/Document/NcComponentBorrowModal.vue @@ -12,44 +12,43 @@ <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="閮ㄤ欢浠e彿"> <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" @@ -137,13 +136,13 @@ title: '鍒涘缓鏃堕棿', dataIndex: 'createTime', align: 'center', - width: 150, + width: 100, }, { title: '鍒涘缓浜�', dataIndex: 'createBy_dictText', align: 'center', - width: 100, + width: 60, } ], searchValue: '', @@ -305,6 +304,10 @@ <style scoped lang="less"> /deep/ .ant-modal { + .ant-modal-body{ + padding: 0 24px 12px; + } + .tabs-container { display: flex; justify-content: space-between; diff --git a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchModal.vue b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchModal.vue index 29b0cb7..cba2b4a 100644 --- a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchModal.vue +++ b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchModal.vue @@ -44,7 +44,7 @@ </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> @@ -173,11 +173,11 @@ ] }, { - title: '鐘� 鎬�', + title: '鐘� 鎬�', dataIndex: 'docDispatchStatus_dictText', key: 'docDispatchStatus', align: 'center', - width: 60, + width: 80, filters: [ { text: '缂栧埗', value: 1 }, { text: '鏍″', value: 2 }, @@ -498,6 +498,10 @@ <style scoped lang="less"> /deep/ .ant-modal { + .ant-modal-body{ + padding: 0 24px 12px; + } + .tabs-container { display: flex; justify-content: space-between; diff --git a/src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue b/src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue new file mode 100644 index 0000000..a1503d1 --- /dev/null +++ b/src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue @@ -0,0 +1,169 @@ +<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">姝e父</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: '妫�鏌ヨ澶嘝E绾挎帴鍦版槸鍚﹀畬濂芥棤鐮存崯', + 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> \ No newline at end of file diff --git a/src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue b/src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue new file mode 100644 index 0000000..9ca8f85 --- /dev/null +++ b/src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue @@ -0,0 +1,128 @@ +<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> \ No newline at end of file diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue new file mode 100644 index 0000000..0f5f685 --- /dev/null +++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue @@ -0,0 +1,175 @@ +<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> \ No newline at end of file diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue new file mode 100644 index 0000000..36053ea --- /dev/null +++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue @@ -0,0 +1,68 @@ +<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> \ No newline at end of file diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue new file mode 100644 index 0000000..967c357 --- /dev/null +++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue @@ -0,0 +1,121 @@ +<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> \ No newline at end of file diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue new file mode 100644 index 0000000..8514266 --- /dev/null +++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue @@ -0,0 +1,66 @@ +<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>鏁呴殰瑙i櫎</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> \ No newline at end of file diff --git a/src/views/eam/dispose/EamEquipmentLeanOutList.vue b/src/views/eam/dispose/EamEquipmentLeanOutList.vue index afab556..ec649a4 100644 --- a/src/views/eam/dispose/EamEquipmentLeanOutList.vue +++ b/src/views/eam/dispose/EamEquipmentLeanOutList.vue @@ -86,7 +86,7 @@ </a-dropdown> </template> <template v-else> - <a @click="handleDetail(record)">璇︽儏</a> + <a href="javascript:;" @click="handleDetail(record)">璇︽儏</a> </template> </span> diff --git a/src/views/eam/dispose/EamEquipmentScrapList.vue b/src/views/eam/dispose/EamEquipmentScrapList.vue index 61fbecf..d9986e6 100644 --- a/src/views/eam/dispose/EamEquipmentScrapList.vue +++ b/src/views/eam/dispose/EamEquipmentScrapList.vue @@ -1,46 +1,47 @@ <template> - <a-card :bordered="false"> + <a-card :bordered='false'> <!-- 鏌ヨ鍖哄煙 --> - <div class="table-page-search-wrapper"> - <a-form layout="inline" @keyup.enter.native="searchQuery"> - <a-row :gutter="24"> + <div class='table-page-search-wrapper'> + <a-form layout='inline' @keyup.enter.native='searchQuery'> + <a-row :gutter='24'> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="鍒犻櫎鏍囪"> - <a-input placeholder="璇疯緭鍏ュ垹闄ゆ爣璁�" v-model="queryParam.delFlag"></a-input> + <a-col :lg='7' :md='8' :sm='24' :xl='6'> + <a-form-item label='璁惧缂栧彿'> + <lx-search-equipment-select v-model='queryParam.equipmentId' + placeholder='璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储'></lx-search-equipment-select> </a-form-item> </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="鍗曟嵁鍙�"> - <a-input placeholder="璇疯緭鍏ュ崟鎹彿" v-model="queryParam.code"></a-input> + <a-col :lg='7' :md='8' :sm='24' :xl='6'> + <a-form-item label='鍗曟嵁鍙�'> + <a-input v-model='queryParam.code' placeholder='璇疯緭鍏ュ崟鎹彿'></a-input> </a-form-item> </a-col> - <template v-if="toggleSearchStatus"> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="璁惧ID"> - <a-input placeholder="璇疯緭鍏ヨ澶嘔D" v-model="queryParam.equipmentId"></a-input> - </a-form-item> - </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="杞/鎶ュ簾"> - <a-input placeholder="璇疯緭鍏ヨ浆璁�/鎶ュ簾" v-model="queryParam.scrapType"></a-input> - </a-form-item> - </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="鐢宠浜�"> - <a-input placeholder="璇疯緭鍏ョ敵璇蜂汉" v-model="queryParam.reportUser"></a-input> - </a-form-item> - </a-col> + <template v-if='toggleSearchStatus'> + <a-col :lg='7' :md='8' :sm='24' :xl='6'> + <a-form-item label='璁惧ID'> + <a-input v-model='queryParam.equipmentId' placeholder='璇疯緭鍏ヨ澶嘔D'></a-input> + </a-form-item> + </a-col> + <a-col :lg='7' :md='8' :sm='24' :xl='6'> + <a-form-item label='杞/鎶ュ簾'> + <a-input v-model='queryParam.scrapType' placeholder='璇疯緭鍏ヨ浆璁�/鎶ュ簾'></a-input> + </a-form-item> + </a-col> + <a-col :lg='7' :md='8' :sm='24' :xl='6'> + <a-form-item label='鐢宠浜�'> + <a-input v-model='queryParam.reportUser' placeholder='璇疯緭鍏ョ敵璇蜂汉'></a-input> + </a-form-item> + </a-col> </template> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> - <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> - <a @click="handleToggleSearch" style="margin-left: 8px"> - {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> - </a> + <a-col :lg='7' :md='8' :sm='24' :xl='6'> + <span class='table-page-search-submitButtons' style='float: left;overflow: hidden;'> + <a-button icon='search' type='primary' @click='searchQuery'>鏌ヨ</a-button> + <a-button icon='reload' style='margin-left: 8px' type='primary' @click='searchReset'>閲嶇疆</a-button> + <!-- <a @click="handleToggleSearch" style="margin-left: 8px">--> + <!-- {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}--> + <!-- <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>--> + <!-- </a>--> </span> </a-col> @@ -49,54 +50,66 @@ </div> <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> - <div class="table-operator"> - <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> - <a-button type="primary" icon="download" @click="handleExportXls('璁惧鎶ュ簾(杞)')">瀵煎嚭</a-button> - <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> - <a-button type="primary" icon="import">瀵煎叆</a-button> - </a-upload> - <a-dropdown v-if="selectedRowKeys.length > 0"> - <a-menu slot="overlay"> - <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item> + <div class='table-operator'> + <a-button icon='plus' type='primary' @click='handleAdd'>鏂板</a-button> + <a-dropdown v-if='selectedRowKeys.length > 0'> + <a-menu slot='overlay'> + <a-menu-item key='1' @click='batchDel'> + <a-icon type='delete' /> + 鍒犻櫎 + </a-menu-item> </a-menu> - <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button> + <a-button style='margin-left: 8px'> 鎵归噺鎿嶄綔 + <a-icon type='down' /> + </a-button> </a-dropdown> </div> <!-- table鍖哄煙-begin --> <div> - <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> - <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� - <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + <div class='ant-alert ant-alert-info' style='margin-bottom: 16px;'> + <i class='anticon anticon-info-circle ant-alert-icon'></i> 宸查�夋嫨 <a + style='font-weight: 600'>{{ selectedRowKeys.length }}</a>椤� + <a style='margin-left: 24px' @click='onClearSelected'>娓呯┖</a> </div> <a-table - ref="table" - size="middle" + ref='table' + :columns='columns' + :dataSource='dataSource' + :loading='loading' + :pagination='ipagination' + :rowSelection='{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}' bordered - rowKey="id" - :columns="columns" - :dataSource="dataSource" - :pagination="ipagination" - :loading="loading" - class="j-table-force-nowrap" - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" - @change="handleTableChange"> + class='j-table-force-nowrap' + rowKey='id' + size='middle' + @change='handleTableChange'> - <span slot="action" slot-scope="text, record"> - <a @click="handleEdit(record)">缂栬緫</a> + <span slot='action' slot-scope='text, record'> + <template v-if="record.scrapStatus === 'WAIT_SUBMIT'"> + <a-popconfirm title='纭畾鎻愪氦鍚�?' @confirm='() => handleSubmit(record.id)'> + <a>鎻愪氦</a> + </a-popconfirm> + <a-divider type='vertical' /> - <a-divider type="vertical" /> <a-dropdown> - <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> - <a-menu slot="overlay"> + <a class='ant-dropdown-link'>鏇村 <a-icon type='down' /></a> + <a-menu slot='overlay'> + <a-menu-item> + <a @click='handleEdit(record)'>缂栬緫</a> + </a-menu-item> <a-menu-item> - <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a-popconfirm title='纭畾鍒犻櫎鍚�?' @confirm='() => handleDelete(record.id)'> <a>鍒犻櫎</a> </a-popconfirm> </a-menu-item> </a-menu> </a-dropdown> + </template> + <template v-else> + <a href='javascript:;' @click='handleDetail(record)'>璇︽儏</a> + </template> </span> </a-table> @@ -104,122 +117,156 @@ <!-- table鍖哄煙-end --> <!-- 琛ㄥ崟鍖哄煙 --> - <eamEquipmentScrap-modal ref="modalForm" @ok="modalFormOk"></eamEquipmentScrap-modal> + <eamEquipmentScrap-modal ref='modalForm' @ok='modalFormOk'></eamEquipmentScrap-modal> </a-card> </template> <script> - import '@/assets/less/TableExpand.less' - import EamEquipmentScrapModal from './modules/EamEquipmentScrapModal' - import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import '@/assets/less/TableExpand.less' +import EamEquipmentScrapModal from './modules/EamEquipmentScrapModal' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue' +import { getAction } from '@api/manage' - export default { - name: "EamEquipmentScrapList", - mixins:[JeecgListMixin], - components: { - EamEquipmentScrapModal - }, - data () { - return { - description: '璁惧鎶ュ簾(杞)绠$悊椤甸潰', - // 琛ㄥご - columns: [ - { - title: '#', - dataIndex: '', - key:'rowIndex', - width:60, - align:"center", - customRender:function (t,r,index) { - return parseInt(index)+1; - } - }, - { - title: '鍒犻櫎鏍囪', - align:"center", - dataIndex: 'delFlag' - }, - { - title: '鍗曟嵁鍙�', - align:"center", - dataIndex: 'code' - }, - { - title: '璁惧ID', - align:"center", - dataIndex: 'equipmentId' - }, - { - title: '杞/鎶ュ簾', - align:"center", - dataIndex: 'scrapType' - }, - { - title: '鐢宠浜�', - align:"center", - dataIndex: 'reportUser' - }, - { - title: '澶勭疆鏃堕棿', - align:"center", - dataIndex: 'scrapTime' - }, - { - title: '澶勭疆鐞嗙敱', - align:"center", - dataIndex: 'scrapReason' - }, - { - title: '澶勭疆閲戦', - align:"center", - dataIndex: 'scrapAmount' - }, - { - title: '瀹℃牳浜�', - align:"center", - dataIndex: 'approvalUser' - }, - { - title: '瀹℃牳鎰忚', - align:"center", - dataIndex: 'approvalComment' - }, - { - title: '瀹℃牳鏃堕棿', - align:"center", - dataIndex: 'approvalTime' - }, - { - title: '澶囨敞', - align:"center", - dataIndex: 'remark' - }, - { - title: '鎿嶄綔', - dataIndex: 'action', - align:"center", - scopedSlots: { customRender: 'action' }, + +export default { + name: 'EamEquipmentScrapList', + mixins: [JeecgListMixin], + components: { + EamEquipmentScrapModal, + LxSearchEquipmentSelect + }, + data() { + return { + description: '璁惧鎶ュ簾(杞)绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 } - ], - url: { - list: "/eam/eamEquipmentScrap/list", - delete: "/eam/eamEquipmentScrap/delete", - deleteBatch: "/eam/eamEquipmentScrap/deleteBatch", - exportXlsUrl: "eam/eamEquipmentScrap/exportXls", - importExcelUrl: "eam/eamEquipmentScrap/importExcel", - }, + }, + { + title: '鍗曟嵁鍙�', + align: 'center', + dataIndex: 'code' + }, + { + title: '璁惧缂栧彿', + align: 'center', + dataIndex: 'equipmentCode' + }, + { + title: '璁惧鍚嶇О', + align: 'center', + dataIndex: 'equipmentName' + }, + { + title: '杞/鎶ュ簾', + align: 'center', + dataIndex: 'scrapType_dictText' + }, + { + title: '鐢宠浜�', + align: 'center', + dataIndex: 'reportUser_dictText' + }, + { + title: '澶勭疆鏃堕棿', + align: 'center', + dataIndex: 'scrapTime' + }, + { + title: '澶勭疆鐞嗙敱', + align: 'center', + dataIndex: 'scrapReason' + }, + { + title: '澶勭疆閲戦', + align: 'center', + dataIndex: 'scrapAmount' + }, + { + title: '澶勭疆鐘舵��', + align: 'center', + dataIndex: 'scrapStatus_dictText' + }, + { + title: '瀹℃牳浜�', + align: 'center', + dataIndex: 'approvalUser_dictText' + }, + { + title: '瀹℃牳鎰忚', + align: 'center', + dataIndex: 'approvalComment' + }, + { + title: '瀹℃牳鏃堕棿', + align: 'center', + dataIndex: 'approvalTime' + }, + { + title: '澶囨敞', + align: 'center', + dataIndex: 'remark' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + fixed: 'right', + width: 150, + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: '/eam/eamEquipmentScrap/list', + delete: '/eam/eamEquipmentScrap/delete', + deleteBatch: '/eam/eamEquipmentScrap/deleteBatch', + submit: '/eam/eamEquipmentScrap/submit' + } } }, computed: { - importExcelUrl: function(){ - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + importExcelUrl: function() { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` } }, - methods: { - + methods: { + handleSubmit(id) { + if (!this.url.submit) { + this.$message.error('璇疯缃畊rl.submit灞炴��!') + return + } + let that = this + getAction(that.url.submit, { id: id }).then((res) => { + if (res.success) { + //閲嶆柊璁$畻鍒嗛〉闂 + that.reCalculatePage(1) + // that.$message.success(res.message); + that.$notification.success({ + message: '娑堟伅', + description: res.message + }) + that.loadData() + } else { + // that.$message.warning(res.message); + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) } } +} </script> <style scoped> - @import '~@assets/less/common.less'; +@import '~@assets/less/common.less'; </style> \ No newline at end of file diff --git a/src/views/eam/dispose/EamEquipmentSealUpList.vue b/src/views/eam/dispose/EamEquipmentSealUpList.vue index de6c055..c26873b 100644 --- a/src/views/eam/dispose/EamEquipmentSealUpList.vue +++ b/src/views/eam/dispose/EamEquipmentSealUpList.vue @@ -79,7 +79,14 @@ <a>鍒犻櫎</a> </a-popconfirm> </template> - <template v-else> + <template v-if="record.sealStatus === 'SEALED'"> + <a-popconfirm title='纭畾鍚皝鍚�?' @confirm='() => handleUnseal(record.id)'> + <a>鍚皝</a> + </a-popconfirm> + <a-divider type='vertical' /> + <a @click='handleDetail(record)'>璇︽儏</a> + </template> + <template v-if="record.sealStatus === 'COMPLETE'|| record.sealStatus === 'WAIT_UNSEALING_AUDIT' "> <a @click='handleDetail(record)'>璇︽儏</a> </template> </span> @@ -188,7 +195,8 @@ list: '/eam/eamEquipmentSealUp/list', delete: '/eam/eamEquipmentSealUp/delete', deleteBatch: '/eam/eamEquipmentSealUp/deleteBatch', - submit: '/eam/eamEquipmentSealUp/submit' + submit: '/eam/eamEquipmentSealUp/submit', + unseal: '/eam/eamEquipmentSealUp/unseal' } } }, @@ -222,6 +230,31 @@ }) } }) + }, + handleUnseal(id) { + if (!this.url.unseal) { + this.$message.error('璇疯缃畊rl.submit灞炴��!') + return + } + let that = this + getAction(that.url.unseal, { id: id }).then((res) => { + if (res.success) { + //閲嶆柊璁$畻鍒嗛〉闂 + that.reCalculatePage(1) + // that.$message.success(res.message); + that.$notification.success({ + message: '娑堟伅', + description: res.message + }) + that.loadData() + } else { + // that.$message.warning(res.message); + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) } } } diff --git a/src/views/eam/dispose/EamEquipmentTransferList.vue b/src/views/eam/dispose/EamEquipmentTransferList.vue index 345a008..c49a02a 100644 --- a/src/views/eam/dispose/EamEquipmentTransferList.vue +++ b/src/views/eam/dispose/EamEquipmentTransferList.vue @@ -1,46 +1,43 @@ <template> - <a-card :bordered="false"> + <a-card :bordered='false'> <!-- 鏌ヨ鍖哄煙 --> - <div class="table-page-search-wrapper"> - <a-form layout="inline" @keyup.enter.native="searchQuery"> - <a-row :gutter="24"> + <div class='table-page-search-wrapper'> + <a-form layout='inline' @keyup.enter.native='searchQuery'> + <a-row :gutter='24'> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="鍒犻櫎鏍囪"> - <a-input placeholder="璇疯緭鍏ュ垹闄ゆ爣璁�" v-model="queryParam.delFlag"></a-input> + <a-col :lg='7' :md='8' :sm='24' :xl='6'> + <a-form-item label='璁惧缂栧彿'> + <lx-search-equipment-select v-model='queryParam.equipmentId' + placeholder='璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储'></lx-search-equipment-select> + </a-form-item> + + </a-col> + <a-col :lg='7' :md='8' :sm='24' :xl='6'> + <a-form-item label='鍗曟嵁鍙�'> + <a-input v-model='queryParam.code' placeholder='璇疯緭鍏ュ崟鎹彿'></a-input> </a-form-item> </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="鍗曟嵁鍙�"> - <a-input placeholder="璇疯緭鍏ュ崟鎹彿" v-model="queryParam.code"></a-input> - </a-form-item> - </a-col> - <template v-if="toggleSearchStatus"> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="璁惧ID"> - <a-input placeholder="璇疯緭鍏ヨ澶嘔D" v-model="queryParam.equipmentId"></a-input> - </a-form-item> - </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="璋冨嚭閮ㄩ棬"> - <a-input placeholder="璇疯緭鍏ヨ皟鍑洪儴闂�" v-model="queryParam.oldDepartId"></a-input> - </a-form-item> - </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="璋冨叆閮ㄩ棬"> - <a-input placeholder="璇疯緭鍏ヨ皟鍏ラ儴闂�" v-model="queryParam.newDepartId"></a-input> - </a-form-item> - </a-col> + <template v-if='toggleSearchStatus'> + <a-col :lg='7' :md='8' :sm='24' :xl='6'> + <a-form-item label='璋冨嚭閮ㄩ棬'> + <a-input v-model='queryParam.oldDepartId' placeholder='璇疯緭鍏ヨ皟鍑洪儴闂�'></a-input> + </a-form-item> + </a-col> + <a-col :lg='7' :md='8' :sm='24' :xl='6'> + <a-form-item label='璋冨叆閮ㄩ棬'> + <a-input v-model='queryParam.newDepartId' placeholder='璇疯緭鍏ヨ皟鍏ラ儴闂�'></a-input> + </a-form-item> + </a-col> </template> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> - <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> - <a @click="handleToggleSearch" style="margin-left: 8px"> - {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> - </a> + <a-col :lg='7' :md='8' :sm='24' :xl='6'> + <span class='table-page-search-submitButtons' style='float: left;overflow: hidden;'> + <a-button icon='search' type='primary' @click='searchQuery'>鏌ヨ</a-button> + <a-button icon='reload' style='margin-left: 8px' type='primary' @click='searchReset'>閲嶇疆</a-button> +<!-- <a style='margin-left: 8px' @click='handleToggleSearch'>--> +<!-- {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}--> +<!-- <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />--> +<!-- </a>--> </span> </a-col> @@ -49,54 +46,67 @@ </div> <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> - <div class="table-operator"> - <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> - <a-button type="primary" icon="download" @click="handleExportXls('璁惧褰掑睘鍙樺姩')">瀵煎嚭</a-button> - <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> - <a-button type="primary" icon="import">瀵煎叆</a-button> - </a-upload> - <a-dropdown v-if="selectedRowKeys.length > 0"> - <a-menu slot="overlay"> - <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item> + <div class='table-operator'> + <a-button icon='plus' type='primary' @click='handleAdd'>鏂板</a-button> + <a-dropdown v-if='selectedRowKeys.length > 0'> + <a-menu slot='overlay'> + <a-menu-item key='1' @click='batchDel'> + <a-icon type='delete' /> + 鍒犻櫎 + </a-menu-item> </a-menu> - <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button> + <a-button style='margin-left: 8px'> 鎵归噺鎿嶄綔 + <a-icon type='down' /> + </a-button> </a-dropdown> </div> <!-- table鍖哄煙-begin --> <div> - <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> - <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� - <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + <div class='ant-alert ant-alert-info' style='margin-bottom: 16px;'> + <i class='anticon anticon-info-circle ant-alert-icon'></i> 宸查�夋嫨 <a + style='font-weight: 600'>{{ selectedRowKeys.length }}</a>椤� + <a style='margin-left: 24px' @click='onClearSelected'>娓呯┖</a> </div> <a-table - ref="table" - size="middle" + ref='table' + :columns='columns' + :dataSource='dataSource' + :loading='loading' + :pagination='ipagination' + :rowSelection='{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}' + :scroll="{ x: 'max-content' }" bordered - rowKey="id" - :columns="columns" - :dataSource="dataSource" - :pagination="ipagination" - :loading="loading" - class="j-table-force-nowrap" - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" - @change="handleTableChange"> + class='j-table-force-nowrap' + rowKey='id' + size='middle' + @change='handleTableChange'> - <span slot="action" slot-scope="text, record"> - <a @click="handleEdit(record)">缂栬緫</a> + <span slot='action' slot-scope='text, record'> + <template v-if="record.transferStatus === 'WAIT_SUBMIT'"> + <a-popconfirm title='纭畾鎻愪氦鍚�?' @confirm='() => handleSubmit(record.id)'> + <a>鎻愪氦</a> + </a-popconfirm> + <a-divider type='vertical' /> - <a-divider type="vertical" /> <a-dropdown> - <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> - <a-menu slot="overlay"> + <a class='ant-dropdown-link'>鏇村 <a-icon type='down' /></a> + <a-menu slot='overlay'> + <a-menu-item> + <a @click='handleEdit(record)'>缂栬緫</a> + </a-menu-item> <a-menu-item> - <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a-popconfirm title='纭畾鍒犻櫎鍚�?' @confirm='() => handleDelete(record.id)'> <a>鍒犻櫎</a> </a-popconfirm> </a-menu-item> </a-menu> </a-dropdown> + </template> + <template v-else> + <a href='javascript:;' @click='handleDetail(record)'>璇︽儏</a> + </template> </span> </a-table> @@ -104,122 +114,163 @@ <!-- table鍖哄煙-end --> <!-- 琛ㄥ崟鍖哄煙 --> - <eamEquipmentTransfer-modal ref="modalForm" @ok="modalFormOk"></eamEquipmentTransfer-modal> + <eamEquipmentTransfer-modal ref='modalForm' @ok='modalFormOk'></eamEquipmentTransfer-modal> </a-card> </template> <script> - import '@/assets/less/TableExpand.less' - import EamEquipmentTransferModal from './modules/EamEquipmentTransferModal' - import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import '@/assets/less/TableExpand.less' +import EamEquipmentTransferModal from './modules/EamEquipmentTransferModal' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import { getAction } from '@api/manage' +import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue' - export default { - name: "EamEquipmentTransferList", - mixins:[JeecgListMixin], - components: { - EamEquipmentTransferModal - }, - data () { - return { - description: '璁惧褰掑睘鍙樺姩绠$悊椤甸潰', - // 琛ㄥご - columns: [ - { - title: '#', - dataIndex: '', - key:'rowIndex', - width:60, - align:"center", - customRender:function (t,r,index) { - return parseInt(index)+1; - } - }, - { - title: '鍒犻櫎鏍囪', - align:"center", - dataIndex: 'delFlag' - }, - { - title: '鍗曟嵁鍙�', - align:"center", - dataIndex: 'code' - }, - { - title: '璁惧ID', - align:"center", - dataIndex: 'equipmentId' - }, - { - title: '璋冨嚭閮ㄩ棬', - align:"center", - dataIndex: 'oldDepartId' - }, - { - title: '璋冨叆閮ㄩ棬', - align:"center", - dataIndex: 'newDepartId' - }, - { - title: '鐢宠浜�', - align:"center", - dataIndex: 'reportUser' - }, - { - title: '鍙樺姩鍘熷洜', - align:"center", - dataIndex: 'transferReason' - }, - { - title: '鍙樺姩鐘舵��', - align:"center", - dataIndex: 'transferStatus' - }, - { - title: '鍙樺姩鏃ユ湡', - align:"center", - dataIndex: 'transferTime' - }, - { - title: '瀹℃牳浜�', - align:"center", - dataIndex: 'approvalUser' - }, - { - title: '瀹℃牳鏃堕棿', - align:"center", - dataIndex: 'approvalTime' - }, - { - title: '澶囨敞', - align:"center", - dataIndex: 'remark' - }, - { - title: '鎿嶄綔', - dataIndex: 'action', - align:"center", - scopedSlots: { customRender: 'action' }, + +export default { + name: 'EamEquipmentTransferList', + mixins: [JeecgListMixin], + components: { + EamEquipmentTransferModal, + LxSearchEquipmentSelect + }, + data() { + return { + description: '璁惧褰掑睘鍙樺姩绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + fixed: 'left', + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 } - ], - url: { - list: "/eam/eamEquipmentTransfer/list", - delete: "/eam/eamEquipmentTransfer/delete", - deleteBatch: "/eam/eamEquipmentTransfer/deleteBatch", - exportXlsUrl: "eam/eamEquipmentTransfer/exportXls", - importExcelUrl: "eam/eamEquipmentTransfer/importExcel", - }, + }, + { + title: '鍗曟嵁鍙�', + align: 'center', + fixed: 'left', + dataIndex: 'code' + }, + { + title: '璁惧缂栧彿', + align: 'center', + fixed: 'left', + dataIndex: 'equipmentCode' + }, + { + title: '璁惧鍚嶇О', + align: 'center', + fixed: 'left', + dataIndex: 'equipmentName' + }, + { + title: '璋冨嚭閮ㄩ棬', + align: 'center', + dataIndex: 'oldDepartId_dictText' + }, + { + title: '璋冨叆閮ㄩ棬', + align: 'center', + dataIndex: 'newDepartId_dictText' + }, + { + title: '鐢宠浜�', + align: 'center', + dataIndex: 'reportUser_dictText' + }, + { + title: '鍙樺姩鍘熷洜', + align: 'center', + dataIndex: 'transferReason' + }, + { + title: '鍙樺姩鐘舵��', + align: 'center', + dataIndex: 'transferStatus_dictText' + }, + { + title: '鍙樺姩鏃ユ湡', + align: 'center', + dataIndex: 'transferTime' + }, + { + title: '瀹℃牳浜�', + align: 'center', + dataIndex: 'approvalUser_dictText' + }, + { + title: '瀹℃牳鎰忚', + align: 'center', + dataIndex: 'approvalComment' + }, + { + title: '瀹℃牳鏃堕棿', + align: 'center', + dataIndex: 'approvalTime' + }, + { + title: '澶囨敞', + align: 'center', + dataIndex: 'remark' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + fixed: 'right', + width: 150, + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: '/eam/eamEquipmentTransfer/list', + delete: '/eam/eamEquipmentTransfer/delete', + deleteBatch: '/eam/eamEquipmentTransfer/deleteBatch', + submit: '/eam/eamEquipmentTransfer/submit' + } } }, computed: { - importExcelUrl: function(){ - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + importExcelUrl: function() { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` } }, - methods: { - + methods: { + handleSubmit(id) { + if (!this.url.submit) { + this.$message.error('璇疯缃畊rl.submit灞炴��!') + return + } + let that = this + this.loading = true + getAction(that.url.submit, { id: id }).then((res) => { + if (res.success) { + //閲嶆柊璁$畻鍒嗛〉闂 + that.reCalculatePage(1) + // that.$message.success(res.message); + that.$notification.success({ + message: '娑堟伅', + description: res.message + }) + that.loadData() + } else { + // that.$message.warning(res.message); + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }).finally(()=>{ + this.loading = false + }) } } +} </script> <style scoped> - @import '~@assets/less/common.less'; +@import '~@assets/less/common.less'; </style> \ No newline at end of file diff --git a/src/views/eam/dispose/modules/EamEquipmentLeanOutModal.vue b/src/views/eam/dispose/modules/EamEquipmentLeanOutModal.vue index 920acdd..59f6ec8 100644 --- a/src/views/eam/dispose/modules/EamEquipmentLeanOutModal.vue +++ b/src/views/eam/dispose/modules/EamEquipmentLeanOutModal.vue @@ -3,6 +3,7 @@ :title="title" :width="800" :visible="visible" + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" :confirmLoading="confirmLoading" switchFullscreen @ok="handleOk" @@ -15,12 +16,13 @@ <a-input placeholder="缂栫爜绯荤粺鑷姩鐢熸垚" v-model="model.code" disabled /> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧缂栧彿"> - <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" + <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" :disabled="disableSubmit" v-model="model.equipmentId"></lx-search-equipment-select> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leanDepartId" label="鍊熷叆杞﹂棿"> <a-tree-select v-model="model.leanDepartId" + :disabled="disableSubmit" style="width: 100%" :tree-data="treeData" :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" @@ -31,10 +33,10 @@ </a-tree-select> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leanReason" label="鍊熺敤鍘熷洜"> - <a-textarea placeholder="璇疯緭鍏ュ�熺敤鍘熷洜" v-model="model.leanReason" /> + <a-textarea placeholder="璇疯緭鍏ュ�熺敤鍘熷洜" :disabled="disableSubmit" v-model="model.leanReason" /> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞"> - <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" /> + <a-textarea placeholder="璇疯緭鍏ュ娉�" :disabled="disableSubmit" v-model="model.remark" /> </a-form-model-item> </a-form-model> </a-spin> @@ -98,8 +100,9 @@ this.model = Object.assign({}, record) this.visible = true this.editable = true - this.loadDetail(record.id) + // this.loadDetail(record.id) }, + close () { this.$emit('close'); this.visible = false; diff --git a/src/views/eam/dispose/modules/EamEquipmentScrapModal.vue b/src/views/eam/dispose/modules/EamEquipmentScrapModal.vue index a7d63d0..53dcfa5 100644 --- a/src/views/eam/dispose/modules/EamEquipmentScrapModal.vue +++ b/src/views/eam/dispose/modules/EamEquipmentScrapModal.vue @@ -1,144 +1,145 @@ <template> <j-modal - :title="title" - :width="800" - :visible="visible" - :confirmLoading="confirmLoading" + :confirmLoading='confirmLoading' + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" + :title='title' + :visible='visible' + :width='800' + cancelText='鍏抽棴' switchFullscreen - @ok="handleOk" - @cancel="handleCancel" - cancelText="鍏抽棴"> - - <a-spin :spinning="confirmLoading"> - <a-form-model ref="form" :model="model" :rules="validatorRules"> - - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="鍒犻櫎鏍囪"> - <a-input-number v-model="model.delFlag"/> + @cancel='handleCancel' + @ok='handleOk'> + + <a-spin :spinning='confirmLoading'> + <a-form-model ref='form' :model='model' :rules='validatorRules'> + <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='鍗曟嵁鍙�' prop='code'> + <a-input v-model='model.code' disabled placeholder='缂栫爜绯荤粺鑷姩鐢熸垚' /> </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="code" label="鍗曟嵁鍙�"> - <a-input placeholder="璇疯緭鍏ュ崟鎹彿" v-model="model.code" /> + <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='璋冨嚭璁惧' prop='equipmentId'> + <lx-search-equipment-select v-model='model.equipmentId' + :disabled='disableSubmit' + placeholder='璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储'></lx-search-equipment-select> </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧ID"> - <a-input placeholder="璇疯緭鍏ヨ澶嘔D" v-model="model.equipmentId" /> + <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='澶勭悊绫诲瀷' prop='scrapType'> + <j-dict-select-tag v-model='model.scrapType' :disabled='disableSubmit || initialAcceptanceDisable' dictCode='scrap_sell' + placeholder='璇烽�夋嫨澶勭悊绫诲瀷' type='radio' /> </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="scrapType" label="杞/鎶ュ簾"> - <a-input placeholder="璇疯緭鍏ヨ浆璁�/鎶ュ簾" v-model="model.scrapType" /> + <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='澶勭疆鐞嗙敱' prop='scrapReason'> + <a-input v-model='model.scrapReason' placeholder='璇疯緭鍏ュ缃悊鐢�' /> </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reportUser" label="鐢宠浜�"> - <a-input placeholder="璇疯緭鍏ョ敵璇蜂汉" v-model="model.reportUser" /> + <div v-if='model.scrapType == 2'> + <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='澶勭疆閲戦' prop='scrapAmount'> + <a-input v-model='model.scrapAmount' placeholder='璇疯緭鍏ュ缃噾棰�' /> + </a-form-model-item> + </div> + <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='澶囨敞' prop='remark'> + <a-textarea v-model='model.remark' :disabled='disableSubmit' placeholder='璇疯緭鍏ュ娉�' /> </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="scrapTime" label="澶勭疆鏃堕棿"> - <a-input placeholder="璇疯緭鍏ュ缃椂闂�" v-model="model.scrapTime" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="scrapReason" label="澶勭疆鐞嗙敱"> - <a-input placeholder="璇疯緭鍏ュ缃悊鐢�" v-model="model.scrapReason" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="scrapAmount" label="澶勭疆閲戦"> - <a-input placeholder="璇疯緭鍏ュ缃噾棰�" v-model="model.scrapAmount" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalUser" label="瀹℃牳浜�"> - <a-input placeholder="璇疯緭鍏ュ鏍镐汉" v-model="model.approvalUser" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalComment" label="瀹℃牳鎰忚"> - <a-input placeholder="璇疯緭鍏ュ鏍告剰瑙�" v-model="model.approvalComment" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalTime" label="瀹℃牳鏃堕棿"> - <a-input placeholder="璇疯緭鍏ュ鏍告椂闂�" v-model="model.approvalTime" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞"> - <a-input placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" /> - </a-form-model-item> - + </a-form-model> </a-spin> </j-modal> </template> <script> - import { httpAction } from '@/api/manage' - import moment from "moment" +import { httpAction } from '@/api/manage' +import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue' - export default { - name: "EamEquipmentScrapModal", - data () { - return { - title:"鎿嶄綔", - visible: false, - model: {}, - labelCol: { - xs: { span: 24 }, - sm: { span: 5 }, - }, - wrapperCol: { - xs: { span: 24 }, - sm: { span: 16 }, - }, - confirmLoading: false, - validatorRules:{ - }, - url: { - add: "/eam/eamEquipmentScrap/add", - edit: "/eam/eamEquipmentScrap/edit", - }, +export default { + name: 'EamEquipmentScrapModal', + components: { LxSearchEquipmentSelect }, + data() { + return { + title: '鎿嶄綔', + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + }, + + confirmLoading: false, + validatorRules: { + scrapReason: [ + { required: true, message: '璇疯緭鍏ュ缃師鍥狅紒' } + ], + equipmentId: [ + { required: true, message: '璇烽�夋嫨璁惧锛�' } + ], + transferReason: [ + { required: true, message: '璇疯緭鍏ュ彉鍔ㄥ師鍥狅紒' } + ], + scrapType: [ + { required: true, message: '璇烽�夋嫨绫诲瀷锛�' } + ] + }, + url: { + add: '/eam/eamEquipmentScrap/add', + edit: '/eam/eamEquipmentScrap/edit' } - }, - created () { - }, - methods: { - add () { - //鍒濆鍖栭粯璁ゅ�� - this.edit({}); - }, - edit (record) { - this.model = Object.assign({}, record); - this.visible = true; - }, - close () { - this.$emit('close'); - this.visible = false; - this.$refs.form.clearValidate(); - }, - handleOk () { - const that = this; - // 瑙﹀彂琛ㄥ崟楠岃瘉 - this.$refs.form.validate(valid => { - if (valid) { - that.confirmLoading = true; - let httpurl = ''; - let method = ''; - if(!this.model.id){ - httpurl+=this.url.add; - method = 'post'; - }else{ - httpurl+=this.url.edit; - method = 'put'; - } - httpAction(httpurl,this.model,method).then((res)=>{ - if(res.success){ - that.$message.success(res.message); - that.$emit('ok'); - }else{ - that.$message.warning(res.message); - } - }).finally(() => { - that.confirmLoading = false; - that.close(); - }) - }else{ - return false; - } - }) - }, - handleCancel () { - this.close() - }, - - } + }, + created() { + }, + methods: { + add() { + //鍒濆鍖栭粯璁ゅ�� + this.edit({}) + }, + edit(record) { + this.model = Object.assign({}, record) + this.visible = true + }, + close() { + this.$emit('close') + this.visible = false + this.$refs.form.clearValidate() + }, + handleOk() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true + let httpurl = '' + let method = '' + if (!this.model.id) { + httpurl += this.url.add + method = 'post' + } else { + httpurl += this.url.edit + method = 'put' + } + httpAction(httpurl, this.model, method).then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('ok') + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = false + that.close() + }) + } else { + return false + } + }) + }, + handleCancel() { + this.close() + } + + } +} </script> -<style lang="less" scoped> +<style lang='less' scoped> </style> \ No newline at end of file diff --git a/src/views/eam/dispose/modules/EamEquipmentSealUpModal.vue b/src/views/eam/dispose/modules/EamEquipmentSealUpModal.vue index 9e552ea..f836dc9 100644 --- a/src/views/eam/dispose/modules/EamEquipmentSealUpModal.vue +++ b/src/views/eam/dispose/modules/EamEquipmentSealUpModal.vue @@ -3,6 +3,7 @@ :title="title" :width="800" :visible="visible" + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" :confirmLoading="confirmLoading" switchFullscreen @ok="handleOk" @@ -15,14 +16,14 @@ <a-input placeholder="缂栫爜绯荤粺鑷姩鐢熸垚" v-model="model.code" disabled /> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧缂栧彿"> - <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" + <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" :disabled="disableSubmit" v-model="model.equipmentId"></lx-search-equipment-select> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sealUpReason" label="灏佸瓨鍘熷洜"> - <a-input placeholder="璇疯緭鍏ュ皝瀛樺師鍥�" v-model="model.sealUpReason" /> + <a-input placeholder="璇疯緭鍏ュ皝瀛樺師鍥�" :disabled="disableSubmit" v-model="model.sealUpReason" /> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞"> - <a-input placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" /> + <a-input placeholder="璇疯緭鍏ュ娉�" :disabled="disableSubmit" v-model="model.remark" /> </a-form-model-item> </a-form-model> diff --git a/src/views/eam/dispose/modules/EamEquipmentTransferModal.vue b/src/views/eam/dispose/modules/EamEquipmentTransferModal.vue index 6bd5226..515711c 100644 --- a/src/views/eam/dispose/modules/EamEquipmentTransferModal.vue +++ b/src/views/eam/dispose/modules/EamEquipmentTransferModal.vue @@ -3,63 +3,56 @@ :title="title" :width="800" :visible="visible" + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" :confirmLoading="confirmLoading" switchFullscreen @ok="handleOk" @cancel="handleCancel" cancelText="鍏抽棴"> - + <a-spin :spinning="confirmLoading"> <a-form-model ref="form" :model="model" :rules="validatorRules"> - - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="鍒犻櫎鏍囪"> - <a-input-number v-model="model.delFlag"/> - </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="code" label="鍗曟嵁鍙�"> - <a-input placeholder="璇疯緭鍏ュ崟鎹彿" v-model="model.code" /> + <a-input placeholder="缂栫爜绯荤粺鑷姩鐢熸垚" v-model="model.code" disabled/> </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧ID"> - <a-input placeholder="璇疯緭鍏ヨ澶嘔D" v-model="model.equipmentId" /> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璋冨嚭璁惧"> + <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" + v-model="model.equipmentId" :disabled="disableSubmit"></lx-search-equipment-select> </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="oldDepartId" label="璋冨嚭閮ㄩ棬"> - <a-input placeholder="璇疯緭鍏ヨ皟鍑洪儴闂�" v-model="model.oldDepartId" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="newDepartId" label="璋冨叆閮ㄩ棬"> - <a-input placeholder="璇疯緭鍏ヨ皟鍏ラ儴闂�" v-model="model.newDepartId" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reportUser" label="鐢宠浜�"> - <a-input placeholder="璇疯緭鍏ョ敵璇蜂汉" v-model="model.reportUser" /> - </a-form-model-item> +<!-- <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="oldDepartId" label="璋冨嚭閮ㄩ棬">--> +<!-- <a-input placeholder="璇疯緭鍏ヨ皟鍑洪儴闂�" v-model="model.oldDepartId" />--> +<!-- </a-form-model-item>--> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="newDepartId" label="璋冨叆杞﹂棿"> + <a-tree-select v-model="model.newDepartId" + style="width: 100%" + :tree-data="treeData" + :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" + placeholder="璇烽�夋嫨璋冨叆杞﹂棿" + allow-clear + tree-default-expand-all + :disabled="editable || disableSubmit" + > + </a-tree-select> + </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="transferReason" label="鍙樺姩鍘熷洜"> - <a-input placeholder="璇疯緭鍏ュ彉鍔ㄥ師鍥�" v-model="model.transferReason" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="transferStatus" label="鍙樺姩鐘舵��"> - <a-input placeholder="璇疯緭鍏ュ彉鍔ㄧ姸鎬�" v-model="model.transferStatus" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="transferTime" label="鍙樺姩鏃ユ湡"> - <a-input placeholder="璇疯緭鍏ュ彉鍔ㄦ棩鏈�" v-model="model.transferTime" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalUser" label="瀹℃牳浜�"> - <a-input placeholder="璇疯緭鍏ュ鏍镐汉" v-model="model.approvalUser" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalTime" label="瀹℃牳鏃堕棿"> - <a-input placeholder="璇疯緭鍏ュ鏍告椂闂�" v-model="model.approvalTime" /> + <a-input placeholder="璇疯緭鍏ュ彉鍔ㄥ師鍥�" v-model="model.transferReason" :disabled="disableSubmit"/> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞"> - <a-input placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" /> + <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" :disabled="disableSubmit"/> </a-form-model-item> - + </a-form-model> </a-spin> </j-modal> </template> <script> - import { httpAction } from '@/api/manage' - import moment from "moment" + import { httpAction,getAction } from '@/api/manage' + import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue' export default { name: "EamEquipmentTransferModal", + components: { LxSearchEquipmentSelect }, data () { return { title:"鎿嶄綔", @@ -73,22 +66,52 @@ xs: { span: 24 }, sm: { span: 16 }, }, - + labelColLong: { + xs: { span: 24 }, + sm: { span: 4 } + }, + wrapperColLong: { + xs: { span: 24 }, + sm: { span: 18 } + }, + treeData: [], confirmLoading: false, validatorRules:{ + newDepartId: [ + { required: true, message: '璇烽�夋嫨璋冨叆杞﹂棿' } + ], + equipmentId: [ + { required: true, message: '璇烽�夋嫨璁惧锛�' } + ], + transferReason: [ + { required: true, message: '璇疯緭鍏ュ彉鍔ㄥ師鍥狅紒' } + ], }, url: { add: "/eam/eamEquipmentTransfer/add", edit: "/eam/eamEquipmentTransfer/edit", + loadProductionOptions:'/mdc/mdcProduction/loadProductionTreeOptions', }, } }, created () { + this.loadAllProductionTree(); }, methods: { + loadAllProductionTree() { + //鍔犺浇杞﹂棿閫夋嫨鏍� + getAction(this.url.loadProductionOptions).then(res => { + if (res.success) { + this.treeData = [...res.result] + }else { + that.$message.warning(res.message) + } + }) + }, add () { //鍒濆鍖栭粯璁ゅ�� this.edit({}); + this.visible = true; }, edit (record) { this.model = Object.assign({}, record); diff --git a/src/views/eam/equipment/EamEquipmentList.vue b/src/views/eam/equipment/EamEquipmentList.vue index c5b9af1..517d4c7 100644 --- a/src/views/eam/equipment/EamEquipmentList.vue +++ b/src/views/eam/equipment/EamEquipmentList.vue @@ -156,17 +156,23 @@ <!-- <a-tab-pane tab="鍛ㄤ繚宸ュ崟" :key="3"> <eam-week-maintenance-order-list ref="tabPaneTableListRef3" :isDisplayOperation="false"/> </a-tab-pane>--> - <a-tab-pane tab="缁翠慨宸ュ崟" :key="4"> - <eam-repair-order-list ref="tabPaneTableListRef4" :isDisplayOperation="false"/> + <a-tab-pane tab="浜屼繚宸ュ崟" :key="3"> + <eam-second-maintenance-order-list ref="tabPaneTableListRef3" :isDisplayOperation="false" /> </a-tab-pane> - <a-tab-pane tab="淇濆吇鏍囧噯" :key="5"> - <eam-maintenance-standard-list ref="tabPaneTableListRef5" :isDisplayOperation="false"/> + <a-tab-pane tab="涓変繚宸ュ崟" :key="4"> + <eam-third-maintenance-order-list ref="tabPaneTableListRef4" :isDisplayOperation="false" /> </a-tab-pane> - <a-tab-pane tab="宸ヨ壓鍙傛暟" :key="6" v-if="isOpenProcess"> - <eam-equipment-process-list ref="tabPaneTableListRef6" :isDisplayOperation="false"/> + <a-tab-pane tab="缁翠慨宸ュ崟" :key="5"> + <eam-repair-order-list ref="tabPaneTableListRef5" :isDisplayOperation="false"/> </a-tab-pane> - <a-tab-pane tab="璁惧绮惧害" :key="7" v-if="isOpenPrecision"> - <eam-equipment-precision-list ref="tabPaneTableListRef7" :isDisplayOperation="false"/> + <a-tab-pane tab="淇濆吇鏍囧噯" :key="6"> + <eam-maintenance-standard-list ref="tabPaneTableListRef6" :isDisplayOperation="false"/> + </a-tab-pane> + <a-tab-pane tab="宸ヨ壓鍙傛暟" :key="7" v-if="isOpenProcess"> + <eam-equipment-process-list ref="tabPaneTableListRef7" :isDisplayOperation="false"/> + </a-tab-pane> + <a-tab-pane tab="璁惧绮惧害" :key="8" v-if="isOpenPrecision"> + <eam-equipment-precision-list ref="tabPaneTableListRef8" :isDisplayOperation="false"/> </a-tab-pane> </a-tabs> @@ -194,6 +200,8 @@ // import EamWeekMaintenanceOrderList from '@views/eam/maintenance/EamWeekMaintenanceOrderList.vue' import EamEquipmentProcessList from '@views/eam/equipment/modules/EamEquipmentProcessList.vue' import EamEquipmentPrecisionList from '@views/eam/equipment/modules/EamEquipmentPrecisionList.vue' + import EamSecondMaintenanceOrderList from '@views/eam/maintenance/EamSecondMaintenanceOrderList.vue' + import EamThirdMaintenanceOrderList from '@views/eam/maintenance/EamThirdMaintenanceOrderList.vue' export default { name: 'EamEquipmentList', @@ -208,7 +216,9 @@ EamEquipmentAttachmentList, // EamWeekMaintenanceOrderList, EamEquipmentProcessList, - EamEquipmentPrecisionList + EamEquipmentPrecisionList, + EamSecondMaintenanceOrderList, + EamThirdMaintenanceOrderList }, data() { return { diff --git a/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue b/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue index 294a261..84f1970 100644 --- a/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue +++ b/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue @@ -120,6 +120,8 @@ <!-- 琛ㄥ崟鍖哄煙 --> <eamSecondMaintenanceOrder-modal ref="modalForm" @ok="modalFormOk"></eamSecondMaintenanceOrder-modal> + + <second-maintenance-approval-modal ref="secondMaintenanceApprovalModal" :selectShenpiData="selectSecondMaintenanceData" /> </a-card> </template> @@ -129,13 +131,15 @@ import { JeecgListMixin } from '@/mixins/JeecgListMixin' import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue' import { deleteAction, getAction } from '@api/manage' +import SecondMaintenanceApprovalModal from '@views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue' export default { name: 'EamSecondMaintenanceOrderList', mixins: [JeecgListMixin], components: { LxSearchEquipmentSelect, - EamSecondMaintenanceOrderModal + EamSecondMaintenanceOrderModal, + SecondMaintenanceApprovalModal }, props: { isDisplayOperation: { @@ -146,6 +150,8 @@ data() { return { description: '璁惧浜岀骇淇濆吇绠$悊椤甸潰', + disableMixinCreated: true, + selectSecondMaintenanceData: {}, // 琛ㄥご columns: [ { @@ -439,6 +445,12 @@ } }) } + }, + handleDetail(record) { + this.selectSecondMaintenanceData = Object.assign({}, record) + this.$refs.secondMaintenanceApprovalModal.recordDetail(record) + this.$refs.secondMaintenanceApprovalModal.title = '璇︽儏' + this.$refs.secondMaintenanceApprovalModal.disableSubmit = true } } } diff --git a/src/views/eam/maintenance/EamThirdMaintenanceOrderList.vue b/src/views/eam/maintenance/EamThirdMaintenanceOrderList.vue index 8c99c2a..e3cd159 100644 --- a/src/views/eam/maintenance/EamThirdMaintenanceOrderList.vue +++ b/src/views/eam/maintenance/EamThirdMaintenanceOrderList.vue @@ -120,6 +120,8 @@ <!-- 琛ㄥ崟鍖哄煙 --> <eamThirdMaintenanceOrder-modal ref="modalForm" @ok="modalFormOk"></eamThirdMaintenanceOrder-modal> + + <third-maintenance-approval-modal ref="thirdMaintenanceApprovalModal" :selectShenpiData="selectThirdMaintenanceData" /> </a-card> </template> @@ -129,13 +131,15 @@ import { JeecgListMixin } from '@/mixins/JeecgListMixin' import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue' import { deleteAction, getAction } from '@api/manage' +import ThirdMaintenanceApprovalModal from '@views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue' export default { name: 'EamThirdMaintenanceOrderList', mixins: [JeecgListMixin], components: { LxSearchEquipmentSelect, - EamThirdMaintenanceOrderModal + EamThirdMaintenanceOrderModal, + ThirdMaintenanceApprovalModal }, props: { isDisplayOperation: { @@ -146,6 +150,8 @@ data() { return { description: '璁惧涓夌骇淇濆吇绠$悊椤甸潰', + disableMixinCreated: true, + selectThirdMaintenanceData: {}, // 琛ㄥご columns: [ { @@ -449,6 +455,12 @@ } }) } + }, + handleDetail(record) { + this.selectThirdMaintenanceData = Object.assign({}, record) + this.$refs.thirdMaintenanceApprovalModal.recordDetail(record) + this.$refs.thirdMaintenanceApprovalModal.title = '璇︽儏' + this.$refs.thirdMaintenanceApprovalModal.disableSubmit = true } } } diff --git a/src/views/eam/spare/EamSparePartRequisitionList.vue b/src/views/eam/spare/EamSparePartRequisitionList.vue index cdeeee5..6f72a2d 100644 --- a/src/views/eam/spare/EamSparePartRequisitionList.vue +++ b/src/views/eam/spare/EamSparePartRequisitionList.vue @@ -1,38 +1,91 @@ <template> <a-row :gutter="10"> - <a-col :md="leftColMd" :sm="24" style="margin-bottom: 20px"> + <a-col + :md="leftColMd" + :sm="24" + style="margin-bottom: 20px" + > <a-card :bordered="false"> <!-- 鏌ヨ鍖哄煙 --> <div class="table-page-search-wrapper"> <!-- 鎼滅储鍖哄煙 --> - <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-form + layout="inline" + @keyup.enter.native="searchQuery" + > <a-row :gutter="24"> - <a-col :md="12" :sm="8"> + <a-col + :md="12" + :sm="8" + > <a-form-item label="璇疯喘鍗曞彿"> - <j-input placeholder="璇疯緭鍏ヨ璐崟鍙�" v-model="queryParam.requisitionCode"></j-input> + <j-input + placeholder="璇疯緭鍏ヨ璐崟鍙�" + v-model="queryParam.requisitionCode" + ></j-input> </a-form-item> </a-col> <template v-if="toggleSearchStatus"> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-col + :xl="6" + :lg="7" + :md="8" + :sm="24" + > <a-form-item label="鐢宠浜�"> - <a-input placeholder="璇疯緭鍏ョ敵璇蜂汉" v-model="queryParam.reportUser"></a-input> + <a-input + placeholder="璇疯緭鍏ョ敵璇蜂汉" + v-model="queryParam.reportUser" + ></a-input> </a-form-item> </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-col + :xl="6" + :lg="7" + :md="8" + :sm="24" + > <a-form-item label="璇疯喘鐘舵��"> - <a-input placeholder="璇疯緭鍏ヨ璐姸鎬�" v-model="queryParam.requisitionStatus"></a-input> + <a-input + placeholder="璇疯緭鍏ヨ璐姸鎬�" + v-model="queryParam.requisitionStatus" + ></a-input> </a-form-item> </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-col + :xl="6" + :lg="7" + :md="8" + :sm="24" + > <a-form-item label="瀹℃牳浜�"> - <a-input placeholder="璇疯緭鍏ュ鏍镐汉" v-model="queryParam.approvalUser"></a-input> + <a-input + placeholder="璇疯緭鍏ュ鏍镐汉" + v-model="queryParam.approvalUser" + ></a-input> </a-form-item> </a-col> </template> - <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-col :md="12" :sm="24"> - <a-button type="primary" @click="searchQuery" icon="search" style="margin-left: 21px">鏌ヨ</a-button> - <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + <span + style="float: left;overflow: hidden;" + class="table-page-search-submitButtons" + > + <a-col + :md="12" + :sm="24" + > + <a-button + type="primary" + @click="searchQuery" + icon="search" + style="margin-left: 21px" + >鏌ヨ</a-button> + <a-button + type="primary" + @click="searchReset" + icon="reload" + style="margin-left: 8px" + >閲嶇疆</a-button> </a-col> </span> </a-row> @@ -41,18 +94,42 @@ <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> <div class="table-operator"> - <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> - <a-button type="primary" icon="download" @click="handleExportXls('澶囦欢璇疯喘鍗�')">瀵煎嚭</a-button> - <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> - <a-button type="primary" icon="import">瀵煎叆</a-button> + <a-button + @click="handleAdd" + type="primary" + icon="plus" + >鏂板</a-button> + <a-button + type="primary" + icon="download" + @click="handleExportXls('澶囦欢璇疯喘鍗�')" + >瀵煎嚭</a-button> + <a-upload + name="file" + :showUploadList="false" + :multiple="false" + :headers="tokenHeader" + :action="importExcelUrl" + @change="handleImportExcel" + > + <a-button + type="primary" + icon="import" + >瀵煎叆</a-button> </a-upload> </div> <!-- table鍖哄煙-begin --> - <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <div + class="ant-alert ant-alert-info" + style="margin-bottom: 16px;" + > <i class="anticon anticon-info-circle ant-alert-icon"> </i> 宸查�夋嫨 <a><b>{{ selectedRowKeys1.length }}</b></a>椤� - <a style="margin-left: 24px" @click="onClearSelected1">娓呯┖</a> + <a + style="margin-left: 24px" + @click="onClearSelected1" + >娓呯┖</a> </div> <div style="margin-top: 15px"> <a-table @@ -67,55 +144,96 @@ :loading="loading" :customRow="customRow" :rowSelection="{selectedRowKeys: selectedRowKeys1, onChange: onSelectChange1, type:'radio'}" - @change="handleTableChange"> + @change="handleTableChange" + > - <span slot="action" slot-scope="text, record"> - <a @click="handleOpen(record)">鏄庣粏</a> - <a-divider v-if="record.requisitionStatus !== '3' && record.requisitionStatus !== '5'" type="vertical" /> - <a-dropdown v-if="record.requisitionStatus === '1' || record.requisitionStatus === '4'"> - <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> - <a-menu slot="overlay"> - <a-menu-item> - <a @click="handleConfirm(record)">鎻愪氦</a> - </a-menu-item> - <a-menu-item> - <a @click="handleEdit(record)">缂栬緫</a> - </a-menu-item> - <a-menu-item> - <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> - <a>鍒犻櫎</a> - </a-popconfirm> - </a-menu-item> - </a-menu> - </a-dropdown> - <a v-if="record.requisitionStatus === '2'" @click="handleExamine(record)">瀹℃牳</a> - </span> + <span + slot="action" + slot-scope="text, record" + > + <a @click="handleOpen(record)">鏄庣粏</a> + <a-divider + v-if="record.requisitionStatus !== '3' && record.requisitionStatus !== '5'" + type="vertical" + /> + <a-dropdown v-if="record.requisitionStatus === '1' || record.requisitionStatus === '4'"> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handleConfirm(record)">鎻愪氦</a> + </a-menu-item> + <a-menu-item> + <a @click="handleEdit(record)">缂栬緫</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm + title="纭畾鍒犻櫎鍚�?" + @confirm="() => handleDelete(record.id)" + > + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + <a + v-if="record.requisitionStatus === '2'" + @click="handleExamine(record)" + >瀹℃牳</a> + </span> </a-table> </div> <!-- table鍖哄煙-end --> <!-- 琛ㄥ崟鍖哄煙 --> - <eamSparePartRequisition-modal ref="modalForm" @ok="modalFormOk"></eamSparePartRequisition-modal> + <eamSparePartRequisition-modal + ref="modalForm" + @ok="modalFormOk" + ></eamSparePartRequisition-modal> - <eamSparePartRequisitionExamine-modal ref="modalExamine" @ok="modalFormOk2"></eamSparePartRequisitionExamine-modal> + <eamSparePartRequisitionExamine-modal + ref="modalExamine" + @ok="modalFormOk2" + ></eamSparePartRequisitionExamine-modal> </a-card> </a-col> - <a-col :md="rightColMd" :sm="24" v-if="this.rightColVal === 1"> + <a-col + :md="rightColMd" + :sm="24" + v-if="this.rightColVal === 1" + > <a-card :bordered="false"> <div style="text-align: right;"> - <a-icon type="close-circle" @click="hideSpareDetailList" /> + <a-icon + type="close-circle" + @click="hideSpareDetailList" + /> </div> <!-- 鏌ヨ鍖哄煙 --> <div class="table-page-search-wrapper"> <a-form layout="inline"> <a-row :gutter="24"> - <a-col :md="9" :sm="24"> - <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery2" icon="search">鏌ヨ</a-button> - <a-button type="primary" @click="searchReset2" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> - </span> + <a-col + :md="9" + :sm="24" + > + <span + style="float: left;overflow: hidden;" + class="table-page-search-submitButtons" + > + <a-button + type="primary" + @click="searchQuery2" + icon="search" + >鏌ヨ</a-button> + <a-button + type="primary" + @click="searchReset2" + icon="reload" + style="margin-left: 8px" + >閲嶇疆</a-button> + </span> </a-col> </a-row> @@ -123,30 +241,61 @@ </div> <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> - <div class="table-operator" :md="24" :sm="24"> - <a-button @click="handleAdd2" type="primary" icon="plus">鏂板</a-button> - <a-button type="primary" icon="download" @click="handleExportXls('澶囦欢娓呰喘鍗曟槑缁�')">瀵煎嚭</a-button> - <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> - <a-button type="primary" icon="import">瀵煎叆</a-button> + <div + class="table-operator" + :md="24" + :sm="24" + > + <a-button + @click="handleAdd2" + type="primary" + icon="plus" + >鏂板</a-button> + <a-button + type="primary" + icon="download" + @click="handleExportXls('澶囦欢娓呰喘鍗曟槑缁�')" + >瀵煎嚭</a-button> + <a-upload + name="file" + :showUploadList="false" + :multiple="false" + :headers="tokenHeader" + :action="importExcelUrl" + @change="handleImportExcel" + > + <a-button + type="primary" + icon="import" + >瀵煎叆</a-button> </a-upload> <a-dropdown v-if="selectedRowKeys2.length > 0"> <a-menu slot="overlay"> - <a-menu-item key="1" @click="batchDel2"> - <a-icon type="delete"/> + <a-menu-item + key="1" + @click="batchDel2" + > + <a-icon type="delete" /> 鎵归噺鍒犻櫎 </a-menu-item> </a-menu> <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 - <a-icon type="down"/> + <a-icon type="down" /> </a-button> </a-dropdown> </div> <!-- table鍖哄煙-begin --> <div> - <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <div + class="ant-alert ant-alert-info" + style="margin-bottom: 16px;" + > <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys2.length }}</a>椤� - <a style="margin-left: 24px" @click="onClearSelected2">娓呯┖</a> + <a + style="margin-left: 24px" + @click="onClearSelected2" + >娓呯┖</a> </div> <a-table @@ -161,23 +310,30 @@ :loading="loading2" class="j-table-force-nowrap" :rowSelection="{selectedRowKeys: selectedRowKeys2, onChange: onSelectChange2}" - @change="handleTableChange2"> + @change="handleTableChange2" + > - <span slot="action" slot-scope="text, record"> - <a-dropdown> - <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> - <a-menu slot="overlay"> - <a-menu-item> - <a-popconfirm @click="handleEdit2(record)"> - <a>缂栬緫</a> - </a-popconfirm> - <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete2(record.id)"> - <a>鍒犻櫎</a> - </a-popconfirm> - </a-menu-item> - </a-menu> - </a-dropdown> - </span> + <span + slot="action" + slot-scope="text, record" + > + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a-popconfirm @click="handleEdit2(record)"> + <a>缂栬緫</a> + </a-popconfirm> + <a-popconfirm + title="纭畾鍒犻櫎鍚�?" + @confirm="() => handleDelete2(record.id)" + > + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> </a-table> </div> @@ -189,148 +345,148 @@ </template> <script> - import '@assets/less/TableExpand.less' - import EamSparePartRequisitionModal from './modules/EamSparePartRequisitionModal.vue' - import EamSparePartRequisitionExamineModal from './modules/EamSparePartRequisitionExamineModal.vue' - import { JeecgListMixin } from '@/mixins/JeecgListMixin' - import { deleteAction, getAction, postAction } from '@api/manage' - import { filterObj } from '@/utils/util' +import '@assets/less/TableExpand.less' +import EamSparePartRequisitionModal from './modules/EamSparePartRequisition/EamSparePartRequisitionModal.vue' +import EamSparePartRequisitionExamineModal from './modules/EamSparePartRequisition/EamSparePartRequisitionExamineModal.vue' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import { deleteAction, getAction, postAction } from '@api/manage' +import { filterObj } from '@/utils/util' - export default { - name: "EamSparePartRequisitionList", - mixins:[JeecgListMixin], - components: { - EamSparePartRequisitionModal, - EamSparePartRequisitionExamineModal - }, - data () { - return { - description: '澶囦欢璇疯喘鍗曠鐞嗛〉闈�', - model1: {}, - model2: {}, - queryParam1: {}, - queryParam2: {}, - dataSource: [], - dataSource2: [], - spareRequisitionId: '', - iPagination: { - current: 1, - pageSize: 10, - pageSizeOptions: ['10', '20', '30'], - showTotal: (total, range) => { - return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' - }, - showQuickJumper: true, - showSizeChanger: true, - total: 0, +export default { + name: "EamSparePartRequisitionList", + mixins: [JeecgListMixin], + components: { + EamSparePartRequisitionModal, + EamSparePartRequisitionExamineModal + }, + data() { + return { + description: '澶囦欢璇疯喘鍗曠鐞嗛〉闈�', + model1: {}, + model2: {}, + queryParam1: {}, + queryParam2: {}, + dataSource: [], + dataSource2: [], + spareRequisitionId: '', + iPagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['10', '20', '30'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' }, - iPagination2: { - current: 1, - pageSize: 10, - pageSizeOptions: ['10', '20', '30'], - showTotal: (total, range) => { - return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' - }, - showQuickJumper: true, - showSizeChanger: true, - total: 0, + showQuickJumper: true, + showSizeChanger: true, + total: 0, + }, + iPagination2: { + current: 1, + pageSize: 10, + pageSizeOptions: ['10', '20', '30'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' }, - iSorter1: { - column: 'createTime', - order: 'desc', + showQuickJumper: true, + showSizeChanger: true, + total: 0, + }, + iSorter1: { + column: 'createTime', + order: 'desc', + }, + iSorter2: { + column: 'createTime', + order: 'desc', + }, + filters1: {}, + filters2: {}, + loading: false, + loading2: false, + selectedRowKeys1: [], + selectedRowKeys2: [], + selectionRows1: [], + selectionRows2: [], + rightColVal: 0, + // 楂樼骇鏌ヨ鍙傛暟 + superQueryParams2: '', + // 楂樼骇鏌ヨ鎷兼帴鏉′欢 + superQueryMatchType2: 'and', + // 琛ㄥご + columns: [ + { + title: '璇疯喘鍗曞彿', + align: "center", + dataIndex: 'requisitionCode' }, - iSorter2: { - column: 'createTime', - order: 'desc', + { + title: '鐘舵��', + align: "center", + dataIndex: 'requisitionStatus_dictText' }, - filters1: {}, - filters2: {}, - loading: false, - loading2: false, - selectedRowKeys1: [], - selectedRowKeys2: [], - selectionRows1: [], - selectionRows2: [], - rightColVal: 0, - // 楂樼骇鏌ヨ鍙傛暟 - superQueryParams2: '', - // 楂樼骇鏌ヨ鎷兼帴鏉′欢 - superQueryMatchType2: 'and', - // 琛ㄥご - columns: [ - { - title: '璇疯喘鍗曞彿', - align:"center", - dataIndex: 'requisitionCode' - }, - { - title: '鐘舵��', - align:"center", - dataIndex: 'requisitionStatus_dictText' - }, - { - title: '璇疯喘浜�', - align:"center", - dataIndex: 'reportUser' - }, - { - title: '璇疯喘鏃堕棿', - align:"center", - dataIndex: 'createTime' - }, - { - title: '瀹℃牳浜�', - align:"center", - dataIndex: 'approvalUser' - }, - { - title: '瀹℃牳鏃堕棿', - align:"center", - dataIndex: 'approvalTime' - }, - { - title: '鎿嶄綔', - dataIndex: 'action', - align:"center", - scopedSlots: { customRender: 'action' }, - } - ], - // 瀛愯〃琛ㄥご - columns2: [ - { - title: '澶囧搧澶囦欢ID', - align:"center", - dataIndex: 'partId' - }, - { - title: '璇疯喘鏁伴噺', - align:"center", - dataIndex: 'requisitionNum' - }, - { - title: '鎿嶄綔', - dataIndex: 'action', - align:"center", - scopedSlots: { customRender: 'action' }, - } - ], - url: { - list: "/eam/eamSparePartRequisition/list", - list2: "/eam/eamSparePartRequisitionDetail/list", - delete: "/eam/eamSparePartRequisition/delete", - delete2: "/eam/eamSparePartRequisitionDetail/delete", - deleteBatch: "/eam/eamSparePartRequisition/deleteBatch", - deleteBatch2: "/eam/eamSparePartRequisitionDetail/deleteBatch", - exportXlsUrl: "eam/eamSparePartRequisition/exportXls", - exportXlsUrl2: "eam/eamSparePartRequisitionDetail/exportXls", - importExcelUrl: "eam/eamSparePartRequisition/importExcel", - importExcelUrl2: "eam/eamSparePartRequisitionDetail/importExcel", - submit: "eam/eamSparePartRequisition/submitSpareRequisition" - }, + { + title: '璇疯喘浜�', + align: "center", + dataIndex: 'reportUser' + }, + { + title: '璇疯喘鏃堕棿', + align: "center", + dataIndex: 'createTime' + }, + { + title: '瀹℃牳浜�', + align: "center", + dataIndex: 'approvalUser' + }, + { + title: '瀹℃牳鏃堕棿', + align: "center", + dataIndex: 'approvalTime' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: "center", + scopedSlots: { customRender: 'action' }, + } + ], + // 瀛愯〃琛ㄥご + columns2: [ + { + title: '澶囧搧澶囦欢ID', + align: "center", + dataIndex: 'partId' + }, + { + title: '璇疯喘鏁伴噺', + align: "center", + dataIndex: 'requisitionNum' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: "center", + scopedSlots: { customRender: 'action' }, + } + ], + url: { + list: "/eam/eamSparePartRequisition/list", + list2: "/eam/eamSparePartRequisitionDetail/list", + delete: "/eam/eamSparePartRequisition/delete", + delete2: "/eam/eamSparePartRequisitionDetail/delete", + deleteBatch: "/eam/eamSparePartRequisition/deleteBatch", + deleteBatch2: "/eam/eamSparePartRequisitionDetail/deleteBatch", + exportXlsUrl: "eam/eamSparePartRequisition/exportXls", + exportXlsUrl2: "eam/eamSparePartRequisitionDetail/exportXls", + importExcelUrl: "eam/eamSparePartRequisition/importExcel", + importExcelUrl2: "eam/eamSparePartRequisitionDetail/importExcel", + submit: "eam/eamSparePartRequisition/submitSpareRequisition" + }, } }, computed: { - importExcelUrl: function(){ + importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; }, leftColMd() { @@ -340,203 +496,203 @@ return this.selectedRowKeys1.length === 0 ? 0 : 12 } }, - methods: { - customRow(record) { - return { - on: { - dblclick:() => { - this.handleOpen(record) - } + methods: { + customRow(record) { + return { + on: { + dblclick: () => { + this.handleOpen(record) } } - }, - onSelectChange1(selectedRowKeys, selectionRows) { - this.rightColVal = 1 - this.selectedRowKeys1 = selectedRowKeys - this.selectionRows1 = selectionRows - this.model1 = Object.assign({}, selectionRows[0]) - this.spareRequisitionId = selectedRowKeys[0] - this.loadData2() - }, - onSelectChange2(selectedRowKeys, selectionRows) { - this.selectedRowKeys2 = selectedRowKeys - this.selectionRows2 = selectionRows - }, - /** - * 鐐瑰嚮褰撳墠琛岃溅闂撮�夐」鍚庤Е鍙戜簨浠� - * @param record 褰撳墠琛屾暟鎹� - */ - handleOpen: function (record) { - this.rightColVal = 1 - this.selectedRowKeys1 = [record.id] - this.model1 = Object.assign({}, record) - this.spareRequisitionId = record.id - this.onClearSelected2() - this.loadData2() - }, - searchQuery2: function () { - this.loadData2(1) - }, - searchReset2: function () { - this.queryParam2 = {} - this.loadData2(1) - }, - handleTableChange2: function (pagination, filters, sorter) { - //鍒嗛〉銆佹帓搴忋�佺瓫閫夊彉鍖栨椂瑙﹀彂 - if (Object.keys(sorter).length > 0) { - this.iSorter2.column = sorter.field - this.iSorter2.order = 'ascend' == sorter.order ? 'asc' : 'desc' + } + }, + onSelectChange1(selectedRowKeys, selectionRows) { + this.rightColVal = 1 + this.selectedRowKeys1 = selectedRowKeys + this.selectionRows1 = selectionRows + this.model1 = Object.assign({}, selectionRows[0]) + this.spareRequisitionId = selectedRowKeys[0] + this.loadData2() + }, + onSelectChange2(selectedRowKeys, selectionRows) { + this.selectedRowKeys2 = selectedRowKeys + this.selectionRows2 = selectionRows + }, + /** + * 鐐瑰嚮褰撳墠琛岃溅闂撮�夐」鍚庤Е鍙戜簨浠� + * @param record 褰撳墠琛屾暟鎹� + */ + handleOpen: function (record) { + this.rightColVal = 1 + this.selectedRowKeys1 = [record.id] + this.model1 = Object.assign({}, record) + this.spareRequisitionId = record.id + this.onClearSelected2() + this.loadData2() + }, + searchQuery2: function () { + this.loadData2(1) + }, + searchReset2: function () { + this.queryParam2 = {} + this.loadData2(1) + }, + handleTableChange2: function (pagination, filters, sorter) { + //鍒嗛〉銆佹帓搴忋�佺瓫閫夊彉鍖栨椂瑙﹀彂 + if (Object.keys(sorter).length > 0) { + this.iSorter2.column = sorter.field + this.iSorter2.order = 'ascend' == sorter.order ? 'asc' : 'desc' + } + this.iPagination2 = pagination + this.loadData2() + }, + onClearSelected2: function () { + this.selectedRowKeys2 = [] + this.selectionRows2 = [] + }, + loadData2: function (arg) { + if (!this.url.list2) { + this.$message.error('璇疯缃畊rl.list2灞炴��!') + return + } + //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 + if (arg === 1) { + this.iPagination2.current = 1 + } + if (this.currentWorkshopId === '') return + let params = this.getQueryParams2() //鏌ヨ鏉′欢 + params.spareRequisitionId = this.spareRequisitionId + this.loading2 = true + getAction(this.url.list2, params).then((res) => { + if (res.success) { + this.dataSource2 = res.result.records + this.iPagination2.total = res.result.total + } else { + this.dataSource2 = [] } - this.iPagination2 = pagination - this.loadData2() - }, - onClearSelected2: function () { - this.selectedRowKeys2 = [] - this.selectionRows2 = [] - }, - loadData2: function (arg) { - if (!this.url.list2) { - this.$message.error('璇疯缃畊rl.list2灞炴��!') - return - } - //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 - if (arg === 1) { - this.iPagination2.current = 1 - } - if (this.currentWorkshopId === '') return - let params = this.getQueryParams2() //鏌ヨ鏉′欢 - params.spareRequisitionId = this.spareRequisitionId - this.loading2 = true - getAction(this.url.list2, params).then((res) => { - if (res.success) { - this.dataSource2 = res.result.records - this.iPagination2.total = res.result.total - }else{ - this.dataSource2=[] - } - this.loading2 = false - }) - }, - getQueryParams2() { - //鑾峰彇鏌ヨ鏉′欢 - let sqp = {} - if (this.superQueryParams2) { - sqp['superQueryParams'] = encodeURI(this.superQueryParams2) - sqp['superQueryMatchType'] = this.superQueryMatchType2 - } - var param = Object.assign(sqp, this.queryParam2, this.iSorter2, this.filters2) - param.field = this.getQueryField2() - param.pageNo = this.iPagination2.current - param.pageSize = this.iPagination2.pageSize - return filterObj(param) - }, - getQueryField2() { - var str = 'id,' - this.columns2.forEach(function(value) { - str += ',' + value.dataIndex - }) - return str - }, - hideSpareDetailList: function () { - this.selectedRowKeys1 = [] - }, - handleEdit2: function(record) { - this.$refs.modalForm2.title = '缂栬緫' + this.loading2 = false + }) + }, + getQueryParams2() { + //鑾峰彇鏌ヨ鏉′欢 + let sqp = {} + if (this.superQueryParams2) { + sqp['superQueryParams'] = encodeURI(this.superQueryParams2) + sqp['superQueryMatchType'] = this.superQueryMatchType2 + } + var param = Object.assign(sqp, this.queryParam2, this.iSorter2, this.filters2) + param.field = this.getQueryField2() + param.pageNo = this.iPagination2.current + param.pageSize = this.iPagination2.pageSize + return filterObj(param) + }, + getQueryField2() { + var str = 'id,' + this.columns2.forEach(function (value) { + str += ',' + value.dataIndex + }) + return str + }, + hideSpareDetailList: function () { + this.selectedRowKeys1 = [] + }, + handleEdit2: function (record) { + this.$refs.modalForm2.title = '缂栬緫' + // this.$refs.modalForm2.roleDisabled = true + this.$refs.modalForm2.edit(record) + }, + handleAdd2: function () { + if (this.spareRequisitionId === '') { + this.$message.error('璇烽�夋嫨涓�涓璐崟!') + } else { // this.$refs.modalForm2.roleDisabled = true - this.$refs.modalForm2.edit(record) - }, - handleAdd2: function () { - if (this.spareRequisitionId === '') { - this.$message.error('璇烽�夋嫨涓�涓璐崟!') + this.$refs.modalForm2.title = '鏂板' + this.$refs.modalForm2.edit({ selectedSpareRequisitions: this.spareRequisitionId }) + } + }, + handleDelete2: function (id) { + if (!this.url.delete2) { + this.$message.error('璇疯缃畊rl.delete2灞炴��!') + return + } + var that = this + deleteAction(that.url.delete2, { spareRequisitionId: this.spareRequisitionId, spareRequisitionDetailId: id }).then((res) => { + if (res.success) { + that.$message.success(res.message) + that.loadData2() } else { - // this.$refs.modalForm2.roleDisabled = true - this.$refs.modalForm2.title = '鏂板' - this.$refs.modalForm2.edit({selectedSpareRequisitions:this.spareRequisitionId}) + that.$message.warning(res.message) } - }, - handleDelete2: function (id) { - if (!this.url.delete2) { - this.$message.error('璇疯缃畊rl.delete2灞炴��!') - return - } - var that = this - deleteAction(that.url.delete2, { spareRequisitionId: this.spareRequisitionId, spareRequisitionDetailId: id }).then((res) => { - if (res.success) { - that.$message.success(res.message) - that.loadData2() - } else { - that.$message.warning(res.message) - } - }) - }, - batchDel2: function() { - if (!this.url.deleteBatch2) { - this.$message.error('璇疯缃畊rl.deleteBatch2灞炴��!') - return - } - if (this.selectedRowKeys2.length <= 0) { - this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒') - return - } else { - var ids = '' - for (var a = 0; a < this.selectedRowKeys2.length; a++) { - ids += this.selectedRowKeys2[a] + ',' - } - var that = this - this.$confirm({ - title: '纭鍒犻櫎', - content: '鏄惁鍒犻櫎閫変腑鏁版嵁?', - onOk: function() { - deleteAction(that.url.deleteBatch2, { spareRequisitionId: that.spareRequisitionId, spareRequisitionDetailIds: ids }).then((res) => { - if (res.success) { - that.$message.success(res.message) - that.loadData2() - that.onClearSelected2() - } else { - that.$message.warning(res.message) - } - }) - } - }) - } - }, - onClearSelected1() { - this.selectedRowKeys1 = [] - this.selectionRows1 = [] - }, - handleConfirm(record) { - if (!this.url.submit) { - this.$message.error('璇疯缃畊rl.submit灞炴��!') - return + }) + }, + batchDel2: function () { + if (!this.url.deleteBatch2) { + this.$message.error('璇疯缃畊rl.deleteBatch2灞炴��!') + return + } + if (this.selectedRowKeys2.length <= 0) { + this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒') + return + } else { + var ids = '' + for (var a = 0; a < this.selectedRowKeys2.length; a++) { + ids += this.selectedRowKeys2[a] + ',' } var that = this this.$confirm({ - title: '纭鎻愪氦', - content: '纭畾鎻愪氦鍚�?', - onOk: function() { - postAction(that.url.submit, record).then((res) => { + title: '纭鍒犻櫎', + content: '鏄惁鍒犻櫎閫変腑鏁版嵁?', + onOk: function () { + deleteAction(that.url.deleteBatch2, { spareRequisitionId: that.spareRequisitionId, spareRequisitionDetailIds: ids }).then((res) => { if (res.success) { that.$message.success(res.message) - that.loadData() - // that.onClearSelected1() + that.loadData2() + that.onClearSelected2() } else { that.$message.warning(res.message) } }) } }) - }, - handleExamine: function (record) { - this.$refs.modalExamine.examine(record); - this.$refs.modalExamine.title = "瀹℃牳"; - this.$refs.modalExamine.disableSubmit = false; - }, - modalFormOk2: function () { - this.loadData() } + }, + onClearSelected1() { + this.selectedRowKeys1 = [] + this.selectionRows1 = [] + }, + handleConfirm(record) { + if (!this.url.submit) { + this.$message.error('璇疯缃畊rl.submit灞炴��!') + return + } + var that = this + this.$confirm({ + title: '纭鎻愪氦', + content: '纭畾鎻愪氦鍚�?', + onOk: function () { + postAction(that.url.submit, record).then((res) => { + if (res.success) { + that.$message.success(res.message) + that.loadData() + // that.onClearSelected1() + } else { + that.$message.warning(res.message) + } + }) + } + }) + }, + handleExamine: function (record) { + this.$refs.modalExamine.examine(record); + this.$refs.modalExamine.title = "瀹℃牳"; + this.$refs.modalExamine.disableSubmit = false; + }, + modalFormOk2: function () { + this.loadData() } } +} </script> <style scoped> - @import '~@assets/less/common.less'; +@import '~@assets/less/common.less'; </style> \ No newline at end of file diff --git a/src/views/eam/spare/modules/EamSparePartRequisitionDetailModal.vue b/src/views/eam/spare/modules/EamSparePartRequisitionDetailModal.vue deleted file mode 100644 index e7c17a2..0000000 --- a/src/views/eam/spare/modules/EamSparePartRequisitionDetailModal.vue +++ /dev/null @@ -1,117 +0,0 @@ -<template> - <j-modal - :title="title" - :width="800" - :visible="visible" - :confirmLoading="confirmLoading" - switchFullscreen - @ok="handleOk" - @cancel="handleCancel" - cancelText="鍏抽棴"> - - <a-spin :spinning="confirmLoading"> - <a-form-model ref="form" :model="model" :rules="validatorRules"> - - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="鍒犻櫎鏍囪"> - <a-input-number v-model="model.delFlag"/> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="partId" label="澶囧搧澶囦欢ID"> - <a-input placeholder="璇疯緭鍏ュ鍝佸浠禝D" v-model="model.partId" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requisitionNum" label="璇疯喘鏁伴噺"> - <a-input placeholder="璇疯緭鍏ヨ璐暟閲�" v-model="model.requisitionNum" /> - </a-form-model-item> - - </a-form-model> - </a-spin> - </j-modal> -</template> - -<script> - import { httpAction } from '@api/manage' - import moment from "moment" - - export default { - name: "EamSparePartRequisitionDetailModal", - data () { - return { - title:"鎿嶄綔", - visible: false, - model: {}, - labelCol: { - xs: { span: 24 }, - sm: { span: 5 }, - }, - wrapperCol: { - xs: { span: 24 }, - sm: { span: 16 }, - }, - - confirmLoading: false, - validatorRules:{ - }, - url: { - add: "/eam/eamSparePartRequisitionDetail/add", - edit: "/eam/eamSparePartRequisitionDetail/edit", - }, - } - }, - created () { - }, - methods: { - add () { - //鍒濆鍖栭粯璁ゅ�� - this.edit({}); - }, - edit (record) { - this.model = Object.assign({}, record); - this.visible = true; - }, - close () { - this.$emit('close'); - this.visible = false; - this.$refs.form.clearValidate(); - }, - handleOk () { - const that = this; - // 瑙﹀彂琛ㄥ崟楠岃瘉 - this.$refs.form.validate(valid => { - if (valid) { - that.confirmLoading = true; - let httpurl = ''; - let method = ''; - if(!this.model.id){ - httpurl+=this.url.add; - method = 'post'; - }else{ - httpurl+=this.url.edit; - method = 'put'; - } - httpAction(httpurl,this.model,method).then((res)=>{ - if(res.success){ - that.$message.success(res.message); - that.$emit('ok'); - }else{ - that.$message.warning(res.message); - } - }).finally(() => { - that.confirmLoading = false; - that.close(); - }) - }else{ - return false; - } - }) - }, - handleCancel () { - this.close() - }, - - - } - } -</script> - -<style lang="less" scoped> - -</style> \ No newline at end of file diff --git a/src/views/eam/spare/modules/EamSparePartRequisitionExamineModal.vue b/src/views/eam/spare/modules/EamSparePartRequisitionExamineModal.vue deleted file mode 100644 index 4aee79f..0000000 --- a/src/views/eam/spare/modules/EamSparePartRequisitionExamineModal.vue +++ /dev/null @@ -1,96 +0,0 @@ -<template> - <j-modal - :title="title" - :width="800" - :visible="visible" - :confirmLoading="confirmLoading" - switchFullscreen - :cancel="close"> - - <a-spin :spinning="confirmLoading"> - <a-form-model ref="form" :model="model" :rules="validatorRules"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requisitionCode" label="璇疯喘鍗曠紪鐮�"> - <a-input placeholder="璇疯喘鍗曠紪鐮佽嚜鍔ㄧ敓鎴�" v-model="model.requisitionCode" :disabled="true" /> - </a-form-model-item> - </a-form-model> - </a-spin> - - <template slot='footer'> - <a-popconfirm @confirm="handleReject" title="纭灏嗗綋鍓嶅浠惰璐崟椹冲洖锛�" > - <a-button :loading='confirmLoading' :style="{marginRight: '8px'}" >椹冲洖</a-button> - </a-popconfirm> - <a-popconfirm @confirm="handleOk" title="纭灏嗗綋鍓嶅浠惰璐崟瀹℃牳閫氳繃锛�" > - <a-button type='primary' :loading='confirmLoading' :style="{marginRight: '8px'}" >閫氳繃</a-button> - </a-popconfirm> - </template> - </j-modal> -</template> - -<script> -import { postAction } from '@api/manage' - -export default { - name: "EamSparePartRequisitionExamineModal", - data () { - return { - title:"瀹℃牳", - visible: false, - model: {}, - labelCol: { - xs: { span: 24 }, - sm: { span: 5 }, - }, - wrapperCol: { - xs: { span: 24 }, - sm: { span: 16 }, - }, - - confirmLoading: false, - validatorRules:{ - }, - url: { - examine: "eam/eamSparePartRequisition/examineSpareRequisition" - }, - } - }, - created () { - }, - methods: { - examine (record) { - this.model = Object.assign({}, record); - this.visible = true; - }, - close () { - this.$emit('close'); - this.visible = false; - }, - handleOk () { - this.handleSubmit("3"); - }, - handleReject () { - this.handleSubmit("4"); - }, - handleSubmit(status) { - const that = this; - that.model.requisitionStatus = status; - postAction(that.url.examine, that.model).then((res) => { - if (res.success) { - that.$message.success(res.message); - that.$emit('ok'); - } else { - that.$message.warning(res.message); - } - }).catch(() => { - that.$message.error('鎿嶄綔澶辫触锛岃绋嶅悗閲嶈瘯'); - }).finally(() => { - that.confirmLoading = false; - that.close(); - }); - } - } -} -</script> - -<style lang="less" scoped> - -</style> \ No newline at end of file diff --git a/src/views/eam/spare/modules/EamSparePartRequisitionModal.vue b/src/views/eam/spare/modules/EamSparePartRequisitionModal.vue deleted file mode 100644 index a6898cf..0000000 --- a/src/views/eam/spare/modules/EamSparePartRequisitionModal.vue +++ /dev/null @@ -1,124 +0,0 @@ -<template> - <j-modal - :title="title" - :width="800" - :visible="visible" - :confirmLoading="confirmLoading" - switchFullscreen - @ok="handleOk" - @cancel="handleCancel" - cancelText="鍏抽棴"> - - <a-spin :spinning="confirmLoading"> - <a-form-model ref="form" :model="model" :rules="validatorRules"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requisitionCode" label="璇疯喘鍗曠紪鐮�"> - <a-input placeholder="璇疯喘鍗曠紪鐮佽嚜鍔ㄧ敓鎴�" v-model="model.requisitionCode" :disabled="true" /> - </a-form-model-item> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞"> - <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" /> - </a-form-model-item> - </a-form-model> - </a-spin> - </j-modal> -</template> - -<script> -import { httpAction, getAction } from '@api/manage' -import moment from "moment" - -export default { - name: "EamSparePartRequisitionModal", - data() { - return { - title: "鎿嶄綔", - visible: false, - model: {}, - labelCol: { - xs: { span: 24 }, - sm: { span: 5 }, - }, - wrapperCol: { - xs: { span: 24 }, - sm: { span: 16 }, - }, - - confirmLoading: false, - validatorRules: {}, - url: { - add: "/eam/eamSparePartRequisition/add", - edit: "/eam/eamSparePartRequisition/edit", - generateRequisitionCode: "sys/sysBusinessCodeRule/generateBusinessCodeSeq" - }, - } - }, - created() { - }, - methods: { - add() { - const that = this - let params = { - businessCode: "SpareRequisitionCodeRule" - } - getAction(that.url.generateRequisitionCode, params).then((res) => { - if (res.success) { - this.model = { - requisitionCode: res.result - } - } else { - that.$message.warning(res.message); - } - }) - //鍒濆鍖栭粯璁ゅ�� - that.edit(this.model); - }, - edit(record) { - this.model = Object.assign({}, record); - this.visible = true; - }, - close() { - this.$emit('close'); - this.visible = false; - this.$refs.form.clearValidate(); - }, - handleOk() { - const that = this; - // 瑙﹀彂琛ㄥ崟楠岃瘉 - this.$refs.form.validate(valid => { - if (valid) { - that.confirmLoading = true; - let httpurl = ''; - let method = ''; - if (!this.model.id) { - httpurl += this.url.add; - method = 'post'; - } else { - httpurl += this.url.edit; - method = 'put'; - } - httpAction(httpurl, this.model, method).then((res) => { - if (res.success) { - that.$message.success(res.message); - that.$emit('ok'); - } else { - that.$message.warning(res.message); - } - }).finally(() => { - that.confirmLoading = false; - that.close(); - }) - } else { - return false; - } - }) - }, - handleCancel() { - this.close() - }, - - } -} -</script> - -<style lang="less" scoped> - -</style> \ No newline at end of file diff --git a/src/views/flowable/workflow/FlowCompleted.vue b/src/views/flowable/workflow/FlowCompleted.vue index 48bacaf..e592092 100644 --- a/src/views/flowable/workflow/FlowCompleted.vue +++ b/src/views/flowable/workflow/FlowCompleted.vue @@ -17,10 +17,12 @@ </a-col> <a-col :xl="10" :lg="11" :md="12" :sm="24"> <a-form-item label="鎿嶄綔鏃堕棿"> - <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨寮�濮嬫椂闂�" class="query-group-cust" + <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨寮�濮嬫椂闂�" + class="query-group-cust" v-model="queryParam.startTime"></j-date> <span class="query-group-split-cust"></span> - <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨缁撴潫鏃堕棿" class="query-group-cust" + <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨缁撴潫鏃堕棿" + class="query-group-cust" v-model="queryParam.endTime"></j-date> </a-form-item> </a-col> @@ -60,232 +62,274 @@ <AssignFileStreamXq ref="modalFormApproval" :selectShenpiData="selectShenpiData"></AssignFileStreamXq> - <DispatchFileXq ref="modalFormDispatchFileXq" :selectShenpiData="selectDispatchFileXqData"></DispatchFileXq> + <DispatchFileXq ref="modalFormDispatchFileXq" :selectShenpiData="selectDispatchFileXqData"></DispatchFileXq> - <inspection-order-handle ref="modalFormInspectionOrderXq" :selectShenpiData="selectInspectionOrderXqData"/> + <inspection-order-handle ref="modalFormInspectionOrderXq" :selectShenpiData="selectInspectionOrderXqData" /> - <week-maintenance-approval-modal ref="weekMaintenanceApprovalModal" :selectShenpiData="selectWeekMaintenanceData"/> + <week-maintenance-approval-modal ref="weekMaintenanceApprovalModal" :selectShenpiData="selectWeekMaintenanceData" /> - <repair-order-approval-modal ref="repairOrderApprovalModal" :selectShenpiData="selectRepairOrderData"/> + <repair-order-approval-modal ref="repairOrderApprovalModal" :selectShenpiData="selectRepairOrderData" /> - <out-bound-order-handle ref="outBoundOrderHandle" :selectShenpiData="selectOutBoundOrderData"/> + <out-bound-order-handle ref="outBoundOrderHandle" :selectShenpiData="selectOutBoundOrderData" /> + <stocktaking-bound-handle ref="stocktakingBoundHandle" :selectShenpiData="selectStocktakingBoundOrderData" + @searchReset="searchReset"></stocktaking-bound-handle> + + + <loss-bound-handle ref="lossBoundHandle" :selectShenpiData="selectLossBoundOrderData" + @searchReset="searchReset"></loss-bound-handle> </a-card> </template> <script> - import '@/assets/less/TableExpand.less' - import { mixinDevice } from '@/utils/mixin' - import { JeecgListMixin } from '@/mixins/JeecgListMixin' - import JDictSelectTag from '@/components/dict/JDictSelectTag.vue' - import AssignFileStreamXq from '@views/flowable/workflow/assignFileStream/AssignFileStreamXq.vue' - import DispatchFileXq from '@views/flowable/workflow/dispatchFile/DispatchFileXq.vue' - import InspectionOrderHandle from './InspectionOrder/InspectionOrderHandle' - import WeekMaintenanceApprovalModal from './weekMaintenance/WeekMaintenanceApprovalModal' - import RepairOrderApprovalModal from './repairOrder/RepairOrderApprovalModal' - import OutBoundOrderHandle from '@views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue' +import '@/assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import JDictSelectTag from '@/components/dict/JDictSelectTag.vue' +import AssignFileStreamXq from '@views/flowable/workflow/assignFileStream/AssignFileStreamXq.vue' +import DispatchFileXq from '@views/flowable/workflow/dispatchFile/DispatchFileXq.vue' +import InspectionOrderHandle from './InspectionOrder/InspectionOrderHandle' +import WeekMaintenanceApprovalModal from './weekMaintenance/WeekMaintenanceApprovalModal' +import RepairOrderApprovalModal from './repairOrder/RepairOrderApprovalModal' +import OutBoundOrderHandle from '@views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue' +import lossBoundHandle from '@views/flowable/workflow/lossBound/lossBoundHandle.vue' +import stocktakingBoundHandle from '@views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue' - export default { - name: 'NcDeviceCharactersList', - mixins: [JeecgListMixin, mixinDevice], - components: { - DispatchFileXq, - AssignFileStreamXq: AssignFileStreamXq, - RepairOrderApprovalModal, - WeekMaintenanceApprovalModal, - InspectionOrderHandle, - JDictSelectTag, - OutBoundOrderHandle - }, - data() { - return { - description: '宸ヤ綔娴�-宸插姙', - // 琛ㄥご - columns: [ - { - title: '搴忓彿', - dataIndex: '', - key: 'rowIndex', - width: 200, - align: 'center', - customRender: function(t, r, index) { - return parseInt(index) + 1 - } - }, - { - title: '娴佺▼鍒嗙被', - align: 'center', - dataIndex: 'category_dictText', - width: 200 - }, - { - title: '娴佺▼鍚嶇О', - align: 'center', - dataIndex: 'procDefName', - width: 200 - }, - { - title: '娴佺▼涓氬姟绠�瑕佹弿杩�', - align: 'center', - dataIndex: 'description', - width: 300 - }, - { - title: '娴佺▼鍙戣捣浜哄悕绉�', - align: 'center', - dataIndex: 'startUserName', - width: 250 - }, - { - title: '浠诲姟鍚嶇О', - align: 'center', - dataIndex: 'taskName', - width: 250 - }, - { - title: '鎿嶄綔鏃堕棿', - align: 'center', - dataIndex: 'finishTime', - width: 300 - }, - { - title: '鎿嶄綔', - dataIndex: 'action', - scopedSlots: { customRender: 'action' }, - align: 'center', - width: 200, - fixed: 'right' +export default { + name: 'NcDeviceCharactersList', + mixins: [JeecgListMixin, mixinDevice], + components: { + stocktakingBoundHandle, + lossBoundHandle, + DispatchFileXq, + AssignFileStreamXq: AssignFileStreamXq, + RepairOrderApprovalModal, + WeekMaintenanceApprovalModal, + InspectionOrderHandle, + JDictSelectTag, + OutBoundOrderHandle + }, + data() { + return { + description: '宸ヤ綔娴�-宸插姙', + // 琛ㄥご + columns: [ + { + title: '搴忓彿', + dataIndex: '', + key: 'rowIndex', + width: 200, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 } - ], - url: { - list: '/assign/flow/finishedList' }, - dictOptions: {}, - selectShenpiData: {}, - selectDispatchFileXqData:{}, - selectWeekMaintenanceData: {}, - selectInspectionOrderXqData: {}, - selectRepairOrderData: {}, - selectOutBoundOrderData: {} - } - }, - created() { - }, - computed: { - importExcelUrl: function() { - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` - } - }, - methods: { - handelDetial(item, index) { - console.log('鐐瑰嚮浜嗚鎯�') - console.log('item----->', item) - console.log('index----->', index) - let approcesstype = this.splitAprocessType(item.category) - console.log('approcesstype--->', approcesstype) - switch (approcesstype) { - case 'drApproval': - this.handDrDetial(item) - break - case 'ggApproval': - this.handDispatchFileDetial(item) - break - case 'sbdjApproval': - this.handInspectionOrder(item) - break - case 'WEEK_MAINTENANCE': - this.handleWeekMaintenance(item) - break - case 'eam_repair': - this.handleRepairOrder(item) - break - case 'toolOutStorageApproval': - this.handleToolOutStorageApproval(item) - break - default: - alert('娌℃壘鍒拌娴佺▼') + { + title: '娴佺▼鍒嗙被', + align: 'center', + dataIndex: 'category_dictText', + width: 200 + }, + { + title: '娴佺▼鍚嶇О', + align: 'center', + dataIndex: 'procDefName', + width: 200 + }, + { + title: '娴佺▼涓氬姟绠�瑕佹弿杩�', + align: 'center', + dataIndex: 'description', + width: 300 + }, + { + title: '娴佺▼鍙戣捣浜哄悕绉�', + align: 'center', + dataIndex: 'startUserName', + width: 250 + }, + { + title: '浠诲姟鍚嶇О', + align: 'center', + dataIndex: 'taskName', + width: 250 + }, + { + title: '鎿嶄綔鏃堕棿', + align: 'center', + dataIndex: 'finishTime', + width: 300 + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + scopedSlots: { customRender: 'action' }, + align: 'center', + width: 200, + fixed: 'right' } + ], + url: { + list: '/assign/flow/finishedList' }, - - splitAprocessType(title) { - let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊 - let result = parts[0] - return result - }, - handDrDetial(item) { - this.selectShenpiData = item - this.selectShenpiData.assignee_dictText=item.todoUsers_dictText - this.selectShenpiData.procInstId=item.procInsId - this.selectShenpiData.title=item.description - this.$refs.modalFormApproval.clearTableSource() - this.$refs.modalFormApproval.getAllApproveData(item) - }, - handDispatchFileDetial(item){ - console.log('item----->', item) - this.selectDispatchFileXqData = item - this.selectDispatchFileXqData.assignee_dictText=item.todoUsers_dictText - this.selectDispatchFileXqData.procInstId=item.procInsId - this.selectDispatchFileXqData.processInstanceId=item.procInsId - this.selectDispatchFileXqData.title=item.description - this.$refs.modalFormDispatchFileXq.clearTableSource() - this.$refs.modalFormDispatchFileXq.getAllApproveData(item) - }, - handleWeekMaintenance(record) { - this.selectWeekMaintenanceData = Object.assign({}, record) - this.$refs.weekMaintenanceApprovalModal.handleDetail(record) - this.$refs.weekMaintenanceApprovalModal.title = '璇︽儏' - this.$refs.weekMaintenanceApprovalModal.disableSubmit = true - }, - - handInspectionOrder(record) { - console.log('record----->', record) - this.selectInspectionOrderXqData = Object.assign({}, record) - const { todoUsers_dictText, procInsId, description, taskName } = this.selectInspectionOrderXqData - this.selectInspectionOrderXqData.assignee_dictText = todoUsers_dictText - this.selectInspectionOrderXqData.procInstId = procInsId - this.selectInspectionOrderXqData.processInstanceId = procInsId - this.selectInspectionOrderXqData.title = description - this.$refs.modalFormInspectionOrderXq.visible = true - this.$refs.modalFormInspectionOrderXq.title = taskName - this.$refs.modalFormInspectionOrderXq.disableSubmit = true - this.$refs.modalFormInspectionOrderXq.getAllApproveData({ - ...record, - procInstId: procInsId, - processInstanceId: procInsId - }) - this.$refs.modalFormInspectionOrderXq.getBasicInformation(record) - }, - - /** - * 鐐瑰嚮璁惧缁翠慨鍒嗙被娴佺▼璇︽儏鏃惰Е鍙� - * @param record - */ - handleRepairOrder(record) { - this.selectRepairOrderData = Object.assign({}, record) - const { procInsId, taskName } = this.selectRepairOrderData - this.$refs.repairOrderApprovalModal.visible = true - this.$refs.repairOrderApprovalModal.disableSubmit = true - this.$refs.repairOrderApprovalModal.title = taskName - this.$refs.modalFormInspectionOrderXq.getAllApproveData({ - ...record, - procInstId: procInsId, - processInstanceId: procInsId - }) - this.$refs.repairOrderApprovalModal.getBasicInformation(record) - }, - - handleToolOutStorageApproval(item) { - this.selectOutBoundOrderData = Object.assign({}, item) - item.procInstId = item.procInsId - item.processInstanceId = item.procInsId - this.selectOutBoundOrderData.assignee_dictText = item.todoUsers_dictText - this.$refs.outBoundOrderHandle.auditVisible = false - this.$refs.outBoundOrderHandle.clearTableSource() - this.$refs.outBoundOrderHandle.getAllApproveData(item) + dictOptions: {}, + selectShenpiData: {}, + selectDispatchFileXqData: {}, + selectWeekMaintenanceData: {}, + selectInspectionOrderXqData: {}, + selectRepairOrderData: {}, + selectOutBoundOrderData: {}, + selectLossBoundOrderData: {}, + selectStocktakingBoundOrderData: {} + } + }, + created() { + }, + computed: { + importExcelUrl: function() { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` + } + }, + methods: { + handelDetial(item, index) { + console.log('鐐瑰嚮浜嗚鎯�') + console.log('item----->', item) + console.log('index----->', index) + let approcesstype = this.splitAprocessType(item.category) + console.log('approcesstype--->', approcesstype) + switch (approcesstype) { + case 'drApproval': + this.handDrDetial(item) + break + case 'ggApproval': + this.handDispatchFileDetial(item) + break + case 'sbdjApproval': + this.handInspectionOrder(item) + break + case 'WEEK_MAINTENANCE': + this.handleWeekMaintenance(item) + break + case 'eam_repair': + this.handleRepairOrder(item) + break + case 'toolOutStorageApproval': + this.handleToolOutStorageApproval(item) + break + case 'toolsStocktakingBound': + this.handleToolStocktakingApproval(item) + break + case 'toolsLossApproval': + this.handleToolLossApproval(item) + break + default: + alert('娌℃壘鍒拌娴佺▼') } + }, + + splitAprocessType(title) { + let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊 + let result = parts[0] + return result + }, + handDrDetial(item) { + this.selectShenpiData = item + this.selectShenpiData.assignee_dictText = item.todoUsers_dictText + this.selectShenpiData.procInstId = item.procInsId + this.selectShenpiData.title = item.description + this.$refs.modalFormApproval.clearTableSource() + this.$refs.modalFormApproval.getAllApproveData(item) + }, + handDispatchFileDetial(item) { + console.log('item----->', item) + this.selectDispatchFileXqData = item + this.selectDispatchFileXqData.assignee_dictText = item.todoUsers_dictText + this.selectDispatchFileXqData.procInstId = item.procInsId + this.selectDispatchFileXqData.processInstanceId = item.procInsId + this.selectDispatchFileXqData.title = item.description + this.$refs.modalFormDispatchFileXq.clearTableSource() + this.$refs.modalFormDispatchFileXq.getAllApproveData(item) + }, + handleWeekMaintenance(record) { + this.selectWeekMaintenanceData = Object.assign({}, record) + this.$refs.weekMaintenanceApprovalModal.handleDetail(record) + this.$refs.weekMaintenanceApprovalModal.title = '璇︽儏' + this.$refs.weekMaintenanceApprovalModal.disableSubmit = true + }, + + handInspectionOrder(record) { + console.log('record----->', record) + this.selectInspectionOrderXqData = Object.assign({}, record) + const { todoUsers_dictText, procInsId, description, taskName } = this.selectInspectionOrderXqData + this.selectInspectionOrderXqData.assignee_dictText = todoUsers_dictText + this.selectInspectionOrderXqData.procInstId = procInsId + this.selectInspectionOrderXqData.processInstanceId = procInsId + this.selectInspectionOrderXqData.title = description + this.$refs.modalFormInspectionOrderXq.visible = true + this.$refs.modalFormInspectionOrderXq.title = taskName + this.$refs.modalFormInspectionOrderXq.disableSubmit = true + this.$refs.modalFormInspectionOrderXq.getAllApproveData({ + ...record, + procInstId: procInsId, + processInstanceId: procInsId + }) + this.$refs.modalFormInspectionOrderXq.getBasicInformation(record) + }, + + /** + * 鐐瑰嚮璁惧缁翠慨鍒嗙被娴佺▼璇︽儏鏃惰Е鍙� + * @param record + */ + handleRepairOrder(record) { + this.selectRepairOrderData = Object.assign({}, record) + const { procInsId, taskName } = this.selectRepairOrderData + this.$refs.repairOrderApprovalModal.visible = true + this.$refs.repairOrderApprovalModal.disableSubmit = true + this.$refs.repairOrderApprovalModal.title = taskName + this.$refs.modalFormInspectionOrderXq.getAllApproveData({ + ...record, + procInstId: procInsId, + processInstanceId: procInsId + }) + this.$refs.repairOrderApprovalModal.getBasicInformation(record) + }, + + handleToolOutStorageApproval(item) { + this.selectOutBoundOrderData = Object.assign({}, item) + item.procInstId = item.procInsId + item.processInstanceId = item.procInsId + this.selectOutBoundOrderData.assignee_dictText = item.todoUsers_dictText + this.$refs.outBoundOrderHandle.auditVisible = false + this.$refs.outBoundOrderHandle.clearTableSource() + this.$refs.outBoundOrderHandle.getAllApproveData(item) + }, + + handleToolStocktakingApproval(item) { + + this.selectStocktakingBoundOrderData = Object.assign({}, item) + item.procInstId = item.procInsId + item.processInstanceId = item.procInsId + this.selectStocktakingBoundOrderData.assignee_dictText = item.todoUsers_dictText + this.$refs.stocktakingBoundHandle.auditVisible = false + this.$refs.stocktakingBoundHandle.disableSubmit = true + this.$refs.stocktakingBoundHandle.clearTableSource() + this.$refs.stocktakingBoundHandle.getAllApproveData(item) + + }, + handleToolLossApproval(item) { + this.selectLossBoundOrderData = Object.assign({}, item) + item.procInstId = item.procInsId + item.processInstanceId = item.procInsId + this.selectStocktakingBoundOrderData.assignee_dictText = item.todoUsers_dictText + this.$refs.lossBoundHandle.auditVisible = false + this.$refs.lossBoundHandle.disableSubmit = true + this.$refs.lossBoundHandle.clearTableSource() + this.$refs.lossBoundHandle.getAllApproveData(item) + } } +} </script> <style scoped> - @import '~@assets/less/common.less'; +@import '~@assets/less/common.less'; </style> \ No newline at end of file diff --git a/src/views/flowable/workflow/FlowTodo.vue b/src/views/flowable/workflow/FlowTodo.vue index c8f36b2..af6ba4b 100644 --- a/src/views/flowable/workflow/FlowTodo.vue +++ b/src/views/flowable/workflow/FlowTodo.vue @@ -4,15 +4,15 @@ Date: 2025-02-27 --> <template> - <a-card :bordered="false"> + <a-card :bordered='false'> <!-- 鏌ヨ鍖哄煙 --> - <div class="table-page-search-wrapper"> - <a-form layout="inline" @keyup.enter.native="searchQuery"> - <a-row :gutter="24"> - <a-col :xl="4" :lg="6" :md="8" :sm="24"> - <a-form-item label="娴佺▼鍒嗙被"> - <j-dict-select-tag placeholder="璇烽�夋嫨娴佺▼鍒嗙被" v-model="queryParam.category" - dictCode="flow_type"></j-dict-select-tag> + <div class='table-page-search-wrapper'> + <a-form layout='inline' @keyup.enter.native='searchQuery'> + <a-row :gutter='24'> + <a-col :lg='6' :md='8' :sm='24' :xl='4'> + <a-form-item label='娴佺▼鍒嗙被'> + <j-dict-select-tag v-model='queryParam.category' dictCode='flow_type' + placeholder='璇烽�夋嫨娴佺▼鍒嗙被'></j-dict-select-tag> </a-form-item> </a-col> <!--<a-col :xl="4" :lg="6" :md="8" :sm="24">--> @@ -20,37 +20,37 @@ <!--<a-input placeholder="璇疯緭鍏ユ祦绋嬪悕绉�" v-model="queryParam.flowName"></a-input>--> <!--</a-form-item>--> <!--</a-col>--> - <a-col :xl="4" :lg="6" :md="8" :sm="24"> - <a-form-item label="褰撳墠鑺傜偣"> - <a-input placeholder="璇疯緭鍏ュ綋鍓嶈妭鐐圭簿纭煡璇�" v-model="queryParam.name"></a-input> + <a-col :lg='6' :md='8' :sm='24' :xl='4'> + <a-form-item label='褰撳墠鑺傜偣'> + <a-input v-model='queryParam.name' placeholder='璇疯緭鍏ュ綋鍓嶈妭鐐圭簿纭煡璇�'></a-input> </a-form-item> </a-col> - <a-col :xl="4" :lg="6" :md="8" :sm="24"> - <a-form-item label="绠�瑕佹弿杩�"> - <a-input placeholder="璇疯緭鍏ョ畝瑕佹弿杩�" v-model="queryParam.title"></a-input> + <a-col :lg='6' :md='8' :sm='24' :xl='4'> + <a-form-item label='绠�瑕佹弿杩�'> + <a-input v-model='queryParam.title' placeholder='璇疯緭鍏ョ畝瑕佹弿杩�'></a-input> </a-form-item> </a-col> - <template v-if="toggleSearchStatus"> - <a-col :xl="8" :lg="8" :md="12" :sm="24"> - <a-form-item label="浠诲姟鏃堕棿鑼冨洿"> - <j-date :show-time="false" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨寮�濮嬫椂闂�" - class="query-group-cust" - v-model="queryParam.startTime"></j-date> - <span class="query-group-split-cust"></span> - <j-date :show-time="false" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨缁撴潫鏃堕棿" - class="query-group-cust" - v-model="queryParam.endTime"></j-date> + <template v-if='toggleSearchStatus'> + <a-col :lg='8' :md='12' :sm='24' :xl='8'> + <a-form-item label='浠诲姟鏃堕棿鑼冨洿'> + <j-date v-model='queryParam.startTime' :show-time='false' class='query-group-cust' + date-format='YYYY-MM-DD HH:mm:ss' + placeholder='璇烽�夋嫨寮�濮嬫椂闂�'></j-date> + <span class='query-group-split-cust'></span> + <j-date v-model='queryParam.endTime' :show-time='false' class='query-group-cust' + date-format='YYYY-MM-DD HH:mm:ss' + placeholder='璇烽�夋嫨缁撴潫鏃堕棿'></j-date> </a-form-item> </a-col> </template> - <a-col :xl="4" :lg="6" :md="8" :sm="24"> - <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> - <a-button @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> - <a @click="handleToggleSearch" style="margin-left: 8px"> + <a-col :lg='6' :md='8' :sm='24' :xl='4'> + <span class='table-page-search-submitButtons' style='float: left;overflow: hidden;'> + <a-button icon='search' type='primary' @click='searchQuery'>鏌ヨ</a-button> + <a-button icon='reload' style='margin-left: 8px' @click='searchReset'>閲嶇疆</a-button> + <a style='margin-left: 8px' @click='handleToggleSearch'> {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> + <a-icon :type="toggleSearchStatus ? 'up' : 'down'" /> </a> </span> </a-col> @@ -60,406 +60,486 @@ <!-- 鏌ヨ鍖哄煙-END --> <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> - <div class="table-operator"> - <a-dropdown v-if="selectedRowKeys.length > 0 "> - <a-menu slot="overlay"> - <a-menu-item key="1" @click="batchHandle"> - <a-icon type="delete"/> + <div class='table-operator'> + <a-dropdown v-if='selectedRowKeys.length > 0 '> + <a-menu slot='overlay'> + <a-menu-item key='1' @click='batchHandle'> + <a-icon type='delete' /> 鎵归噺澶勭悊 </a-menu-item> </a-menu> - <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 - <a-icon type="down"/> + <a-button style='margin-left: 8px'> 鎵归噺鎿嶄綔 + <a-icon type='down' /> </a-button> </a-dropdown> </div> <!-- table鍖哄煙-begin --> <div> - <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> - <i class="anticon anticon-info-circle ant-alert-icon"></i>宸查�夋嫨 <a style="font-weight: 600">{{ - selectedRowKeys.length }}</a>椤� - <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + <div class='ant-alert ant-alert-info' style='margin-bottom: 16px;'> + <i class='anticon anticon-info-circle ant-alert-icon'></i>宸查�夋嫨 <a style='font-weight: 600'>{{ + selectedRowKeys.length }}</a>椤� + <a style='margin-left: 24px' @click='onClearSelected'>娓呯┖</a> </div> <a-table - ref="table" + ref='table' + :columns='columns' + :dataSource='dataSource' + :loading='loading' + :pagination='ipagination' + :rowSelection='{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}' + :scroll='{x:getTableColumnsTotalWidth,y:465}' bordered - size="middle" - rowKey="id" - :scroll="{x:getTableColumnsTotalWidth,y:465}" - :columns="columns" - :dataSource="dataSource" - :pagination="ipagination" - :loading="loading" - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" - @change="handleTableChange"> + rowKey='id' + size='middle' + @change='handleTableChange'> - <span slot="action" slot-scope="text, record"> - <a @click="handelDetail(record,text)">鎵ц/瀹℃壒</a> + <span slot='action' slot-scope='text, record'> + <a @click='handelDetail(record,text)'>鎵ц/瀹℃壒</a> </span> </a-table> </div> - <AssignFileStreamHandle ref="modalFormApproval" :selectShenpiData="selectShenpiData" @searchReset="searchReset"></AssignFileStreamHandle> - <DispatchFileHandle ref="modalFormDispatchFileXq" :selectShenpiData="selectDispatchFileXqData" @searchReset="searchReset"></DispatchFileHandle> - <DispatchFileBachHandleStyle ref="modalFormDispatchFileBatch" @searchReset="searchReset" @ok="modalFormOk"></DispatchFileBachHandleStyle> + <AssignFileStreamHandle ref='modalFormApproval' :selectShenpiData='selectShenpiData' + @searchReset='searchReset'></AssignFileStreamHandle> + <DispatchFileHandle ref='modalFormDispatchFileXq' :selectShenpiData='selectDispatchFileXqData' + @searchReset='searchReset'></DispatchFileHandle> + <DispatchFileBachHandleStyle ref='modalFormDispatchFileBatch' @ok='modalFormOk' + @searchReset='searchReset'></DispatchFileBachHandleStyle> <!--鍗曚釜娴佺▼澶勭悊--> - <InspectionOrderHandle ref="modalFormInspectionOrder" :selectShenpiData="selectInspectionOrderData" - @searchReset="searchReset"></InspectionOrderHandle> - <week-maintenance-approval-modal ref="weekMaintenanceApprovalModal" :selectShenpiData="selectWeekMaintenanceData" - @searchReset="searchReset"></week-maintenance-approval-modal> - <repair-order-approval-modal ref="repairOrderApprovalModal" @searchReset="searchReset" - :selectShenpiData="selectRepairOrderData"></repair-order-approval-modal> - <out-bound-order-handle ref="outBoundOrderHandle" :selectShenpiData="selectOutBoundOrderData" - @searchReset="searchReset"></out-bound-order-handle> + <InspectionOrderHandle ref='modalFormInspectionOrder' :selectShenpiData='selectInspectionOrderData' + @searchReset='searchReset'></InspectionOrderHandle> + <week-maintenance-approval-modal ref='weekMaintenanceApprovalModal' :selectShenpiData='selectWeekMaintenanceData' + @searchReset='searchReset'></week-maintenance-approval-modal> + <repair-order-approval-modal ref='repairOrderApprovalModal' :selectShenpiData='selectRepairOrderData' + @searchReset='searchReset'></repair-order-approval-modal> + <out-bound-order-handle ref='outBoundOrderHandle' :selectShenpiData='selectOutBoundOrderData' + @searchReset='searchReset'></out-bound-order-handle> + <stocktaking-bound-handle ref='stocktakingBoundHandle' :selectShenpiData='selectStocktakingBoundOrderData' + @searchReset='searchReset'></stocktaking-bound-handle> + + + <loss-bound-handle ref='lossBoundHandle' :selectShenpiData='selectLossBoundOrderData' + @searchReset='searchReset'></loss-bound-handle> <!--鎵归噺澶勭悊--> - <inspection-order-batch-handle ref="inspectionOrderBatchHandleRef" @searchReset="searchReset" - :taskList="selectionRows"/> + <inspection-order-batch-handle ref='inspectionOrderBatchHandleRef' :taskList='selectionRows' + @searchReset='searchReset' /> - <week-maintenance-batch-approval-modal ref="weenMaintenanceBatchApprovalModalRef" @searchReset="searchReset" - :taskList="selectionRows"/> - <equipment-lean-out-approval-modal ref="equipmentLeanOutApprovalModelRef" @searchReset="searchReset"/> + <week-maintenance-batch-approval-modal ref='weenMaintenanceBatchApprovalModalRef' :taskList='selectionRows' + @searchReset='searchReset' /> + <equipment-lean-out-approval-modal ref='equipmentLeanOutApprovalModelRef' @searchReset='searchReset' /> - <second-maintenance-approval-modal ref="secondMaintenanceApprovalModal" :selectShenpiData="selectSecondMaintenanceData" - @searchReset="searchReset"></second-maintenance-approval-modal> - <third-maintenance-approval-modal ref="thirdMaintenanceApprovalModal" :selectShenpiData="selectThirdMaintenanceData" - @searchReset="searchReset"></third-maintenance-approval-modal> - <equipment-seal-up-approval-modal ref="equipmentSealUpApprovalModelRef" @searchReset="searchReset"/> + <second-maintenance-approval-modal ref='secondMaintenanceApprovalModal' + :selectShenpiData='selectSecondMaintenanceData' + @searchReset='searchReset'></second-maintenance-approval-modal> + <third-maintenance-approval-modal ref='thirdMaintenanceApprovalModal' :selectShenpiData='selectThirdMaintenanceData' + @searchReset='searchReset'></third-maintenance-approval-modal> + <equipment-seal-up-approval-modal ref='equipmentSealUpApprovalModelRef' @searchReset='searchReset' /> + <inbound-order-handle ref='inboundOrderApprovalModal' :selectInboundOrderData='selectInboundOrderData' + @searchReset='searchReset'></inbound-order-handle> + <equipment-transfer-approval-modal ref='equipmentTransferApprovalModelRef' @searchReset='searchReset' /> + <equipment-scrap-approval-modal ref='equipmentScrapApprovalModelRef' @searchReset='searchReset' /> </a-card> </template> <script> - import '@/assets/less/TableExpand.less' - import { mixinDevice } from '@/utils/mixin' - import { JeecgListMixin } from '@/mixins/JeecgListMixin' - import JDictSelectTag from '@/components/dict/JDictSelectTag.vue' - import WeekMaintenanceApprovalModal from '@views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal' - import RepairOrderApprovalModal from '@views/flowable/workflow/repairOrder/RepairOrderApprovalModal' - import InspectionOrderHandle from '@views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue' +import '@/assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import JDictSelectTag from '@/components/dict/JDictSelectTag.vue' +import WeekMaintenanceApprovalModal from '@views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal' +import RepairOrderApprovalModal from '@views/flowable/workflow/repairOrder/RepairOrderApprovalModal' +import InspectionOrderHandle from '@views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue' - import { getAction } from '@api/manage' - import InspectionOrderBatchHandle from './InspectionOrder/InspectionOrderBatchHandle' - import WeekMaintenanceBatchApprovalModal from './weekMaintenance/WeekMaintenanceBatchApprovalModal' - import AssignFileStreamHandle from '@views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue' - import DispatchFileHandle from '@views/flowable/workflow/dispatchFile/DispatchFileHandle.vue' - import DispatchFileBachHandleStyle from '@views/flowable/workflow/dispatchFile/DispatchFileBachHandleStyle#Drawer.vue' - import OutBoundOrderHandle from '@views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue' - import EquipmentLeanOutApprovalModal from '@views/flowable/workflow/leanOut/EquipmentLeanOutApprovalModal.vue' - import SecondMaintenanceApprovalModal from '@views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue' - import ThirdMaintenanceApprovalModal from '@views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue' - import EquipmentSealUpApprovalModal from '@views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue' - export default { - name: 'NcDeviceCharactersList', - mixins: [JeecgListMixin, mixinDevice], - components: { - AssignFileStreamHandle, - DispatchFileHandle, - DispatchFileBachHandleStyle, - WeekMaintenanceBatchApprovalModal, - InspectionOrderBatchHandle, - JDictSelectTag, - WeekMaintenanceApprovalModal, - RepairOrderApprovalModal, - InspectionOrderHandle, - EquipmentLeanOutApprovalModal, - SecondMaintenanceApprovalModal, - ThirdMaintenanceApprovalModal, - OutBoundOrderHandle, - EquipmentSealUpApprovalModal, - }, - data() { - return { - description: '宸ヤ綔娴�-鎴戠殑寰呭姙', - // 琛ㄥご - columns: [ - { - title: '搴忓彿', - dataIndex: '', - key: 'rowIndex', - width: 60, - align: 'center', - customRender: function(t, r, index) { - return parseInt(index) + 1 - } - }, - { - title: '娴佺▼鍒嗙被', - align: 'center', - dataIndex: 'category_dictText' - }, - { - title: '娴佺▼鍚嶇О', - align: 'center', - dataIndex: 'flowName', - width: 200 - }, - { - title: '娴佺▼涓氬姟绠�瑕佹弿杩�', - align: 'center', - dataIndex: 'description', - width: 350, - ellipsis: true +import { getAction } from '@api/manage' +import InspectionOrderBatchHandle from './InspectionOrder/InspectionOrderBatchHandle' +import WeekMaintenanceBatchApprovalModal from './weekMaintenance/WeekMaintenanceBatchApprovalModal' +import AssignFileStreamHandle from '@views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue' +import DispatchFileHandle from '@views/flowable/workflow/dispatchFile/DispatchFileHandle.vue' +import DispatchFileBachHandleStyle from '@views/flowable/workflow/dispatchFile/DispatchFileBachHandleStyle#Drawer.vue' +import OutBoundOrderHandle from '@views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue' +import EquipmentLeanOutApprovalModal from '@views/flowable/workflow/leanOut/EquipmentLeanOutApprovalModal.vue' +import SecondMaintenanceApprovalModal + from '@views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue' +import ThirdMaintenanceApprovalModal from '@views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue' +import EquipmentSealUpApprovalModal from '@views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue' +import EquipmentTransferApprovalModal from '@views/flowable/workflow/transfer/EquipmentTransferApprovalModal.vue' +import EquipmentScrapApprovalModal from '@views/flowable/workflow/scrap/EquipmentScrapApprovalModal.vue' +import stocktakingBoundHandle from '@views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue' +import lossBoundHandle from '@views/flowable/workflow/lossBound/lossBoundHandle.vue' +import InboundOrderHandle from '@views/flowable/workflow/inboundOrder/InboundOrderHandle.vue' - }, - { - title: '涓婁竴姝ュ鐞嗕汉', - align: 'center', - dataIndex: 'preNodeAssignee_dictText', - width: 150 - }, - { - title: '鍓嶉┍鑺傜偣', - align: 'center', - dataIndex: 'preNode', - width: 200 - }, - { - title: '褰撳墠鑺傜偣', - align: 'center', - dataIndex: 'name', - width: 200 - }, - { - title: '褰撳墠鑺傜偣寮�濮嬫椂闂�', - align: 'center', - dataIndex: 'createTime', - width: 200 - }, - { - title: '鎿嶄綔', - dataIndex: 'action', - scopedSlots: { customRender: 'action' }, - align: 'center', - width: 150, - fixed: 'right' +export default { + name: 'NcDeviceCharactersList', + mixins: [JeecgListMixin, mixinDevice], + components: { + lossBoundHandle, + stocktakingBoundHandle, + AssignFileStreamHandle, + DispatchFileHandle, + DispatchFileBachHandleStyle, + WeekMaintenanceBatchApprovalModal, + InspectionOrderBatchHandle, + JDictSelectTag, + WeekMaintenanceApprovalModal, + RepairOrderApprovalModal, + InspectionOrderHandle, + EquipmentLeanOutApprovalModal, + SecondMaintenanceApprovalModal, + ThirdMaintenanceApprovalModal, + OutBoundOrderHandle, + EquipmentSealUpApprovalModal, + InboundOrderHandle, + EquipmentTransferApprovalModal, + EquipmentScrapApprovalModal + }, + data() { + return { + description: '宸ヤ綔娴�-鎴戠殑寰呭姙', + // 琛ㄥご + columns: [ + { + title: '搴忓彿', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 } - ], - url: { - list: '/assign/flow/toTaskBySelf', - isSameNode: '/assign/flow/isSameNode' }, - dictOptions: {}, - selectShenpiData: {}, - selectDispatchFileXqData:{}, - selectInspectionOrderData: {}, - selectWeekMaintenanceData: {}, - selectSecondMaintenanceData: {}, - selectThirdMaintenanceData: {}, - selectBachData: {}, - selectRepairOrderData: {}, - selectOutBoundOrderData: {}, - //涓氬姟淇℃伅ID - dataId: undefined - } - }, - created() { - }, - computed: { - importExcelUrl: function() { - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` + { + title: '娴佺▼鍒嗙被', + align: 'center', + dataIndex: 'category_dictText' + }, + { + title: '娴佺▼鍚嶇О', + align: 'center', + dataIndex: 'flowName', + width: 200 + }, + { + title: '娴佺▼涓氬姟绠�瑕佹弿杩�', + align: 'center', + dataIndex: 'description', + width: 350, + ellipsis: true + + }, + { + title: '涓婁竴姝ュ鐞嗕汉', + align: 'center', + dataIndex: 'preNodeAssignee_dictText', + width: 150 + }, + { + title: '鍓嶉┍鑺傜偣', + align: 'center', + dataIndex: 'preNode', + width: 200 + }, + { + title: '褰撳墠鑺傜偣', + align: 'center', + dataIndex: 'name', + width: 200 + }, + { + title: '褰撳墠鑺傜偣寮�濮嬫椂闂�', + align: 'center', + dataIndex: 'createTime', + width: 200 + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + scopedSlots: { customRender: 'action' }, + align: 'center', + width: 150, + fixed: 'right' + } + ], + url: { + list: '/assign/flow/toTaskBySelf', + isSameNode: '/assign/flow/isSameNode' }, - getTableColumnsTotalWidth() { - return this.columns.reduce((total, item) => total + item.width, 0) - } + dictOptions: {}, + selectShenpiData: {}, + selectDispatchFileXqData: {}, + selectInspectionOrderData: {}, + selectWeekMaintenanceData: {}, + selectSecondMaintenanceData: {}, + selectThirdMaintenanceData: {}, + selectBachData: {}, + selectRepairOrderData: {}, + selectOutBoundOrderData: {}, + selectLossBoundOrderData: {}, + selectStocktakingBoundOrderData: {}, + selectInboundOrderData: {}, + //涓氬姟淇℃伅ID + dataId: undefined + } + }, + created() { + }, + computed: { + importExcelUrl: function() { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` }, - methods: { - loadData(arg) { - if (!this.url.list) { - this.$message.error('璇疯缃畊rl.list灞炴��!') - return - } - //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 - if (arg === 1) { - this.ipagination.current = 1 - } - var params = this.getQueryParams()//鏌ヨ鏉′欢 - if (!params) { - return false - } - this.loading = true - getAction(this.url.list, params).then((res) => { - if (res.success) { - // console.log(res) - //update-begin---author:zhangyafei Date:20201118 for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------ - this.dataSource = res.result.records || res.result - if (res.result.total) { - this.ipagination.total = res.result.total - } else { - this.ipagination.total = 0 - } - if (this.selectedRowKeys.length > 0) this.selectedRowKeys = this.selectionRows = [] - //update-end---author:zhangyafei Date:20201118 for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------ + getTableColumnsTotalWidth() { + return this.columns.reduce((total, item) => total + item.width, 0) + } + }, + methods: { + loadData(arg) { + if (!this.url.list) { + this.$message.error('璇疯缃畊rl.list灞炴��!') + return + } + //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 + if (arg === 1) { + this.ipagination.current = 1 + } + var params = this.getQueryParams()//鏌ヨ鏉′欢 + if (!params) { + return false + } + this.loading = true + getAction(this.url.list, params).then((res) => { + if (res.success) { + // console.log(res) + //update-begin---author:zhangyafei Date:20201118 for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------ + this.dataSource = res.result.records || res.result + if (res.result.total) { + this.ipagination.total = res.result.total } else { - this.$message.warning(res.message) + this.ipagination.total = 0 } - }).finally(() => { - this.loading = false + if (this.selectedRowKeys.length > 0) this.selectedRowKeys = this.selectionRows = [] + //update-end---author:zhangyafei Date:20201118 for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------ + } else { + this.$message.warning(res.message) + } + }).finally(() => { + this.loading = false + }) + }, + + handelDetail(item, index) { + console.log('鐐瑰嚮浜嗚鎯�') + console.log('item----->', item) + console.log('index----->', index) + let processType = this.splitAprocessType(item.category) + console.log('processType--->', processType) + switch (processType) { + case 'drApproval': + this.handDrDetial(item) + break + case 'ggApproval': + this.handDispatchFileDetial(item) + break + case 'sbdjApproval': + this.handInspectionOrder(item) + break + case 'WEEK_MAINTENANCE': + this.handleWeekMaintenance(item) + break + case 'eam_repair': + this.handleRepairOrder(item) + break + case 'equipment_lean_out': + this.handleEquipmentLeanOut(item) + break + case 'second_maintenance': + this.handleSecondMaintenance(item) + break + case 'third_maintenance': + this.handleThirdMaintenance(item) + break + case 'toolOutStorageApproval': + this.handleToolOutStorageApproval(item) + break + case 'toolsStocktakingBound': + this.handleToolStocktakingApproval(item) + break + case 'toolsLossApproval': + this.handleToolLossApproval(item) + break + case 'equipment_seal_up': + this.handleEquipmentSealUp(item) + break + case 'toolInStorageApproval': + this.handleToolInStorage(item) + break + case 'equipment_transfer': + this.handleEquipmentTransfer(item) + break + case 'equipment_scrap': + this.handleEquipmentScrap(item) + break + default: + alert('娌℃壘鍒拌娴佺▼') + } + }, + + batchHandle() { + const categorySet = new Set(this.selectionRows.map(item => item.category)) + const nameSet = new Set(this.selectionRows.map(item => item.name)) + if (categorySet.size !== 1 || nameSet.size !== 1) { + this.$notification.info({ + message: '娑堟伅', + description: '璇烽�夋嫨鍚屼竴娴佺▼鍒嗙被涓嬬殑鍚屼竴褰撳墠鑺傜偣' }) - }, + return + } - handelDetail(item, index) { - console.log('鐐瑰嚮浜嗚鎯�') - console.log('item----->', item) - console.log('index----->', index) - let processType = this.splitAprocessType(item.category) - console.log('processType--->', processType) - switch (processType) { - case 'drApproval': - this.handDrDetial(item) - break - case 'ggApproval': - this.handDispatchFileDetial(item) - break - case 'sbdjApproval': - this.handInspectionOrder(item) - break - case 'WEEK_MAINTENANCE': - this.handleWeekMaintenance(item) - break - case 'eam_repair': - this.handleRepairOrder(item) - break - case 'equipment_lean_out': - this.handleEquipmentLeanOut(item) - break - case 'second_maintenance': - this.handleSecondMaintenance(item) - break - case 'third_maintenance': - this.handleThirdMaintenance(item) - break - case 'toolOutStorageApproval': - this.handleToolOutStorageApproval(item) - break - case 'equipment_seal_up': - this.handleEquipmentSealUp(item) - break - default: - alert('娌℃壘鍒拌娴佺▼') - } - }, + if (categorySet.has('eam_repair')) { + this.$notification.info({ + message: '娑堟伅', + description: '璁惧缁翠慨娴佺▼鏃犳硶鎵归噺澶勭悊' + }) + return + } - batchHandle() { - const categorySet = new Set(this.selectionRows.map(item => item.category)) - const nameSet = new Set(this.selectionRows.map(item => item.name)) - if (categorySet.size !== 1 || nameSet.size !== 1) { - this.$notification.info({ - message: '娑堟伅', - description: '璇烽�夋嫨鍚屼竴娴佺▼鍒嗙被涓嬬殑鍚屼竴褰撳墠鑺傜偣' - }) - return - } + if (categorySet.has('sbdjApproval')) { + this.$refs.inspectionOrderBatchHandleRef.visible = true + this.$refs.inspectionOrderBatchHandleRef.title = this.selectionRows[0].name + this.$refs.inspectionOrderBatchHandleRef.getAllApproveData(this.selectionRows[0]) + this.$refs.inspectionOrderBatchHandleRef.getBasicInformation(this.selectionRows[0]) + } else if (categorySet.has('WEEK_MAINTENANCE')) { + this.$refs.weenMaintenanceBatchApprovalModalRef.handleDetail(this.selectionRows[0]) + this.$refs.weenMaintenanceBatchApprovalModalRef.title = this.selectionRows[0].name + } + }, - if (categorySet.has('eam_repair')) { - this.$notification.info({ - message: '娑堟伅', - description: '璁惧缁翠慨娴佺▼鏃犳硶鎵归噺澶勭悊' - }) - return - } + splitAprocessType(title) { + let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊 + let result = parts[0] + return result + }, - if (categorySet.has('sbdjApproval')) { - this.$refs.inspectionOrderBatchHandleRef.visible = true - this.$refs.inspectionOrderBatchHandleRef.title = this.selectionRows[0].name - this.$refs.inspectionOrderBatchHandleRef.getAllApproveData(this.selectionRows[0]) - this.$refs.inspectionOrderBatchHandleRef.getBasicInformation(this.selectionRows[0]) - } else if (categorySet.has('WEEK_MAINTENANCE')) { - this.$refs.weenMaintenanceBatchApprovalModalRef.handleDetail(this.selectionRows[0]) - this.$refs.weenMaintenanceBatchApprovalModalRef.title = this.selectionRows[0].name - } - }, + handDrDetial(item) { + this.selectShenpiData = item + this.$refs.modalFormApproval.clearTableSource() + this.$refs.modalFormApproval.getAllApproveData(item) + }, - splitAprocessType(title) { - let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊 - let result = parts[0] - return result - }, + handDispatchFileDetial(item) { + console.log('item----->', item) + this.selectDispatchFileXqData = item + this.$refs.modalFormDispatchFileXq.clearTableSource() + this.$refs.modalFormDispatchFileXq.getAllApproveData(item) + }, - handDrDetial(item) { - this.selectShenpiData = item - this.$refs.modalFormApproval.clearTableSource() - this.$refs.modalFormApproval.getAllApproveData(item) - }, + handInspectionOrder(record) { + console.log('record----->', record) + this.selectInspectionOrderData = Object.assign({}, record) + this.$refs.modalFormInspectionOrder.visible = true + this.$refs.modalFormInspectionOrder.title = record.name + this.$refs.modalFormInspectionOrder.getAllApproveData(record) + this.$refs.modalFormInspectionOrder.getBasicInformation(record) + }, - handDispatchFileDetial(item){ - console.log('item----->', item) - this.selectDispatchFileXqData = item - this.$refs.modalFormDispatchFileXq.clearTableSource() - this.$refs.modalFormDispatchFileXq.getAllApproveData(item) - }, + handleWeekMaintenance(item) { + if (item && item.dataId) { + this.selectWeekMaintenanceData = Object.assign({}, item) + this.$refs.weekMaintenanceApprovalModal.handleDetail(item) + this.$refs.weekMaintenanceApprovalModal.title = item.name + this.$refs.weekMaintenanceApprovalModal.disableSubmit = false + } + }, - handInspectionOrder(record) { - console.log('record----->', record) - this.selectInspectionOrderData = Object.assign({}, record) - this.$refs.modalFormInspectionOrder.visible = true - this.$refs.modalFormInspectionOrder.title = record.name - this.$refs.modalFormInspectionOrder.getAllApproveData(record) - this.$refs.modalFormInspectionOrder.getBasicInformation(record) - }, + /** + * 鐐瑰嚮璁惧缁翠慨鍒嗙被娴佺▼璇︽儏鏃惰Е鍙� + * @param record + */ + handleRepairOrder(record) { + this.selectRepairOrderData = Object.assign({}, record) + this.$refs.repairOrderApprovalModal.visible = true + this.$refs.repairOrderApprovalModal.title = record.name + this.$refs.repairOrderApprovalModal.getAllApproveData(record) + this.$refs.repairOrderApprovalModal.getBasicInformation(record) + }, + handleEquipmentLeanOut(item) { + this.$refs.equipmentLeanOutApprovalModelRef.visible = true + this.$refs.equipmentLeanOutApprovalModelRef.title = item.name + this.$refs.equipmentLeanOutApprovalModelRef.handleDetail(item) + this.$refs.equipmentLeanOutApprovalModelRef.disableSubmit = false + }, + handleSecondMaintenance(item) { + if (item && item.dataId) { + this.selectSecondMaintenanceData = Object.assign({}, item) + this.$refs.secondMaintenanceApprovalModal.handleDetail(item) + this.$refs.secondMaintenanceApprovalModal.title = item.name + this.$refs.secondMaintenanceApprovalModal.disableSubmit = false + } + }, + handleThirdMaintenance(item) { + if (item && item.dataId) { + this.selectThirdMaintenanceData = Object.assign({}, item) + this.$refs.thirdMaintenanceApprovalModal.handleDetail(item) + this.$refs.thirdMaintenanceApprovalModal.title = item.name + this.$refs.thirdMaintenanceApprovalModal.disableSubmit = false + } + }, + handleToolOutStorageApproval(item) { + if (item && item.dataId) { + this.selectOutBoundOrderData = Object.assign({}, item) + this.$refs.outBoundOrderHandle.auditVisible = true + this.$refs.outBoundOrderHandle.clearTableSource() + this.$refs.outBoundOrderHandle.getAllApproveData(item) + } + }, + handleToolStocktakingApproval(item) { + if (item && item.dataId) { + this.selectStocktakingBoundOrderData = Object.assign({}, item) + this.$refs.stocktakingBoundHandle.auditVisible = true + this.$refs.stocktakingBoundHandle.clearTableSource() + this.$refs.stocktakingBoundHandle.getAllApproveData(item) + } + }, + handleToolLossApproval(item) { + if (item && item.dataId) { + this.selectLossBoundOrderData = Object.assign({}, item) + this.$refs.lossBoundHandle.auditVisible = true + this.$refs.lossBoundHandle.clearTableSource() + this.$refs.lossBoundHandle.getAllApproveData(item) + } + }, - - handleWeekMaintenance(item) { - if (item && item.dataId) { - this.selectWeekMaintenanceData = Object.assign({}, item) - this.$refs.weekMaintenanceApprovalModal.handleDetail(item) - this.$refs.weekMaintenanceApprovalModal.title = item.name - this.$refs.weekMaintenanceApprovalModal.disableSubmit = false - } - }, - - /** - * 鐐瑰嚮璁惧缁翠慨鍒嗙被娴佺▼璇︽儏鏃惰Е鍙� - * @param record - */ - handleRepairOrder(record) { - this.selectRepairOrderData = Object.assign({}, record) - this.$refs.repairOrderApprovalModal.visible = true - this.$refs.repairOrderApprovalModal.title = record.name - this.$refs.repairOrderApprovalModal.getAllApproveData(record) - this.$refs.repairOrderApprovalModal.getBasicInformation(record) - }, - handleEquipmentLeanOut(item) { - this.$refs.equipmentLeanOutApprovalModelRef.visible = true - this.$refs.equipmentLeanOutApprovalModelRef.title = item.name - this.$refs.equipmentLeanOutApprovalModelRef.handleDetail(item) - this.$refs.equipmentLeanOutApprovalModelRef.disableSubmit = false - }, - handleSecondMaintenance(item) { - if (item && item.dataId) { - this.selectSecondMaintenanceData = Object.assign({}, item) - this.$refs.secondMaintenanceApprovalModal.handleDetail(item) - this.$refs.secondMaintenanceApprovalModal.title = item.name - this.$refs.secondMaintenanceApprovalModal.disableSubmit = false - } - }, - handleThirdMaintenance(item) { - if (item && item.dataId) { - this.selectThirdMaintenanceData = Object.assign({}, item) - this.$refs.thirdMaintenanceApprovalModal.handleDetail(item) - this.$refs.thirdMaintenanceApprovalModal.title = item.name - this.$refs.thirdMaintenanceApprovalModal.disableSubmit = false - } - }, - handleToolOutStorageApproval(item) { - if (item && item.dataId) { - this.selectOutBoundOrderData = Object.assign({}, item) - this.$refs.outBoundOrderHandle.auditVisible = true - this.$refs.outBoundOrderHandle.clearTableSource() - this.$refs.outBoundOrderHandle.getAllApproveData(item) - } - }, - handleEquipmentSealUp(item) { - this.$refs.equipmentSealUpApprovalModelRef.visible = true - this.$refs.equipmentSealUpApprovalModelRef.title = item.name - this.$refs.equipmentSealUpApprovalModelRef.handleDetail(item) - this.$refs.equipmentSealUpApprovalModelRef.disableSubmit = false - }, + handleEquipmentSealUp(item) { + this.$refs.equipmentSealUpApprovalModelRef.visible = true + this.$refs.equipmentSealUpApprovalModelRef.title = item.name + this.$refs.equipmentSealUpApprovalModelRef.handleDetail(item) + this.$refs.equipmentSealUpApprovalModelRef.disableSubmit = false + }, + handleToolInStorage(item) { + if (item && item.dataId) { + this.selectInboundOrderData = Object.assign({}, item) + this.$refs.inboundOrderApprovalModal.auditVisible = true + this.$refs.inboundOrderApprovalModal.clearTableSource() + this.$refs.inboundOrderApprovalModal.getAllApproveData(item) + } + }, + handleEquipmentTransfer(item) { + this.$refs.equipmentTransferApprovalModelRef.visible = true + this.$refs.equipmentTransferApprovalModelRef.title = item.name + this.$refs.equipmentTransferApprovalModelRef.handleDetail(item) + this.$refs.equipmentTransferApprovalModelRef.disableSubmit = false + }, + handleEquipmentScrap(item) { + this.$refs.equipmentScrapApprovalModelRef.visible = true + this.$refs.equipmentScrapApprovalModelRef.title = item.name + this.$refs.equipmentScrapApprovalModelRef.handleDetail(item) + this.$refs.equipmentScrapApprovalModelRef.disableSubmit = false } } +} </script> <style scoped> - @import '~@assets/less/common.less'; +@import '~@assets/less/common.less'; </style> \ No newline at end of file diff --git a/src/views/flowable/workflow/inboundOrder/InboundOrderHandle.vue b/src/views/flowable/workflow/inboundOrder/InboundOrderHandle.vue new file mode 100644 index 0000000..e8af61a --- /dev/null +++ b/src/views/flowable/workflow/inboundOrder/InboundOrderHandle.vue @@ -0,0 +1,445 @@ +<template> + <a-modal + :title="title" + :width="width" + :visible="visible" + :footer="null" + @cancel="handCancel" + > + <a-card :bordered="false"> + <div> + <b>{{ selectInboundOrderData.description }}</b> + <br> + <br> + <a-tag color="blue"> + 澶勭悊浜� {{ selectInboundOrderData.assignee_dictText }} + </a-tag> + <a-tag color="blue"> + 鍒涘缓鏃堕棿 {{ selectInboundOrderData.createTime }} + </a-tag> + <br> + <br> + <button @click="fetchAndShowBmp" class="btn-custom">鎵撳紑娴佺▼鍥�</button> + <div v-if="imageSrc"> + <img :src="imageSrc" alt="Fetched Image" /> + </div> + <hr class="shallow-hr"> + </div> + <div> + <b>鐢宠鍗曡鎯�</b> + <br> + <a-form :form='form'> + <a-spin :spinning="spinning"> + <a-tabs default-active-key='1' @change='callback'> + <a-tab-pane key='1' tab='鐢宠鍗曞熀鏈俊鎭�'> + <a-form-model ref='form' :model='tableRowRecord'> + <a-row> + <a-col :span='span'> + <a-form-model-item label='鍏ュ簱鍗曠紪鍙�' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='inboundNum'> + <a-input :disabled='coldisabled' v-model='tableRowRecord.inboundNum'></a-input> + </a-form-model-item> + </a-col> + <a-col :span='span'> + <a-form-model-item label='鍏ュ簱绫诲瀷' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='inStorehouseType'> + <j-dict-select-tag :disabled="coldisabled" type="list" v-model="tableRowRecord.inStorehouseType" dictCode="in_storehouse_type" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span='span'> + <a-form-model-item label='鍏ュ簱鏃堕棿' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='inboundTime'> + <j-date :disabled="coldisabled" v-model="tableRowRecord.inboundTime" :show-time="true" dateFormat="YYYY-MM-DD HH:mm" style="width: 100%"/> + </a-form-model-item> + </a-col> + <a-col :span='span'> + <a-form-model-item label='鐢宠鍘熷洜' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='applicationReason'> + <a-input :disabled='coldisabled' v-model='tableRowRecord.applicationReason'></a-input> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span='span'> + <a-form-model-item label='缁忔墜浜�' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='handler'> + <a-input :disabled='coldisabled' v-model='tableRowRecord.handler_dictText'></a-input> + </a-form-model-item> + </a-col> + <a-col :span='span'> + <a-form-model-item label='澶囨敞' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='remark'> + <a-textarea :disabled="coldisabled" v-model="tableRowRecord.remark" rows="4" /> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-tab-pane> + <a-tab-pane key='2' tab='鐢宠鍗曟槑缁嗕俊鎭�'> + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :scroll="{x:'max-content'}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="null"> + </a-table> + </a-tab-pane> + <a-tab-pane key='3' tab='娴佺▼鑺傜偣'> + <a-timeline> + <a-timeline-item v-for="(item,index) in hitaskDataSource" :key="index"> + <div> + <h3 style="font-weight: bold;">{{item.taskName}}</h3> + <div>澶勭悊浜猴細{{item.assignee_dictText}}</div> + <div v-if="index !==0">澶勭悊鏃堕暱锛歿{item.duration}}</div> + <div v-if="item.name !== '鎻愪氦鐢宠'">澶勭悊绫诲瀷锛歿{item.sequenceFlowName}}</div> + <div v-if="item.description">澶勭悊鎰忚锛歿{item.description}}</div> + </div> + </a-timeline-item> + </a-timeline> + </a-tab-pane> + </a-tabs> + </a-spin> + </a-form> + </div> + <div v-if="auditVisible"> + <hr class="shallow-hr"> + <br> + <b>瀹℃壒璇︽儏</b> + <br> + <a-form-model ref="form" :model="approveData" :rules="validatorRules" slot="detail"> + <a-row> + <a-col ::span='span'> + <a-form-model-item label="鐢宠浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop='handler_dictText'> + <a-input :disabled='coldisabled' v-model='tableRowRecord.handler_dictText'></a-input> + </a-form-model-item > + </a-col> + <a-col ::span='span'> + <a-form-model-item label="鐢宠鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createTime"> + <a-input :disabled='coldisabled' v-model='tableRowRecord.createTime'></a-input> + </a-form-model-item > + </a-col> + <a-col :span="24" class="btxx"> + <a-form-item label="瀹℃壒鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-select v-model='assignFileStream.status' placeholder="璇烽�夋嫨瀹℃壒缁撴灉"> + <a-select-option value="3">閫氳繃</a-select-option> + <a-select-option value="4">椹冲洖</a-select-option> + </a-select> + </a-form-item> + </a-col> + <a-col :span="24" class="btxx"> + <a-form-model-item label="瀹℃壒鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-textarea v-model="assignFileStream.approvalOpinion" rows="4" placeholder="璇疯緭鍏ュ鎵规剰瑙�"/> + </a-form-model-item > + </a-col> + </a-row> + <div class="table-operator" style="text-align: right;"> + <a-button @click="handleQueXiaoTask" type="primary" icon="close">鍙栨秷</a-button> + <a-button @click="submitForm">鎻� 浜�</a-button> + </div> + </a-form-model> + </div> + </a-card> + + + </a-modal> +</template> + +<script> + +import '@assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage' +export default { + name: 'FlowShenPi', + mixins: [mixinDevice], + props: { + selectInboundOrderData: { + type: Object, + required: true + } + }, + + data() { + return { + form: this.$form.createForm(this), + span: 12, + span1: 8, + coldisabled: true, + spinning: false, + tableRowRecord: {}, + assignFileStream:{}, + tableDataSource: [], + usageDataSource: [], + hitaskDataSource:[], + dataSource: [], + bomForm: {}, + imageSrc: null, + drawerVisible: true, + auditVisible: true, + loading: false, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 30 }, + sm: { span: 16 } + }, + /* 鍒嗛〉鍙傛暟 */ + ipagination:{ + current: 1, + pageSize: 5, + pageSizeOptions: ['5', '10', '50'], + showTotal: (total, range) => { + return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�" + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'宸ュ叿缂栫爜', + align:"center", + dataIndex: 'toolCode' + }, + { + title:'宸ュ叿绫诲瀷', + align:"center", + dataIndex: 'applicationType' + }, + { + title:'涓枃鍚嶇О', + align:"center", + dataIndex: 'chineseName' + }, + { + title:'鍨嬪彿/鍥惧彿', + align:"center", + dataIndex: 'toolModel' + }, + { + title:'鐢宠鍏ュ簱鏁伴噺', + align:"center", + dataIndex: 'inStorageQuantity' + }, + ], + validatorRules: { + status: { + rules: [ + { required: true, message: '璇烽�夋嫨瀹℃壒鐘舵��!'}, + ] + }, + }, + approveData: {}, + flowData: {}, + title: '瀹℃壒椤甸潰', + width: 1200, + visible: false, + // 琛ㄥご + url: { + queryInboundOrder: '/tms/inboundOrder/list', + queryInboundDetailList: 'tms/inboundDetail/list', + diagramView: '/assign/flow/diagramView', + queryHisTaskList:'/assign/flow/queryHisTaskList', + approve:"/tms/inboundOrder/approval", + }, + dictOptions: {}, + superFieldList: [], + workflowSource: [] + } + }, + created() { + }, + computed: {}, + methods: { + callback() { + }, + handCancel() { + this.visible = false + }, + clearTableSource() { + this.tableDataSource = [] + this.usageDataSource = [] + }, + fetchAndShowBmp() { + try { + let parm = { + processDefinitionId: this.flowData.processDefinitionId, + processInstanceId:this.flowData.processInstanceId, + TaskDefinitionKey:this.flowData.processDefinitionKey + } + downFile(this.url.diagramView,parm,'get').then((res=>{ + const urlObject = window.URL.createObjectURL(new Blob([res])) + this.imageSrc = urlObject + })) + } catch (error) { + console.error('Error fetching image blob:', error) + alert('鏃犳硶鍔犺浇鍥剧墖锛岃绋嶅悗鍐嶈瘯銆�') + } + }, + handleQueXiaoTask(){ + this.visible = false + this.routeReload() + }, + submitForm () { + const that = this; + if (!that.assignFileStream.status==null || that.assignFileStream.status===undefined){ + this.$message.warning('璇烽�夋嫨瀹℃壒鐘舵�侊紒') + return false; + } + if (!that.assignFileStream.approvalOpinion==null || that.assignFileStream.approvalOpinion===undefined) { + this.$message.warning('璇疯緭鍏ュ鎵规剰瑙侊紒') + return false; + } + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.form.validateFields((err, values) => { + if (!err) { + that.confirmLoading = true; + let url=this.url.approve + let method = 'post'; + let flowTaskVo = {} + flowTaskVo.status=that.assignFileStream.status; + flowTaskVo.approvalOpinion =that.assignFileStream.approvalOpinion; + flowTaskVo.comment =that.assignFileStream.approvalOpinion; + flowTaskVo.dataId = this.selectInboundOrderData.dataId + flowTaskVo.taskId = this.selectInboundOrderData.id + flowTaskVo.userId = this.selectInboundOrderData.assignee + flowTaskVo.instanceId = this.selectInboundOrderData.procInstId + flowTaskVo.targetKey = this.selectInboundOrderData.taskDefKey + flowTaskVo.values = this.selectInboundOrderData.variables + flowTaskVo.assignee = this.selectInboundOrderData.assignee + console.log("琛ㄥ崟鎻愪氦鏁版嵁",flowTaskVo) + httpAction(url,flowTaskVo,method).then((res)=>{ + if(res.success){ + that.$message.success(res.message); + that.visible = false + //鍒锋柊琛ㄦ牸 + that.$emit('searchReset') + }else{ + that.$message.warning(res.message); + } + }).finally(() => { + that.confirmLoading = false; + }) + } + + }) + }, + getAllApproveData(item) { + this.visible = true + this.loading = true + this.flowData = item + getAction(this.url.queryHisTaskList, {procInstId: item.procInstId}).then(res=>{ + if(res.success){ + this.hitaskDataSource = res.result + } + }) + getAction(this.url.queryInboundOrder, {id: item.dataId}).then((res => { + if (res.success) { + this.tableRowRecord = res.result.records[0] + } + })) + getAction(this.url.queryInboundDetailList, {inboundOrderId: item.dataId}).then(res => { + if (res.success) { + this.dataSource = res.result.records + if (res.result.total) { + this.ipagination.total = res.result.total + } else { + this.ipagination.total = 0 + } + } else { + this.$message.warning(res.message) + } + }).finally(() => { + this.loading = false + }) + } + } +} +</script> +<style scoped> +.shallow-hr { + border: 0; + height: 1px; /* 鍒嗙晫绾跨殑楂樺害 */ + background-color: rgba(0, 0, 0, 0.1); /* 浣跨敤 RGBA 棰滆壊锛屽苟璁剧疆杈冧綆鐨勯�忔槑搴� */ + margin: 20px 0; /* 鍒嗙晫绾夸笂涓嬬殑澶栬竟璺� */ +} +.btn-custom { + background-color: #4CAF50; /* 缁胯壊鑳屾櫙 */ + color: white; /* 鐧借壊鏂囧瓧 */ + border: none; /* 鏃犺竟妗� */ + padding: 5px 15px; /* 鍐呰竟璺� */ + text-align: center; /* 鏂囧瓧灞呬腑 */ + text-decoration: none; /* 鏃犱笅鍒掔嚎 */ + display: inline-block; /* 琛屽唴鍧楀厓绱� */ + font-size: 12px; /* 瀛椾綋澶у皬 */ + margin: 4px 2px; /* 澶栬竟璺� */ + cursor: pointer; /* 榧犳爣鎮仠鏃舵樉绀烘墜鍨� */ + border-radius: 4px; /* 鍦嗚杈规 */ +} + +.bold-large-label { + font-weight: bold; + font-size: 20px; /* 鎴栦綘闇�瑕佺殑浠讳綍澶у皬 */ +} +.left_qiu{ + position: absolute; + left: -74px; + top: 0; + width:54px; + border-radius: 50%; + height:54px; + font-size: 13px; + margin: auto; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + background: #0099ff; + transform: translate(0, 0); +} +/deep/ .ant-timeline-item-tail{ + left: -29px !important; +} +.left_qiu span{ + width: 3em; + display: block; + color: #fff; + text-align: center; +} +.img{ + width: 75%; +} + +.wrap{ + clear: both; + width: 100%; + display: flex; + height: 50px; + border: 1px solid #ccc; + /* background-color: aqua; */ +} +.box{ + width:21%; + height:50px; + border-right: 1px solid #ccc; + line-height: 50px; + /* background: red; */ + text-align:center; + margin: auto; +} + +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/flowable/workflow/lossBound/lossBoundHandle.vue b/src/views/flowable/workflow/lossBound/lossBoundHandle.vue new file mode 100644 index 0000000..df462bd --- /dev/null +++ b/src/views/flowable/workflow/lossBound/lossBoundHandle.vue @@ -0,0 +1,505 @@ +<template> + <a-modal + :title="title" + :width="width" + :visible="visible" + :footer="null" + @cancel="handCancel" + > + <a-card :bordered="false"> + <div> + <b>{{ selectShenpiData.description }}</b> + <br> + <br> + <a-tag color="blue"> + 澶勭悊浜� {{ selectShenpiData.assignee_dictText }} + </a-tag> + <a-tag color="blue"> + 鍒涘缓鏃堕棿 {{ selectShenpiData.createTime }} + </a-tag> + <br> + <br> + <button @click="fetchAndShowBmp" class="btn-custom">鎵撳紑娴佺▼鍥�</button> + <div v-if="imageSrc"> + <img :src="imageSrc" alt="Fetched Image" /> + </div> + <hr class="shallow-hr"> + </div> + <div> + <b>鎶ユ崯璇︽儏</b> + <br> + <a-form :form="form"> + <a-spin :spinning="spinning"> + <a-tabs default-active-key="1" @change="callback"> + <a-tab-pane key="1" tab="鎶ユ崯鍩烘湰淇℃伅"> + <a-form-model ref="form" :model="tableRowRecord"> + <a-row> + <a-col :span="span"> + <a-form-model-item label="鎶ユ崯鍗曞崟鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="outNum"> + <a-input disabled v-model="tableRowRecord.orderCode"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="span"> + <a-form-model-item label="鎶ユ崯浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="outStorehouseType"> + <j-dict-select-tag disabled + v-model="tableRowRecord.losser" dictCode="sys_user,realname,id" + placeholder="璇烽�夋嫨" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="span"> + <a-form-model-item label="鎶ユ崯鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="outboundTime"> + <j-date disabled v-model="tableRowRecord.lossTime" :show-time="true" + dateFormat="YYYY-MM-DD HH:mm" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="span"> + <a-form-model-item label="鎶ユ崯鍘熷洜" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="subjectMatter"> + <a-input disabled v-model="tableRowRecord.lossReason"></a-input> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="span"> + <a-form-model-item label="缁忔墜浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="handler"> + <j-dict-select-tag disabled + v-model="tableRowRecord.handler" dictCode="sys_user,realname,id" + placeholder="璇烽�夋嫨" /> + </a-form-model-item> + </a-col> + <a-col :span="span"> + <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark"> + <a-textarea disabled v-model="tableRowRecord.remark" rows="4" /> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-tab-pane> + <a-tab-pane key="2" tab="鎶ユ崯鏄庣粏淇℃伅"> + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :scroll="{x:'max-content'}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="null"> + </a-table> + </a-tab-pane> + <a-tab-pane key="3" tab="娴佺▼鑺傜偣"> + <a-timeline> + <a-timeline-item v-for="(item,index) in hitaskDataSource" :key="index"> + <div> + <h3 style="font-weight: bold;">{{ item.taskName }}</h3> + <div>澶勭悊浜猴細{{ item.assignee_dictText }}</div> + <div v-if="index !==0">澶勭悊鏃堕暱锛歿{ item.duration }}</div> + <div v-if="item.name !== '鎻愪氦鐢宠'">澶勭悊绫诲瀷锛歿{ item.sequenceFlowName }}</div> + <div v-if="item.description">澶勭悊鎰忚锛歿{ item.description }}</div> + </div> + </a-timeline-item> + </a-timeline> + </a-tab-pane> + </a-tabs> + </a-spin> + </a-form> + </div> + <div v-if="auditVisible"> + <hr class="shallow-hr"> + <br> + <b>瀹℃壒璇︽儏</b> + <br> + <a-form-model ref="form" :model="approveData" :rules="validatorRules" slot="detail"> + <a-row> + <a-col ::span="span"> + <a-form-model-item label="鐢宠浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="handler_dictText"> + <a-input :readOnly="inputReadOnly" v-model="tableRowRecord.handler_dictText"></a-input> + </a-form-model-item> + </a-col> + <a-col ::span="span"> + <a-form-model-item label="鐢宠鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createTime"> + <a-input :readOnly="inputReadOnly" v-model="tableRowRecord.createTime"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24" class="btxx"> + <a-form-item label="瀹℃壒鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-select :disabled="disableSubmit" v-model="assignFileStream.status" placeholder="璇烽�夋嫨瀹℃壒缁撴灉"> + <a-select-option value="3">閫氳繃</a-select-option> + <a-select-option value="4">椹冲洖</a-select-option> + </a-select> + </a-form-item> + </a-col> + <a-col :span="24" class="btxx"> + <a-form-model-item label="瀹℃壒鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-textarea :disabled="disableSubmit" v-model="assignFileStream.approvalOpinion" rows="4" + placeholder="璇疯緭鍏ュ鎵规剰瑙�" /> + </a-form-model-item> + </a-col> + </a-row> + <div class="table-operator" style="text-align: right;"> + <a-button @click="handleQueXiaoTask" type="primary" icon="close">鍙栨秷</a-button> + <a-button :disabled="disableSubmit" @click="submitForm">鎻愪氦</a-button> + </div> + </a-form-model> + </div> + </a-card> + + + </a-modal> +</template> + +<script> + +import '@assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { downFile, getAction, httpAction } from '@api/manage' + +export default { + name: 'lossBoundHandle', + mixins: [mixinDevice], + props: { + selectShenpiData: { + type: Object, + required: true + } + }, + + data() { + return { + form: this.$form.createForm(this), + span: 12, + span1: 8, + disableSubmit: false, + inputReadOnly: true, + spinning: false, + tableRowRecord: {}, + assignFileStream: {}, + tableDataSource: [], + usageDataSource: [], + hitaskDataSource: [], + dataSource: [], + bomForm: {}, + imageSrc: null, + drawerVisible: true, + auditVisible: true, + loading: false, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 30 }, + sm: { span: 16 } + }, + /* 鍒嗛〉鍙傛暟 */ + ipagination: { + current: 1, + pageSize: 5, + pageSizeOptions: ['5', '10', '50'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + } + }, + { + title: '鍒�鍏风紪鍙�', + align: 'center', + dataIndex: 'toolCode' + }, + { + title: '宸ュ叿绫诲瀷', + align: 'center', + dataIndex: 'applicationType_dictText' + }, + { + title: '鎶ユ崯鍘熷洜', + align: 'center', + dataIndex: 'lossReason' + }, + { + title: '鎶ユ崯鏁伴噺', + align: 'center', + dataIndex: 'lossNumber' + }, + { + title: '涓枃鍚嶇О', + align: 'center', + dataIndex: 'chineseName' + }, + { + title: '鍨嬪彿/鍥惧彿', + align: 'center', + dataIndex: 'toolModel' + }, + { + title: '鍒�鍏锋潗鏂�', + align: 'center', + dataIndex: 'toolMaterial' + }, + { + title: '闆朵欢鏉愭枡', + align: 'center', + dataIndex: 'partMaterial' + }, + { + title: '鍘傚', + align: 'center', + dataIndex: 'supplierId' + }, + { + title: '瀛樺偍浣嶇疆(搴撲綅鍙�)', + align: 'center', + dataIndex: 'positionCode' + }, + + { + title: '鍒涘缓鏃堕棿', + align: 'center', + dataIndex: 'createTime' + }, + { + title: '澶囨敞', + align: 'center', + dataIndex: 'remark' + } + ], + validatorRules: { + status: { + rules: [ + { required: true, message: '璇烽�夋嫨瀹℃壒鐘舵��!' } + ] + } + }, + approveData: {}, + flowData: {}, + title: '瀹℃壒椤甸潰', + width: 1200, + visible: false, + // 琛ㄥご + url: { + queryLossBoundOrder: '/tms/toolsLossBound/queryById', + queryLossBoundDetailList: '/tms/toolsLossBound/listlossboundDetailByMainId', + diagramView: '/assign/flow/diagramView', + queryHisTaskList: '/assign/flow/queryHisTaskList', + approve: '/tms/toolsLossBound/approval' + }, + dictOptions: {}, + superFieldList: [], + workflowSource: [] + } + }, + created() { + }, + computed: {}, + methods: { + callback() { + }, + handCancel() { + this.visible = false + }, + clearTableSource() { + this.tableDataSource = [] + this.usageDataSource = [] + }, + fetchAndShowBmp() { + console.log('flowData----->', this.flowData) + try { + let parm = { + processDefinitionId: this.flowData.processDefinitionId, + processInstanceId: this.flowData.processInstanceId, + TaskDefinitionKey: this.flowData.processDefinitionKey + } + downFile(this.url.diagramView, parm, 'get').then((res => { + console.log('Pica------>', res) + const urlObject = window.URL.createObjectURL(new Blob([res])) + this.imageSrc = urlObject + })) + } catch (error) { + console.error('Error fetching image blob:', error) + alert('鏃犳硶鍔犺浇鍥剧墖锛岃绋嶅悗鍐嶈瘯銆�') + } + }, + handleQueXiaoTask() { + this.visible = false + this.routeReload() + }, + submitForm() { + const that = this + if (!that.assignFileStream.status == null || that.assignFileStream.status === undefined) { + this.$message.warning('璇烽�夋嫨瀹℃壒鐘舵�侊紒') + return false + } + if (!that.assignFileStream.approvalOpinion == null || that.assignFileStream.approvalOpinion === undefined) { + this.$message.warning('璇疯緭鍏ュ鎵规剰瑙侊紒') + return false + } + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.form.validateFields((err, values) => { + if (!err) { + that.confirmLoading = true + let url = this.url.approve + let method = 'post' + let flowTaskVo = {} + flowTaskVo.status = that.assignFileStream.status + flowTaskVo.approvalOpinion = that.assignFileStream.approvalOpinion + flowTaskVo.comment = that.assignFileStream.approvalOpinion + flowTaskVo.dataId = this.selectShenpiData.dataId + flowTaskVo.taskId = this.selectShenpiData.id + flowTaskVo.userId = this.selectShenpiData.assignee + flowTaskVo.instanceId = this.selectShenpiData.procInstId + flowTaskVo.targetKey = this.selectShenpiData.taskDefKey + flowTaskVo.values = this.selectShenpiData.variables + flowTaskVo.assignee = this.selectShenpiData.assignee + console.log('琛ㄥ崟鎻愪氦鏁版嵁', flowTaskVo) + httpAction(url, flowTaskVo, method).then((res) => { + if (res.success) { + that.$message.success(res.message) + that.visible = false + //鍒锋柊琛ㄦ牸 + that.$emit('searchReset') + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = false + }) + } + + }) + }, + /** + * 鑾峰彇娴佺▼鑺傜偣鍜屾祦绋嬪浘 + * @param record 寰呭姙璁板綍淇℃伅 + */ + getAllApproveData(item) { + this.visible = true + this.loading = true + console.log('selectShenpiData----->', this.selectShenpiData) + this.flowData = item + getAction(this.url.queryHisTaskList, { procInstId: item.procInstId }).then(res => { + if (res.success) { + this.hitaskDataSource = res.result + } + }) + getAction(this.url.queryLossBoundOrder, { id: item.dataId }).then((res => { + if (res.success) { + this.tableRowRecord = res.result + } + })) + getAction(this.url.queryLossBoundDetailList, { lossBoundId: item.dataId }).then(res => { + if (res.success) { + this.dataSource = res.result.records + if (res.result.total) { + this.ipagination.total = res.result.total + } else { + this.ipagination.total = 0 + } + } else { + this.$message.warning(res.message) + } + }).finally(() => { + this.loading = false + }) + } + } +} +</script> +<style scoped> +.shallow-hr { + border: 0; + height: 1px; /* 鍒嗙晫绾跨殑楂樺害 */ + background-color: rgba(0, 0, 0, 0.1); /* 浣跨敤 RGBA 棰滆壊锛屽苟璁剧疆杈冧綆鐨勯�忔槑搴� */ + margin: 20px 0; /* 鍒嗙晫绾夸笂涓嬬殑澶栬竟璺� */ +} + +.btn-custom { + background-color: #4CAF50; /* 缁胯壊鑳屾櫙 */ + color: white; /* 鐧借壊鏂囧瓧 */ + border: none; /* 鏃犺竟妗� */ + padding: 5px 15px; /* 鍐呰竟璺� */ + text-align: center; /* 鏂囧瓧灞呬腑 */ + text-decoration: none; /* 鏃犱笅鍒掔嚎 */ + display: inline-block; /* 琛屽唴鍧楀厓绱� */ + font-size: 12px; /* 瀛椾綋澶у皬 */ + margin: 4px 2px; /* 澶栬竟璺� */ + cursor: pointer; /* 榧犳爣鎮仠鏃舵樉绀烘墜鍨� */ + border-radius: 4px; /* 鍦嗚杈规 */ +} + +.bold-large-label { + font-weight: bold; + font-size: 20px; /* 鎴栦綘闇�瑕佺殑浠讳綍澶у皬 */ +} + +.left_qiu { + position: absolute; + left: -74px; + top: 0; + width: 54px; + border-radius: 50%; + height: 54px; + font-size: 13px; + margin: auto; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + background: #0099ff; + transform: translate(0, 0); +} + +/deep/ .ant-timeline-item-tail { + left: -29px !important; +} + +.left_qiu span { + width: 3em; + display: block; + color: #fff; + text-align: center; +} + +.img { + width: 75%; +} + +.wrap { + clear: both; + width: 100%; + display: flex; + height: 50px; + border: 1px solid #ccc; + /* background-color: aqua; */ +} + +.box { + width: 21%; + height: 50px; + border-right: 1px solid #ccc; + line-height: 50px; + /* background: red; */ + text-align: center; + margin: auto; +} + +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue b/src/views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue index d84210a..99c918c 100644 --- a/src/views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue +++ b/src/views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue @@ -312,6 +312,7 @@ callback() { }, handCancel() { + this.assignFileStream = {} this.visible = false }, clearTableSource() { @@ -371,7 +372,7 @@ httpAction(url,flowTaskVo,method).then((res)=>{ if(res.success){ that.$message.success(res.message); - that.visible = false + this.handCancel() //鍒锋柊琛ㄦ牸 that.$emit('searchReset') }else{ diff --git a/src/views/flowable/workflow/scrap/EquipmentScrapApprovalModal.vue b/src/views/flowable/workflow/scrap/EquipmentScrapApprovalModal.vue new file mode 100644 index 0000000..9ec7e26 --- /dev/null +++ b/src/views/flowable/workflow/scrap/EquipmentScrapApprovalModal.vue @@ -0,0 +1,223 @@ +<template> + <j-modal + :confirmLoading='confirmLoading' + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" + :title='title' + :visible='visible' + :width='800' + cancelText='鍏抽棴' + centered + switchFullscreen + @cancel='handleCancel' + @ok='handleOk'> + + <a-spin :spinning='spinning'> + <a-form-model ref='form' :model='model' :rules='validatorRules'> + <a-divider orientation='center' style='font-size: large;font-style: italic;color: #66aeed;'> 鎶ュ簾锛堣浆璁╋級淇℃伅 + </a-divider> + <a-row :gutter='24'> + <a-col :span='12'> + <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='鍗曟嵁鍙�' prop='code'> + <a-input v-model='model.code' disabled /> + </a-form-model-item> + </a-col> + <a-col :span='12'> + <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='璁惧缂栫爜' prop='equipmentId'> + <lx-search-equipment-select v-model='model.equipmentId' + disabled placeholder='璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储'></lx-search-equipment-select> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter='24'> + <a-col :span='12'> + <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='鐢宠浜�' prop='reportUser_dictText'> + <a-input v-model='model.reportUser_dictText' disabled /> + </a-form-model-item> + </a-col> + <a-col :span='12'> + <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='澶勭疆鍘熷洜' prop='scrapReason'> + <a-input v-model='model.scrapReason' disabled /> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter='24'> + <a-col :span='12'> + <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='澶囨敞' prop='remark'> + <a-textarea v-model='model.remark' disabled /> + </a-form-model-item> + </a-col> + </a-row> + <div v-if='approvalDisable'> + <a-divider orientation='center' style='font-size: large;font-style: italic;color: #66aeed;'> 绠$悊鍛樻姤搴燂紙杞锛夊鏍� + </a-divider> + <a-row :gutter='24'> + <a-col :span='12'> + <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='瀹℃壒绫诲瀷' prop='approvalDealType'> + <j-dict-select-tag v-model='model.approvalDealType' :disabled='disableSubmit || initialAcceptanceDisable' dictCode='approved_rejected' + placeholder='璇烽�夋嫨澶勭悊绫诲瀷' type='radio' /> + </a-form-model-item> + </a-col> + <a-col :span='12'> + <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='瀹℃壒鎰忚' prop='approvalComment'> + <a-textarea v-model='model.approvalComment' :disabled='disableSubmit || returnDisable' + placeholder='璇疯緭鍏ユ剰瑙�' /> + </a-form-model-item> + </a-col> + </a-row> + </div> + </a-form-model> + </a-spin> + </j-modal> +</template> + +<script> +import { getAction, httpAction } from '@/api/manage' +import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue' + +export default { + name: 'EquipmentScrapApprovalModal', + components: { + LxSearchEquipmentSelect + }, + props: { + selectShenpiData: { + type: Object + } + }, + data() { + return { + title: '鎿嶄綔', + visible: false, + editable: false, + model: {}, + treeData: [], + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 18 } + }, + labelColLong: { + xs: { span: 24 }, + sm: { span: 2 } + }, + wrapperColLong: { + xs: { span: 24 }, + sm: { span: 21 } + }, + confirmLoading: false, + spinning: false, + imageSrc: null, + validatorRules: { + approvalDealType: [ + { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' } + ], + unsealApprovalDealType: [ + { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' } + ], + approvalComment: [ + { required: true, message: '璇疯緭鍏ュ鎵规剰瑙�!' } + ], + unsealApprovalComment: [ + { required: true, message: '璇疯緭鍏ュ鎵规剰瑙�!' } + ], + returnComment: [ + { required: true, message: '璇疯緭鍏ュ綊杩樺娉�!' } + ], + confirmComment: [ + { required: true, message: '璇疯緭鍏ョ‘璁ゆ剰瑙�!' } + ] + }, + url: { + queryById: '/eam/eamEquipmentScrap/queryById', + approval: '/eam/eamEquipmentScrap/approval', + loadProductionOptions: '/mdc/mdcProduction/loadProductionTreeOptions' + }, + disableSubmit: false + } + }, + created() { + this.loadAllProductionTree() + }, + computed: { + approvalDisable: function() { + return ['WAIT_CHECK'].includes(this.model.scrapStatus) + } + }, + methods: { + async handleDetail(item) { + this.initParams() + this.model = {} + let res = await getAction(this.url.queryById, { id: item.dataId }) + this.model = Object.assign({}, res.result) + this.model.dataId = item.dataId + this.model.taskId = item.id + this.model.userId = item.assignee + this.model.instanceId = item.procInstId + this.model.values = item.variables + this.spinning = false + }, + + recordDetail(record) { + console.log('record', record) + this.initParams() + this.model = Object.assign({}, record) + }, + + initParams() { + this.visible = true + this.spinning = true + }, + + async handleOk() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = that.spinning = true + let httpurl = this.url.approval + let method = 'put' + httpAction(httpurl, this.model, method).then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('searchReset') + that.close() + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = that.spinning = false + }) + } else { + return false + } + }) + }, + handleCancel() { + this.close() + }, + + close() { + this.$emit('close') + this.visible = false + this.$refs.form.clearValidate() + }, + loadAllProductionTree() { + //鍔犺浇杞﹂棿閫夋嫨鏍� + getAction(this.url.loadProductionOptions).then(res => { + if (res.success) { + this.treeData = [...res.result] + } else { + that.$message.warning(res.message) + } + }) + } + } +} +</script> + +<style lang='less' scoped> + +</style> \ No newline at end of file diff --git a/src/views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue b/src/views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue index 282d290..ef2f20f 100644 --- a/src/views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue +++ b/src/views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue @@ -28,32 +28,27 @@ </a-form-model-item> </a-col> </a-row> - <a-row :guitter="24"> + <a-row :gutter="24"> <a-col :span="12"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leanDepartId_dictText" label="鍊熷叆杞﹂棿"> - <a-input v-model="model.leanDepartId_dictText" disabled /> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sealUpReason" label="灏佸瓨鍘熷洜"> + <a-textarea v-model="model.sealUpReason" disabled /> </a-form-model-item> </a-col> <a-col :span="12"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leanPerson_dictText" label="鍊熺敤浜�"> - <a-input v-model="model.leanPerson_dictText" disabled /> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reportUser_dictText" label="鐢宠浜�"> + <a-input v-model="model.reportUser_dictText" disabled /> </a-form-model-item> </a-col> </a-row> <a-row :gutter="24"> - <a-col :span="12"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leanReason" label="鍊熺敤鍘熷洜"> - <a-textarea v-model="model.leanReason" disabled /> - </a-form-model-item> - </a-col> - <a-col :span="12"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞"> + <a-col :span="24"> + <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="remark" label="澶囨敞"> <a-textarea v-model="model.remark" disabled /> </a-form-model-item> </a-col> </a-row> <div v-if="approvalDisable"> - <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍛樺鎵� + <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍛樺皝瀛樺鏍� </a-divider> <a-row :gutter="24"> <a-col :span="12"> @@ -70,27 +65,19 @@ </a-col> </a-row> </div> - <div v-if="returnDisable"> - <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 褰掕繕淇℃伅 + <div v-if="confirmDisable"> + <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍛樺惎灏佸鏍� </a-divider> <a-row :gutter="24"> - <a-col :span="24"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="returnComment" - label="褰掕繕澶囨敞"> - <a-textarea placeholder="璇疯緭鍏ュ綊杩樺娉�" v-model="model.returnComment" - :disabled="disableSubmit || confirmDisable" /> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="unsealApprovalDealType" label="瀹℃壒绫诲瀷"> + <j-dict-select-tag type="radio" v-model="model.unsealApprovalDealType" dictCode="approved_rejected" + placeholder="璇烽�夋嫨澶勭悊绫诲瀷" :disabled="disableSubmit || initialAcceptanceDisable" /> </a-form-model-item> </a-col> - </a-row> - </div> - <div v-if="confirmDisable"> - <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍛樼‘璁� - </a-divider> - <a-row :gutter="24"> - <a-col :span="24"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmComment" - label="纭鎰忚"> - <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.confirmComment" + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="unsealApprovalComment" label="瀹℃壒鎰忚"> + <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.unsealApprovalComment" :disabled="disableSubmit || completionDisable" /> </a-form-model-item> </a-col> @@ -145,7 +132,13 @@ approvalDealType: [ { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' } ], + unsealApprovalDealType: [ + { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' } + ], approvalComment: [ + { required: true, message: '璇疯緭鍏ュ鎵规剰瑙�!' } + ], + unsealApprovalComment: [ { required: true, message: '璇疯緭鍏ュ鎵规剰瑙�!' } ], returnComment: [ @@ -168,13 +161,13 @@ }, computed: { approvalDisable: function() { - return ['WAIT_APPROVAL', 'WAIT_RETURN', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.model.leanStatus) + return ['WAIT_CHECK','SEALED', 'WAIT_UNSEALING_AUDIT', 'COMPLETE'].includes(this.model.sealStatus) }, returnDisable: function() { - return ['WAIT_RETURN', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.model.leanStatus) + return ['SEALED', 'WAIT_UNSEALING_AUDIT', 'COMPLETE'].includes(this.model.sealStatus) }, confirmDisable: function() { - return ['WAIT_CONFIRM', 'COMPLETE'].includes(this.model.leanStatus) + return ['WAIT_UNSEALING_AUDIT', 'COMPLETE'].includes(this.model.sealStatus) }, completionDisable: function() { return ['COMPLETE'].includes(this.model.leanStatus) diff --git a/src/views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue b/src/views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue new file mode 100644 index 0000000..b176483 --- /dev/null +++ b/src/views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue @@ -0,0 +1,524 @@ +<template> + <a-modal + :title="title" + :width="width" + :visible="visible" + :footer="null" + @cancel="handCancel" + > + <a-card :bordered="false"> + <div> + <b>{{ selectShenpiData.description }}</b> + <br> + <br> + <a-tag color="blue"> + 澶勭悊浜� {{ selectShenpiData.assignee_dictText }} + </a-tag> + <a-tag color="blue"> + 鍒涘缓鏃堕棿 {{ selectShenpiData.createTime }} + </a-tag> + <br> + <br> + <button @click="fetchAndShowBmp" class="btn-custom">鎵撳紑娴佺▼鍥�</button> + <div v-if="imageSrc"> + <img :src="imageSrc" alt="Fetched Image" /> + </div> + <hr class="shallow-hr"> + </div> + <div> + <b>鐩樼偣璇︽儏</b> + <br> + <a-form :form="form"> + <a-spin :spinning="spinning"> + <a-tabs default-active-key="1" @change="callback"> + <a-tab-pane key="1" tab="鐢宠鍩烘湰淇℃伅"> + <a-form-model ref="form" :model="tableRowRecord"> + <a-row> + <a-col :span="span"> + <a-form-model-item label="鍑哄簱鍗曠紪鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="outNum"> + <a-input disabled v-model="tableRowRecord.outNum"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="span"> + <a-form-model-item label="鍑哄簱绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="outStorehouseType"> + <j-dict-select-tag disabled type="list" + v-model="tableRowRecord.outStorehouseType" dictCode="out_storehouse_type" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="span"> + <a-form-model-item label="鍑哄簱鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="outboundTime"> + <j-date disabled v-model="tableRowRecord.outboundTime" :show-time="true" + dateFormat="YYYY-MM-DD HH:mm" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="span"> + <a-form-model-item label="棰嗙敤浜嬬敱" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="subjectMatter"> + <a-input disabled v-model="tableRowRecord.subjectMatter"></a-input> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="span"> + <a-form-model-item label="缁忔墜浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="handler"> + <a-input disabled v-model="tableRowRecord.handler_dictText"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="span"> + <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark"> + <a-textarea disabled v-model="tableRowRecord.remark" rows="4" /> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-tab-pane> + <a-tab-pane key="2" tab="鐩樼偣鏄庣粏淇℃伅"> + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :scroll="{x:'max-content'}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="null"> + </a-table> + </a-tab-pane> + <a-tab-pane key="3" tab="娴佺▼鑺傜偣"> + <a-timeline> + <a-timeline-item v-for="(item,index) in hitaskDataSource" :key="index"> + <div> + <h3 style="font-weight: bold;">{{ item.taskName }}</h3> + <div>澶勭悊浜猴細{{ item.assignee_dictText }}</div> + <div v-if="index !==0">澶勭悊鏃堕暱锛歿{ item.duration }}</div> + <div v-if="item.name !== '鎻愪氦鐢宠'">澶勭悊绫诲瀷锛歿{ item.sequenceFlowName }}</div> + <div v-if="item.description">澶勭悊鎰忚锛歿{ item.description }}</div> + </div> + </a-timeline-item> + </a-timeline> + </a-tab-pane> + </a-tabs> + </a-spin> + </a-form> + </div> + <div v-if="auditVisible"> + <hr class="shallow-hr"> + <br> + <b>瀹℃壒璇︽儏</b> + <br> + <a-form-model ref="form" :model="approveData" :rules="validatorRules" slot="detail"> + <a-row> + <a-col ::span="span"> + <a-form-model-item label="鐢宠浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="handler_dictText"> + <a-input :readOnly="inputReadOnly" v-model="tableRowRecord.handler_dictText"></a-input> + </a-form-model-item> + </a-col> + <a-col ::span="span"> + <a-form-model-item label="鐢宠鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createTime"> + <a-input :readOnly="inputReadOnly" v-model="tableRowRecord.createTime"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24" class="btxx"> + <a-form-item label="瀹℃壒鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-select :disabled="disableSubmit" v-model="assignFileStream.status" placeholder="璇烽�夋嫨瀹℃壒缁撴灉"> + <a-select-option value="3">閫氳繃</a-select-option> + <a-select-option value="4">椹冲洖</a-select-option> + </a-select> + </a-form-item> + </a-col> + <a-col :span="24" class="btxx"> + <a-form-model-item label="瀹℃壒鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-textarea :disabled="disableSubmit" v-model="assignFileStream.approvalOpinion" rows="4" + placeholder="璇疯緭鍏ュ鎵规剰瑙�" /> + </a-form-model-item> + </a-col> + </a-row> + <div class="table-operator" style="text-align: right;"> + <a-button @click="handleQueXiaoTask" type="primary" icon="close">鍙栨秷</a-button> + <a-button :disabled="disableSubmit" @click="submitForm">鎻� 浜�</a-button> + </div> + </a-form-model> + </div> + </a-card> + + + </a-modal> +</template> + +<script> + +import '@assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { downFile, getAction, httpAction } from '@api/manage' + +export default { + name: 'stocktakingBoundHandle', + mixins: [mixinDevice], + props: { + selectShenpiData: { + type: Object, + required: true + } + }, + + data() { + return { + form: this.$form.createForm(this), + span: 12, + span1: 8, + inputReadOnly: true, + spinning: false, + tableRowRecord: {}, + assignFileStream: {}, + tableDataSource: [], + usageDataSource: [], + hitaskDataSource: [], + dataSource: [], + bomForm: {}, + imageSrc: null, + drawerVisible: true, + auditVisible: true, + disableSubmit: false, + loading: false, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 30 }, + sm: { span: 16 } + }, + /* 鍒嗛〉鍙傛暟 */ + ipagination: { + current: 1, + pageSize: 5, + pageSizeOptions: ['5', '10', '50'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + } + }, + { + title: '鍒�鍏风紪鍙�', + dataIndex: 'toolCode', + align: 'center' + }, + { + title: '宸ュ叿绫诲瀷', + dataIndex: 'applicationType_dictText', + align: 'center' + + }, + + { + title: '涓枃鍚嶇О', + dataIndex: 'chineseName', + align: 'center' + }, + + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + align: 'center' + }, + { + title: '鍒�鍏锋潗鏂�', + dataIndex: 'toolMaterial', + align: 'center' + + }, + { + title: '闆朵欢鏉愭枡', + dataIndex: 'partMaterial', + align: 'center' + }, + { + title: '鍘傚', + dataIndex: 'supplierId', + align: 'center' + + }, + { + title: '瀛樺偍浣嶇疆(搴撲綅鍙�)', + dataIndex: 'goodsShelvesId', + align: 'center' + }, + + { + title: '璐﹂潰鏁伴噺', + dataIndex: 'bookQuantity', + align: 'center' + + }, + { + title: '鍙敤鏁伴噺', + dataIndex: 'availableQuantity', + align: 'center' + + }, + { + title: '瀹炵洏鏁伴噺', + dataIndex: 'practicalQuantity', + align: 'center' + }, + { + title: '宸紓鍊�', + dataIndex: 'differenceValue', + align: 'center' + }, + { + title: '鐩樹簭鐩樼泩', + dataIndex: 'surplusDeficit_dictText', + align: 'center' + }, + { + title: '鐩樺簱鏃堕棿', + dataIndex: 'stocktakingDate', + align: 'center' + }, + { + title: '澶囨敞', + dataIndex: 'remark', + align: 'center' + } + ], + validatorRules: { + status: { + rules: [ + { required: true, message: '璇烽�夋嫨瀹℃壒鐘舵��!' } + ] + } + }, + approveData: {}, + flowData: {}, + title: '瀹℃壒椤甸潰', + width: 1200, + visible: false, + // 琛ㄥご + url: { + queryStocktakingBoundOrder: '/tms/toolsStocktakingBound/queryById', + queryStocktakingBoundDetailList: '/tms/toolsStocktakingBound/listToolsStocktakingBoundControllerDetailsByMainId', + diagramView: '/assign/flow/diagramView', + queryHisTaskList: '/assign/flow/queryHisTaskList', + approve: '/tms/toolsStocktakingBound/approval' + }, + dictOptions: {}, + superFieldList: [], + workflowSource: [] + } + }, + created() { + }, + computed: {}, + methods: { + callback() { + }, + handCancel() { + this.visible = false + }, + clearTableSource() { + this.tableDataSource = [] + this.usageDataSource = [] + }, + fetchAndShowBmp() { + console.log('flowData----->', this.flowData) + try { + let parm = { + processDefinitionId: this.flowData.processDefinitionId, + processInstanceId: this.flowData.processInstanceId, + TaskDefinitionKey: this.flowData.processDefinitionKey + } + downFile(this.url.diagramView, parm, 'get').then((res => { + console.log('Pica------>', res) + const urlObject = window.URL.createObjectURL(new Blob([res])) + this.imageSrc = urlObject + })) + } catch (error) { + console.error('Error fetching image blob:', error) + alert('鏃犳硶鍔犺浇鍥剧墖锛岃绋嶅悗鍐嶈瘯銆�') + } + }, + handleQueXiaoTask() { + this.visible = false + this.routeReload() + }, + submitForm() { + const that = this + if (!that.assignFileStream.status == null || that.assignFileStream.status === undefined) { + this.$message.warning('璇烽�夋嫨瀹℃壒鐘舵�侊紒') + return false + } + if (!that.assignFileStream.approvalOpinion == null || that.assignFileStream.approvalOpinion === undefined) { + this.$message.warning('璇疯緭鍏ュ鎵规剰瑙侊紒') + return false + } + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.form.validateFields((err, values) => { + if (!err) { + that.confirmLoading = true + let url = this.url.approve + let method = 'post' + let flowTaskVo = {} + flowTaskVo.status = that.assignFileStream.status + flowTaskVo.approvalOpinion = that.assignFileStream.approvalOpinion + flowTaskVo.comment = that.assignFileStream.approvalOpinion + flowTaskVo.dataId = this.selectShenpiData.dataId + flowTaskVo.taskId = this.selectShenpiData.id + flowTaskVo.userId = this.selectShenpiData.assignee + flowTaskVo.instanceId = this.selectShenpiData.procInstId + flowTaskVo.targetKey = this.selectShenpiData.taskDefKey + flowTaskVo.values = this.selectShenpiData.variables + flowTaskVo.assignee = this.selectShenpiData.assignee + console.log('琛ㄥ崟鎻愪氦鏁版嵁', flowTaskVo) + httpAction(url, flowTaskVo, method).then((res) => { + if (res.success) { + that.$message.success(res.message) + that.visible = false + //鍒锋柊琛ㄦ牸 + that.$emit('searchReset') + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = false + }) + } + + }) + }, + /** + * 鑾峰彇娴佺▼鑺傜偣鍜屾祦绋嬪浘 + * @param record 寰呭姙璁板綍淇℃伅 + */ + getAllApproveData(item) { + this.visible = true + this.loading = true + console.log('selectShenpiData----->', this.selectShenpiData) + this.flowData = item + getAction(this.url.queryHisTaskList, { procInstId: item.procInstId }).then(res => { + if (res.success) { + this.hitaskDataSource = res.result + } + }) + getAction(this.url.queryStocktakingBoundOrder, { id: item.dataId }).then((res => { + if (res.success) { + this.tableRowRecord = res.result + } + })) + getAction(this.url.queryStocktakingBoundDetailList, { stocktakingBoundId: item.dataId }).then(res => { + if (res.success) { + this.dataSource = res.result.records + if (res.result.total) { + this.ipagination.total = res.result.total + } else { + this.ipagination.total = 0 + } + } else { + this.$message.warning(res.message) + } + }).finally(() => { + this.loading = false + }) + } + } +} +</script> +<style scoped> +.shallow-hr { + border: 0; + height: 1px; /* 鍒嗙晫绾跨殑楂樺害 */ + background-color: rgba(0, 0, 0, 0.1); /* 浣跨敤 RGBA 棰滆壊锛屽苟璁剧疆杈冧綆鐨勯�忔槑搴� */ + margin: 20px 0; /* 鍒嗙晫绾夸笂涓嬬殑澶栬竟璺� */ +} + +.btn-custom { + background-color: #4CAF50; /* 缁胯壊鑳屾櫙 */ + color: white; /* 鐧借壊鏂囧瓧 */ + border: none; /* 鏃犺竟妗� */ + padding: 5px 15px; /* 鍐呰竟璺� */ + text-align: center; /* 鏂囧瓧灞呬腑 */ + text-decoration: none; /* 鏃犱笅鍒掔嚎 */ + display: inline-block; /* 琛屽唴鍧楀厓绱� */ + font-size: 12px; /* 瀛椾綋澶у皬 */ + margin: 4px 2px; /* 澶栬竟璺� */ + cursor: pointer; /* 榧犳爣鎮仠鏃舵樉绀烘墜鍨� */ + border-radius: 4px; /* 鍦嗚杈规 */ +} + +.bold-large-label { + font-weight: bold; + font-size: 20px; /* 鎴栦綘闇�瑕佺殑浠讳綍澶у皬 */ +} + +.left_qiu { + position: absolute; + left: -74px; + top: 0; + width: 54px; + border-radius: 50%; + height: 54px; + font-size: 13px; + margin: auto; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + background: #0099ff; + transform: translate(0, 0); +} + +/deep/ .ant-timeline-item-tail { + left: -29px !important; +} + +.left_qiu span { + width: 3em; + display: block; + color: #fff; + text-align: center; +} + +.img { + width: 75%; +} + +.wrap { + clear: both; + width: 100%; + display: flex; + height: 50px; + border: 1px solid #ccc; + /* background-color: aqua; */ +} + +.box { + width: 21%; + height: 50px; + border-right: 1px solid #ccc; + line-height: 50px; + /* background: red; */ + text-align: center; + margin: auto; +} + +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue b/src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue index 6c9d5fa..9b8b397 100644 --- a/src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue +++ b/src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue @@ -74,7 +74,7 @@ </a-divider> <a-row :gutter="24"> <a-tabs v-model="activeTabKey"> - <a-tab-pane key="1" tab="淇濆吇椤规槑缁�"> + <a-tab-pane key="1" tab="淇濆吇椤规槑缁�" v-if="!isPrecisionCheck"> <j-vxe-table ref="editableDetailTable" :rowNumber="false" @@ -110,6 +110,25 @@ </template> </j-vxe-table> </a-tab-pane> + <a-tab-pane key='4' tab='绮惧害妫�楠�' v-if="!isMaintenance"> + <j-vxe-table + ref="editablePrecisionDetailTable" + :rowNumber="true" + :rowSelection="true" + :bordered="true" + :alwaysEdit="true" + :toolbar="false" + :toolbarConfig="precisionDetail.toolbarConfig" + keep-source + :height="300" + :dataSource="precisionDetail.dataSource" + :columns="precisionDetail.columns" + style="margin-top: 8px;" > + <template v-slot:actualValue="props"> + <a-input-number v-model="props.row.actualValue" :disabled="disableSubmit || confirmDisable" style="width: 100%" /> + </template> + </j-vxe-table> + </a-tab-pane> <template v-if="selectShenpiData.procInstId"> <a-tab-pane key='2' tab='娴佺▼鑺傜偣'> <a-card :bordered="false"> @@ -139,14 +158,8 @@ <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 鏈哄姩鍔炵‘璁や俊鎭� </a-divider> <a-row :gutter="24"> - <a-col :span="12"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmDealType" label="纭绫诲瀷"> - <j-dict-select-tag type='radio' v-model='model.confirmDealType' dictCode='approved_rejected' - placeholder="璇烽�夋嫨澶勭悊绫诲瀷" :disabled="disableSubmit || leaderConfirmDisable"/> - </a-form-model-item> - </a-col> - <a-col :span="12"> - <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmComment" label="纭鎰忚"> + <a-col :span="24"> + <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="confirmComment" label="纭鎰忚"> <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.confirmComment" :disabled="disableSubmit || leaderConfirmDisable"/> </a-form-model-item> @@ -222,9 +235,6 @@ imageSrc: null, activeTabKey: '1', validatorRules: { - confirmDealType: [ - { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' } - ], confirmComment: [ { required: true, message: '璇疯緭鍏ョ‘璁ゆ剰瑙�!' } ], @@ -238,7 +248,8 @@ approval: '/eam/thirdMaintenanceOrder/approval', userSelect: '/eam/user_select/list', queryHisTaskList: '/assign/flow/queryHisTaskList', - diagramView: '/assign/flow/diagramView' + diagramView: '/assign/flow/diagramView', + precisionCheckDetail: '/eam/precisionCheckDetail/queryList', }, disableSubmit: false, taskData: [], @@ -327,6 +338,70 @@ // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳 btn: ['clearSelection'] } + }, + precisionDetail: { + loading: false, + dataSource: [], + columns: [ + { + title: 'ID', + key: 'id', + type: JVXETypes.hidden + }, + { + title: 'orderId', + key: 'orderId', + type: JVXETypes.hidden + }, + { + title: 'equipmentId', + key: 'equipmentId', + type: JVXETypes.hidden + }, + { + title: 'parameterId', + key: 'parameterId', + type: JVXETypes.hidden + }, + { + title: '妫�娴嬮」鐩�', + key: 'parameterId_dictText', + type: JVXETypes.normal, + width: '25%', + align: 'center' + }, + { + title: '鍙傛暟缂栫爜', + key: 'parameterCode_dictText', + type: JVXETypes.normal, + width: '20%', + align: 'center', + }, + { + title: '鍏佸樊鍊�', + key: 'parameterValue', + type: JVXETypes.normal, + width: '15%', + align: 'center', + }, + { + title: '瀹炴祴鍊�', + key: 'actualValue', + type: JVXETypes.slot, + width: '15%', + align: 'center', + slotName: 'actualValue', + validateRules: [ + { required: true, message: '璇疯緭鍏ュ疄娴嬪�硷紒' } + ] + } + ], + toolbarConfig: { + // prefix 鍓嶇紑锛泂uffix 鍚庣紑 + slot: ['prefix', 'suffix'], + // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳 + btn: ['add', 'remove', 'clearSelection'] + } } } }, @@ -341,11 +416,21 @@ }, completionDisable: function() { return ['COMPLETE', 'ABOLISH'].includes(this.model.maintenanceStatus) - } + }, + isMaintenance: function() { + return this.selectShenpiData && this.selectShenpiData.taskDefKey === 'maintenance_execution'; + }, + isPrecisionCheck: function() { + return this.selectShenpiData && this.selectShenpiData.taskDefKey === 'precision_check'; + }, }, methods: { async handleDetail(item) { this.initParams() + //閲嶆柊璁$畻defaultKey + if(item && item.taskDefKey === 'precision_check') { + this.activeTabKey = '4'; + } this.model = {} if (item.procInstId) { const { processDefinitionId, processInstanceId, processDefinitionKey, procInstId } = item @@ -381,6 +466,7 @@ this.model.instanceId = item.procInstId this.model.values = item.variables await this.loadDetail(item.dataId) + await this.loadPrecisionDetail(item.dataId); }, recordDetail(record) { @@ -392,28 +478,40 @@ this.model.imageFilesResult = [...obj] } this.loadDetail(record.id) + this.loadPrecisionDetail(record.id); }, - initParams() { this.detail.dataSource = [] this.visible = true - this.activeTabKey = '1' + this.activeTabKey = '1'; + if(this.selectShenpiData && this.selectShenpiData.taskDefKey === 'precision_check') { + this.activeTabKey = '4'; + } this.spinning = true }, - async handleOk() { const that = this - let errMap = await that.$refs.editableDetailTable.validateTable() - if (errMap) { - this.$message.warning('鏁版嵁鏍¢獙澶辫触锛�') - return + if(that.$refs.editableDetailTable) { + let errMap = await that.$refs.editableDetailTable.validateTable() + if (errMap) { + this.$message.warning('鏁版嵁鏍¢獙澶辫触锛�') + return + } } // 瑙﹀彂琛ㄥ崟楠岃瘉 this.$refs.form.validate(valid => { if (valid) { that.confirmLoading = that.spinning = true - let tableData = that.$refs.editableDetailTable.getTableData() + let tableData = []; + let precisionTableData = []; + if(that.$refs.editableDetailTable) { + tableData = that.$refs.editableDetailTable.getTableData() + } + if(that.$refs.editablePrecisionDetailTable) { + precisionTableData = that.$refs.editablePrecisionDetailTable.getTableData() + } that.model.tableDetailList = [...tableData] + that.model.precisionDetailList = [...precisionTableData] let httpurl = this.url.approval let method = 'put' @@ -433,7 +531,6 @@ } }) }, - autocompleteForm(selectObj) { this.$set(this.model, 'standardName', selectObj.standardName) this.$set(this.model, 'maintenancePeriod', selectObj.maintenancePeriod) @@ -445,7 +542,6 @@ } this.loadMaintenanceOperatorList(this.model.equipmentId) }, - //鏍囧噯閫夋嫨鍙樺寲 loadDetail(orderId) { if (orderId) { @@ -460,7 +556,15 @@ }) } }, - + loadPrecisionDetail(orderId) { + if (orderId) { + getAction(this.url.precisionCheckDetail, { orderId: orderId }).then(res => { + if (res.success) { + this.precisionDetail.dataSource = [...res.result] + } + }) + } + }, loadMaintenanceOperatorList(equipmentId) { this.maintenanceOperatorOptions = [] let params = { positionCode: 'PCR0001' } @@ -477,12 +581,10 @@ } }) }, - handleInspectionResultSelectChange(value, record) { if (record.exceptionDescription) delete record.exceptionDescription if (record.reportFlag) delete record.reportFlag }, - // 鎵归噺閫夋嫨鎵�鏈夌偣妫�缁撴灉 handleSelectAllInspectionResult() { this.selectedRowKeys.forEach(key => { diff --git a/src/views/flowable/workflow/transfer/EquipmentTransferApprovalModal.vue b/src/views/flowable/workflow/transfer/EquipmentTransferApprovalModal.vue new file mode 100644 index 0000000..c0f5b68 --- /dev/null +++ b/src/views/flowable/workflow/transfer/EquipmentTransferApprovalModal.vue @@ -0,0 +1,235 @@ +<template> + <j-modal + :title="title" + :width="800" + :visible="visible" + :confirmLoading="confirmLoading" + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" + switchFullscreen + @ok="handleOk" + @cancel="handleCancel" + centered + cancelText="鍏抽棴"> + + <a-spin :spinning="spinning"> + <a-form-model ref="form" :model="model" :rules="validatorRules"> + <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 褰掑睘淇℃伅 + </a-divider> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="code" label="鍗曟嵁鍙�"> + <a-input v-model="model.code" disabled /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧缂栫爜"> + <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" + v-model="model.equipmentId" disabled></lx-search-equipment-select> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="newDepartId_dictText" label="璋冨叆閮ㄩ棬"> + <a-input v-model="model.newDepartId_dictText" disabled /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="oldDepartId_dictText" label="璋冨嚭閮ㄩ棬"> + <a-input v-model="model.oldDepartId_dictText" disabled /> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reportUser_dictText" label="鐢宠浜�"> + <a-input v-model="model.reportUser_dictText" disabled /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="transferReason" label="鍙樺姩鍘熷洜"> + <a-input v-model="model.transferReason" disabled /> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter="24"> + <a-col :span="24"> + <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="remark" label="澶囨敞"> + <a-textarea v-model="model.remark" disabled /> + </a-form-model-item> + </a-col> + </a-row> + <div v-if="approvalDisable"> + <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍛樺皝瀛樺鏍� + </a-divider> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalDealType" label="瀹℃壒绫诲瀷"> + <j-dict-select-tag type="radio" v-model="model.approvalDealType" dictCode="approved_rejected" + placeholder="璇烽�夋嫨澶勭悊绫诲瀷" :disabled="disableSubmit || initialAcceptanceDisable" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalComment" label="瀹℃壒鎰忚"> + <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.approvalComment" + :disabled="disableSubmit || returnDisable" /> + </a-form-model-item> + </a-col> + </a-row> + </div> + </a-form-model> + </a-spin> + </j-modal> +</template> + +<script> +import { getAction, httpAction } from '@/api/manage' +import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue' + +export default { + name: 'EquipmentTransferApprovalModal', + components: { + LxSearchEquipmentSelect + }, + props: { + selectShenpiData: { + type: Object + } + }, + data() { + return { + title: '鎿嶄綔', + visible: false, + editable: false, + model: {}, + treeData: [], + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 18 } + }, + labelColLong: { + xs: { span: 24 }, + sm: { span: 2 } + }, + wrapperColLong: { + xs: { span: 24 }, + sm: { span: 21 } + }, + confirmLoading: false, + spinning: false, + imageSrc: null, + validatorRules: { + approvalDealType: [ + { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' } + ], + unsealApprovalDealType: [ + { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' } + ], + approvalComment: [ + { required: true, message: '璇疯緭鍏ュ鎵规剰瑙�!' } + ], + unsealApprovalComment: [ + { required: true, message: '璇疯緭鍏ュ鎵规剰瑙�!' } + ], + returnComment: [ + { required: true, message: '璇疯緭鍏ュ綊杩樺娉�!' } + ], + confirmComment: [ + { required: true, message: '璇疯緭鍏ョ‘璁ゆ剰瑙�!' } + ] + }, + url: { + queryById: '/eam/eamEquipmentTransfer/queryById', + approval: '/eam/eamEquipmentTransfer/approval', + loadProductionOptions: '/mdc/mdcProduction/loadProductionTreeOptions' + }, + disableSubmit: false + } + }, + created() { + this.loadAllProductionTree() + }, + computed: { + approvalDisable: function() { + return ['WAIT_CHECK'].includes(this.model.transferStatus) + }, + }, + methods: { + async handleDetail(item) { + this.initParams() + this.model = {} + let res = await getAction(this.url.queryById, { id: item.dataId }) + this.model = Object.assign({}, res.result) + this.model.dataId = item.dataId + this.model.taskId = item.id + this.model.userId = item.assignee + this.model.instanceId = item.procInstId + this.model.values = item.variables + this.spinning = false; + }, + + recordDetail(record) { + console.log('record', record) + this.initParams() + this.model = Object.assign({}, record) + }, + + initParams() { + this.visible = true + this.spinning = true + }, + + async handleOk() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = that.spinning = true + let httpurl = this.url.approval + let method = 'put' + httpAction(httpurl, this.model, method).then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('searchReset') + that.close() + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = that.spinning = false + }) + } else { + return false + } + }) + }, + handleCancel() { + this.close() + }, + + close() { + this.$emit('close') + this.visible = false + this.$refs.form.clearValidate() + }, + loadAllProductionTree() { + //鍔犺浇杞﹂棿閫夋嫨鏍� + getAction(this.url.loadProductionOptions).then(res => { + if (res.success) { + this.treeData = [...res.result] + } else { + that.$message.warning(res.message) + } + }) + } + } +} +</script> + +<style lang="less" scoped> + +</style> \ No newline at end of file diff --git a/src/views/system/modules/UserModal.vue b/src/views/system/modules/UserModal.vue index f8df9c9..32c2078 100644 --- a/src/views/system/modules/UserModal.vue +++ b/src/views/system/modules/UserModal.vue @@ -380,6 +380,7 @@ disableSubmit: false, dateFormat: 'YYYY-MM-DD', validatorRules: { + workNo:[{ required: true, message: '璇疯緭鍏ュ伐鍙�!' }], username: [{ required: true, message: '璇疯緭鍏ョ敤鎴疯处鍙�!' }, { validator: this.validateUsername }], password: [ diff --git a/src/views/tms/InboundList.vue b/src/views/tms/InboundList.vue new file mode 100644 index 0000000..6147900 --- /dev/null +++ b/src/views/tms/InboundList.vue @@ -0,0 +1,39 @@ +<template> + <a-row + type="flex" + :gutter="16" + > + <a-col + :md="5" + :sm="24" + > + <inbound-list-left /> + </a-col> + <a-col + :md="24-5" + :sm="24" + > + <inbound-list-right /> + </a-col> + </a-row> +</template> + +<script> +import InboundListLeft from './modules/inbound/InboundListLeft' +import InboundListRight from './modules/inbound/InboundListRight' +export default { + name: 'InboundList', + components: { InboundListLeft, InboundListRight }, + data() { + return { + description: '宸ュ叿鍏ュ簱', + currentOrgCode: '' + } + }, + methods: {} +} +</script> + +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/InboundOrderList.vue b/src/views/tms/InboundOrderList.vue new file mode 100644 index 0000000..214521c --- /dev/null +++ b/src/views/tms/InboundOrderList.vue @@ -0,0 +1,241 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :md="6" :sm="8"> + <a-form-item label="鍏ュ簱鐢宠鍗曠紪鍙�"> + <a-input placeholder="璇疯緭鍏ュ叆搴撶敵璇峰崟缂栧彿" v-model="queryParam.inboundNum" /> + </a-form-item> + </a-col> + <a-col :md="6" :sm="8"> + <a-form-item label="鍏ュ簱绫诲瀷"> + <j-search-select-tag + placeholder="璇烽�夋嫨鍏ュ簱绫诲瀷" + v-model="queryParam.inStorehouseType" + dict="in_storehouse_type" + /> + </a-form-item> + </a-col> + <a-col :md="6" :sm="8"> + <a-form-item label="缁忔墜浜�"> + <j-search-select-tag + placeholder="璇烽�夋嫨缁忔墜浜�" + v-model="queryParam.handler" + dict="sys_user,realname,id,del_flag!=1" + /> + </a-form-item> + </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> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + </div> + + <!-- table鍖哄煙-begin --> + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :customRow="customRow" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + @change="handleTableChange" + > + <!--鐘舵�佹爮涓�у睍绀�--> + <span slot="action" slot-scope="text, record"> + <a href="javascript:;" @click="handleEdit(record)" v-if="record.orderStatus == '1'">缂栬緫</a> + <a-divider type="vertical" v-if="record.orderStatus == '1'" /> + <a href="javascript:;" @click="handleDetail(record)">璇︽儏</a> + <a-divider type="vertical" v-if="record.orderStatus == '1'"/> + <a href="javascript:;" @click="handleSubmit(record)" v-if="record.orderStatus == '1'">鎻愪氦</a> + </span> + </a-table> + <a-tabs defaultActiveKey="1"> + <a-tab-pane tab="宸ュ叿鍏ュ簱鏄庣粏" key="1"> + <inbound-detail-list ref="inboundDetailList"></inbound-detail-list> + </a-tab-pane> + </a-tabs> + <!-- table鍖哄煙-end --> + <inbound-order-model ref="modalForm" @ok="modalFormOk"></inbound-order-model> + </a-card> +</template> + +<script> +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import InboundOrderModel from './modules/inboundOrder/InboundOrderModel' +import InboundDetailList from './modules/inboundOrder/InboundDetailList' +import { requestPut } from '@/api/manage' +import JDictSelectTag from '@/components/dict/JDictSelectTag' +import JSearchSelectTag from '@/components/dict/JSearchSelectTag' +import { postAction,getAction } from '../../api/manage' + +export default { + name: 'InboundOrderList', + mixins: [JeecgListMixin], + components: { + InboundOrderModel, + InboundDetailList, + JDictSelectTag, + JSearchSelectTag, + }, + data() { + return { + description: '鍏ュ簱鐢宠鍗�', + url: { + list: '/tms/inboundOrder/list', + importExcelUrl: '/tms/inboundOrder/importExcel', + exportXlsUrl: '/tms/inboundOrder/exportXls', + edit:'/tms/inboundOrder/edit', + submit:'/tms/inboundOrder/submit' + }, + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + align: 'center', + customRender: function (t, r, index) { + return parseInt(index) + 1 + }, + }, + { + title: '鍏ュ簱鐢宠鍗曠紪鍙�', + align: 'center', + dataIndex: 'inboundNum', + sorter: true, + }, + { + title: '鍏ュ簱鍗曠被鍨�', + align: 'center', + dataIndex: 'inStorehouseType_dictText', + }, + { + title: '缁忔墜浜�', + align: 'center', + dataIndex: 'handler_dictText', + }, + { + title: '鐢宠鍘熷洜', + align: 'center', + dataIndex: 'applicationReason', + }, + { + title: '鍏ュ簱鏃堕棿', + align: 'center', + dataIndex: 'inboundTime', + sorter: true, + }, + { + title: '瀹℃牳浜�', + align: 'center', + dataIndex: 'reviewer_dictText', + }, + { + title: '瀹℃牳鏃堕棿', + align: 'center', + dataIndex: 'approvalDate', + sorter: true, + }, + { + title: '瀹℃牳鐘舵��', + align: 'center', + dataIndex: 'orderStatus_dictText', + }, + { + title: '鍊熺敤鍗曞彿', + align: 'center', + dataIndex: 'borrowNum', + }, + { + title: '瀹℃壒鎰忚', + align: 'center', + dataIndex: 'approvalOpinion', + }, + { + width: 150, + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + scopedSlots: { customRender: 'action' }, + }, + ], + } + }, + computed: { + /* 瀵煎叆璺緞椤甸潰閲嶆柊璁$畻 */ + importExcelUrl: function () { + // return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;//寮�鍙戠幆澧冩寚鍚� + return `${window._CONFIG['hxFileURL']}/${this.url.importExcelUrl}` + }, + }, + methods: { + searchReset() { + this.queryParam = {} + this.$refs.inboundDetailList.dataSource = [] + this.loadData(1); + }, + customRow(record) { + return { + on: { + click: (e) => { + //灏嗗綋鍓嶉�変腑鐨勮褰曚紶鍒板瓙椤甸潰 + this.$bus.$emit('getToolingStorageData', record) + //鐐瑰嚮褰撳墠琛屽彉鑹� + let oldList = document.querySelectorAll('.checked-td-of-add-table') + if (oldList) { + for (let j = 0; j < oldList.length; j++) { + oldList[j].classList.remove('checked-td-of-add-table') + } + } + let children = e.target.parentNode.children + for (let i = 0; i < children.length; i++) { + children[i].classList.add('checked-td-of-add-table') + } + }, + }, + } + }, + handleEdit: function (record) { + this.$refs.modalForm.edit(record) + this.$refs.modalForm.title = '缂栬緫' + this.$refs.modalForm.disableSubmit = false + }, + handleAdd() { + this.$refs.modalForm.add() + this.$refs.modalForm.title = '鏂板' + this.$refs.modalForm.disableSubmit = false + }, + handleSubmit(record) { + let that = this; + getAction(that.url.submit, { id:record.id}).then((res) => { + if (res.success) { + that.$message.success(res.message); + that.loadData(); + } else { + that.$message.warning(res.message); + } + }) + }, + }, +} +</script> + +<style lang="less" scoped> +@import '~@assets/less/common.less'; +/deep/ .notshow { + display: none; +} +/deep/ .checked-td-of-add-table { + background-color: rgba(220, 220, 220, 1); +} +</style> \ No newline at end of file diff --git a/src/views/tms/OutboundList.vue b/src/views/tms/OutboundList.vue new file mode 100644 index 0000000..642f1db --- /dev/null +++ b/src/views/tms/OutboundList.vue @@ -0,0 +1,39 @@ +<template> + <a-row + type="flex" + :gutter="16" + > + <a-col + :md="5" + :sm="24" + > + <outbound-list-left/> + </a-col> + <a-col + :md="24-5" + :sm="24" + > + <outbound-list-right/> + </a-col> + </a-row> +</template> + +<script> +import OutboundListLeft from './modules/outBound/OutboundListLeft.vue' +import OutboundListRight from './modules/outBound/OutboundListRight.vue' +export default { + name: 'OutboundList', + components: { OutboundListLeft, OutboundListRight }, + data() { + return { + description: '宸ュ叿鍑哄簱', + currentOrgCode: '' + } + }, + methods: {} +} +</script> + +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/lossBound/LossboundDetailList.vue b/src/views/tms/lossBound/LossboundDetailList.vue new file mode 100644 index 0000000..bc54001 --- /dev/null +++ b/src/views/tms/lossBound/LossboundDetailList.vue @@ -0,0 +1,180 @@ +<template> + <a-card :bordered="false" :class="'cust-erp-sub-tab'"> + <!-- 鏌ヨ鍖哄煙 --> + + <!-- </div>--> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator" v-if="mainId"> + + </div> + + <!-- table鍖哄煙-begin --> + <div> + + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :scroll="{x:true}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="null" + @change="handleTableChange"> + + </a-table> + </div> + +<!-- <lossboundDetail-modal ref="modalForm" @ok="modalFormOk" :mainId="mainId"></lossboundDetail-modal>--> + </a-card> +</template> + +<script> + +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import LossboundDetailModal from './modules/LossboundDetailModal' + +export default { + name: 'LossboundDetailList', + mixins: [JeecgListMixin], + components: { LossboundDetailModal }, + props: { + mainId: { + type: String, + default: '', + required: false + } + }, + watch: { + mainId: { + immediate: true, + handler(val) { + if (!this.mainId) { + this.clearList() + } else { + this.queryParam['lossBoundId'] = val + this.loadData(1) + } + } + } + }, + data() { + return { + description: '鎶ユ崯绠$悊椤甸潰', + disableMixinCreated: true, + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + } + }, + { + title: '鍒�鍏风紪鍙�', + align: 'center', + dataIndex: 'toolCode' + }, + { + title: '宸ュ叿绫诲瀷', + align: 'center', + dataIndex: 'applicationType_dictText' + }, + { + title: '鎶ユ崯鍘熷洜', + align: 'center', + dataIndex: 'lossReason' + }, + { + title: '鎶ユ崯鏁伴噺', + align: 'center', + dataIndex: 'lossNumber' + }, + { + title: '涓枃鍚嶇О', + align: 'center', + dataIndex: 'chineseName' + }, + { + title: '鍨嬪彿/鍥惧彿', + align: 'center', + dataIndex: 'toolModel' + }, + { + title: '鍒�鍏锋潗鏂�', + align: 'center', + dataIndex: 'toolMaterial' + }, + { + title: '闆朵欢鏉愭枡', + align: 'center', + dataIndex: 'partMaterial' + }, + { + title: '鍘傚', + align: 'center', + dataIndex: 'supplierId' + }, + { + title: '瀛樺偍浣嶇疆(搴撲綅鍙�)', + align: 'center', + dataIndex: 'positionCode' + }, + + { + title: '鍒涘缓鏃堕棿', + align: 'center', + dataIndex: 'createTime' + }, + { + title: '澶囨敞', + align: 'center', + dataIndex: 'remark' + } + // { + // title: '鎿嶄綔', + // dataIndex: 'action', + // align:"center", + // fixed:"right", + // width:147, + // scopedSlots: { customRender: 'action' }, + // } + ], + url: { + list: '/tms/toolsLossBound/listlossboundDetailByMainId', + delete: '/tms/toolsLossBound/deleteLootboundDetail', + deleteBatch: '/tms/toolsLossBound/deleteBatchLossboundDetail', + exportXlsUrl: '/tms/toolsLossBound/exportLossboundDetail', + importUrl: '/tms/toolsLossBound/importLossboundDetail' + }, + } + }, + created() { + }, + computed: { + importExcelUrl() { + return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}` + } + }, + methods: { + clearList() { + this.dataSource = [] + this.selectedRowKeys = [] + this.ipagination.current = 1 + } + + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +</style> diff --git a/src/views/tms/lossBound/LossboundList.vue b/src/views/tms/lossBound/LossboundList.vue new file mode 100644 index 0000000..67bac90 --- /dev/null +++ b/src/views/tms/lossBound/LossboundList.vue @@ -0,0 +1,317 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鎶ユ崯鍗曞崟鍙�"> + <j-input placeholder="璇疯緭鍏ユ姤鎹熷崟鍗曞彿" v-model="queryParam.orderCode"></j-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="瀹℃牳鐘舵��"> + <j-dict-select-tag placeholder="璇烽�夋嫨瀹℃牳鐘舵��" v-model="queryParam.orderStatus" + dictCode="approval_status"/> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> +<!-- <a @click="handleToggleSearch" style="margin-left: 8px">--> +<!-- {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}--> +<!-- <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />--> +<!-- </a>--> + </span> + </a-col> + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + + </div> + + <!-- table鍖哄煙-begin --> + <div> + + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + class="j-table-force-nowrap" + :scroll="{x:true}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type:'radio'}" + :customRow="clickThenSelect" + @change="handleTableChange"> + + <span slot="action" slot-scope="text, record"> + <a @click="handleDetail(record)">璇︽儏</a> + <span v-if="record.orderStatus === '1'"> + <a-divider type="vertical" /> + <a-popconfirm title="纭畾鎻愪氦鍚�?" @confirm="() => handleSubmit(record)"> + <a>鎻愪氦</a> + </a-popconfirm> + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村<a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handleEdit(record)">缂栬緫</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + </span> + + </a-table> + </div> + + <a-tabs defaultActiveKey="1"> + <a-tab-pane tab="鎶ユ崯鐢宠鍗曟槑缁�" key="1"> + <LossboundDetailList ref="lossboundDetailList" :mainId="lossboundDetailMainId" /> + </a-tab-pane> + </a-tabs> + + <lossbound-modal ref="modalForm" @ok="modalFormOk"></lossbound-modal> + </a-card> +</template> + +<script> + +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import LossboundModal from './modules/LossboundModal' +import { deleteAction, getAction } from '@/api/manage' +import LossboundDetailList from './LossboundDetailList.vue' +import '@/assets/less/TableExpand.less' + +export default { + name: 'LooboundList', + mixins: [JeecgListMixin], + components: { + LossboundDetailList, + LossboundModal + }, + data() { + return { + description: 'tms_outbound_order绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '鎶ユ崯鍗曞崟鍙�', + align: 'center', + dataIndex: 'orderCode' + }, + { + title: '瀹℃牳鐘舵��', + align: 'center', + dataIndex: 'orderStatus_dictText' + }, + { + title: '缁忔墜浜�', + align: 'center', + dataIndex: 'handler_dictText' + }, + { + title: '瀹℃牳浜�', + align: 'center', + dataIndex: 'reviewer_dictText' + }, + { + title: '瀹℃牳鏃堕棿', + align: 'center', + dataIndex: 'auditDate' + }, + { + title: '瀹℃牳鎰忚', + align: 'center', + dataIndex: 'approvalOpinion' + }, + { + title: '澶囨敞', + align: 'center', + dataIndex: 'remark' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + fixed: 'right', + width: 147, + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: '/tms/toolsLossBound/list', + delete: '/tms/toolsLossBound/delete', + submit: '/tms/toolsLossBound/submit', + deleteBatch: '/tms/toolsLossBound/deleteBatch', + exportXlsUrl: '/tms/toolsLossBound/exportXls', + importExcelUrl: 'tms/toolsLossBound/importExcel' + }, + /* 鍒嗛〉鍙傛暟 */ + ipagination: { + current: 1, + pageSize: 5, + pageSizeOptions: ['5', '10', '50'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + selectedMainId: '', + superFieldList: [], + lossboundDetailMainId: '' + } + }, + created() { + this.getSuperFieldList() + }, + computed: { + importExcelUrl: function() { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` + } + }, + methods: { + // handleEdit: function (record) { + // this.$refs.modalForm.edit(record); + // this.$refs.modalForm.title = "缂栬緫"; + // this.$refs.modalForm.disableSubmit = false; + // }, + // handleAdd: function () { + // this.$refs.modalForm.add(); + // this.$refs.modalForm.title = "鏂板"; + // this.$refs.modalForm.disableSubmit = false; + // }, + modalFormOk() { + this.$refs.lossboundDetailList.clearList() + this.loadData() + }, + searchReset() { + this.queryParam = {} + this.onClearSelected() + this.$refs.lossboundDetailList.clearList() + this.loadData(1) + }, + initDictConfig() { + }, + clickThenSelect(record) { + return { + on: { + click: () => { + this.onSelectChange(record.id.split(','), [record]) + } + } + } + }, + onClearSelected() { + this.selectedRowKeys = [] + this.selectionRows = [] + this.selectedMainId = '' + this.lossboundDetailMainId = '' + }, + onSelectChange(selectedRowKeys, selectionRows) { + this.selectedMainId = selectedRowKeys[0] + this.selectedRowKeys = selectedRowKeys + this.selectionRows = selectionRows + this.lossboundDetailMainId = selectionRows[0]['id'] + }, + handleSubmit(record) { + getAction(this.url.submit, { id: record.id }).then((res) => { + if (res.success) { + this.$message.success(res.message) + this.loadData() + this.$refs.lossboundDetailList.clearList() + } else { + this.$message.warning(res.message) + } + }) + }, + handleDelete: function(id) { + if (!this.url.delete) { + this.$message.error('璇疯缃畊rl.delete灞炴��!') + return + } + var that = this + deleteAction(that.url.delete, { id: id }).then((res) => { + if (res.success) { + //閲嶆柊璁$畻鍒嗛〉闂 + that.reCalculatePage(1) + // that.$message.success(res.message); + that.$notification.success({ + message: '娑堟伅', + description: res.message + }) + that.loadData() + this.$refs.lossboundDetailList.clearList() + } else { + // that.$message.warning(res.message); + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) + }, + loadData(arg) { + if (!this.url.list) { + this.$message.error('璇疯缃畊rl.list灞炴��!') + return + } + //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 + if (arg === 1) { + this.ipagination.current = 1 + } + this.onClearSelected() + var params = this.getQueryParams()//鏌ヨ鏉′欢 + this.loading = true + getAction(this.url.list, params).then((res) => { + if (res.success) { + this.dataSource = res.result.records + this.ipagination.total = res.result.total + } + if (res.code === 510) { + this.$message.warning(res.message) + } + this.loading = false + }) + }, + getSuperFieldList() { + let fieldList = [] + fieldList.push({ type: 'string', value: 'orderCode', text: '鍑哄簱鍗曠紪鍙�', dictCode: '' }) + + fieldList.push({ type: 'string', value: 'handler', text: '缁忔墜浜�', dictCode: '' }) + fieldList.push({ type: 'sel_user', value: 'reviewer', text: '瀹℃牳浜�' }) + fieldList.push({ type: 'string', value: 'orderStatus', text: '瀹℃牳鐘舵��', dictCode: '' }) + fieldList.push({ type: 'date', value: 'auditDate', text: '瀹℃牳鏃堕棿' }) + fieldList.push({ type: 'string', value: 'approvalOpinion', text: '瀹℃牳鎰忚', dictCode: '' }) + fieldList.push({ type: 'string', value: 'subjectMatter', text: '棰嗙敤浜嬬敱', dictCode: '' }) + fieldList.push({ type: 'date', value: 'outboundTime', text: '鍑哄簱鏃堕棿' }) + fieldList.push({ type: 'string', value: 'remark', text: '澶囨敞', dictCode: '' }) + fieldList.push({ type: 'string', value: 'createBy', text: '鎿嶄綔鍛�', dictCode: '' }) + fieldList.push({ type: 'date', value: 'createTime', text: '鍒涘缓鏃堕棿' }) + this.superFieldList = fieldList + } + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue b/src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue new file mode 100644 index 0000000..ad06f5d --- /dev/null +++ b/src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue @@ -0,0 +1,221 @@ +<template> + <!--鏀寔鍏ㄥ睆缂╂斁--> + <j-modal + :visible="visible" + :width="1200" + :title="title" + switchFullscreen + @ok="handleSubmit" + @cancel="close" + style="top: 50px" + cancelText="鍏抽棴" + > + <a-card :bordered="false"> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="宸ュ叿缂栫爜"> + <a-input placeholder="璇疯緭鍏ュ伐鍏风紪鐮�,鏀寔妯$硦鏌ヨ" v-model="queryParam.toolCode"></a-input> + </a-form-item> + </a-col> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </a-row> + </a-form> + </div> + <!--鍑哄簱鍗曞垪琛�--> + <a-table + ref="table" + size="middle" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :rowSelection="rowSelection" + :loading="loading" + @change="handleTableChange" + > + </a-table> + </a-card> + </j-modal> +</template> + +<script> +import { filterObj } from '@/utils/util' +import { getAction } from '@api/manage' + +export default { + name: 'JSelectLossboundToolModal', + components: {}, + props: {}, + data() { + return { + title: '閫夋嫨鍑哄簱宸ュ叿', + queryParam: {}, + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: (_, __, index) => parseInt(index) + 1 + }, + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode' + }, + { + title: '涓枃鍚嶇О', + align: 'center', + dataIndex: 'chineseName' + }, + { + title: '鍨嬪彿/鍥惧彿', + align: 'center', + dataIndex: 'toolModel' + } + ], + selectedRowKeys: [], + oldSelectRow: [], + scrollTrigger: { x: 1500, y: 500 }, + dataSource: [], + selectionRows: [], + ipagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['5', '10', '20'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0, + }, + isorter: { + column: 'toolCode', + order: 'asc', + }, + departTree: [], + visible: false, + loading: false, + prepareKnifeDetailList:[], + url: { + list: '/tms/baseTools/listWithLedgerAndConfig' + }, + } + }, + computed: { + rowSelection() { + return { + type: 'checkbox', + onChange: (selectedRowKeys, selectedRows) => { + this.selectedRowKeys = selectedRowKeys + this.onSelectChange(selectedRows) + }, + getCheckboxProps: (record) => ({ + props: { + disabled: record.disabled, + }, + }), + } + }, + }, + watch: { + }, + created() { + }, + methods: { + async loadData(arg) { + if (arg === 1) { + this.ipagination.current = 1 + } + this.loading = true + let params = this.getQueryParams() //鏌ヨ鏉′欢 + console.log(params) + await getAction(this.url.list, params).then((res) => { + if (res.success) { + this.dataSource = res.result.records + this.ipagination.total = res.result.total + } + if (res.code === 510) { + this.$message.warning(res.message) + } + this.loading = false + }) + }, + showModal(oldSelectRow) { + this.oldSelectRow = oldSelectRow + this.visible = true + this.queryParam.status = '1' + this.queryParam.excludeIds = oldSelectRow + this.loadData(1) + }, + getQueryParams() { + let param = Object.assign({}, this.queryParam, this.isorter) + param.field = this.getQueryField() + param.pageNo = this.ipagination.current + param.pageSize = this.ipagination.pageSize + return filterObj(param) + }, + //鏌ヨ鏉′欢澶勭悊 + getQueryField() { + let fields = ['id']; + for (let a = 0; a < this.columns.length; a++) { + fields.push(this.columns[a].dataIndex); + } + return fields.join(','); + }, + searchReset() { + this.queryParam = {} + this.loadData(1) + }, + close() { + this.queryParam = {} + // this.searchReset(0) + this.selectedRowKeys = [] + this.selectionRows = [] + this.visible = false + }, + handleTableChange(pagination, filters, sorter) { + if (Object.keys(sorter).length > 0) { + this.isorter.column = sorter.field + this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc' + } + this.ipagination = pagination + this.loadData() + }, + handleSubmit() { + if (this.selectionRows.length > 0) { + this.$bus.$emit('selectionRows', this.selectionRows) + // this.searchReset(0) + this.close() + } else { + this.$message.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�') + } + }, + onSelectChange(selectionRows) { + this.selectionRows = selectionRows + }, + searchQuery() { + this.loadData(1) + }, + }, +} +</script> + +<style scoped> +.ant-table-tbody .ant-table-row td { + padding-top: 10px; + padding-bottom: 10px; +} + +#components-layout-demo-custom-trigger .trigger { + font-size: 18px; + line-height: 64px; + padding: 0 24px; + cursor: pointer; + transition: color 0.3s; +} +</style> \ No newline at end of file diff --git a/src/views/tms/lossBound/modules/LossboundDetailModal.vue b/src/views/tms/lossBound/modules/LossboundDetailModal.vue new file mode 100644 index 0000000..adaba74 --- /dev/null +++ b/src/views/tms/lossBound/modules/LossboundDetailModal.vue @@ -0,0 +1,141 @@ +<template> + <j-modal + :title="title" + :width="width" + :visible="visible" + :confirmLoading="confirmLoading" + switchFullscreen + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + <a-spin :spinning="confirmLoading"> + <a-form-model ref="form" :model="model" :rules="validatorRules"> + <a-row> + <a-col :span="24"> + <a-form-model-item label="鍒�鍏风紪鐮�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toolCode"> + <a-input v-model="model.toolCode" placeholder="璇疯緭鍏ュ垁鍏风紪鐮�"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="鐢宠鍑哄簱鏁伴噺" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="outboundQuantity"> + <a-input-number v-model="model.outboundQuantity" placeholder="璇疯緭鍏ョ敵璇峰嚭搴撴暟閲�" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="浠撳簱" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="storageLocation"> + <a-input v-model="model.storageLocation" placeholder="璇疯緭鍏ヤ粨搴�"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="鍑哄簱搴撲綅" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="outboundLocation"> + <a-input v-model="model.outboundLocation" placeholder="璇疯緭鍏ュ嚭搴撳簱浣�"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="鍑哄簱鐘舵��;1.鏈嚭搴擄紱2.閮ㄥ垎鍑哄簱锛�3.鍑哄簱瀹屾垚" :labelCol="labelCol" + :wrapperCol="wrapperCol" prop="status"> + <a-input-number v-model="model.status" placeholder="璇疯緭鍏ュ嚭搴撶姸鎬�;1.鏈嚭搴擄紱2.閮ㄥ垎鍑哄簱锛�3.鍑哄簱瀹屾垚" + style="width: 100%" /> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-spin> + </j-modal> +</template> + +<script> + +import { httpAction } from '@/api/manage' + +export default { + name: 'LossboundDetailModal', + components: {}, + props: { + mainId: { + type: String, + required: false, + default: '' + } + }, + data() { + return { + title: '鎿嶄綔', + width: 800, + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + }, + + confirmLoading: false, + validatorRules: {}, + url: { + add: '/tms/toolsLossBound/add', + edit: '/tms/toolsLossBound/edit' + } + + } + }, + created() { + //澶囦唤model鍘熷鍊� + this.modelDefault = JSON.parse(JSON.stringify(this.model)) + }, + methods: { + add() { + this.edit(this.modelDefault) + }, + edit(record) { + this.model = Object.assign({}, record) + this.visible = true + }, + close() { + this.$emit('close') + this.visible = false + this.$refs.form.clearValidate() + }, + handleOk() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true + let httpurl = '' + let method = '' + if (!this.model.id) { + httpurl += this.url.add + method = 'post' + } else { + httpurl += this.url.edit + method = 'put' + } + this.model['outStorehouseId'] = this.mainId + httpAction(httpurl, this.model, method).then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('ok') + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = false + that.close() + }) + } else { + return false + } + }) + }, + handleCancel() { + this.close() + } + + } +} +</script> diff --git a/src/views/tms/lossBound/modules/LossboundModal.vue b/src/views/tms/lossBound/modules/LossboundModal.vue new file mode 100644 index 0000000..2017454 --- /dev/null +++ b/src/views/tms/lossBound/modules/LossboundModal.vue @@ -0,0 +1,434 @@ +<template> + <j-modal + :title="title" + :width="width" + :visible="visible" + :confirmLoading="confirmLoading" + switchFullscreen + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + <a-spin :spinning="confirmLoading"> + <a-form-model ref="form" :model="model" :rules="validatorRules"> + <a-row> + <a-col :span="12"> + <a-form-model-item label="鎶ユ崯鍗曞崟鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderCode"> + <j-input v-model="model.orderCode" placeholder="绯荤粺鑷姩鐢熸垚" :disabled="true"></j-input> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鎶ユ崯浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="losser"> + <j-dict-select-tag :disabled="disableSubmit" + v-model="model.losser" dictCode="sys_user,realname,id" + placeholder="璇烽�夋嫨" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="12"> + <a-form-model-item label="鎶ユ崯鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lossTime"> + + <j-date placeholder="璇烽�夋嫨鎶ユ崯鏃堕棿" :disabled="disableSubmit" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.lossTime" + style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="瀹℃牳浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reviewer"> + <!-- <j-dict-select-tag :disabled="disableSubmit"--> + <!-- v-model="model.reviewer" dictCode="sys_user,realname,id"--> + <!-- placeholder="璇烽�夋嫨" />--> + <j-select-user-by-dep :disabled="disableSubmit" v-model="model.reviewer" :store="'username'" + :text="'realname'" :multi="false" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + + <a-col :span="12"> + <a-form-model-item v-if="addShow" label="缁忔墜浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="handler"> + + <j-dict-select-tag :disabled="disableSubmit" + v-model="model.handler" dictCode="sys_user,realname,id" + placeholder="璇烽�夋嫨" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item v-if="addShow" label="瀹℃牳鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="orderStatus"> + <j-dict-select-tag type="list" v-model="model.orderStatus" dictCode="out_bill_status" + placeholder="璇烽�夋嫨瀹℃牳鐘舵��" disabled /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="12"> + <a-form-model-item v-if="addShow" label="瀹℃牳鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="approvalDate"> + + <j-date placeholder="璇烽�夋嫨瀹℃牳鏃堕棿" :disabled="disableSubmit" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.approvalDate" + style="width: 100%" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="12"> + <a-form-model-item v-if="addShow" label="瀹℃牳鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="approvalOpinion"> + <a-input v-model="model.approvalOpinion" placeholder="璇疯緭鍏ュ鏍告剰瑙�" disabled></a-input> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="12"> + <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark"> + <a-textarea :disabled="disableSubmit" v-model="model.remark" rows="4" placeholder="璇疯緭鍏ュ娉�" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="12"> + <a-form-model-item label="鎶ユ崯鍘熷洜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lossReason"> + <a-textarea :disabled="disableSubmit" v-model="model.lossReason" rows="4" placeholder="璇疯緭鍏ュ娉�" /> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-spin> + + <a-button type="primary" :style="{ marginBottom: '8px' }" :disabled="disableSubmit" @click="selectTools"> + 閫夋嫨宸ュ叿 + </a-button> + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :scroll="{x:true}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="null" + @change="handleTableChange"> + + <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index"> + <a-input-number :disabled="disableSubmit" :value="text" v-if="col.dataIndex == 'lossNumber'" :min="0" + :max="99999" + @change="(e) => handleChange(e, record.key, col, index)" style="width: 100%;" /> + <a-textarea + v-if="col.dataIndex == 'lossReason'" + :disabled="disableSubmit" + style="margin: -5px 0" + :value="text" + @change="(e) => handleChange(e.target.value, record.key, col, index)" + /> + + </template> + <span slot="action" v-if="disableSubmit === false" slot-scope="text, record, index"> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record, index)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </span> + </a-table> + <template slot="footer" v-if="disableSubmit === false"> + <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button> + <a-button @click="handleOk" :disabled="isDisabled" type="primary">纭畾</a-button> + </template> + + <j-select-lossbound-tool-modal ref="selectLossBoundToolModal"></j-select-lossbound-tool-modal> + </j-modal> + +</template> + +<script> + +import { httpAction } from '@/api/manage' +import LossboundDetailList from '../LossboundDetailList.vue' +import JSelectLossboundToolModal from './JSelectLossboundToolModal.vue' +import { getAction } from '../../../../api/manage' + +export default { + name: 'LossboundModal', + components: { + LossboundDetailList, + JSelectLossboundToolModal + }, + data() { + return { + title: '', + width: 1200, + visible: false, + disableSubmit: false, + isDisabled: false, + addShow: true, + selectBorrowTool: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + }, + //琛ㄦ牸鍙傛暟 + ipagination: { + current: 1, + pageSize: 10, + total: 0 + }, + dataSource: [], + loading: false, + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + }, + width: 50 + }, + { + title: '鍒�鍏风紪鍙�', + dataIndex: 'toolCode', + align: 'center', + width: 150 + }, + + { + title: '宸ュ叿绫诲瀷', + dataIndex: 'applicationType', + align: 'center', + width: 150 + }, + { + title: '鎶ユ崯鍘熷洜', + width: 150, + dataIndex: 'lossReason', + align: 'center', + scopedSlots: { customRender: 'lossReason' } + }, + + { + title: '鎶ユ崯鏁伴噺', + dataIndex: 'lossNumber', + align: 'center', + width: 150, + scopedSlots: { customRender: 'lossNumber' } + }, + { + title: '涓枃鍚嶇О', + dataIndex: 'chineseName', + width: 150, + align: 'center' + }, + + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + width: 150, + align: 'center' + }, + + { + title: '鍒�鍏锋潗鏂�', + width: 150, + dataIndex: 'toolMaterial', + align: 'center' + }, + { + title: '闆朵欢鏉愭枡', + width: 150, + dataIndex: 'partMaterial', + align: 'center' + }, + { + title: '鍘傚', + width: 150, + dataIndex: 'supplierId', + align: 'center' + + }, + { + title: '瀛樺偍浣嶇疆', + width: 150, + dataIndex: 'goodsShelvesId', + align: 'center' + }, + + + { + title: '澶囨敞', + width: 150, + dataIndex: 'remark', + align: 'center' + }, + { + title: '鎿嶄綔', + width: 150, + dataIndex: 'action', + scopedSlots: { customRender: 'action' }, + align: 'center' + } + ], + confirmLoading: false, + validatorRules: { + lossReason: [ + { required: true, message: '璇疯緭鍏ユ姤鎹熷師鍥�' } + ], + lossTime: [ + { required: true, message: '璇疯緭鍏ユ姤鎹熸椂闂�!' } + ], + losser: [ + { required: true, message: '璇疯緭鍏ユ姤鎹熶汉!' } + ], + + }, + url: { + list: '/tms/toolsLossBound/listlossboundDetailByMainId', + add: '/tms/toolsLossBound/addTotal', + edit: '/tms/toolsLossBound/editTotal' + } + + } + }, + created() { + //澶囦唤model鍘熷鍊� + this.modelDefault = JSON.parse(JSON.stringify(this.model)) + }, + mounted() { + this.$bus.$on('selectionRows', (data) => { + for (let i = 0; i < data.length; i++) { + this.dataSource.push({ + toolId: data[i].id, + toolCode: data[i].toolCode, + classifyId: data[i].classifyId, + applicationType: data[i].applicationType_dictText, + chineseName: data[i].chineseName, + toolModel: data[i].toolModel, + material: data[i].material, + supplierId: data[i].supplierId, + goodsShelvesId: data[i].positionCode, + toolMaterial: data[i].toolMaterial, + partMaterial: data[i].partMaterial + + }) + } + this.ipagination.total = this.dataSource.length + }) + }, + methods: { + + handleDelete(record, index) { + this.dataSource.splice(index, 1) + }, + handleChange(value, key, column, index) { + console.log(value, key, column, index) + const temp = [...this.dataSource] + const target = temp.filter(item => key === item.key)[index] + if (target) { + target[column.dataIndex] = value + this.dataSource = temp + if (column.dataIndex === 'lossNumber') { + + target[column.dataIndex] = value + } + if (column.dataIndex === 'lossReason') { + target[column.dataIndex] = value + } + this.dataSource = temp + } + }, + + selectTools: function() { + let ids = [] + for (let i = 0; i < this.dataSource.length; i++) { + ids.push(this.dataSource[i].id) + } + this.$refs.selectLossBoundToolModal.showModal(ids) + this.$refs.selectLossBoundToolModal.title = '閫夋嫨宸ュ叿淇℃伅' + this.$refs.selectLossBoundToolModal.disableSubmit = false + }, + add() { + this.addShow = false + this.edit({}) // 浼犲叆绌哄璞′綔涓洪粯璁ゅ�� + this.dataSource = [] + }, + edit(record) { + console.log(record) + if (record && record.id) { + this.model = Object.assign({}, record) + this.visible = true + getAction(this.url.list, { + lossBoundId: record.id, + pageNo: 1, + pageSize: 99999 + }).then((res) => { + if (res.success) { + console.log(res.result.records) + this.dataSource = res.result.records + } else { + this.dataSource = null + } + }) + } else { + this.model = {} // 濡傛灉鏄柊澧炴ā寮忥紝鍒欏垵濮嬪寲 model + this.visible = true + this.dataSource = [] // 娓呯┖鏁版嵁婧� + } + }, + + + close() { + this.$emit('close') + this.addShow = true + this.selectBorrowTool = false + this.visible = false + this.$refs.form.clearValidate() + }, + handleTableChange(pagination, filters, sorter) { + this.ipagination = pagination + }, + handleOk() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + this.model.toolsLossBoundDetailList = this.dataSource + that.confirmLoading = true + let httpurl = '' + let method = '' + if (!this.model.id) { + httpurl += this.url.add + method = 'post' + } else { + httpurl += this.url.edit + method = 'put' + } + httpAction(httpurl, this.model, method).then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('ok') + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = false + that.close() + }) + } else { + return false + } + }) + }, + handleCancel() { + this.close() + } + + } +} +</script> \ No newline at end of file diff --git a/src/views/tms/modules/baseTools/BaseToolsListLeft.vue b/src/views/tms/modules/baseTools/BaseToolsListLeft.vue index 14e6efa..f1ed47a 100644 --- a/src/views/tms/modules/baseTools/BaseToolsListLeft.vue +++ b/src/views/tms/modules/baseTools/BaseToolsListLeft.vue @@ -20,7 +20,7 @@ >鍙栨秷</a> </div> </a-alert> - <div class="drawer-bootom-button"> + <!-- <div class="drawer-bootom-button"> <a-dropdown :trigger="['click']" placement="bottomCenter" @@ -43,7 +43,7 @@ <a-icon type="bars" /> </a-button> </a-dropdown> - </div> + </div> --> <a-input-search @search="handleSearch" @@ -57,11 +57,12 @@ <!-- showLine --> <a-tree :checkStrictly="checkStrictly" - :expandedKeys.sync="expandedKeys" + :selectedKeys="selectedKeys" :dropdownStyle="{maxHeight:'200px',overflow:'auto'}" :treeData="treeDataSource" - :autoExpandParent="autoExpandParent" + + :defaultExpandAll="true" @select="onSelect" @expand="onExpand" > diff --git a/src/views/tms/modules/baseTools/BaseToolsListRight.vue b/src/views/tms/modules/baseTools/BaseToolsListRight.vue index 31a17e8..9672d5b 100644 --- a/src/views/tms/modules/baseTools/BaseToolsListRight.vue +++ b/src/views/tms/modules/baseTools/BaseToolsListRight.vue @@ -54,10 +54,10 @@ > <a-button @click="handleAdd(nodeSelected)" type="primary" icon="plus" :disabled="!nodeSelected.key || nodeSelected.entity.leafFlag === '2'">鏂板</a-button> </Tooltip> - <a-button type="primary" icon="download" @click="handleExportXls('tms_tools_classify')">瀵煎嚭</a-button> + <!-- <a-button type="primary" icon="download" @click="handleExportXls('tms_tools_classify')">瀵煎嚭</a-button> <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">瀵煎叆</a-button> - </a-upload> + </a-upload> --> </div> <!-- table鍖哄煙-begin --> @@ -75,6 +75,7 @@ :loading="loading" :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type:'radio'}" class="j-table-force-nowrap" + :customRow="customRow" @change="handleTableChange"> <template slot="htmlSlot" slot-scope="text"> @@ -200,6 +201,18 @@ data () { return { description: '宸ュ叿淇℃伅绠$悊椤甸潰', + /* 鍒嗛〉鍙傛暟 */ + ipagination:{ + current: 1, + pageSize: 10, + pageSizeOptions: ['10', '20', '50'], + showTotal: (total, range) => { + return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�" + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, // 琛ㄥご columns: [ { @@ -520,8 +533,10 @@ .then((res) => { if (res.success) { this.dataSource = res.result.records; // 鏇存柊琛ㄦ牸鏁版嵁 + this.ipagination.total = res.result.total } else { this.$message.warning("璇烽�夋嫨鍙跺瓙鑺傜偣杩涜鏌ヨ"); + this.ipagination.total = 0 } }) .finally(() => { @@ -552,7 +567,16 @@ this.$refs.paraTurningToolsList.visable = false this.$refs.paraBladeList.visable = false this.$refs.toolsConfigPropertyList.visable = false - } + }, + customRow(record) { + return { + on: { + click: () => { + this.onSelectChange(record.id.split(","), [record]); + } + } + } + }, }, } diff --git a/src/views/tms/modules/inbound/InboundListLeft.vue b/src/views/tms/modules/inbound/InboundListLeft.vue new file mode 100644 index 0000000..7621396 --- /dev/null +++ b/src/views/tms/modules/inbound/InboundListLeft.vue @@ -0,0 +1,323 @@ +<template> + <a-card + :loading="cardLoading" + :bordered="false" + title="宸ュ叿鍒嗙被" + style="height: 100%;" + > + <a-spin :spinning="loading"> + <a-alert + type="info" + :showIcon="true" + style="margin-right: 54px;" + > + <div slot="message"> + 褰撳墠锛�<span v-if="this.currSelected.title">{{ getCurrSelectedTitle() }}</span> + <a + v-if="this.currSelected.title" + style="margin-left: 10px" + @click="onClearSelected" + >鍙栨秷</a> + </div> + </a-alert> + <!-- <div class="drawer-bootom-button"> + <a-dropdown + :trigger="['click']" + placement="bottomCenter" + > + <a-menu slot="overlay"> + <a-menu-item + key="1" + @click="expandAll" + >灞曞紑鎵�鏈�</a-menu-item> + <a-menu-item + key="2" + @click="closeAll" + >鍚堝苟鎵�鏈�</a-menu-item> + <a-menu-item + key="3" + @click="refreshTree" + >鍒锋柊</a-menu-item> + </a-menu> + <a-button> + <a-icon type="bars" /> + </a-button> + </a-dropdown> + </div> --> + + <a-input-search + @search="handleSearch" + style="width:100%;margin-top: 10px" + placeholder="妫�绱㈠伐鍏峰垎绫�" + allowClear + v-model="searchInput" + @change="handleChange" + /> + + <!-- showLine --> + <a-tree + :checkStrictly="checkStrictly" + + :selectedKeys="selectedKeys" + :dropdownStyle="{maxHeight:'200px',overflow:'auto'}" + :treeData="treeDataSource" + + :defaultExpandAll="true" + @select="onSelect" + @expand="onExpand" + > + <template + slot="title" + slot-scope="{title, type, rfield1}" + > + <Tooltip + placement="top" + title="宸ュ叿鍒嗙被" + > + <i + v-if="type == 0" + class="action-jeecg actioncompany2" + style="font-size: 18px;" + /> + </Tooltip> + + <span v-if="title.indexOf(searchValue) > -1"> + {{ title.substr(0, title.indexOf(searchValue)) }} + <span class="replaceSearch">{{ searchValue }}</span> + {{ title.substr(title.indexOf(searchValue) + searchValue.length) }} + </span> + <span v-else>{{ title }}</span> + + </template> + </a-tree> + </a-spin> + </a-card> +</template> + +<script> +import { getAction } from '@/api/manage' +import Tooltip from 'ant-design-vue/es/tooltip' +export default { + name: 'inboundListLeft', + components: { + Tooltip, + }, + props: ['value'], + data() { + return { + searchInput: '', + cardLoading: false, + loading: false, + treeDataSource: [], + selectedKeys: [], + expandedKeys: [], + url: { + factoryTreeList: '/tms/toolsClassify/loadTree', + }, + searchValue: '', + dataList: [], + autoExpandParent: true, + checkStrictly: true, + allTreeKeys: [], + currSelected: {}, + hiding: false, + } + }, + created() { + this.queryTreeData(); + this.closeAll(); + }, + methods: { + getCurrSelectedTitle() { + return !this.currSelected.title ? '' : this.currSelected.title; + }, + onClearSelected() { + this.hiding = true; + this.currSelected = {}; + this.selectedKeys = []; + }, + onSelect(selectedKeys, e) { + this.hiding = false; + let record = e.node.dataRef; + this.currSelected = Object.assign({}, record); + this.selectedKeys = [record.key]; + }, + onExpand(expandedKeys) { + this.expandedKeys = expandedKeys; + this.autoExpandParent = false; + }, + queryTreeData() { + this.loading = true; + this.cardLoading = true; + getAction(this.url.factoryTreeList).then((res) => { + if (res.success) { + this.dataList = []; + this.allTreeKeys = []; + this.treeDataSource = res.result; + this.generateList(res.result); + } else { + this.$message.warn(res.message); + } + }).finally(() => { + this.loading = false; + this.cardLoading = false; + }) + }, + + handleChange() { + let search = this.searchInput; + let expandedKeys = this.dataList + .map(item => { + if (item.title.indexOf(search) > -1) { + return this.getParentKey(item.key, this.treeDataSource); + } + return null; + }) + .filter((item, i, self) => item && self.indexOf(item) === i); + Object.assign(this, { + expandedKeys, + searchValue: search, + autoExpandParent: true, + }); + }, + handleSearch(value) { + let search = value; + let expandedKeys = this.dataList + .map(item => { + if (item.title.indexOf(search) > -1) { + return this.getParentKey(item.key, this.treeDataSource); + } + return null; + }) + .filter((item, i, self) => item && self.indexOf(item) === i); + Object.assign(this, { + expandedKeys, + searchValue: search, + autoExpandParent: true, + }); + }, + getParentKey(key, tree) { + let parentKey; + for (let i = 0; i < tree.length; i++) { + const node = tree[i]; + if (node.children) { + if (node.children.some(item => item.key === key)) { + parentKey = node.key; + } else if ( + this.getParentKey(key, node.children)) { + parentKey = this.getParentKey(key, node.children); + } + } + } + return parentKey; + }, + + generateList(data) { + for (let i = 0; i < data.length; i++) { + const node = data[i]; + const key = node.key; + const title = node.title; + this.dataList.push({ key, title: title }); + this.allTreeKeys.push(key); + if (node.children) { + this.generateList(node.children); + } + } + }, + expandAll() { + this.expandedKeys = this.allTreeKeys; + }, + closeAll() { + this.expandedKeys = this.allSiteIds; + }, + refreshTree() { + this.queryTreeData(); + } + }, + mounted() { + this.$bus.$on('queryTreeData', this.queryTreeData); + }, + //鐩戝惉 + watch: { + currSelected(val) {//鐩戝惉currSelected 鍙樺寲锛屽皢鍙樺寲鍚庣殑鏁板�间紶閫掔粰 getCurrSelected 浜嬩欢 + this.$bus.$emit('getCurrSelected', val) + }, + } +} +</script> + +<style scoped> +.replaceSearch { + color: #40a9ff; + font-weight: bold; + background-color: rgb(204, 204, 204); +} +/*闅愯棌鏍戠殑榛樿icon*/ +.ant-tree-switcher-noop { + display: none !important; +} +/*闅愯棌鏍戠殑榛樿绔栫嚎*/ +.ant-tree.ant-tree-show-line li:not(:last-child):before { + border-left: 0px; +} + +.ant-card-body .table-operator { + margin: 15px; +} + +.anty-form-btn { + width: 100%; + text-align: center; +} + +.anty-form-btn button { + margin: 0 5px; +} + +.anty-node-layout .ant-layout-header { + padding-right: 0; +} + +.header { + padding: 0 8px; +} + +.header button { + margin: 0 3px; +} + +.ant-modal-cust-warp { + height: 100%; +} + +.ant-modal-cust-warp .ant-modal-body { + height: calc(100% - 110px) !important; + overflow-y: auto; +} + +.ant-modal-cust-warp .ant-modal-content { + height: 90% !important; + overflow-y: hidden; +} + +#app .desktop { + height: auto !important; +} + +/** Button鎸夐挳闂磋窛 */ +.ant-btn { + margin-left: 3px; +} +.ant-alert { + padding: 5px 15px 5px 37px; +} +.drawer-bootom-button { + position: absolute; + top: 1px; + /* padding: 10px 16px; */ + text-align: left; + right: 0; + background: #fff; + border-radius: 0 0 2px 2px; +} +</style> \ No newline at end of file diff --git a/src/views/tms/modules/inbound/InboundListRight.vue b/src/views/tms/modules/inbound/InboundListRight.vue new file mode 100644 index 0000000..d8c422b --- /dev/null +++ b/src/views/tms/modules/inbound/InboundListRight.vue @@ -0,0 +1,515 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col + :md="6" + :sm="8" + > + <a-form-item + label="宸ュ叿缂栧彿" + :labelCol="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ュ伐鍏风紪鍙锋绱�" + v-model="queryParam.toolCode" + ></a-input> + </a-form-item> + </a-col> + <a-col + :md="6" + :sm="8" + > + <a-form-item + label="鍨嬪彿/鍥惧彿" + :labelCol="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ュ瀷鍙�/鍥惧彿妫�绱�" + v-model="queryParam.toolModel" + ></a-input> + </a-form-item> + </a-col> + <a-col :md="6" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </span> + </a-col> + + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <Tooltip + placement="top" + title="閫夋嫨鍙跺瓙鑺傜偣鍚庡啀鎵ц鏂板" + > + <a-button @click="handleAdd(nodeSelected)" type="primary" icon="plus" :disabled="!nodeSelected.key || nodeSelected.entity.leafFlag === '2'">鏂板</a-button> + </Tooltip> + <!-- <a-button type="primary" icon="download" @click="handleExportXls('tms_tools_classify')">瀵煎嚭</a-button> + <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> + <a-button type="primary" icon="import">瀵煎叆</a-button> + </a-upload> --> + <a-button @click="handleInbound(nodeSelected)" type="primary" icon="plus">鐢宠鍗曞叆搴�</a-button> + </div> + + <!-- table鍖哄煙-begin --> + <div> + + <a-table + ref="table" + size="middle" + :scroll="{x:true}" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type:'radio'}" + class="j-table-force-nowrap" + @change="handleTableChange"> + + <template slot="htmlSlot" slot-scope="text"> + <div v-html="text"></div> + </template> + <template slot="imgSlot" slot-scope="text,record"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span> + <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + </template> + <template slot="fileSlot" slot-scope="text"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span> + <a-button + v-else + :ghost="true" + type="primary" + icon="download" + size="small" + @click="downloadFile(text)"> + 涓嬭浇 + </a-button> + </template> + + <span slot="action" slot-scope="text, record"> + <a @click="handleEdit(record)">缂栬緫</a> + + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handleDetail(record)">璇︽儏</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + + </a-table> + </div> + + <a-tabs defaultActiveKey="1"> + <a-tab-pane key="1"> + <span slot="tab"> + <a-badge>鍙傛暟 </a-badge> + </span> + <para-hole-tools-list ref="paraHoleToolsList"></para-hole-tools-list> + <para-threading-tool-list ref="paraThreadingToolList"></para-threading-tool-list> + <para-mill-tool-list ref="paraMillToolList"></para-mill-tool-list> + <para-turning-tools-list ref="paraTurningToolsList"></para-turning-tools-list> + <para-blade-list ref="paraBladeList"></para-blade-list> + <para-common-tool-list ref="paraCommonToolList"></para-common-tool-list> + </a-tab-pane> + + <a-tab-pane + key="2" + forceRender + > + <span slot="tab"> + <a-badge>绠$悊鍙傛暟 </a-badge> + </span> + <tools-config-property-list ref="toolsConfigPropertyList"></tools-config-property-list> + </a-tab-pane> + </a-tabs> + + <inbound-model ref="modalForm" @ok="modalFormOk" :nodeSelected="nodeSelected"></inbound-model> + </a-card> +</template> + +<script> + + import '@/assets/less/TableExpand.less' + import { mixinDevice } from '@/utils/mixin' + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + import Tooltip from 'ant-design-vue/es/tooltip' + import { getAction, postAction, deleteAction, requestPut } from '@api/manage' + import ParaHoleToolsList from '.././baseTools/ParaHoleToolsList' + import ToolsConfigPropertyList from '.././baseTools/ToolsConfigPropertyList' + import ParaMillToolList from '.././baseTools/ParaMillToolList' + import ParaThreadingToolList from '.././baseTools/ParaThreadingToolList' + import ParaTurningToolsList from '.././baseTools/ParaTurningToolsList' + import ParaCommonToolList from '.././baseTools/ParaCommonToolList' + import ParaBladeList from '.././baseTools/ParaBladeList' + import InboundModel from './InboundModel' + + export default { + name: 'InboundListRight', + mixins:[JeecgListMixin, mixinDevice], + components: { + Tooltip, + ParaHoleToolsList, + ToolsConfigPropertyList, + ParaMillToolList, + ParaThreadingToolList, + ParaTurningToolsList, + ParaCommonToolList, + ParaBladeList, + InboundModel + }, + data () { + return { + description: '宸ュ叿鍏ュ簱绠$悊椤甸潰', + /* 鍒嗛〉鍙傛暟 */ + ipagination:{ + current: 1, + pageSize: 10, + pageSizeOptions: ['10', '20', '50'], + showTotal: (total, range) => { + return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�" + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'宸ュ叿缂栫爜', + align:"center", + dataIndex: 'toolCode' + }, + { + title:'鍏ュ簱绫诲瀷', + align:"center", + dataIndex: 'inStorehouseType' + }, + { + title:'鍨嬪彿/鍥惧彿', + align:"center", + dataIndex: 'toolModel' + }, + { + title:'涓枃鍚嶇О', + align:"center", + dataIndex: 'chineseName' + }, + + { + title:'鍏ュ簱鏁伴噺', + align:"center", + dataIndex: 'inStorageQuantity' + }, + // { + // title:'澶囨敞', + // align:"center", + // dataIndex: 'remark' + // }, + { + title:'鍒涘缓浜�', + align:"center", + dataIndex: 'createBy' + }, + { + title:'鍒涘缓鏃堕棿', + align:"center", + dataIndex: 'createTime', + customRender:function (text) { + return !text?"":(text.length>10?text.substr(0,10):text) + } + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align:"center", + fixed:"right", + width:147, + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: "/tms/inboundDetail/list", + paraHolesToolsList:"/tms/baseTools/paraHolesToolsList", + paraCommonToolList:"/tms/baseTools/paraCommonToolList", + paraThreadingToolList:"/tms/baseTools/paraThreadingToolList", + paraMillToolList:"/tms/baseTools/paraMillToolList", + paraTurningToolsList:"/tms/baseTools/paraTurningToolsList", + paraBladeList:"/tms/baseTools/paraBladeList", + delete: "/tms/baseTools/delete", + deleteBatch: "/tms/baseTools/deleteBatch", + edit: '/tms/baseTools/edit', + exportXlsUrl: "/tms/baseTools/exportXls", + importExcelUrl: "tms/baseTools/importExcel", + queryParaByToolCode:"/tms/baseTools/queryByToolCode", + queryByToolCode:"/tms/toolsConfigProperty/queryByToolCode" + }, + dictOptions:{}, + superFieldList:[], + nodeSelected: {}, // 褰撳墠閫変腑鐨勮妭鐐规暟鎹� + paraTypeFlag:'', + disableMixinCreated:true + } + }, + created() { + this.$bus.$on('getCurrSelected', (data) => { + //getCurrSelected 浜嬩欢 鎺ユ敹缁勪欢浼犻�掔殑鍙傛暟 + this.nodeType = (data.type == undefined ? 0 : data.type); + this.paraTypeFlag = (data.entity == undefined ? 0 : data.entity.paraTypeFlag) + this.nodeSelected = data; + this.loadData() + this.clearPara() + }) + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + }, + methods: { + + handleAdd(entity) { + if (!this.nodeSelected ) { + this.$message.warning('璇峰厛閫夋嫨涓�涓伐鍏峰垎绫�'); + return; + } + // 鎵撳紑鏂板妯℃�佹锛屽苟浼犻�掑綋鍓嶉�変腑鐨勮妭鐐� + this.$refs.modalForm.add(this.nodeSelected); + this.$refs.modalForm.title = "鏂板閫氱敤鍙傛暟绫诲瀷宸ュ叿"; + this.$refs.modalForm.disableSubmit = false; + }, + handleDelete(id) { + deleteAction(this.url.delete, {id: id}).then((res) => { + if (res.success) { + //閲嶆柊璁$畻鍒嗛〉闂 + this.loadData() + this.$message.success(res.message); + this.$bus.$emit('queryTreeData') + this.clearPara() + } else { + this.$message.warning(res.message); + } + }); + }, + modalFormOk() { + this.loadData(); // 鍒锋柊琛ㄦ牸鏁版嵁 + this.$bus.$emit('queryTreeData') //鍒锋柊宸︿晶鏍� + }, + + onSelectChange(selectedRowKeys) { + this.selectedRowKeys = selectedRowKeys; + //閫氳繃id鏌ヨ绠$悊鍙傛暟鍜屽弬鏁版暟鎹� + getAction(this.url.queryParaByToolCode, { toolCode: this.selectedRowKeys[0],paraTypeFlag:this.paraTypeFlag}).then((res) => { + if (res.success) { + if(this.paraTypeFlag === "1"){ + this.$refs.paraCommonToolList.getPara(res.result); + }else if(this.paraTypeFlag === "2"){ + this.$refs.paraHoleToolsList.getPara(res.result); + }else if(this.paraTypeFlag === "3"){ + this.$refs.paraThreadingToolList.getPara(res.result); + }else if(this.paraTypeFlag === "4"){ + this.$refs.paraMillToolList.getPara(res.result); + }else if(this.paraTypeFlag === "5"){ + this.$refs.paraTurningToolsList.getPara(res.result); + }else if(this.paraTypeFlag === "6"){ + this.$refs.paraBladeList.getPara(res.result); + } + } else { + this.$message.warning(res.message); + } + }) + getAction(this.url.queryByToolCode, { toolCode: this.selectedRowKeys[0]}).then((res) => { + if (res.success) { + this.$refs.toolsConfigPropertyList.getPara(res.result); + } else { + this.$message.warning(res.message); + } + }) + + }, + // 澶勭悊缂栬緫鎸夐挳鐐瑰嚮浜嬩欢 + handleEditSelected() { + if (this.selectedRowKeys.length === 0) { + this.$message.warning('璇烽�夋嫨涓�鏉¤褰曡繘琛岀紪杈�'); + return; + } + const selectedRecord = this.dataSource.find(item => item.id === this.selectedRowKeys[0]); + if (selectedRecord) { + this.handleEdit(selectedRecord); + } + }, + //缂栬緫 + handleEdit(record) { + if(record.paramaTableName === "1"){ + this.$refs.paraCommonToolModal.edit(record); + this.$refs.paraCommonToolModal.title = "缂栬緫"; + this.$refs.paraCommonToolModal.disableSubmit = false; + }else if(record.paramaTableName === "2"){ + this.$refs.paraHoleToolsModal.edit(record); + this.$refs.paraHoleToolsModal.title = "缂栬緫"; + this.$refs.paraHoleToolsModal.disableSubmit = false; + }else if(record.paramaTableName === "3"){ + this.$refs.paraThreadingToolModal.edit(record); + this.$refs.paraThreadingToolModal.title = "缂栬緫"; + this.$refs.paraThreadingToolModal.disableSubmit = false; + }else if(record.paramaTableName === "4"){ + this.$refs.paraMillToolModal.edit(record); + this.$refs.paraMillToolModal.title = "缂栬緫"; + this.$refs.paraMillToolModal.disableSubmit = false; + }else if(record.paramaTableName === "5"){ + this.$refs.paraTurningToolsModal.edit(record); + this.$refs.paraTurningToolsModal.title = "缂栬緫"; + this.$refs.paraTurningToolsModal.disableSubmit = false; + }else if(record.paramaTableName === "6"){ + this.$refs.paraBladeModal.edit(record); + this.$refs.paraBladeModal.title = "缂栬緫"; + this.$refs.paraBladeModal.disableSubmit = false; + } + }, + //璇︽儏 + handleDetail:function(record){ + if(record.paramaTableName === "1"){ + this.$refs.paraCommonToolModal.edit(record); + this.$refs.paraCommonToolModal.title="璇︽儏"; + this.$refs.paraCommonToolModal.disableSubmit = true; + this.$refs.paraCommonToolModal.disSeach = true; + if(this.$refs.paraCommonToolModal.removeValidate) { + this.$refs.paraCommonToolModal.removeValidate() + } + }else if(record.paramaTableName === "2"){ + this.$refs.paraHoleToolsModal.edit(record); + this.$refs.paraHoleToolsModal.title="璇︽儏"; + this.$refs.paraHoleToolsModal.disableSubmit = true; + this.$refs.paraHoleToolsModal.disSeach = true; + if(this.$refs.paraHoleToolsModal.removeValidate) { + this.$refs.paraHoleToolsModal.removeValidate() + } + }else if(record.paramaTableName === "3"){ + this.$refs.paraThreadingToolModal.edit(record); + this.$refs.paraThreadingToolModal.title="璇︽儏"; + this.$refs.paraThreadingToolModal.disableSubmit = true; + this.$refs.paraThreadingToolModal.disSeach = true; + if(this.$refs.paraThreadingToolModal.removeValidate) { + this.$refs.paraThreadingToolModal.removeValidate() + } + }else if(record.paramaTableName === "4"){ + this.$refs.paraMillToolModal.edit(record); + this.$refs.paraMillToolModal.title="璇︽儏"; + this.$refs.paraMillToolModal.disableSubmit = true; + this.$refs.paraMillToolModal.disSeach = true; + if(this.$refs.paraMillToolModal.removeValidate) { + this.$refs.paraMillToolModal.removeValidate() + } + }else if(record.paramaTableName === "5"){ + this.$refs.paraTurningToolsModal.edit(record); + this.$refs.paraTurningToolsModal.title="璇︽儏"; + this.$refs.paraTurningToolsModal.disableSubmit = true; + this.$refs.paraTurningToolsModal.disSeach = true; + if(this.$refs.paraTurningToolsModal.removeValidate) { + this.$refs.paraTurningToolsModal.removeValidate() + } + }else if(record.paramaTableName === "6"){ + this.$refs.paraBladeModal.edit(record); + this.$refs.paraBladeModal.title="璇︽儏"; + this.$refs.paraBladeModal.disableSubmit = true; + this.$refs.paraBladeModal.disSeach = true; + if(this.$refs.paraBladeModal.removeValidate) { + this.$refs.paraBladeModal.removeValidate() + } + } + }, + //绂佺敤鐘舵�佹牱寮� + tableRowClass(record, index) { + if (record.status != "1") { + return "frozenRowClass"; + } + return ""; + }, + loadData() { + let params = this.getQueryParams(); + if (this.nodeSelected && this.nodeSelected.key !== '-1') { + // 鍔犺浇閫変腑鑺傜偣鐨勫瓙绫� + params.classifyId = this.nodeSelected.key; + this.loading = true; + getAction(this.url.list, params) + .then((res) => { + if (res.success) { + this.dataSource = res.result.records; // 鏇存柊琛ㄦ牸鏁版嵁 + this.ipagination.total = res.result.total + } else { + this.$message.warning("璇烽�夋嫨鍙跺瓙鑺傜偣杩涜鏌ヨ"); + this.ipagination.total = 0 + } + }) + .finally(() => { + this.loading = false; + }); + } else { + this.$message.warning("璇烽�夋嫨鍙跺瓙鑺傜偣杩涜鏌ヨ"); + } + }, + onClearSelected() { + this.selectedKeys = []; + this.nodeSelected = {}; // 娓呯┖閫変腑鐨勮妭鐐� + this.dataSource = []; // 娓呯┖琛ㄦ牸鏁版嵁 + }, + //閲嶇疆 + searchReset() { + this.queryParam = {} + this.loadData(1); + this.clearPara() + }, + //娓呯┖閫変腑鍙婂弬鏁� + clearPara(){ + this.selectedRowKeys = [] + this.$refs.paraCommonToolList.visable = false + this.$refs.paraHoleToolsList.visable = false + this.$refs.paraThreadingToolList.visable = false + this.$refs.paraMillToolList.visable = false + this.$refs.paraTurningToolsList.visable = false + this.$refs.paraBladeList.visable = false + this.$refs.toolsConfigPropertyList.visable = false + } + + }, + } +</script> +<style scoped> + @import '~@assets/less/common.less'; + .enable { + color: green; + } + .disable { + color: red; + } +</style> \ No newline at end of file diff --git a/src/views/tms/modules/inbound/InboundModel.vue b/src/views/tms/modules/inbound/InboundModel.vue new file mode 100644 index 0000000..006a1c1 --- /dev/null +++ b/src/views/tms/modules/inbound/InboundModel.vue @@ -0,0 +1,535 @@ +<template> + <a-modal + :title="title" + :visible="visible" + :fullScreen="true" + :width="1200" + @ok="handleOk" + @cancel="handleCancel" + > + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-row style="width: 100%"> + <a-col :span="24 / 2"> + <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱绫诲瀷"> + <j-dict-select-tag + :disabled="disableSubmit" + type="list" + v-decorator="['inStorehouseType', validatorRules.inStorehouseType]" + :triggerChange="true" + dictCode="in_storehouse_type" + placeholder="璇烽�夋嫨鍏ュ簱绫诲瀷" + @change="handleTypeChange" + /> + </a-form-item> + </a-col> + <a-col :span="24 / 2"> + <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱鏃堕棿"> + <a-date-picker + @change="onChange" + :disabled="disableSubmit" + style="width: 100%" + v-decorator="['inboundTime', validatorRules.inboundTime]" + /> + </a-form-item> + </a-col> + </a-row> + <a-row style="width: 100%"> + <a-col :span="24 / 2"> + <a-form-item label="鍏ュ簱鏁伴噺" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-input placeholder="璇疯緭鍏ュ叆搴撴暟閲�" :disabled="disableSubmit" v-decorator="['in_number', validatorRules.applicationReason]" /> + </a-form-item> + </a-col> + </a-row> + + </a-form> + </a-spin> + <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectReturnList()" v-show="returnShow && !disableSubmit">閫夋嫨鍊熺敤鍑哄簱鍗�</a-button> + <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectTooling()" v-show="toolingShow && !disableSubmit">閫夋嫨宸ュ叿</a-button> + <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectSharpenList()" v-show="sharpenShow && !disableSubmit">閫夋嫨鍒冪(鍑哄簱鍗�</a-button> + <a-table + ref="table" + bordered + size="middle" + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + @change="handleTableChange" + > + <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index"> + <div :key="col.dataIndex"> + <a-input-number + v-if="col.dataIndex == 'inStorageQuantity'" + :disabled="quantityDisable" + :value="text" + @change="(e) => handleChange(e, record.key, col, index)" + :min="1" + /> + </div> + </template> + <span slot="action" slot-scope="text, record, index"> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record, index)" :disabled="disableSubmit"> + <a>鍒犻櫎</a> + </a-popconfirm> + </span> + </a-table> + <template slot="footer" v-if="disableSubmit == false"> + <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button> + <a-button @click="handleOk" :disabled="isDisabled" type="primary">鍏ュ簱</a-button> + </template> + + <template slot="footer" v-if="disableSubmit == true"> + <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button> + </template> + <j-select-tooling-modal ref="toolingModalForm" @ok="modalFormOk"></j-select-tooling-modal> + <j-select-return-list-modal ref="returnModalForm" @ok="modalFormOk"></j-select-return-list-modal> + <j-select-sharpen-list-modal ref="sharpenModalForm" @ok="modalFormOk"></j-select-sharpen-list-modal> + </a-modal> +</template> + +<script> +import pick from 'lodash.pick' +import JSelectToolingModal from '.././inboundOrder/JSelectToolingModal' +import { ajaxGetDictItems } from '@/api/api' +import moment from 'moment' +import { getAction, postAction, requestPut } from '@/api/manage' +import JDictSelectTag from '@/components/dict/JDictSelectTag' +import JSearchSelectTag from '@/components/dict/JSearchSelectTag' +import JMultiSelectTag from '@/components/dict/JMultiSelectTag' +import { filterObj } from '@/utils/util' +import JSelectReturnListModal from '.././inboundOrder/JSelectReturnListModal' +import JSelectSharpenListModal from '.././inboundOrder/JSelectSharpenListModal' + +export default { + name: 'InboundOrderModel', + components: { + JSelectToolingModal, + JMultiSelectTag, + JDictSelectTag, + JSelectReturnListModal, + JSearchSelectTag, + JSelectSharpenListModal, + }, + data() { + return { + /* 鍒嗛〉鍙傛暟 */ + ipagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['10', '20', '30'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + isDisabled: false, + selectedRowKeys: {}, + state: { + show: false, + maintenanceValue: 1, + checkValue: 1, + maintenanceState: false, + checkState: false, + }, + inboundDate: '', + applicationDate: '', + supplierShow: false, + disableSubmit: false, + numDisable:false, + quantityDisable:false, + onlyCodeDisable:true, + returnShow:false, + toolingShow:false, + sharpenShow:false, + addDisable:false, + toolinngOptions:[], + title: '鎿嶄綔', + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 6 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 18 }, + }, + confirmLoading: false, + loading: false, + form: this.$form.createForm(this), + dataSource: [], + toolingTreeData:[], + warehouseOptions:[], + locationOptions:[], + allToolingList:[], + param: {}, + barcodeCurrentType: false, + inboundOrderId:'', + validatorRules: { + type: { + rules: [ + { + required: true, + message: '璇烽�夋嫨鍏ュ簱绫诲瀷!', + }, + ], + }, + inboundDate: { + rules: [ + { + required: true, + message: '璇烽�夋嫨鐢宠鍏ュ簱鏃ユ湡!', + }, + ], + }, + applicant: { + rules: [ + { + required: true, + message: '璇烽�夋嫨鐢宠浜�!', + }, + ], + }, + }, + url: { + add: '/tms/inboundOrder/add', + edit: '/tms/inboundOrder/edit', + queryByUserName: '/sys/user/queryByUserName', + toolingList:'/tms/baseTools/list', + queryAccountList:'/tooling/storage/queryAccountList', + querySharpenList:'/sharpen/sharpenDetail/querySharpenList', + queryReturnList:'/returnInventory/queryReturnList', + detailList:'/tms/inboundDetail/list', + }, + toolingOptions:[], + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 50, + align: 'center', + customRender: function (t, r, index) { + return parseInt(index) + 1 + }, + }, + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode', + width: 150, + }, + { + title: '宸ュ叿绫诲瀷', + align: 'center', + dataIndex: 'applicationType' + }, + { + title: '涓枃鍚嶇О', + align: 'center', + dataIndex: 'chineseName', + }, + { + title: '鍨嬪彿/鍥惧彿', + align: 'center', + dataIndex: 'toolModel' + }, + { + title: '鍏ュ簱鏁伴噺', + align: 'center', + dataIndex: 'inStorageQuantity', + scopedSlots: { customRender: 'inStorageQuantity' }, + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + scopedSlots: { customRender: 'action' }, + }, + ], + } + }, + created() {}, + methods: { + modalFormOk() { + }, + getQueryParams() { + this.param.pageNo = this.ipagination.current + this.param.pageSize = this.ipagination.pageSize + return filterObj(this.param) + }, + add() { + this.edit({}) + }, + edit(record) { + let that = this + this.form.resetFields() + this.model = Object.assign({}, record) + this.visible = true + this.isDisabled = false + this.disableSubmit = false + if (record.id) { + if(record.inStorehouseType == "1"){ + this.toolingShow = true + }else if(record.inStorehouseType == "2"){ + this.returnShow = true + }else if(record.inStorehouseType == "5"){ + this.sharpenShow = true + } + this.inboundOrderId = record.id + this.detailList(this.inboundOrderId) + } + this.initOptions() + this.$nextTick(() => { + this.form.setFieldsValue( + pick(this.model, 'inboundNum', 'inStorehouseType', 'inboundTime', 'applicationReason', 'handler','approvalDate','reviewer','approvalOpinion','remark') + ) + }) + }, + handleChange(value, key, column, index) { + //let t = (this.ipaginationm.current - 1) * this.ipaginationm.pageSize + index + const temp = [...this.dataSource] + const target = temp.filter(item => key === item.key)[index]; + if (target) { + target[column.dataIndex] = value + this.dataSource = temp + } + }, + close() { + this.$emit('close') + this.dataSource = [] + this.visible = false + this.supplierShow = false, + this.disableSubmit = false, + this.numDisable = false, + this.quantityDisable = false, + this.onlyCodeDisable = true, + this.returnShow = false, + this.toolingShow = false, + this.sharpenShow = false, + this.addDisable = false + }, + handleTableChange(pagination, filters, sorter) { + this.ipagination = pagination + this.detailList(this.inboundOrderId); + }, + handleOk() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.form.validateFields((err, values) => { + if (!err) { + that.confirmLoading = true + let formData = Object.assign(this.model, values) + formData.detailData = this.dataSource + let http = '' + if(this.model.id){ + http = this.url.edit + }else{ + http = this.url.add + } + postAction(http, formData) + .then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('ok', new Date()) + } else { + that.$message.warning(res.message) + } + }) + .finally(() => { + that.confirmLoading = false + that.close() + }) + } + }) + }, + handleCancel() { + this.close() + }, + //閫夋嫨宸ュ叿 + selectTooling: function () { + let ids = [] + for (let i = 0; i < this.dataSource.length; i++) { + ids.push(this.dataSource[i].toolCodeId) + } + this.$refs.toolingModalForm.showModal(ids) + this.$refs.toolingModalForm.title = '閫夋嫨宸ュ叿' + this.$refs.toolingModalForm.disableSubmit = false + }, + //閫夋嫨褰掕繕宸ュ叿 + selectReturnList: function () { + let ids = [] + for (let i = 0; i < this.dataSource.length; i++) { + ids.push(this.dataSource[i].id) + } + this.$refs.returnModalForm.showModal(ids) + this.$refs.returnModalForm.title = '閫夋嫨褰掕繕宸ュ叿' + this.$refs.returnModalForm.disableSubmit = false + }, + //閫夋嫨鍒冪(宸ュ叿 + selectSharpenList: function () { + let ids = [] + for (let i = 0; i < this.dataSource.length; i++) { + ids.push(this.dataSource[i].id) + } + this.$refs.sharpenModalForm.showModal(ids) + this.$refs.sharpenModalForm.title = '閫夋嫨鍒冪(宸ュ叿' + this.$refs.sharpenModalForm.disableSubmit = false + }, + handleDelete(record, index) { + this.dataSource.splice(index, 1) + }, + onChange() {}, + //鎺у埗鎵爜鎴栨墜閫� + selectCurrentUserType(e) { + if (e == '0') { + this.barcodeCurrentType = true + } else { + this.barcodeCurrentType = false + } + }, + //鎵嬮�変汉鍛樺�� + selectCurrentUserChange(e) { + console.log('褰撳墠鎵嬮��', e) + // this.form.setFieldsValue({ + // // userName: e, + // userNameId: e, + // }) + }, + //鍏ュ簱绫诲瀷 + handleTypeChange(value) { + this.dataSource = [] + if(value == 1){ + this.toolingShow = true + this.quantityDisable = false + this.addDisable = true + this.numDisable = false + }else{ + this.toolingShow = false + } + if(value == 2){ + this.numDisable = true + this.addDisable = false + this.returnShow = true + this.quantityDisable = true + }else{ + this.returnShow = false + } + if (value == 5) { + this.numDisable = true + this.addDisable = false + this.sharpenShow = true + this.quantityDisable = true + } else { + this.sharpenShow = false + } + + }, + //娣诲姞宸ュ叿鎸夐挳 + addTooling() { + const temp = [...this.dataSource]; + temp.push({ indexId: temp.length + 1 }); + this.dataSource = temp; + }, + detailList(inboundOrderId) { + this.param.inboundOrderId = inboundOrderId + getAction(this.url.detailList, this.getQueryParams()).then((res) => { + if (res.success) { + this.dataSource = res.result.records + this.ipagination.total = res.result.total; + } + }) + }, + initOptions() { + + ajaxGetDictItems("mes_base_warehouse,name,id,del_flag!='1' order by num asc", null).then((res) => { + if (res.success) { + if (res.result) { + for (let i = 0; i < res.result.length; i++) { + res.result[i].label = res.result[i].title; + } + } + this.warehouseOptions = res.result; + } + }) + ajaxGetDictItems("mes_base_storage_area,name,id,del_flag!='1'", null).then((res) => { + if (res.success) { + if (res.result) { + for (let i = 0; i < res.result.length; i++) { + res.result[i].label = res.result[i].title; + } + } + this.locationOptions = res.result; + } + }) + ajaxGetDictItems("mes_base_tooling,num,id,del_flag!='1'", null).then((res) => { + if (res.success) { + if (res.result) { + for (let i = 0; i < res.result.length; i++) { + res.result[i].label = res.result[i].title; + res.result[i].toolingName = res.result[i].name + } + } + this.toolingOptions = res.result; + } + }) + }, + filterOption(input, option) { + return ( + option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 + ); + }, + }, + watch: {}, + mounted() { + this.$bus.$on('selectionRows', (data) => { + //getCurrSelected 浜嬩欢 鎺ユ敹缁勪欢浼犻�掔殑鍙傛暟 + for (let i = 0; i < data.length; i++) { + this.dataSource.push({ + toolCodeId:data[i].id, + toolingId: data[i].toolingId || data[i].id, + toolCode: data[i].toolCode, + chineseName: data[i].chineseName, + toolModel: data[i].toolModel, + applicationType: data[i].applicationTypeName, + unitName: data[i].unitName || data[i].unitId_dictText, + onlyCode:data[i].onlyCode, + noAccountQuantity:data[i].noAccountQuantity, + inStorageQuantity:data[i].storageQuantity + }) + } + //this.ipaginationm.total = this.dataSource.length + }) + }, +} +</script> + + +<style lang="less" scoped> +.ant-btn { + padding: 0 10px; + margin-left: 3px; +} + +.ant-form-item-control { + line-height: 0px; +} + +/** 涓昏〃鍗曡闂磋窛 */ +.ant-form .ant-form-item { + margin-bottom: 10px; +} + +/** Tab椤甸潰琛岄棿璺� */ +.ant-tabs-content .ant-form-item { + margin-bottom: 0px; +} + +/deep/ .notshow { + display: none; +} +</style> diff --git a/src/views/tms/modules/inboundOrder/InboundDetailList.vue b/src/views/tms/modules/inboundOrder/InboundDetailList.vue new file mode 100644 index 0000000..a105e63 --- /dev/null +++ b/src/views/tms/modules/inboundOrder/InboundDetailList.vue @@ -0,0 +1,88 @@ +<template> + <a-card + :bordered="false" + class="card-area" + > + <a-table + ref="table" + bordered + size="middle" + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + @change="handleTableChange" + > + </a-table> + </a-card> +</template> + +<script> +import { requestPut } from '@/api/manage' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' + +export default { + name: 'InboundDetailList', + mixins: [JeecgListMixin], + components: {}, + data() { + return { + url: { + list: '/tms/inboundDetail/list', + }, + queryParam: {}, + nodeType: 0, + dataSource: [], + disableMixinCreated:true, + columns: [ + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode', + width: '10%', + key: 'toolCode' + }, + { + title: '宸ュ叿鍚嶇О', + dataIndex: 'chineseName', + align: 'center', + key: 'toolName' + }, + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + align: 'center', + key: 'toolModel' + }, + + { + title: '宸ュ叿鍒嗙被', + dataIndex: 'applicationType', + align: 'center', + }, + { + title: '鍏ュ簱鏁伴噺', + dataIndex: 'inStorageQuantity', + align: 'center', + } + ] + } + }, + + methods: { + + + }, + mounted() { + this.$bus.$on('getToolingStorageData', (data) => { + this.queryParam.inboundOrderId = data.id; + this.searchQuery(); + }) + } +} +</script> + +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/modules/inboundOrder/InboundOrderModel.vue b/src/views/tms/modules/inboundOrder/InboundOrderModel.vue new file mode 100644 index 0000000..3118a1e --- /dev/null +++ b/src/views/tms/modules/inboundOrder/InboundOrderModel.vue @@ -0,0 +1,600 @@ +<template> + <a-modal + :title="title" + :visible="visible" + :fullScreen="true" + :width="1200" + @ok="handleOk" + @cancel="handleCancel" + > + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-row style="width: 100%"> + <a-col :span="24 / 2"> + <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱鐢宠鍗曠紪鍙�"> + <a-input :disabled="true" placeholder="绯荤粺鑷姩鐢熸垚" v-decorator="['inboundNum', validatorRules.inboundNum]" /> + </a-form-item> + </a-col> + <a-col :span="24 / 2"> + <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱绫诲瀷"> + <j-dict-select-tag + :disabled="disableSubmit" + type="list" + v-decorator="['inStorehouseType', validatorRules.inStorehouseType]" + :triggerChange="true" + dictCode="in_storehouse_type" + placeholder="璇烽�夋嫨鍏ュ簱绫诲瀷" + @change="handleTypeChange" + /> + </a-form-item> + </a-col> + </a-row> + <a-row style="width: 100%"> + <a-col :span="24 / 2"> + <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱鏃堕棿"> + <a-date-picker + @change="onChange" + :disabled="disableSubmit" + style="width: 100%" + v-decorator="['inboundTime', validatorRules.inboundTime]" + /> + </a-form-item> + </a-col> + <a-col :span="24 / 2"> + <a-form-item label="鐢宠鍘熷洜" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-input placeholder="璇疯緭鍏ョ敵璇峰師鍥�" :disabled="disableSubmit" v-decorator="['applicationReason', validatorRules.applicationReason]" /> + </a-form-item> + </a-col> + </a-row> + <a-row style="width: 100%"> + + <a-col :span="24 / 2"> + <a-form-item label="缁忔墜浜�" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <j-search-select-tag + :disabled="true" + v-if="!barcodeCurrentType" + placeholder="璇烽�夋嫨缁忔墜浜�" + v-decorator="['handler', { rules: [{ required: false, message: '璇烽�夋嫨缁忔墜浜�' }] }]" + dict="sys_user,realname,id,del_flag=0" + @change="selectCurrentUserChange" + /> + </a-form-item> + </a-col> + + <a-col :span="24 / 2"> + <a-form-item label="瀹℃牳浜�" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <j-search-select-tag + :disabled="true" + placeholder="璇烽�夋嫨瀹℃牳浜�" + v-decorator="['reviewer', validatorRules.reviewer]" + dict="sys_user,realname,id,del_flag=0" + @change="selectCurrentUserChange" + /> + </a-form-item> + </a-col> + + </a-row> + + <a-row style="width: 100%"> + + <a-col :span="24 / 2"> + <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="瀹℃牳鏃堕棿"> + <a-date-picker + @change="onChange" + :disabled="true" + style="width: 100%" + v-decorator="['approvalDate', validatorRules.approvalDate]" + /> + </a-form-item> + </a-col> + + <a-col :span="24 / 2"> + <a-form-item label="瀹℃牳鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-input placeholder="璇疯緭鍏ュ鏍告剰瑙�" :disabled="true" v-decorator="['approvalOpinion', validatorRules.approvalOpinion]" /> + </a-form-item> + </a-col> + </a-row> + + <a-row style="width: 100%"> + <a-col :span="24"> + <a-form-item :labelCol="{ span: 3 }" :wrapperCol="{ span: 21 }" label="澶囨敞"> + <a-textarea + :disabled="disableSubmit" + :rows="2" + placeholder="..." + v-decorator="['remark', validatorRules.remark]" + /> + </a-form-item> + </a-col> + </a-row> + </a-form> + </a-spin> + <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectTooling()" v-show="returnShow && !disableSubmit">閫夋嫨鍊熺敤鍑哄簱鍗�</a-button> + <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectTooling()" v-show="toolingShow && !disableSubmit">閫夋嫨宸ュ叿</a-button> + <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectTooling()" v-show="sharpenShow && !disableSubmit">閫夋嫨鍒冪(鍑哄簱鍗�</a-button> + <a-table + ref="table" + bordered + size="middle" + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + @change="handleTableChange" + > + <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index"> + <div :key="col.dataIndex"> + <a-input-number + v-if="col.dataIndex == 'inStorageQuantity'" + :disabled="quantityDisable" + :value="text" + @change="(e) => handleChange(e, record.key, col, index)" + :min="1" + /> + </div> + </template> + <span slot="action" slot-scope="text, record, index"> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record, index)" :disabled="disableSubmit"> + <a>鍒犻櫎</a> + </a-popconfirm> + </span> + </a-table> + <template slot="footer" v-if="disableSubmit == false"> + <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button> + <a-button @click="handleOk" :disabled="isDisabled" type="primary">纭畾</a-button> + </template> + + <template slot="footer" v-if="disableSubmit == true"> + <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button> + </template> + <j-select-tooling-modal ref="toolingModalForm" @ok="modalFormOk"></j-select-tooling-modal> + <j-select-return-list-modal ref="returnModalForm" @ok="modalFormOk"></j-select-return-list-modal> + <j-select-sharpen-list-modal ref="sharpenModalForm" @ok="modalFormOk"></j-select-sharpen-list-modal> + </a-modal> +</template> + +<script> +import pick from 'lodash.pick' +import JSelectToolingModal from './JSelectToolingModal' +import { ajaxGetDictItems } from '@/api/api' +import moment from 'moment' +import { getAction, postAction, requestPut } from '@/api/manage' +import JDictSelectTag from '@/components/dict/JDictSelectTag' +import JSearchSelectTag from '@/components/dict/JSearchSelectTag' +import JMultiSelectTag from '@/components/dict/JMultiSelectTag' +import { filterObj } from '@/utils/util' +import JSelectReturnListModal from './JSelectReturnListModal' +import JSelectSharpenListModal from './JSelectSharpenListModal' + +export default { + name: 'InboundOrderModel', + components: { + JSelectToolingModal, + JMultiSelectTag, + JDictSelectTag, + JSelectReturnListModal, + JSearchSelectTag, + JSelectSharpenListModal, + }, + data() { + return { + /* 鍒嗛〉鍙傛暟 */ + ipagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['10', '20', '30'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + isDisabled: false, + selectedRowKeys: {}, + state: { + show: false, + maintenanceValue: 1, + checkValue: 1, + maintenanceState: false, + checkState: false, + }, + inboundDate: '', + applicationDate: '', + supplierShow: false, + disableSubmit: false, + numDisable:false, + quantityDisable:false, + onlyCodeDisable:true, + returnShow:false, + toolingShow:false, + sharpenShow:false, + addDisable:false, + toolinngOptions:[], + title: '鎿嶄綔', + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 6 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 18 }, + }, + confirmLoading: false, + loading: false, + form: this.$form.createForm(this), + dataSource: [], + toolingTreeData:[], + warehouseOptions:[], + locationOptions:[], + allToolingList:[], + param: {}, + barcodeCurrentType: false, + inboundOrderId:'', + validatorRules: { + type: { + rules: [ + { + required: true, + message: '璇烽�夋嫨鍏ュ簱绫诲瀷!', + }, + ], + }, + inboundDate: { + rules: [ + { + required: true, + message: '璇烽�夋嫨鐢宠鍏ュ簱鏃ユ湡!', + }, + ], + }, + applicant: { + rules: [ + { + required: true, + message: '璇烽�夋嫨鐢宠浜�!', + }, + ], + }, + }, + url: { + add: '/tms/inboundOrder/add', + edit: '/tms/inboundOrder/edit', + queryByUserName: '/sys/user/queryByUserName', + toolingList:'/tms/baseTools/list', + queryAccountList:'/tms/baseTools/list', + querySharpenList:'/tms/baseTools/list', + queryReturnList:'/tms/baseTools/list', + detailList:'/tms/inboundDetail/list', + }, + toolingOptions:[], + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 50, + align: 'center', + customRender: function (t, r, index) { + return parseInt(index) + 1 + }, + }, + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode', + width: 150, + }, + { + title: '宸ュ叿绫诲瀷', + align: 'center', + dataIndex: 'applicationType' + }, + { + title: '涓枃鍚嶇О', + align: 'center', + dataIndex: 'chineseName', + }, + { + title: '鍨嬪彿/鍥惧彿', + align: 'center', + dataIndex: 'toolModel' + }, + { + title: '鍏ュ簱鏁伴噺', + align: 'center', + dataIndex: 'inStorageQuantity', + scopedSlots: { customRender: 'inStorageQuantity' }, + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + scopedSlots: { customRender: 'action' }, + }, + ], + } + }, + created() {}, + methods: { + modalFormOk() { + }, + getQueryParams() { + this.param.pageNo = this.ipagination.current + this.param.pageSize = this.ipagination.pageSize + return filterObj(this.param) + }, + add() { + this.edit({}) + }, + edit(record) { + let that = this + this.form.resetFields() + this.model = Object.assign({}, record) + this.visible = true + this.isDisabled = false + this.disableSubmit = false + if (record.id) { + if(record.inStorehouseType == "1"){ + this.toolingShow = true + }else if(record.inStorehouseType == "2"){ + this.returnShow = true + }else if(record.inStorehouseType == "5"){ + this.sharpenShow = true + } + this.inboundOrderId = record.id + this.detailList(this.inboundOrderId) + } + this.initOptions() + this.$nextTick(() => { + this.form.setFieldsValue( + pick(this.model, 'inboundNum', 'inStorehouseType', 'inboundTime', 'applicationReason', 'handler','approvalDate','reviewer','approvalOpinion','remark') + ) + }) + }, + handleChange(value, key, column, index) { + //let t = (this.ipaginationm.current - 1) * this.ipaginationm.pageSize + index + const temp = [...this.dataSource] + const target = temp.filter(item => key === item.key)[index]; + if (target) { + target[column.dataIndex] = value + this.dataSource = temp + } + }, + close() { + this.$emit('close') + this.dataSource = [] + this.visible = false + this.supplierShow = false, + this.disableSubmit = false, + this.numDisable = false, + this.quantityDisable = false, + this.onlyCodeDisable = true, + this.returnShow = false, + this.toolingShow = false, + this.sharpenShow = false, + this.addDisable = false + }, + handleTableChange(pagination, filters, sorter) { + this.ipagination = pagination + this.detailList(this.inboundOrderId); + }, + handleOk() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.form.validateFields((err, values) => { + if (!err) { + that.confirmLoading = true + let formData = Object.assign(this.model, values) + formData.detailData = this.dataSource + let http = '' + if(this.model.id){ + http = this.url.edit + }else{ + http = this.url.add + } + postAction(http, formData) + .then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('ok', new Date()) + } else { + that.$message.warning(res.message) + } + }) + .finally(() => { + that.confirmLoading = false + that.close() + }) + } + }) + }, + handleCancel() { + this.close() + }, + //閫夋嫨宸ュ叿 + selectTooling: function () { + let ids = [] + for (let i = 0; i < this.dataSource.length; i++) { + ids.push(this.dataSource[i].toolCodeId) + } + this.$refs.toolingModalForm.showModal(ids) + this.$refs.toolingModalForm.title = '閫夋嫨宸ュ叿' + this.$refs.toolingModalForm.disableSubmit = false + }, + //閫夋嫨褰掕繕宸ュ叿 + selectReturnList: function () { + let ids = [] + for (let i = 0; i < this.dataSource.length; i++) { + ids.push(this.dataSource[i].id) + } + this.$refs.returnModalForm.showModal(ids) + this.$refs.returnModalForm.title = '閫夋嫨褰掕繕宸ュ叿' + this.$refs.returnModalForm.disableSubmit = false + }, + //閫夋嫨鍒冪(宸ュ叿 + selectSharpenList: function () { + let ids = [] + for (let i = 0; i < this.dataSource.length; i++) { + ids.push(this.dataSource[i].id) + } + this.$refs.sharpenModalForm.showModal(ids) + this.$refs.sharpenModalForm.title = '閫夋嫨鍒冪(宸ュ叿' + this.$refs.sharpenModalForm.disableSubmit = false + }, + handleDelete(record, index) { + this.dataSource.splice(index, 1) + }, + onChange() {}, + //鎺у埗鎵爜鎴栨墜閫� + selectCurrentUserType(e) { + if (e == '0') { + this.barcodeCurrentType = true + } else { + this.barcodeCurrentType = false + } + }, + //鎵嬮�変汉鍛樺�� + selectCurrentUserChange(e) { + console.log('褰撳墠鎵嬮��', e) + // this.form.setFieldsValue({ + // // userName: e, + // userNameId: e, + // }) + }, + //鍏ュ簱绫诲瀷 + handleTypeChange(value) { + this.dataSource = [] + if(value == 1){ + this.toolingShow = true + this.quantityDisable = false + this.addDisable = true + this.numDisable = false + }else{ + this.toolingShow = false + } + if(value == 2){ + this.numDisable = true + this.addDisable = false + this.returnShow = true + this.quantityDisable = true + }else{ + this.returnShow = false + } + if (value == 5) { + this.numDisable = true + this.addDisable = false + this.sharpenShow = true + this.quantityDisable = true + } else { + this.sharpenShow = false + } + + }, + //娣诲姞宸ュ叿鎸夐挳 + addTooling() { + const temp = [...this.dataSource]; + temp.push({ indexId: temp.length + 1 }); + this.dataSource = temp; + }, + detailList(inboundOrderId) { + this.param.inboundOrderId = inboundOrderId + getAction(this.url.detailList, this.getQueryParams()).then((res) => { + if (res.success) { + this.dataSource = res.result.records + this.ipagination.total = res.result.total; + } + }) + }, + initOptions() { + + ajaxGetDictItems("mes_base_warehouse,name,id,del_flag!='1' order by num asc", null).then((res) => { + if (res.success) { + if (res.result) { + for (let i = 0; i < res.result.length; i++) { + res.result[i].label = res.result[i].title; + } + } + this.warehouseOptions = res.result; + } + }) + ajaxGetDictItems("mes_base_storage_area,name,id,del_flag!='1'", null).then((res) => { + if (res.success) { + if (res.result) { + for (let i = 0; i < res.result.length; i++) { + res.result[i].label = res.result[i].title; + } + } + this.locationOptions = res.result; + } + }) + ajaxGetDictItems("mes_base_tooling,num,id,del_flag!='1'", null).then((res) => { + if (res.success) { + if (res.result) { + for (let i = 0; i < res.result.length; i++) { + res.result[i].label = res.result[i].title; + res.result[i].toolingName = res.result[i].name + } + } + this.toolingOptions = res.result; + } + }) + }, + filterOption(input, option) { + return ( + option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 + ); + }, + }, + watch: {}, + mounted() { + this.$bus.$on('selectionRows', (data) => { + //getCurrSelected 浜嬩欢 鎺ユ敹缁勪欢浼犻�掔殑鍙傛暟 + for (let i = 0; i < data.length; i++) { + this.dataSource.push({ + toolCodeId:data[i].id, + toolingId: data[i].toolingId || data[i].id, + toolCode: data[i].toolCode, + chineseName: data[i].chineseName, + toolModel: data[i].toolModel, + applicationType: data[i].applicationTypeName, + unitName: data[i].unitName || data[i].unitId_dictText, + onlyCode:data[i].onlyCode, + noAccountQuantity:data[i].noAccountQuantity, + inStorageQuantity:data[i].storageQuantity + }) + } + //this.ipaginationm.total = this.dataSource.length + }) + }, +} +</script> + + +<style lang="less" scoped> +.ant-btn { + padding: 0 10px; + margin-left: 3px; +} + +.ant-form-item-control { + line-height: 0px; +} + +/** 涓昏〃鍗曡闂磋窛 */ +.ant-form .ant-form-item { + margin-bottom: 10px; +} + +/** Tab椤甸潰琛岄棿璺� */ +.ant-tabs-content .ant-form-item { + margin-bottom: 0px; +} + +/deep/ .notshow { + display: none; +} +</style> diff --git a/src/views/tms/modules/inboundOrder/JSelectReturnListModal.vue b/src/views/tms/modules/inboundOrder/JSelectReturnListModal.vue new file mode 100644 index 0000000..369a4ec --- /dev/null +++ b/src/views/tms/modules/inboundOrder/JSelectReturnListModal.vue @@ -0,0 +1,290 @@ +<template> + <!--鏀寔鍏ㄥ睆缂╂斁--> + <j-modal + :visible="visible" + :title="title" + switchFullscreen + :width="1200" + @ok="handleSubmit" + @cancel="close" + style="top: 50px" + cancelText="鍏抽棴" + > + <a-card :bordered="false"> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="宸ュ叿缂栫爜"> + <a-input placeholder="璇疯緭鍏ュ伐鍏风紪鐮�,鏀寔妯$硦鏌ヨ" v-model="queryParam.num"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="宸ュ叿鍚嶇О"> + <a-input placeholder="璇疯緭鍏ュ伐鍏峰悕绉�,鏀寔妯$硦鏌ヨ" v-model="queryParam.name"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="瑙勬牸鍨嬪彿"> + <a-input placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�,鏀寔妯$硦鏌ヨ" v-model="queryParam.model"></a-input> + </a-form-item> + </a-col> + + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </a-row> + </a-form> + </div> + <!--棰嗘枡鍗曞垪琛�--> + <a-table + ref="table" + :scroll="scrollTrigger" + size="middle" + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :rowSelection="rowSelection" + :loading="loading" + @change="handleTableChange" + > + </a-table> + </a-card> + </j-modal> +</template> + +<script> +import { filterObj } from '@/utils/util' +import { getAction } from '@/api/manage' + +export default { + name: 'JSelectToolingModal', + components: {}, + props: {}, + data() { + return { + queryParam: {}, + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 50, + align: 'center', + customRender: function (t, r, index) { + return parseInt(index) + 1 + }, + }, + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolingNum', + sorter: true, + }, + { + title: '宸ュ叿鍚嶇О', + align: 'center', + dataIndex: 'toolingName', + sorter: true, + }, + { + title: '鍞竴缂栫爜', + align: 'center', + dataIndex: 'onlyCode', + sorter: true, + }, + { + title: '鍏ュ簱鏁伴噺', + align: 'center', + dataIndex: 'inStorageQuantity', + sorter: true, + }, + { + title: '宸ュ叿鍒嗙被', + align: 'center', + dataIndex: 'toolingCategoryName', + sorter: true, + }, + { + title: '瑙勬牸鍨嬪彿', + align: 'center', + dataIndex: 'model', + sorter: true, + }, + { + title: '鍗曚綅', + align: 'center', + dataIndex: 'unitName', + sorter: true, + }, + ], + selectedRowKeys: [], + oldSlelectRows: [], + scrollTrigger: {}, + dataSource: [], + selectionRows: [], + title: '鏍规嵁鏌ヨ缁撴灉閫夋嫨宸ュ叿', + ipagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['5', '10', '20'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0, + }, + isorter: { + column: 'num', + order: 'desc', + }, + departTree: [], + visible: false, + loading: false, + url: { + // list: '/base/tooling/list', + list: '/tms/baseTools/list', + queryKnifeBom:'/toolingStorage/mesToolingOutbounds/queryKnifeBom' + }, + } + }, + computed: { + rowSelection() { + return { + type: 'checkbox', + onChange: (selectedRowKeys, selectedRows) => { + this.selectedRowKeys = selectedRowKeys + this.onSelectChange(selectedRows) + }, + getCheckboxProps: (record) => ({ + props: { + disabled: record.distable, + }, + }), + selectedRowKeys: this.selectedRowKeys, + } + }, + }, + watch: {}, + created() {}, + methods: { + async loadData(arg) { + if (arg === 1) { + this.ipagination.current = 1 + } + let that = this + this.loading = true + let params = this.getQueryParams() //鏌ヨ鏉′欢 + await getAction(this.url.list, params).then((res) => { + if (res.success) { + for (let i = 0; i < res.result.records.length; i++) { + if (that.oldSlelectRows.indexOf(res.result.records[i].toolingId) > -1) { + res.result.records[i].distable = true + } else { + res.result.records[i].distable = false + } + } + this.dataSource = res.result.records + this.ipagination.total = res.result.total + } + if (res.code === 510) { + this.$message.warning(res.message) + } + this.loading = false + }) + }, + showModal(oldSlelectRows) { + this.oldSlelectRows = oldSlelectRows + this.visible = true + this.loadData(1) + }, + getQueryParams() { + let param = Object.assign({}, this.queryParam, this.isorter) + param.field = this.getQueryField() + param.pageNo = this.ipagination.current + param.pageSize = this.ipagination.pageSize + return filterObj(param) + }, + //鏌ヨ鏉′欢澶勭悊 + getQueryField() { + let str = 'id,' + for (let a = 0; a < this.columns.length; a++) { + str += ',' + this.columns[a].dataIndex + } + return str + }, + searchReset(num) { + let that = this + if (num !== 0) { + that.loadData(1) + } + that.selectborrowIds = [] + }, + close() { + this.searchReset(0) + this.selectedRowKeys = [] + this.visible = false + }, + handleTableChange(pagination, filters, sorter) { + //TODO 绛涢�� + if (Object.keys(sorter).length > 0) { + this.isorter.column = sorter.field + this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc' + } + this.ipagination = pagination + this.loadData() + }, + handleSubmit() { + if (this.selectionRows.length > 0) { + let params = this.getQueryParams() //鏌ヨ鏉′欢 + params['onlyCode'] = this.selectionRows[0].onlyCode; + getAction(this.url.queryKnifeBom, params).then((res) => { + if (res.success) { + this.prepareKnifeDetailList = res.result + this.$bus.$emit('selectionRows', this.prepareKnifeDetailList) + } + + if (res.code === 510) { + this.$message.warning(res.message) + } + this.loading = false + + }) + this.searchReset(0) + this.close() + } else { + this.$message.warning('璇烽�夋嫨涓�鏉℃暟鎹�') + } + }, + onSelectChange(selectionRows) { + this.selectionRows = selectionRows + }, + onSearch() { + this.loadData(1) + }, + searchQuery() { + this.loadData(1); + }, + searchReset() { + this.queryParam = {} + this.loadData(1) + }, + }, +} +</script> + +<style scoped> +.ant-table-tbody .ant-table-row td { + padding-top: 10px; + padding-bottom: 10px; +} + +#components-layout-demo-custom-trigger .trigger { + font-size: 18px; + line-height: 64px; + padding: 0 24px; + cursor: pointer; + transition: color 0.3s; +} +</style> \ No newline at end of file diff --git a/src/views/tms/modules/inboundOrder/JSelectSharpenListModal.vue b/src/views/tms/modules/inboundOrder/JSelectSharpenListModal.vue new file mode 100644 index 0000000..f83c694 --- /dev/null +++ b/src/views/tms/modules/inboundOrder/JSelectSharpenListModal.vue @@ -0,0 +1,273 @@ +<template> + <!--鏀寔鍏ㄥ睆缂╂斁--> + <j-modal + :visible="visible" + :title="title" + switchFullscreen + :width="1200" + @ok="handleSubmit" + @cancel="close" + style="top: 50px" + cancelText="鍏抽棴" + > + <a-card :bordered="false"> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="宸ュ叿缂栫爜"> + <a-input placeholder="璇疯緭鍏ュ伐鍏风紪鐮�,鏀寔妯$硦鏌ヨ" v-model="queryParam.num"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="宸ュ叿鍚嶇О"> + <a-input placeholder="璇疯緭鍏ュ伐鍏峰悕绉�,鏀寔妯$硦鏌ヨ" v-model="queryParam.name"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="瑙勬牸鍨嬪彿"> + <a-input placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�,鏀寔妯$硦鏌ヨ" v-model="queryParam.model"></a-input> + </a-form-item> + </a-col> + + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </a-row> + </a-form> + </div> + <!--棰嗘枡鍗曞垪琛�--> + <a-table + ref="table" + :scroll="scrollTrigger" + size="middle" + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :rowSelection="rowSelection" + :loading="loading" + @change="handleTableChange" + > + </a-table> + </a-card> + </j-modal> +</template> + +<script> +import { filterObj } from '@/utils/util' +import { getAction } from '@/api/manage' + +export default { + name: 'JSelectToolingModal', + components: {}, + props: {}, + data() { + return { + queryParam: {}, + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 50, + align: 'center', + customRender: function (t, r, index) { + return parseInt(index) + 1 + }, + }, + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolingNum', + sorter: true, + }, + { + title: '宸ュ叿鍚嶇О', + align: 'center', + dataIndex: 'toolingName', + sorter: true, + }, + { + title: '鍞竴缂栫爜', + align: 'center', + dataIndex: 'onlyCode', + sorter: true, + }, + { + title: '鍏ュ簱鏁伴噺', + align: 'center', + dataIndex: 'inStorageQuantity', + sorter: true, + }, + { + title: '宸ュ叿鍒嗙被', + align: 'center', + dataIndex: 'toolingCategoryName', + sorter: true, + }, + { + title: '瑙勬牸鍨嬪彿', + align: 'center', + dataIndex: 'model', + sorter: true, + }, + { + title: '鍗曚綅', + align: 'center', + dataIndex: 'unitName', + sorter: true, + }, + ], + selectedRowKeys: [], + oldSlelectRows: [], + scrollTrigger: {}, + dataSource: [], + selectionRows: [], + title: '鏍规嵁鏌ヨ缁撴灉閫夋嫨宸ュ叿', + ipagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['5', '10', '20'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0, + }, + isorter: { + column: 'num', + order: 'desc', + }, + departTree: [], + visible: false, + loading: false, + url: { + // list: '/base/tooling/list', + list: '/sharpen/sharpenDetail/querySharpenList', + }, + } + }, + computed: { + rowSelection() { + return { + type: 'checkbox', + onChange: (selectedRowKeys, selectedRows) => { + this.selectedRowKeys = selectedRowKeys + this.onSelectChange(selectedRows) + }, + getCheckboxProps: (record) => ({ + props: { + disabled: record.distable, + }, + }), + selectedRowKeys: this.selectedRowKeys, + } + }, + }, + watch: {}, + created() {}, + methods: { + async loadData(arg) { + if (arg === 1) { + this.ipagination.current = 1 + } + let that = this + this.loading = true + let params = this.getQueryParams() //鏌ヨ鏉′欢 + params["sharpenStatus"] = 1 + await getAction(this.url.list, params).then((res) => { + if (res.success) { + for (let i = 0; i < res.result.records.length; i++) { + if (that.oldSlelectRows.indexOf(res.result.records[i].toolingId) > -1) { + res.result.records[i].distable = true + } else { + res.result.records[i].distable = false + } + } + this.dataSource = res.result.records + this.ipagination.total = res.result.total + } + if (res.code === 510) { + this.$message.warning(res.message) + } + this.loading = false + }) + }, + showModal(oldSlelectRows) { + this.oldSlelectRows = oldSlelectRows + this.visible = true + this.loadData(1) + }, + getQueryParams() { + let param = Object.assign({}, this.queryParam, this.isorter) + param.field = this.getQueryField() + param.pageNo = this.ipagination.current + param.pageSize = this.ipagination.pageSize + return filterObj(param) + }, + //鏌ヨ鏉′欢澶勭悊 + getQueryField() { + let str = 'id,' + for (let a = 0; a < this.columns.length; a++) { + str += ',' + this.columns[a].dataIndex + } + return str + }, + searchReset(num) { + let that = this + if (num !== 0) { + that.loadData(1) + } + that.selectborrowIds = [] + }, + close() { + this.searchReset(0) + this.selectedRowKeys = [] + this.visible = false + }, + handleTableChange(pagination, filters, sorter) { + //TODO 绛涢�� + if (Object.keys(sorter).length > 0) { + this.isorter.column = sorter.field + this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc' + } + this.ipagination = pagination + this.loadData() + }, + handleSubmit() { + this.$bus.$emit('selectionRows', this.selectionRows) + this.searchReset(0) + this.close() + }, + onSelectChange(selectionRows) { + this.selectionRows = selectionRows + }, + onSearch() { + this.loadData(1) + }, + searchQuery() { + this.loadData(1); + }, + searchReset() { + this.queryParam = {} + this.loadData(1) + }, + }, +} +</script> + +<style scoped> +.ant-table-tbody .ant-table-row td { + padding-top: 10px; + padding-bottom: 10px; +} + +#components-layout-demo-custom-trigger .trigger { + font-size: 18px; + line-height: 64px; + padding: 0 24px; + cursor: pointer; + transition: color 0.3s; +} +</style> \ No newline at end of file diff --git a/src/views/tms/modules/inboundOrder/JSelectToolingModal.vue b/src/views/tms/modules/inboundOrder/JSelectToolingModal.vue new file mode 100644 index 0000000..0ccb752 --- /dev/null +++ b/src/views/tms/modules/inboundOrder/JSelectToolingModal.vue @@ -0,0 +1,254 @@ +<template> + <!--鏀寔鍏ㄥ睆缂╂斁--> + <j-modal + :visible="visible" + :title="title" + switchFullscreen + :width="1200" + @ok="handleSubmit" + @cancel="close" + style="top: 50px" + cancelText="鍏抽棴" + > + <a-card :bordered="false"> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="宸ュ叿缂栫爜"> + <a-input placeholder="璇疯緭鍏ュ伐鍏风紪鐮�,鏀寔妯$硦鏌ヨ" v-model="queryParam.toolCode"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="涓枃鍚嶇О"> + <a-input placeholder="璇疯緭鍏ヤ腑鏂囧悕绉�,鏀寔妯$硦鏌ヨ" v-model="queryParam.chineseName"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍨嬪彿/鍥惧彿"> + <a-input placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�,鏀寔妯$硦鏌ヨ" v-model="queryParam.toolModel"></a-input> + </a-form-item> + </a-col> + + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </a-row> + </a-form> + </div> + <!--宸ュ叿鍒楄〃--> + <a-table + ref="table" + :scroll="scrollTrigger" + size="middle" + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :rowSelection="rowSelection" + :loading="loading" + @change="handleTableChange" + > + </a-table> + </a-card> + </j-modal> +</template> + +<script> +import { filterObj } from '@/utils/util' +import { getAction } from '@/api/manage' + +export default { + name: 'JSelectToolingModal', + components: {}, + props: {}, + data() { + return { + queryParam: {}, + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 50, + align: 'center', + customRender: function (t, r, index) { + return parseInt(index) + 1 + }, + }, + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode', + sorter: true, + }, + { + title: '宸ュ叿鍚嶇О', + align: 'center', + dataIndex: 'chineseName', + sorter: true, + }, + { + title: '宸ュ叿绫诲瀷', + align: 'center', + dataIndex: 'applicationTypeName', + sorter: true, + }, + { + title: '鍨嬪彿/鍥惧彿', + align: 'center', + dataIndex: 'toolModel', + sorter: true, + }, + ], + selectedRowKeys: [], + oldSlelectRows: [], + scrollTrigger: {}, + dataSource: [], + selectionRows: [], + title: '鏍规嵁鏌ヨ缁撴灉閫夋嫨宸ュ叿', + ipagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['5', '10', '20'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0, + }, + isorter: { + column: 'toolCode', + order: 'desc', + }, + departTree: [], + visible: false, + loading: false, + url: { + // list: '/base/tooling/list', + list: '/tms/baseTools/paraCommonToolList', + }, + } + }, + computed: { + rowSelection() { + return { + type: 'checkbox', + onChange: (selectedRowKeys, selectedRows) => { + this.selectedRowKeys = selectedRowKeys + this.onSelectChange(selectedRows) + }, + getCheckboxProps: (record) => ({ + props: { + disabled: record.distable, + }, + }), + selectedRowKeys: this.selectedRowKeys, + } + }, + }, + watch: {}, + created() {}, + methods: { + async loadData(arg) { + if (arg === 1) { + this.ipagination.current = 1 + } + let that = this + this.loading = true + let params = this.getQueryParams() //鏌ヨ鏉′欢 + await getAction(this.url.list, params).then((res) => { + if (res.success) { + for (let i = 0; i < res.result.records.length; i++) { + if (that.oldSlelectRows.indexOf(res.result.records[i].id) > -1) { + res.result.records[i].distable = true + } else { + res.result.records[i].distable = false + } + } + this.dataSource = res.result.records + this.ipagination.total = res.result.total + } + if (res.code === 510) { + this.$message.warning(res.message) + } + this.loading = false + }) + }, + showModal(oldSlelectRows) { + this.oldSlelectRows = oldSlelectRows + this.visible = true + this.loadData(1) + }, + getQueryParams() { + let param = Object.assign({}, this.queryParam, this.isorter) + param.field = this.getQueryField() + param.pageNo = this.ipagination.current + param.pageSize = this.ipagination.pageSize + return filterObj(param) + }, + //鏌ヨ鏉′欢澶勭悊 + getQueryField() { + let str = 'id,' + for (let a = 0; a < this.columns.length; a++) { + str += ',' + this.columns[a].dataIndex + } + return str + }, + searchReset(num) { + let that = this + if (num !== 0) { + that.loadData(1) + } + that.selectborrowIds = [] + }, + close() { + this.searchReset(0) + this.selectedRowKeys = [] + this.visible = false + }, + handleTableChange(pagination, filters, sorter) { + //TODO 绛涢�� + if (Object.keys(sorter).length > 0) { + this.isorter.column = sorter.field + this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc' + } + this.ipagination = pagination + this.loadData() + }, + handleSubmit() { + this.$bus.$emit('selectionRows', this.selectionRows) + this.searchReset(0) + this.close() + }, + onSelectChange(selectionRows) { + this.selectionRows = selectionRows + }, + onSearch() { + this.loadData(1) + }, + searchQuery() { + this.loadData(1); + }, + searchReset() { + this.queryParam = {} + this.loadData(1) + }, + }, +} +</script> + +<style scoped> +.ant-table-tbody .ant-table-row td { + padding-top: 10px; + padding-bottom: 10px; +} + +#components-layout-demo-custom-trigger .trigger { + font-size: 18px; + line-height: 64px; + padding: 0 24px; + cursor: pointer; + transition: color 0.3s; +} +</style> \ No newline at end of file diff --git a/src/views/tms/modules/outBound/JSelectOutboundToolModal.vue b/src/views/tms/modules/outBound/JSelectOutboundToolModal.vue index 2ffd5b2..91b2cbb 100644 --- a/src/views/tms/modules/outBound/JSelectOutboundToolModal.vue +++ b/src/views/tms/modules/outBound/JSelectOutboundToolModal.vue @@ -170,10 +170,18 @@ this.loading = false }) }, - showModal(oldSelectRow) { + showModal(oldSelectRow, classifyId) { this.oldSelectRow = oldSelectRow this.visible = true - this.queryParam.status = '1' + this.queryParam.quantity = 0 + this.queryParam.classifyId = classifyId + this.queryParam.excludeIds = oldSelectRow + this.loadData(1) + }, + showOrderModal(oldSelectRow) { + this.oldSelectRow = oldSelectRow + this.visible = true + this.queryParam.quantity = 0 this.queryParam.excludeIds = oldSelectRow this.loadData(1) }, diff --git a/src/views/tms/modules/outBound/OutboundDetailSelectList.vue b/src/views/tms/modules/outBound/OutboundDetailSelectList.vue new file mode 100644 index 0000000..2d7a3d3 --- /dev/null +++ b/src/views/tms/modules/outBound/OutboundDetailSelectList.vue @@ -0,0 +1,215 @@ +<template> + <a-card :bordered="false" :class="'cust-erp-sub-tab'"> + <div class="table-operator" v-if="mainId"> + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :scroll="{x:true}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type:'checkbox'}" + @change="handleTableChange"> + + <span slot="action" slot-scope="text, record"> + <a @click="handleOutbound(record)">鍑哄簱</a> + </span> + </a-table> + </div> + + </a-card> +</template> + +<script> + + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + import { postAction } from '../../../../api/manage' + + export default { + name: "OutboundDetailList", + mixins:[JeecgListMixin], + components: { + }, + props:{ + mainId:{ + type:String, + default:'', + required:false + } + }, + watch:{ + mainId:{ + immediate: true, + handler(val) { + if(!this.mainId){ + this.clearList() + }else{ + console.log('mainId',val) + this.queryParam['outStorehouseId'] = val + this.queryParam.status = ['1','2'].join(',') + this.loadData(1); + } + } + } + }, + data () { + return { + description: 'tms_outbound_order绠$悊椤甸潰', + disableMixinCreated:true, + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:30, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'宸ュ叿缂栫爜', + align:"left", + dataIndex: 'toolNum' + }, + { + title:'宸ュ叿缂栧彿', + align:"left", + dataIndex: 'toolId' + }, + { + title:'宸ュ叿绫诲瀷', + align:"center", + dataIndex: 'applicationType_dictText' + }, + { + title:'涓枃鍚嶇О', + align:"center", + dataIndex: 'chineseName' + }, + { + title:'鍨嬪彿/鍥惧彿', + align:"left", + dataIndex: 'toolModel' + }, + { + title:'鐢宠鍑哄簱鏁伴噺', + align:"left", + dataIndex: 'outboundQuantity' + }, + // { + // title:'宸插嚭搴撴暟閲�', + // align:"left", + // dataIndex: 'outActualCount' + // }, + { + title:'鍑哄簱鐘舵��', + align:"center", + dataIndex: 'status_dictText' + }, + { + title:'鍒�鍏锋潗鏂�', + align:"center", + dataIndex: 'toolMaterial' + }, + { + title:'闆朵欢鏉愭枡', + align:"center", + dataIndex: 'partMaterial' + }, + { + title:'鍘傚', + align:"center", + dataIndex: 'supplierId' + }, + { + title:'浠撳簱', + align:"center", + dataIndex: 'warehouseName' + }, + { + title:'鍑哄簱搴撲綅', + align:"center", + dataIndex: 'outboundLocation' + }, + // { + // title:'鍙敤搴撳瓨鏁伴噺', + // align:"left", + // dataIndex: 'quantity' + // }, + { + title:'鍒涘缓鏃堕棿', + align:"left", + dataIndex: 'createTime' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align:"center", + fixed:"right", + width:50, + scopedSlots: { customRender: 'action' }, + } + ], + url: { + list: "/tms/outboundOrder/listOutboundDetailByMainId", + outbound: "/tms/outboundOrder/outBoundByApply", + delete: "/tms/outboundOrder/deleteOutboundDetail", + deleteBatch: "/tms/outboundOrder/deleteBatchOutboundDetail", + exportXlsUrl: "/tms/outboundOrder/exportOutboundDetail", + importUrl: "/tms/outboundOrder/importOutboundDetail", + }, + dictOptions:{ + outStorehouseType:[], + } + } + }, + created() { + }, + computed: { + importExcelUrl(){ + return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}`; + } + }, + methods: { + onSelectChange(selectedRowKeys, selectionRows) { + this.selectedRowKeys = selectedRowKeys; + this.selectionRows = selectionRows; + this.$emit('select-change', selectedRowKeys, selectionRows) + }, + clearList(){ + this.dataSource=[] + this.selectedRowKeys=[] + this.ipagination.current = 1 + }, + handleOutbound(record) { + console.log(this.mainId) + console.log(record) + const params = [ + { + outBoundOrderId: this.mainId, + outboundDetailId: record.id, + outboundQuantity: record.outboundQuantity + } + ] + postAction(this.url.outbound, params).then(res=>{ + if(res.success){ + this.loadData(1) + this.$emit("ok") + this.$message.success(res.message) + }else{ + this.$message + } + }) + } + + } + } +</script> +<style scoped> + @import '~@assets/less/common.less' +</style> diff --git a/src/views/tms/modules/outBound/OutboundListLeft.vue b/src/views/tms/modules/outBound/OutboundListLeft.vue new file mode 100644 index 0000000..61a2487 --- /dev/null +++ b/src/views/tms/modules/outBound/OutboundListLeft.vue @@ -0,0 +1,322 @@ +<template> + <a-card + :loading="cardLoading" + :bordered="false" + title="宸ュ叿淇℃伅" + style="height: 100%;" + > + <a-spin :spinning="loading"> + <a-alert + type="info" + :showIcon="true" + style="margin-right: 54px;" + > + <div slot="message"> + 褰撳墠锛�<span v-if="this.currSelected.title">{{ getCurrSelectedTitle() }}</span> + <a + v-if="this.currSelected.title" + style="margin-left: 10px" + @click="onClearSelected" + >鍙栨秷</a> + </div> + </a-alert> + <div class="drawer-bootom-button"> + <a-dropdown + :trigger="['click']" + placement="bottomCenter" + > + <a-menu slot="overlay"> + <a-menu-item + key="1" + @click="expandAll" + >灞曞紑鎵�鏈�</a-menu-item> + <a-menu-item + key="2" + @click="closeAll" + >鍚堝苟鎵�鏈�</a-menu-item> + <a-menu-item + key="3" + @click="refreshTree" + >鍒锋柊</a-menu-item> + </a-menu> + <a-button> + <a-icon type="bars" /> + </a-button> + </a-dropdown> + </div> + + <a-input-search + @search="handleSearch" + style="width:100%;margin-top: 10px" + placeholder="妫�绱㈠伐鍏峰垎绫�" + allowClear + v-model="searchInput" + @change="handleChange" + /> + + <!-- showLine --> + <a-tree + :checkStrictly="checkStrictly" + :expandedKeys.sync="expandedKeys" + :selectedKeys="selectedKeys" + :dropdownStyle="{maxHeight:'200px',overflow:'auto'}" + :treeData="treeDataSource" + :autoExpandParent="autoExpandParent" + @select="onSelect" + @expand="onExpand" + > + <template + slot="title" + slot-scope="{title, type, rfield1}" + > + <Tooltip + placement="top" + title="宸ュ叿鍒嗙被" + > + <i + v-if="type == 0" + class="action-jeecg actioncompany2" + style="font-size: 18px;" + /> + </Tooltip> + + <span v-if="title.indexOf(searchValue) > -1"> + {{ title.substr(0, title.indexOf(searchValue)) }} + <span class="replaceSearch">{{ searchValue }}</span> + {{ title.substr(title.indexOf(searchValue) + searchValue.length) }} + </span> + <span v-else>{{ title }}</span> + + </template> + </a-tree> + </a-spin> + </a-card> +</template> + +<script> +import { getAction } from '@/api/manage' +import Tooltip from 'ant-design-vue/es/tooltip' +export default { + name: 'OutboundListLeft', + components: { + Tooltip, + }, + props: ['value'], + data() { + return { + searchInput: '', + cardLoading: false, + loading: false, + treeDataSource: [], + selectedKeys: [], + expandedKeys: [], + url: { + factoryTreeList: '/tms/toolsClassify/loadTree', + }, + searchValue: '', + dataList: [], + autoExpandParent: true, + checkStrictly: true, + allTreeKeys: [], + currSelected: {}, + hiding: false, + } + }, + created() { + this.queryTreeData(); + this.closeAll(); + }, + methods: { + getCurrSelectedTitle() { + return !this.currSelected.title ? '' : this.currSelected.title; + }, + onClearSelected() { + this.hiding = true; + this.currSelected = {}; + this.selectedKeys = []; + }, + onSelect(selectedKeys, e) { + this.hiding = false; + let record = e.node.dataRef; + this.currSelected = Object.assign({}, record); + this.selectedKeys = [record.key]; + }, + onExpand(expandedKeys) { + this.expandedKeys = expandedKeys; + this.autoExpandParent = false; + }, + queryTreeData() { + this.loading = true; + this.cardLoading = true; + getAction(this.url.factoryTreeList).then((res) => { + if (res.success) { + this.dataList = []; + this.allTreeKeys = []; + this.treeDataSource = res.result; + this.generateList(res.result); + } else { + this.$message.warn(res.message); + } + }).finally(() => { + this.loading = false; + this.cardLoading = false; + }) + }, + + handleChange() { + let search = this.searchInput; + let expandedKeys = this.dataList + .map(item => { + if (item.title.indexOf(search) > -1) { + return this.getParentKey(item.key, this.treeDataSource); + } + return null; + }) + .filter((item, i, self) => item && self.indexOf(item) === i); + Object.assign(this, { + expandedKeys, + searchValue: search, + autoExpandParent: true, + }); + }, + handleSearch(value) { + let search = value; + let expandedKeys = this.dataList + .map(item => { + if (item.title.indexOf(search) > -1) { + return this.getParentKey(item.key, this.treeDataSource); + } + return null; + }) + .filter((item, i, self) => item && self.indexOf(item) === i); + Object.assign(this, { + expandedKeys, + searchValue: search, + autoExpandParent: true, + }); + }, + getParentKey(key, tree) { + let parentKey; + for (let i = 0; i < tree.length; i++) { + const node = tree[i]; + if (node.children) { + if (node.children.some(item => item.key === key)) { + parentKey = node.key; + } else if ( + this.getParentKey(key, node.children)) { + parentKey = this.getParentKey(key, node.children); + } + } + } + return parentKey; + }, + + generateList(data) { + for (let i = 0; i < data.length; i++) { + const node = data[i]; + const key = node.key; + const title = node.title; + this.dataList.push({ key, title: title }); + this.allTreeKeys.push(key); + if (node.children) { + this.generateList(node.children); + } + } + }, + expandAll() { + this.expandedKeys = this.allTreeKeys; + }, + closeAll() { + this.expandedKeys = this.allSiteIds; + }, + refreshTree() { + this.queryTreeData(); + } + }, + mounted() { + this.$bus.$on('queryTreeData', this.queryTreeData); + }, + //鐩戝惉 + watch: { + currSelected(val) {//鐩戝惉currSelected 鍙樺寲锛屽皢鍙樺寲鍚庣殑鏁板�间紶閫掔粰 getCurrSelected 浜嬩欢 + this.$bus.$emit('getCurrSelected', val) + }, + } +} +</script> + +<style scoped> +.replaceSearch { + color: #40a9ff; + font-weight: bold; + background-color: rgb(204, 204, 204); +} +/*闅愯棌鏍戠殑榛樿icon*/ +.ant-tree-switcher-noop { + display: none !important; +} +/*闅愯棌鏍戠殑榛樿绔栫嚎*/ +.ant-tree.ant-tree-show-line li:not(:last-child):before { + border-left: 0px; +} + +.ant-card-body .table-operator { + margin: 15px; +} + +.anty-form-btn { + width: 100%; + text-align: center; +} + +.anty-form-btn button { + margin: 0 5px; +} + +.anty-node-layout .ant-layout-header { + padding-right: 0; +} + +.header { + padding: 0 8px; +} + +.header button { + margin: 0 3px; +} + +.ant-modal-cust-warp { + height: 100%; +} + +.ant-modal-cust-warp .ant-modal-body { + height: calc(100% - 110px) !important; + overflow-y: auto; +} + +.ant-modal-cust-warp .ant-modal-content { + height: 90% !important; + overflow-y: hidden; +} + +#app .desktop { + height: auto !important; +} + +/** Button鎸夐挳闂磋窛 */ +.ant-btn { + margin-left: 3px; +} +.ant-alert { + padding: 5px 15px 5px 37px; +} +.drawer-bootom-button { + position: absolute; + top: 1px; + /* padding: 10px 16px; */ + text-align: left; + right: 0; + background: #fff; + border-radius: 0 0 2px 2px; +} +</style> \ No newline at end of file diff --git a/src/views/tms/modules/outBound/OutboundListRight.vue b/src/views/tms/modules/outBound/OutboundListRight.vue new file mode 100644 index 0000000..76e3f79 --- /dev/null +++ b/src/views/tms/modules/outBound/OutboundListRight.vue @@ -0,0 +1,430 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col + :md="6" + :sm="8" + > + <a-form-item + label="宸ュ叿缂栧彿" + :labelCol="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ュ伐鍏风紪鍙锋绱�" + v-model="queryParam.toolCode" + ></a-input> + </a-form-item> + </a-col> + <a-col + :md="6" + :sm="8" + > + <a-form-item + label="鍨嬪彿/鍥惧彿" + :labelCol="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ュ瀷鍙�/鍥惧彿妫�绱�" + v-model="queryParam.toolModel" + ></a-input> + </a-form-item> + </a-col> + <a-col :md="6" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </span> + </a-col> + + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <Tooltip + placement="top" + title="閫夋嫨宸ュ叿鍒嗙被鍚庡啀鎵ц鏂板" + > + <a-button @click="handleAdd(nodeSelected)" type="primary" icon="plus" :disabled="!nodeSelected.key || nodeSelected.entity.leafFlag === '2'">鏂板</a-button> + </Tooltip> + <a-button type="primary" @click="selectOutboundOrder">鐢宠鍗曞嚭搴�</a-button> + <a-button type="primary" icon="download" @click="handleExportXls('tms_tools_classify')">瀵煎嚭</a-button> + <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> + <a-button type="primary" icon="import">瀵煎叆</a-button> + </a-upload> + </div> + + <!-- table鍖哄煙-begin --> + <div> + + <a-table + ref="table" + size="middle" + :scroll="{x:true}" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type:'radio'}" + :customRow="handleRowClick" + class="j-table-force-nowrap" + @change="handleTableChange"> + +<!-- <template slot="htmlSlot" slot-scope="text">--> +<!-- <div v-html="text"></div>--> +<!-- </template>--> +<!-- <template slot="imgSlot" slot-scope="text,record">--> +<!-- <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span>--> +<!-- <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>--> +<!-- </template>--> +<!-- <template slot="fileSlot" slot-scope="text">--> +<!-- <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span>--> +<!-- <a-button--> +<!-- v-else--> +<!-- :ghost="true"--> +<!-- type="primary"--> +<!-- icon="download"--> +<!-- size="small"--> +<!-- @click="downloadFile(text)">--> +<!-- 涓嬭浇--> +<!-- </a-button>--> +<!-- </template>--> + + <span slot="action" slot-scope="text, record"> + <a @click="handleDetail(record)">璇︽儏</a> + </span> + + </a-table> + </div> + + <a-tabs defaultActiveKey="1"> + <a-tab-pane key="1"> + <span slot="tab"> + <a-badge>鍙傛暟 </a-badge> + </span> + <para-hole-tools-list ref="paraHoleToolsList"></para-hole-tools-list> + <para-threading-tool-list ref="paraThreadingToolList"></para-threading-tool-list> + <para-mill-tool-list ref="paraMillToolList"></para-mill-tool-list> + <para-turning-tools-list ref="paraTurningToolsList"></para-turning-tools-list> + <para-blade-list ref="paraBladeList"></para-blade-list> + <para-common-tool-list ref="paraCommonToolList"></para-common-tool-list> + </a-tab-pane> + + <a-tab-pane + key="2" + forceRender + > + <span slot="tab"> + <a-badge>绠$悊鍙傛暟 </a-badge> + </span> + <tools-config-property-list ref="toolsConfigPropertyList"></tools-config-property-list> + </a-tab-pane> + </a-tabs> + + <outbound-modal ref="outboundModal" @ok="selectListOK"></outbound-modal> + <OutboundOrderSelectList ref="outboundOrderSelectList" @ok="selectListOK"></OutboundOrderSelectList> + <base-tools-modal ref="modalForm" @ok="modalFormOk" :nodeSelected="nodeSelected"></base-tools-modal> + </a-card> +</template> + +<script> + + import '@/assets/less/TableExpand.less' + import { mixinDevice } from '@/utils/mixin' + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + import BaseToolsModal from '../baseTools/BaseToolsModal' + import Tooltip from 'ant-design-vue/es/tooltip' + import { getAction, postAction, deleteAction, requestPut } from '@api/manage' + import OutboundModal from './OutboundModal' + import OutboundOrderSelectList from './OutboundOrderSelectList' + import ParaHoleToolsList from '../baseTools/ParaHoleToolsList' + import ToolsConfigPropertyList from '../baseTools/ToolsConfigPropertyList' + import ParaMillToolList from '../baseTools/ParaMillToolList' + import ParaThreadingToolList from '../baseTools/ParaThreadingToolList' + import ParaTurningToolsList from '../baseTools/ParaTurningToolsList' + import ParaCommonToolList from '../baseTools/ParaCommonToolList' + import ParaBladeList from '../baseTools/ParaBladeList' + + export default { + name: 'OutboundListRight', + mixins:[JeecgListMixin, mixinDevice], + components: { + OutboundModal, + OutboundOrderSelectList, + BaseToolsModal, + Tooltip, + ParaHoleToolsList, + ToolsConfigPropertyList, + ParaMillToolList, + ParaThreadingToolList, + ParaTurningToolsList, + ParaCommonToolList, + ParaBladeList + }, + data () { + return { + description: '宸ュ叿鍑哄簱椤甸潰', + /* 鍒嗛〉鍙傛暟 */ + ipagination:{ + current: 1, + pageSize: 5, + pageSizeOptions: ['5', '10', '20', '30'], + showTotal: (total, range) => { + return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�" + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'宸ュ叿缂栫爜', + align:"center", + dataIndex: 'toolCode' + }, + { + title:'宸ュ叿缂栧彿', + align:"center", + dataIndex: 'toolId' + }, + { + title:'宸ュ叿绫诲瀷', + align:"center", + dataIndex: 'signCode' + }, + { + title:'涓枃鍚嶇О', + align:"center", + dataIndex: 'chineseName' + }, + { + title:'鍨嬪彿/鍥惧彿', + align:"center", + dataIndex: 'toolModel' + }, + { + title:'鍒�鍏锋潗鏂�', + align:"center", + dataIndex: 'toolMaterial' + }, + { + title:'闆朵欢鏉愭枡', + align:"center", + dataIndex: 'partMaterial' + }, + { + title:'鍑哄簱绫诲瀷', + align:"center", + dataIndex: 'outStorehouseType_dictText' + }, + { + title:'搴撲綅鍙�', + align:"center", + dataIndex: 'goodsShelvesCode' + }, + { + title:'鍑哄簱鏁伴噺', + align:"center", + dataIndex: 'outNumber' + }, + { + title:'鍒涘缓浜�', + align:"center", + dataIndex: 'createBy' + }, + { + title:'鍒涘缓鏃堕棿', + align:"center", + dataIndex: 'createTime' + }, + // { + // title: '鎿嶄綔', + // dataIndex: 'action', + // align:"center", + // fixed:"right", + // width:147, + // scopedSlots: { customRender: 'action' } + // } + ], + url: { + list: "/tms/outStoreDetail/list", + paraHolesToolsList:"/tms/baseTools/paraHolesToolsList", + paraCommonToolList:"/tms/baseTools/paraCommonToolList", + paraThreadingToolList:"/tms/baseTools/paraThreadingToolList", + paraMillToolList:"/tms/baseTools/paraMillToolList", + paraTurningToolsList:"/tms/baseTools/paraTurningToolsList", + paraBladeList:"/tms/baseTools/paraBladeList", + delete: "/tms/baseTools/delete", + deleteBatch: "/tms/baseTools/deleteBatch", + edit: '/tms/baseTools/edit', + exportXlsUrl: "/tms/baseTools/exportXls", + importExcelUrl: "tms/baseTools/importExcel", + queryParaByToolCode:"/tms/baseTools/queryByToolCode", + queryByToolCode:"/tms/toolsConfigProperty/queryByToolCode" + }, + dictOptions:{}, + superFieldList:[], + nodeSelected: {}, // 褰撳墠閫変腑鐨勮妭鐐规暟鎹� + paraTypeFlag:'' + } + }, + created() { + this.$bus.$on('getCurrSelected', (data) => { + console.log(data) + //getCurrSelected 浜嬩欢 鎺ユ敹缁勪欢浼犻�掔殑鍙傛暟 + this.nodeType = (data.type == undefined ? 0 : data.type); + this.paraTypeFlag = (data.entity == undefined ? 0 : data.entity.paraTypeFlag) + this.nodeSelected = data; + this.queryParam.classifyId = data.key + this.loadData() + this.clearPara() + }) + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + }, + methods: { + selectOutboundOrder() { + this.$refs.outboundOrderSelectList.openSelect(); + }, + handleRowClick(record) { + return { + on: { + click: () => { + console.log(record) + this.onSelectChange(record.id.split(","), [record]); + } + } + } + }, + handleAdd(entity) { + if (!this.nodeSelected ) { + this.$message.warning('璇峰厛閫夋嫨涓�涓伐鍏峰垎绫�'); + return; + } + // 鎵撳紑鏂板妯℃�佹锛屽苟浼犻�掑綋鍓嶉�変腑鐨勮妭鐐� + this.$refs.outboundModal.add(this.nodeSelected); + this.$refs.outboundModal.title = "鏂板宸ュ叿鍑哄簱"; + this.$refs.outboundModal.disableSubmit = false; + }, + handleDelete(id) { + deleteAction(this.url.delete, {id: id}).then((res) => { + if (res.success) { + //閲嶆柊璁$畻鍒嗛〉闂 + this.loadData() + this.$message.success(res.message); + this.$bus.$emit('queryTreeData') + this.clearPara() + } else { + this.$message.warning(res.message); + } + }); + }, + selectListOK() { + this.loadData() + }, + modalFormOk() { + this.loadData(); // 鍒锋柊琛ㄦ牸鏁版嵁 + this.$bus.$emit('queryTreeData') //鍒锋柊宸︿晶鏍� + }, + onSelectChange(selectedRowKeys, selectionRows) { + this.selectedRowKeys = selectedRowKeys; + this.selectionRows = selectionRows; + const toolCode = this.selectionRows[0].toolCode + //閫氳繃id鏌ヨ绠$悊鍙傛暟鍜屽弬鏁版暟鎹� + getAction(this.url.queryParaByToolCode, { toolCode: toolCode,paraTypeFlag:this.paraTypeFlag}).then((res) => { + if (res.success) { + if(this.paraTypeFlag === "1"){ + this.$refs.paraCommonToolList.getPara(res.result); + }else if(this.paraTypeFlag === "2"){ + this.$refs.paraHoleToolsList.getPara(res.result); + }else if(this.paraTypeFlag === "3"){ + this.$refs.paraThreadingToolList.getPara(res.result); + }else if(this.paraTypeFlag === "4"){ + this.$refs.paraMillToolList.getPara(res.result); + }else if(this.paraTypeFlag === "5"){ + this.$refs.paraTurningToolsList.getPara(res.result); + }else if(this.paraTypeFlag === "6"){ + this.$refs.paraBladeList.getPara(res.result); + } + } else { + this.$message.warning(res.message); + } + }) + getAction(this.url.queryByToolCode, { toolCode: toolCode}).then((res) => { + if (res.success) { + this.$refs.toolsConfigPropertyList.getPara(res.result); + } else { + this.$message.warning(res.message); + } + }) + + }, + // 澶勭悊缂栬緫鎸夐挳鐐瑰嚮浜嬩欢 + handleEditSelected() { + if (this.selectedRowKeys.length === 0) { + this.$message.warning('璇烽�夋嫨涓�鏉¤褰曡繘琛岀紪杈�'); + return; + } + const selectedRecord = this.dataSource.find(item => item.id === this.selectedRowKeys[0]); + if (selectedRecord) { + this.handleEdit(selectedRecord); + } + }, + onClearSelected() { + this.selectedKeys = []; + this.nodeSelected = {}; // 娓呯┖閫変腑鐨勮妭鐐� + this.dataSource = []; // 娓呯┖琛ㄦ牸鏁版嵁 + }, + //閲嶇疆 + searchReset() { + this.queryParam = {} + this.loadData(1); + this.clearPara() + }, + //娓呯┖閫変腑鍙婂弬鏁� + clearPara(){ + this.selectedRowKeys = [] + this.$refs.paraCommonToolList.visable = false + this.$refs.paraHoleToolsList.visable = false + this.$refs.paraThreadingToolList.visable = false + this.$refs.paraMillToolList.visable = false + this.$refs.paraTurningToolsList.visable = false + this.$refs.paraBladeList.visable = false + this.$refs.toolsConfigPropertyList.visable = false + } + + }, + } +</script> +<style scoped> + @import '~@assets/less/common.less'; + .enable { + color: green; + } + .disable { + color: red; + } +</style> \ No newline at end of file diff --git a/src/views/tms/modules/outBound/OutboundModal.vue b/src/views/tms/modules/outBound/OutboundModal.vue new file mode 100644 index 0000000..7123333 --- /dev/null +++ b/src/views/tms/modules/outBound/OutboundModal.vue @@ -0,0 +1,312 @@ +<template> + <j-modal + :title="title" + :width="width" + :visible="visible" + :confirmLoading="confirmLoading" + switchFullscreen + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + <a-spin :spinning="confirmLoading"> + <a-form-model ref="form" :model="model" :rules="validatorRules"> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜"> + <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О"> + <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName" :disabled="true" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item label="鍑哄簱绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="outStorehouseType"> + <j-dict-select-tag :disabled="disableSubmit" @change="handleTypeChange" type="list" v-model="model.outStorehouseType" dictCode="out_storehouse_type" placeholder="璇烽�夋嫨鍑哄簱绫诲瀷" /> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-spin> + + <a-button v-show="selectBorrowTool" type="primary" :style="{ marginBottom: '8px' }" @click="selectOutBoundTool">閫夋嫨鍑哄簱宸ュ叿</a-button> + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :scroll="{x:true}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="null" + @change="handleTableChange"> + + <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index"> + <div :key="col.dataIndex"> + <a-input-number + v-if="col.dataIndex === 'outboundQuantity'" + :disabled="record.quantity <= 1" + :value="text" + @change="(e) => handleChange(e, record.key, col, index)" + :min="1" + /> + </div> + </template> + <span slot="action" v-if="disableSubmit === false" slot-scope="text, record, index"> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record, index)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </span> + </a-table> + <template slot="footer" v-if="disableSubmit === false"> + <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button> + <a-button @click="handleOk" :disabled="isDisabled" type="primary">鍑哄簱</a-button> + </template> + + <j-select-outbound-tool-modal ref="selectOutBoundToolModal"></j-select-outbound-tool-modal> + </j-modal> + +</template> + +<script> + +import { validateDuplicateValue } from '@/utils/util' +import OutboundDetailList from '../../OutboundDetailList.vue' +import JSelectOutboundToolModal from './JSelectOutboundToolModal.vue' +import { postAction } from '../../../../api/manage' +import title from 'ant-design-vue/lib/skeleton/Title' + +export default { + name: "OutboundOrderModal", + components: { + OutboundDetailList, + JSelectOutboundToolModal + }, + data () { + return { + title: '', + width:1200, + visible: false, + disableSubmit: false, + isDisabled: false, + addShow: true, + selectBorrowTool: false, + model:{ + }, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 }, + }, + //琛ㄦ牸鍙傛暟 + ipagination: { + current: 1, + pageSize: 10, + total: 0, + }, + dataSource: [], + loading: false, + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'宸ュ叿缂栫爜', + align:"center", + dataIndex: 'toolNum' + }, + { + title:'宸ュ叿缂栧彿', + align:"center", + dataIndex: 'toolId' + }, + { + title:'鍙敤搴撳瓨', + align:"center", + dataIndex: 'quantity' + }, + { + title:'鍑哄簱鏁伴噺', + align:"center", + dataIndex: 'outboundQuantity', + scopedSlots: { customRender: 'outboundQuantity' }, + }, + { + title:'鍑哄簱浠撳簱', + align:"center", + dataIndex: 'warehouseName' + }, + { + title:'鍑哄簱搴撲綅', + align:"center", + dataIndex: 'outboundLocation' + }, + // { + // title:'鍑哄簱鐘舵��;1.鏈嚭搴擄紱2.閮ㄥ垎鍑哄簱锛�3.鍑哄簱瀹屾垚', + // align:"center", + // dataIndex: 'status' + // }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align:"center", + fixed:"right", + width:147, + scopedSlots: { customRender: 'action' }, + } + ], + confirmLoading: false, + validatorRules: { + outStorehouseType: [ + { required: true, message: '璇烽�夋嫨鍑哄簱绫诲瀷!'}, + ] + }, + url: { + outbound: "/tms/outboundOrder/outBoundByAdd", + list: "/tms/outboundOrder/listOutboundDetailByMainId", + add: "/tms/outboundOrder/addTotal", + edit: "/tms/outboundOrder/editTotal", + }, + classifyId: '' + } + }, + created () { + //澶囦唤model鍘熷鍊� + this.modelDefault = JSON.parse(JSON.stringify(this.model)); + }, + mounted() { + this.$bus.$on('selectionRows', (data) => { + for (let i = 0; i < data.length; i++) { + this.dataSource.push({ + id: data[i].id, + toolCode:data[i].toolCode, + toolNum:data[i].toolNum, + toolId: data[i].toolId, + quantity: data[i].quantity, + outboundQuantity: data[i].quantity, + storageLocation: data[i].warehouseId, + warehouseName: data[i].warehouseName, + outboundLocation: data[i].positionCode + }) + } + this.ipagination.total = this.dataSource.length + }) + }, + methods: { + handleTypeChange(value) { + if (value === '1') { + this.selectBorrowTool = true + } + if (value === '2') { + this.selectBorrowTool = false + } + if (value === '3') { + this.selectBorrowTool = false + } + if (value === '4') { + this.selectBorrowTool = false + } + }, + handleDelete(record, index) { + this.dataSource.splice(index, 1) + }, + handleChange(value, key, column, index) { + console.log(value, key, column, index) + const temp = [...this.dataSource] + const target = temp.filter(item => key === item.key)[index]; + if (target) { + target[column.dataIndex] = value + this.dataSource = temp + if(column.dataIndex === 'outboundQuantity'){ + if(target['quantity']<value){ + this.$message.error('鍑哄簱鏁伴噺涓嶈兘澶т簬鍙敤搴撳瓨!') + this.isDisabled = true + }else{ + this.isDisabled = false + } + } + this.dataSource = temp + } + }, + selectOutBoundTool() { + console.log(this.dataSource) + let ids = this.dataSource.map(item => item.id).join(',') + this.$refs.selectOutBoundToolModal.showModal(ids, this.classifyId) + }, + add (nodeSelected) { + this.addShow = false + this.classifyId = nodeSelected.key + this.model.classifyNum = nodeSelected.entity.classifyId + this.model.classifyName = nodeSelected.entity.typeName + this.dataSource = [] + this.visible = true; + }, + close () { + this.$emit('close'); + this.addShow = true + this.visible = false; + this.$refs.form.clearValidate(); + }, + handleTableChange(pagination, filters, sorter) { + this.ipagination = pagination + }, + handleOk () { + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + if (this.dataSource == null || this.dataSource.length === 0) { + this.$message.warning('璇烽�夋嫨鍑哄簱宸ュ叿!'); + return + } + const params = this.dataSource.map(item => { + return { + toolLedgerDetailId: item.id, + toolCode: item.toolCode, + toolId: item.toolId, + outboundQuantity: item.outboundQuantity, + outStorehouseType: this.model.outStorehouseType, + storageLocation: item.storageLocation + } + }) + console.log(params) + this.confirmLoading = true; + postAction(this.url.outbound, params).then((res)=>{ + if(res.success){ + this.$message.success(res.message) + this.$emit("ok") + } else { + this.$message.warning(res.message) + } + }).finally(() => { + this.confirmLoading = false; + this.close(); + }) + }else{ + return false + } + }) + }, + handleCancel () { + this.close() + }, + + + } +} +</script> \ No newline at end of file diff --git a/src/views/tms/modules/outBound/OutboundOrderModal.vue b/src/views/tms/modules/outBound/OutboundOrderModal.vue index ec09ece..e098380 100644 --- a/src/views/tms/modules/outBound/OutboundOrderModal.vue +++ b/src/views/tms/modules/outBound/OutboundOrderModal.vue @@ -54,7 +54,7 @@ </a-col> <a-col :span="12"> <a-form-model-item v-if="addShow" label="瀹℃牳鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="auditDate"> - <j-date placeholder="璇烽�夋嫨瀹℃牳鏃堕棿" v-model="model.auditDate" style="width: 100%" disabled/> + <j-date placeholder="璇烽�夋嫨瀹℃牳鏃堕棿" :show-time="true" dateFormat="YYYY-MM-DD HH:mm" v-model="model.auditDate" style="width: 100%" disabled/> </a-form-model-item> </a-col> </a-row> @@ -218,10 +218,16 @@ confirmLoading: false, validatorRules: { outStorehouseType: [ - { required: true, message: '璇疯緭鍏ュ嚭搴撶被鍨�!'}, + { required: true, message: '璇烽�夋嫨鍑哄簱绫诲瀷!'}, ], subjectMatter: [ { required: true, message: '璇疯緭鍏ラ鐢ㄤ簨鐢�!'}, + ], + reviewer: [ + { required: true, message: '璇烽�夋嫨瀹℃牳浜�!'}, + ], + outboundTime: [ + { required: true, message: '璇烽�夋嫨鍑哄簱鏃堕棿!'}, ], }, url: { @@ -299,7 +305,7 @@ if (this.title === '缂栬緫') { ids = this.dataSource.map(item => item.toolLedgerDetailId).join(',') } - this.$refs.selectOutBoundToolModal.showModal(ids) + this.$refs.selectOutBoundToolModal.showOrderModal(ids) }, add () { this.addShow = false @@ -349,6 +355,10 @@ // 瑙﹀彂琛ㄥ崟楠岃瘉 this.$refs.form.validate(valid => { if (valid) { + if (this.dataSource == null || this.dataSource.length === 0) { + this.$message.warning('璇烽�夋嫨鍑哄簱宸ュ叿!'); + return + } this.model.outboundDetailList = this.dataSource that.confirmLoading = true; let httpurl = ''; diff --git a/src/views/tms/modules/outBound/OutboundOrderSelectList.vue b/src/views/tms/modules/outBound/OutboundOrderSelectList.vue new file mode 100644 index 0000000..46b1eb2 --- /dev/null +++ b/src/views/tms/modules/outBound/OutboundOrderSelectList.vue @@ -0,0 +1,330 @@ +<template> + <j-modal + :title="title" + :width="width" + :visible="visible" + :confirmLoading="confirmLoading" + switchFullscreen + @cancel="handleCancel" + cancelText="鍏抽棴" + :footer="null" + > + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍑哄簱鍗曠紪鍙�"> + <a-input placeholder="璇疯緭鍏ュ嚭搴撳崟缂栧彿" v-model="queryParam.outNum"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍑哄簱绫诲瀷"> + <j-dict-select-tag placeholder="璇烽�夋嫨鍑哄簱绫诲瀷" v-model="queryParam.outStorehouseType" dictCode="out_storehouse_type"/> + </a-form-item> + </a-col> + <template v-if="toggleSearchStatus"> + </template> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + <a-button type="primary" @click="handleOutbound" style="margin-left: 8px">鍑哄簱</a-button> + <a @click="handleToggleSearch" style="margin-left: 8px"> + {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> + </a> + </span> + </a-col> + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- table鍖哄煙-begin --> + <div> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� + <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + </div> + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + class="j-table-force-nowrap" + :scroll="{x:true}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="null" + :customRow="clickThenSelect" + @change="handleTableChange"> + + </a-table> + </div> + + <a-tabs defaultActiveKey="1"> + <a-tab-pane tab="鍑哄簱鐢宠鍗曟槑缁�" key="1" > + <OutboundDetailSelectList + ref="outboundDetailSelectList" :mainId="outboundDetailMainId" @ok="detailSelectListOK" + @select-change="handleDetailSelectChange" + /> + </a-tab-pane> + </a-tabs> + + </j-modal> +</template> + +<script> + + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + import { getAction, deleteAction } from '@/api/manage' + import OutboundDetailSelectList from './OutboundDetailSelectList' + import {initDictOptions,filterMultiDictText} from '@/components/dict/JDictSelectUtil' + import '@/assets/less/TableExpand.less' + import { postAction } from '../../../../api/manage' + + export default { + name: "OutboundOrderSelectList", + mixins:[JeecgListMixin], + components: { + OutboundDetailSelectList + }, + data () { + return { + title: '閫夋嫨鍑哄簱鍗曠敵璇�', + width: 1200, + visible: false, + disableSubmit: false, + confirmLoading: false, + disableMixinCreated: true, + // 琛ㄥご + columns: [ + { + title:'鍑哄簱绫诲瀷', + align:"center", + dataIndex: 'outStorehouseType_dictText', + }, + { + title:'鍑哄簱鍗曠紪鍙�', + align:"left", + dataIndex: 'outNum' + }, + { + title:'鍗曟嵁鐘舵��', + align:"center", + dataIndex: 'orderStatus_dictText' + }, + { + title:'缁忔墜浜�', + align:"center", + dataIndex: 'handler_dictText' + }, + { + title:'瀹℃牳浜�', + align:"center", + dataIndex: 'reviewer_dictText' + }, + { + title:'瀹℃牳鏃堕棿', + align:"left", + dataIndex: 'auditDate' + }, + { + title:'瀹℃牳鎰忚', + align:"center", + dataIndex: 'approvalOpinion' + }, + { + title:'鐢宠鍑哄簱鏃堕棿', + align:"left", + dataIndex: 'outboundTime' + }, + { + title:'鍑哄簱鐘舵��', + align:"center", + dataIndex: 'outStatus_dictText' + }, + { + title:'棰嗙敤浜嬬敱', + align:"center", + dataIndex: 'subjectMatter' + }, + { + title:'澶囨敞', + align:"center", + dataIndex: 'remark' + }, + { + title:'鎿嶄綔鍛�', + align:"center", + dataIndex: 'createBy' + }, + { + title:'鍒涘缓鏃堕棿', + align:"left", + dataIndex: 'createTime' + } + ], + url: { + list: "/tms/outboundOrder/list", + outbound: "/tms/outboundOrder/outBoundByApply", + delete: "/tms/outboundOrder/delete", + submit: "/tms/outboundOrder/submit", + deleteBatch: "/tms/outboundOrder/deleteBatch", + exportXlsUrl: "/tms/outboundOrder/exportXls", + importExcelUrl: "tms/outboundOrder/importExcel", + }, + dictOptions:{ + outStorehouseType:[], + }, + /* 鍒嗛〉鍙傛暟 */ + ipagination:{ + current: 1, + pageSize: 5, + pageSizeOptions: ['5', '10', '50'], + showTotal: (total, range) => { + return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�" + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + selectedMainId:'', + superFieldList:[], + outboundDetailMainId: '', + } + }, + created() { + this.getSuperFieldList(); + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + } + }, + methods: { + openSelect() { + this.loadData() + this.visible = true + }, + modalFormOk() { + this.$refs.outboundDetailSelectList.clearList() + this.loadData(); + }, + detailSelectListOK() { + this.loadData() + }, + searchReset() { + this.queryParam = {} + this.onClearSelected() + this.$refs.outboundDetailSelectList.clearList() + this.loadData(1); + }, + clickThenSelect(record) { + return { + on: { + click: () => { + this.onSelectChange(record.id.split(","), [record]); + } + } + } + }, + onClearSelected() { + this.selectedRowKeys = []; + this.selectionRows = []; + this.selectedMainId = '' + this.outboundDetailMainId = '' + }, + onSelectChange(selectedRowKeys, selectionRows) { + this.selectedMainId=selectedRowKeys[0] + this.outboundDetailMainId = selectionRows[0]['id'] + }, + handleDetailSelectChange(selectedRowKeys, selectionRows) { + this.selectedRowKeys = selectedRowKeys; + this.selectionRows = selectionRows; + }, + handleOutbound() { + if (this.selectionRows.length < 1) { + this.$message.warning("璇烽�夋嫨鏄庣粏鍚庡啀鍑哄簱锛�") + return + } + const params = this.selectionRows.map((item) => { + return { + outBoundOrderId: this.selectedMainId, + outboundDetailId: item.id, + outboundQuantity: item.outboundQuantity + } + }) + postAction(this.url.outbound, params).then(res=>{ + if (res.success) { + this.$message.success(res.message); + this.onClearSelected() + this.$refs.outboundDetailSelectList.clearList() + this.$emit("ok") + this.visible = false + } else { + this.$message.warning(res.message); + } + }) + }, + handleCancel () { + this.close() + }, + close () { + this.$emit('close'); + this.onClearSelected() + this.addShow = true + this.visible = false; + // this.$refs.form.clearValidate(); + }, + loadData(arg) { + if(!this.url.list){ + this.$message.error("璇疯缃畊rl.list灞炴��!") + return + } + //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 + if (arg === 1) { + this.ipagination.current = 1; + } + this.onClearSelected() + this.queryParam.orderStatus = '3' + this.queryParam.outStatus = '1' + var params = this.getQueryParams();//鏌ヨ鏉′欢 + this.loading = true; + getAction(this.url.list, params).then((res) => { + if (res.success) { + this.dataSource = res.result.records; + this.ipagination.total = res.result.total; + } + if(res.code===510){ + this.$message.warning(res.message) + } + this.loading = false; + }) + }, + getSuperFieldList(){ + let fieldList=[]; + fieldList.push({type:'string',value:'outNum',text:'鍑哄簱鍗曠紪鍙�',dictCode:''}) + fieldList.push({type:'string',value:'outStorehouseType',text:'鍑哄簱绫诲瀷',dictCode:'out_storehouse_type'}) + fieldList.push({type:'string',value:'handler',text:'缁忔墜浜�',dictCode:''}) + fieldList.push({type:'sel_user',value:'reviewer',text:'瀹℃牳浜�'}) + fieldList.push({type:'string',value:'orderStatus',text:'鍗曞瓙鐘舵��',dictCode:''}) + fieldList.push({type:'date',value:'auditDate',text:'瀹℃牳鏃堕棿'}) + fieldList.push({type:'string',value:'approvalOpinion',text:'瀹℃牳鎰忚',dictCode:''}) + fieldList.push({type:'string',value:'subjectMatter',text:'棰嗙敤浜嬬敱',dictCode:''}) + fieldList.push({type:'date',value:'outboundTime',text:'鍑哄簱鏃堕棿'}) + fieldList.push({type:'string',value:'remark',text:'澶囨敞',dictCode:''}) + fieldList.push({type:'string',value:'createBy',text:'鎿嶄綔鍛�',dictCode:''}) + fieldList.push({type:'date',value:'createTime',text:'鍒涘缓鏃堕棿'}) + this.superFieldList = fieldList + } + } + } +</script> +<style scoped> + @import '~@assets/less/common.less' +</style> \ No newline at end of file diff --git a/src/views/tms/modules/toolsClassify/ToolsClassifyForm.vue b/src/views/tms/modules/toolsClassify/ToolsClassifyForm.vue index 0babff4..d442612 100644 --- a/src/views/tms/modules/toolsClassify/ToolsClassifyForm.vue +++ b/src/views/tms/modules/toolsClassify/ToolsClassifyForm.vue @@ -108,7 +108,7 @@ leafFlagShow:true, validatorRules: { classifyId: [ - { required: true, message: '璇疯緭鍏ュ伐鍏峰垎绫荤紪鍙�!'}, + { required: false, message: '璇疯緭鍏ュ伐鍏峰垎绫荤紪鍙�!'}, { validator: this.validateNum }, ], typeName: [ diff --git a/src/views/tms/modules/toolsClassify/ToolsClassifyListRight.vue b/src/views/tms/modules/toolsClassify/ToolsClassifyListRight.vue index 14b3ab0..fa65571 100644 --- a/src/views/tms/modules/toolsClassify/ToolsClassifyListRight.vue +++ b/src/views/tms/modules/toolsClassify/ToolsClassifyListRight.vue @@ -167,6 +167,18 @@ data () { return { description: '宸ュ叿鍒嗙被绠$悊椤甸潰', + /* 鍒嗛〉鍙傛暟 */ + ipagination:{ + current: 1, + pageSize: 10, + pageSizeOptions: ['10', '20', '50'], + showTotal: (total, range) => { + return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�" + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, // 琛ㄥご columns: [ { @@ -366,8 +378,10 @@ .then((res) => { if (res.success) { this.dataSource = res.result.records; // 鏇存柊琛ㄦ牸鏁版嵁 + this.ipagination.total = res.result.total } else { this.$message.warning(res.message); + this.ipagination.total = 0 } }) .finally(() => { diff --git a/src/views/tms/requirement/ToolSharpeningList .vue b/src/views/tms/requirement/ToolSharpeningList .vue new file mode 100644 index 0000000..cf8841a --- /dev/null +++ b/src/views/tms/requirement/ToolSharpeningList .vue @@ -0,0 +1,249 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="4" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍒�鍏风紪鍙�"> + <a-input placeholder="璇疯緭鍏ュ垁鍏风紪鍙�" v-model="queryParam.toolId"></a-input> + </a-form-item> + </a-col> + <a-col :xl="4" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍒冪(缁撴灉"> + <a-input placeholder="璇疯緭鍏ュ垉纾ㄧ粨鏋�" v-model="queryParam.sharpeningResult"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍒冪(鏃堕棿"> + <a-range-picker v-model="queryParam.sharpeningTime" @change="onInspectionDateChange" format="YYYY-MM-DD" value-format="YYYY-MM-DD" /> + </a-form-item> + </a-col> + <a-col :xl="4" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </span> + </a-col> + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + </div> + </div> + + <!-- table鍖哄煙-begin --> + <div> + + + <a-table + ref="table" + size="middle" + :scroll="{x:true}" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="null" + class="j-table-force-nowrap" + @change="handleTableChange"> + + + + <span slot="action" slot-scope="text, record"> + <a @click="handleDetail(record)">璇︽儏</a> + + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handleEdit(record)">缂栬緫</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + + </a-table> + </div> + + <tools-sharpening-modal ref="modalForm" @ok="modalFormOk"></tools-sharpening-modal> + </a-card> +</template> + +<script> + +import '@/assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import ToolsSharpeningModal from './modules/ToolsSharpeningModal' +import { getAction, putAction, deleteAction } from '../../../api/manage' + +export default { + name: 'ToolSharpeningList ', + mixins:[JeecgListMixin, mixinDevice], + components: { + ToolsSharpeningModal + }, + data () { + return { + description: '鍒�鍏峰垉纾�', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'鍒�鍏峰垎绫�', + align:"center", + dataIndex: 'paramaTableName_dictText' + }, + { + title:'鍒�鍏风紪鍙�', + align:"center", + dataIndex: 'toolId' + }, + { + title:'鍒�鍏峰悕绉�', + align:"center", + dataIndex: 'typeName' + }, + + { + title:'鍘傚', + align:"center", + dataIndex: 'supplierId', + }, + { + title:'鍒冪(鏃堕棿', + align:"center", + dataIndex: 'sharpeningTime' + }, + { + title:'鍒冪(缁撴灉鍙婂缓璁�', + align:"center", + dataIndex: 'sharpeningResult' + }, + { + title:'璐d换浜�', + align:"center", + dataIndex: 'responsiblePerson_dictText' + }, + + { + title:'鍒涘缓浜�', + align:"center", + dataIndex: 'createBy' + }, + + { + title:'鍒涘缓鏃堕棿', + align:"center", + dataIndex: 'createTime' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align:"center", + fixed:"right", + width:147, + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: "/tms/toolSharpening/listToolSharpening", + add: "/tms/toolSharpening/add", + delete: "/tms/toolSharpening/delete", + edit: "/tms/toolSharpening/edit", + deleteBatch: "/tms/toolSharpening/deleteBatch", + exportXlsUrl: "/tms/toolSharpening/exportXls", + importExcelUrl: "tms/toolSharpening/importExcel", + }, + dictOptions:{}, + superFieldList:[], + + } + }, + created() {}, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + }, + + methods: { + onInspectionDateChange: function(value, dateString) { + this.queryParam.sharpeningTimeBegin = dateString[0] + this.queryParam.sharpeningTimeEnd = dateString[1] + }, + + + handleEdit: function (record) { + console.log('record:', record) + this.$refs.modalForm.title = '缂栬緫' + this.$refs.modalForm.disableSubmit = false + this.$refs.modalForm.edit(record) + + }, + handleDetail:function(record){ + this.$refs.modalForm.title="璇︽儏"; + this.$refs.modalForm.disableSubmit = true; + this.$refs.modalForm.edit(record); + }, + + + handleDelete: function (id) { + if (!this.url.delete) { + this.$message.error('璇疯缃畊rl.delete灞炴��!') + return + } + deleteAction(this.url.delete, { id: id }).then((res) => { + if (res.success) { + //閲嶆柊璁$畻鍒嗛〉闂 + this.$message.success(res.message) + this.ipagination.current = 1 + this.loadData() // 寮哄埗浠庣涓�椤靛姞杞� + } else { + this.$message.warning(res.message) + } + }) + }, + searchReset() { + this.loadData(1) + }, + modalFormOk() { + this.loadData() + }, + + + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +.enable { + color: green; +} +.disable { + color: red; +} +</style> \ No newline at end of file diff --git a/src/views/tms/requirement/modules/ToolsModal.vue b/src/views/tms/requirement/modules/ToolsModal.vue new file mode 100644 index 0000000..8b6e337 --- /dev/null +++ b/src/views/tms/requirement/modules/ToolsModal.vue @@ -0,0 +1,221 @@ +<template> + <a-modal :title="title" :width="1000" :visible="visible" :maskClosable="false" @ok="handleOk" @cancel="handleCancel" + cancelText="鍏抽棴"> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <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-form-item label="宸ュ叿缂栫爜"> + <a-input placeholder="璇疯緭鍏ュ伐鍏风紪鐮佹绱�" v-model="queryParam.equipmentid"></a-input> + </a-form-item> + </a-col> + <a-col :md="3" :sm="3"> + <a-space> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </a-space> + </a-col> + </a-row> + </a-form> + </div> + + <!-- table鍖哄煙-begin --> + <div> + <a-table ref="table" size="middle" bordered rowKey="id" :scroll="{聽 y: 300聽}" :columns="columns" + :dataSource="dataSource" :pagination="ipagination" :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type:'radio'}" + @change="handleTableChange"> + </a-table> + </div> + <!-- table鍖哄煙-end --> + </a-card> + </a-modal> +</template> + +<script> +import JDictSelectTag from '@/components/dict/JDictSelectTag' +import { getAction } from '@/api/manage' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import JInput from '@/components/jeecg/JInput' +import JEllipsis from '@/components/jeecg/JEllipsis' +import Tooltip from 'ant-design-vue/es/tooltip' +import JDate from '@/components/jeecg/JDate' +import { filterObj } from '@/utils/util' + +export default { + name: 'ToolsModal', + mixins: [JeecgListMixin], + components: { + JDictSelectTag, + JEllipsis, + JInput, + Tooltip, + JDate + }, + props: { + status: { + type: Number, + default: 1 + } + }, + data() { + return { + disableSubmit:false, + title: '', + visible: false, + disableMixinCreated: true, + queryParam: {}, + columns: [{ + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode' + }, + { + title: '宸ュ叿绫诲瀷', + align: 'center', + dataIndex: 'applicationType_dictText' + }, + // { + // title: '宸ュ叿缂栧彿', + // align: 'center', + // dataIndex: 'toolId' + // }, + { + title: '涓枃鍚嶇О', + align: 'center', + dataIndex: 'chineseName' + }, + { + title: '宸ュ叿鍙傛暟鏍囪瘑', + align: 'center', + dataIndex: 'paramaTableName' + }, + { + title: '鍨嬪彿/鍥惧彿', + align: 'center', + dataIndex: 'toolModel' + }, + { + title: '涓昏閲忓崟浣�', + align: 'center', + dataIndex: 'mainUnit' + } + ], + url: { + list: '/tms/baseTools/listWithSharpedAndConfig' + } + + } + }, + created() { + + }, + methods: { + showModals() { + this.selectedRowKeys = [] + this.visible = true + this.loadData(1) + }, + getQueryParams() { + //鑾峰彇鏌ヨ鏉′欢 + let sqp = {} + if (this.superQueryParams) { + sqp['superQueryParams'] = encodeURI(this.superQueryParams) + sqp['superQueryMatchType'] = this.superQueryMatchType + } + var param = Object.assign(sqp, this.queryParam) + // param.field = this.getQueryField(); + param.pageNo = this.ipagination.current + param.pageSize = this.ipagination.pageSize + return filterObj(param) + }, + loadData(arg) { + if (!this.url.list) { + this.$message.error('璇疯缃畊rl.list灞炴��!') + return + } + //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 + if (arg === 1) { + this.ipagination.current = 1 + } + var params = this.getQueryParams()//鏌ヨ鏉′欢 + + if (!params) { + return false + } + + this.loading = true + getAction(this.url.list, params).then((res) => { + if (res.success) { + + this.dataSource = res.result.records || res.result + if (res.result.total) { + this.ipagination.total = res.result.total + } else { + this.ipagination.total = 0 + } + + } else { + // this.$message.warning(res.message) + this.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }).finally(() => { + this.loading = false + }) + }, + getQueryField() { + //TODO 瀛楁鏉冮檺鎺у埗 + // var str = ""; + // this.columns.forEach(function (value) { + // str += value.dataIndex +"," ; + // }); + // return str; + }, + modalFormOk(val) { + // 鏂板/淇敼 鎴愬姛鏃讹紝閲嶈浇鍒楄〃 + this.loadData() + this.selectedRowKeys = [val.id] + }, + searchQuery() { + this.loadData() + this.onClearSelected() + }, + searchReset() { + this.queryParam = {} + this.loadData() + this.onClearSelected() + }, + close() { + this.$emit('close') + this.visible = false + }, + handleCancel() { + this.close() + }, + handleOk() { + this.$bus.$emit('selectionRows', this.selectionRows) + this.close() + }, + } +} +</script> +<style> +@import '~@assets/less/common.less'; + +.frozenRowClass { + color: #c9c9c9; +} + +.success { + color: green; +} + +.error { + color: red; +} +</style> diff --git a/src/views/tms/requirement/modules/ToolsSharpeningModal.vue b/src/views/tms/requirement/modules/ToolsSharpeningModal.vue new file mode 100644 index 0000000..9346322 --- /dev/null +++ b/src/views/tms/requirement/modules/ToolsSharpeningModal.vue @@ -0,0 +1,286 @@ +<template> + <j-modal + :title="title" + :width="1200" + :confirmLoading="confirmLoading" + switchFullscreen + centered + :visible="visible" + :mask-closable="false" + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + + <a-spin :spinning="spinning"> + <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item prop="standardCode" label="宸ュ叿缂栧彿"> + <a-input-search v-model="model.toolId" placeholder="璇烽�夋嫨宸ュ叿缂栧彿" :disabled="disableSubmit" + @search="selectTools" enter-button + /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item prop="classify_id" label="宸ュ叿鍒嗙被缂栫爜"> + <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyId" readOnly :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + + </a-row> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item prop="paramaTableName" label="宸ュ叿鍙傛暟鏍囪瘑"> + <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" readOnly v-model="model.paramaTableName" readOnly + :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="宸ュ叿绫诲瀷"> + <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.applicationType" readOnly + :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + </a-row> + + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item prop="responsiblePerson" label="璐d换浜�"> + <j-dict-select-tag type="list" v-model="model.responsiblePerson" dictCode="sys_user,realname,id" + placeholder="璇烽�夋嫨璐d换浜�" :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鍒冪(鏃堕棿" prop="sharpeningTime"> + <j-date placeholder="璇烽�夋嫨鍒冪(鏃堕棿" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.sharpeningTime" + style="width: 100%" :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + </a-row> + + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item label="鍒冪(缁撴灉鍙婂缓璁�" prop="sharpeningResult"> + <a-textarea placeholder="閫夋嫨濉啓鍒冪(缁撴灉鍙婂缓璁�" v-model="model.sharpeningResult" + :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鍨嬪彿/鍥惧彿"> + <a-input placeholder="閫夋嫨濉啓鍨嬪彿/鍥惧彿" v-model="model.toolModel" :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item label="浠撳簱鍩庡競" prop="inspectionDate"> + <a-input placeholder="閫夋嫨濉啓浠撳簱鐪佷唤鍩庡競" v-model="model.provinceCity" readOnly + :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="搴撳尯/搴撳彿"> + <a-input placeholder="閫夋嫨濉啓搴撳尯/搴撳彿" v-model="model.warehouseId" readOnly :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item label="瀛樺偍浣嶇疆" prop="storageLocation"> + <a-input placeholder="閫夋嫨濉啓瀛樺偍浣嶇疆" v-model="model.positionCode" readOnly + :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="璁¢噺涓诲崟浣�"> + <a-input placeholder="璇峰~鍐欒閲忎富鍗曚綅" v-model="model.mainUnit" readOnly :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item label="瀛樺偍浣嶇疆" prop="storageLocation"> + <a-input placeholder="閫夋嫨濉啓瀛樺偍浣嶇疆" v-model="model.positionCode" readOnly + :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="澶囨敞"> + <a-textarea v-model="model.remark" rows="3" placeholder="璇疯緭鍏ュ娉�" :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-spin> + <template slot="footer"> + <a-button :style="{ marginRight: '8px' }" @click="handleCancel()"> + 鍏抽棴 + </a-button> + + <a-button @click="handleOk()" :disabled="disableSubmit" type="primary" :loading="confirmLoading">纭畾</a-button> + </template> + <tools-modal ref="toolListModel"></tools-modal> + + + </j-modal> +</template> + +<script> +import { getAction, postAction, requestPut } from '@/api/manage' +import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js' +import ToolsModal from '@views/tms/requirement/modules/ToolsModal.vue' + +export default { + name: 'ToolsSharpeningModal', + mixins: [JVxeTableModelMixin], + components: { + ToolsModal + }, + data() { + return { + title: '鎿嶄綔', + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 6 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 15 } + }, + confirmLoading: false, + spinning: false, + disabled: false, + disableSubmit: false, + validatorRules: { + + sharpeningTime: [ + { required: true, message: '璇烽�夋嫨鍒冪(鏃ユ湡!' } + ], + responsiblePerson: [ + { required: true, message: '璇烽�夋嫨璐d换浜�!' } + ], + sharpeningResult: [ + { required: true, message: '璇疯緭鍏ュ垉纾ㄧ粨鏋滃強寤鸿!' } + ] + }, + url: { + add: '/tms/toolSharpening/add', + edit: '/tms/toolSharpening/edit', + queryDetailList: '/tms/toolSharpening/listToolSharpening' + } + } + }, + created() { + }, + mounted() { + this.$bus.$on('selectionRows', (data) => { + console.log('selectionRows', data) + if (data && data.length > 0) { + const item = data[0] + // 浣跨敤 $set 纭繚 model 鐨勫睘鎬ф槸鍝嶅簲寮忕殑 + this.$set(this.model, 'toolId', item.toolCode) + this.$set(this.model, 'toolCode', item.id) + this.$set(this.model, 'classifyId', item.classifyId) + this.$set(this.model, 'paramaTableName', item.paramaTableName_dictText) + this.$set(this.model, 'applicationType', item.applicationType_dictText) + this.$set(this.model, 'toolModel', item.toolModel) + this.$set(this.model, 'provinceCity', item.provinceCity) + this.$set(this.model, 'warehouseId', item.warehouseId) + this.$set(this.model, 'positionCode', item.positionCode) + this.$set(this.model, 'mainUnit', item.mainUnit) + } + }) + + }, + methods: { + + selectTools: function() { + this.$refs.toolListModel.showModals() + this.$refs.toolListModel.title = '閫夋嫨宸ュ叿淇℃伅' + this.$refs.toolListModel.disableSubmit = false + }, + + add() { + this.addShow = false + this.edit() + }, + + edit(record) { + console.log(record) + // this.model = Object.assign({}, record) + this.visible = true + getAction(this.url.queryDetailList, { + id: record.id, + pageNo: 1, + pageSize: 99999 + }).then((res) => { + if (res.success) { + const readOnlyData = res.result.records[0] || {} + this.model = Object.assign({}, this.model, { + paramaTableName: readOnlyData.paramaTableName_dictText, + applicationType: readOnlyData.applicationType_dictText, + provinceCity: readOnlyData.provinceCity, + warehouseId: readOnlyData.warehouseId, + positionCode: readOnlyData.positionCode, + mainUnit: readOnlyData.mainUnit, + toolModel: readOnlyData.toolModel + }) + + } else { + this.dataSource = null + } + }) + }, + handleOk() { + const that = this + that.confirmLoading = true + + // 鉁� 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + let formData = Object.assign(this.model) + + let obj + if (!this.model.id) { + obj = postAction(this.url.add, formData) + } else { + obj = requestPut(this.url.edit, formData, { id: this.model.id }) + } + + obj.then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('ok') + that.close() + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = false + }) + } else { + that.$message.warning('璇峰~鍐欏繀濉瓧娈�') + that.confirmLoading = false + return false + } + }) + }, + + handleCancel() { + this.close() + }, + + close() { + this.$emit('close') + this.visible = false + this.$refs.form.clearValidate() + } + } +} +</script> + +<style lang="less" scoped> + +</style> \ No newline at end of file diff --git a/src/views/tms/stocktakingBound/ToolsStocktaKingBoundDetail.vue b/src/views/tms/stocktakingBound/ToolsStocktaKingBoundDetail.vue new file mode 100644 index 0000000..b6acfa5 --- /dev/null +++ b/src/views/tms/stocktakingBound/ToolsStocktaKingBoundDetail.vue @@ -0,0 +1,224 @@ +<template> + <a-card :bordered="false"> + <div> + <a-table ref="table" size="middle" bordered rowKey="id" :scroll="{ x: true }" :columns="columns" + :dataSource="dataSource" :pagination="ipagination" :loading="loading" @change="handleTableChange"> + <span slot="num" slot-scope="text, record" class="fontweight"> + {{ record.num }} + </span> + + </a-table> + <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index"> + </template> + </div> + </a-card> +</template> + +<script> +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import { getAction } from '@/api/manage' +import Tooltip from 'ant-design-vue/es/tooltip' +export default { + name: "ToolsStocktaKingBoundDetail", + components: { + Tooltip, + }, + mixins: [JeecgListMixin], + props: { + mainId: { + type: String, + default: '', + required: false + } + }, + watch: { + mainId: { + immediate: true, + handler(val) { + if (!this.mainId) { + this.clearList() + } else { + this.queryParam['stocktakingBoundId'] = val; + this.queryParam['delFlag'] = 0; + this.loadData(1); + } + } + } + }, + data() { + return { + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + }, + width: 50 + }, + + + { + title: '鍒�鍏风紪鍙�', + dataIndex: 'toolCode', + align: 'center' + }, + { + title: '宸ュ叿绫诲瀷', + dataIndex: 'applicationType_dictText', + align: 'center', + + }, + + { + title: '涓枃鍚嶇О', + dataIndex: 'chineseName', + align: 'center' + }, + + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + align: 'center' + }, + { + title: '鍒�鍏锋潗鏂�', + dataIndex: 'toolMaterial', + align: 'center' + + }, + { + title: '闆朵欢鏉愭枡', + dataIndex: 'partMaterial', + align: 'center' + }, + { + title: '鍘傚', + dataIndex: 'supplierId', + align: 'center' + + }, + { + title: '瀛樺偍浣嶇疆(搴撲綅鍙�)', + dataIndex: 'goodsShelvesId', + align: 'center' + }, + + { + title: '璐﹂潰鏁伴噺', + dataIndex: 'bookQuantity', + align: 'center' + + }, + { + title: '鍙敤鏁伴噺', + dataIndex: 'availableQuantity', + align: 'center' + + }, + { + title: '瀹炵洏鏁伴噺', + dataIndex: 'practicalQuantity', + align: 'center' + }, + { + title: '宸紓鍊�', + dataIndex: 'differenceValue', + align: 'center' + }, + { + title: '鐩樹簭鐩樼泩', + dataIndex: 'surplusDeficit_dictText', + align: 'center' + }, + { + title: '鐩樺簱鏃堕棿', + dataIndex: 'stocktakingDate', + align: 'center' + }, + { + title: '澶囨敞', + dataIndex: 'remark', + align: 'center' + } + ], + url: { + list: "/tms/toolsStocktakingBound/listToolsStocktakingBoundControllerDetailsByMainId", + }, + /* 鍒嗛〉鍙傛暟 */ + ipagination: { + current: 1, + pageSize: 20, + pageSizeOptions: ['5', '10', '20', '50'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + } + }, + created() { + }, + computed: { + }, + methods: { + clearList() { + this.dataSource = [] + this.selectedRowKeys = [] + this.ipagination.current = 1 + }, + loadData(arg) { + if (!this.url.list) { + this.$message.error("璇疯缃畊rl.list灞炴��!") + return + } + //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 + if (arg === 1) { + this.ipagination.current = 1; + } + var params = this.getQueryParams();//鏌ヨ鏉′欢 + this.loading = true; + getAction(this.url.list, params).then((res) => { + if (res.success) { + this.dataSource = res.result.records || res.result; + if (res.result.total) { + this.ipagination.total = res.result.total; + } else { + this.ipagination.total = 0; + } + //update-end---author:zhangyafei Date:20201118 for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------ + } else { + this.$message.warning(res.message) + } + }).finally(() => { + this.loading = false + }) + }, + + + } +} +</script> +<style lang="less" scoped> +@import '~@assets/less/common.less'; + +.fontweight { + font-weight: bold; +} + +/deep/ .frozenRowClass { + color: #c9c9c9; +} + +.success { + color: green; +} + +.error { + color: red; +} +</style> diff --git a/src/views/tms/stocktakingBound/ToolsStocktakingBoundList.vue b/src/views/tms/stocktakingBound/ToolsStocktakingBoundList.vue new file mode 100644 index 0000000..b4e6153 --- /dev/null +++ b/src/views/tms/stocktakingBound/ToolsStocktakingBoundList.vue @@ -0,0 +1,322 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鐩樼偣鍗曞彿"> + <j-input placeholder="璇疯緭鍏ョ洏鐐瑰崟鍙�" v-model="queryParam.orderCode"></j-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="缁忔墜浜�"> + <j-dict-select-tag dictCode="sys_user,realname,id" placeholder="璇烽�夋嫨缁忔墜浜�" v-model="queryParam.handler" + /> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + <a @click="handleToggleSearch" style="margin-left: 8px"> + {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> + </a> + </span> + </a-col> + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + + +<!-- <a-dropdown v-if="selectedRowKeys.length > 0">--> +<!-- <a-menu slot="overlay">--> +<!-- <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item>--> +<!-- </a-menu>--> +<!-- <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button>--> +<!-- </a-dropdown>--> + </div> + + <!-- table鍖哄煙-begin --> + <div> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� + <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + </div> + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + class="j-table-force-nowrap" + :scroll="{x:true}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection='{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }' :customRow='clickThenSelect' + @change="handleTabChange"> + + + + <span slot="action" slot-scope="text, record"> + <a @click="handleDetail(record)">璇︽儏</a> + <span v-if="record.approvalStatus === '1'"> + <a-divider type="vertical" /> + <a-popconfirm title="纭畾鎻愪氦鍚�?" @confirm="() => handleSubmit(record)"> + <a>鎻愪氦</a> + </a-popconfirm> + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村<a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handleEdit(record)">缂栬緫</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + </span> + </a-table> + <a-tabs defaultActiveKey="1"> + <!-- type="card" --> + <a-tab-pane tab='鐩樼偣鍗曟槑缁�' key="1"> + <div class="table-operator" style="margin:-16px"> + <tools-stockta-king-bound-detail ref="toolStockingBoundDetail" :mainId='mainId' /> + </div> + </a-tab-pane> + + </a-tabs> + </div> + + + <tools-stocktaking-bound-modal + ref="modalForm" + @ok="modalFormOk" + ></tools-stocktaking-bound-modal> + </a-card> +</template> + +<script> +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import ToolsStocktaKingBoundDetail from './ToolsStocktaKingBoundDetail.vue' +import ToolsStocktakingBoundModal from './modules/ToolsStocktakingBoundModal' +import '@/assets/less/TableExpand.less' +import { deleteAction, getAction } from '@api/manage' + +export default { + name: "ToolsStocktakingBoundList", + mixins:[JeecgListMixin], + components: { + ToolsStocktakingBoundModal, + ToolsStocktaKingBoundDetail + }, + data () { + return { + description: '鐩樼偣鍗曡〃绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'鐩樼偣鍗曞彿', + align:"center", + dataIndex: 'orderCode' + }, + { + title:'缁忔墜浜�', + align:"center", + dataIndex: 'handler_dictText' + }, + { + title:'瀹℃牳浜�', + align:"center", + dataIndex: 'reviewer_dictText' + }, + { + title:'鐩樼偣鍚嶇О', + align:"center", + dataIndex: 'stocktakingName' + }, + { + title:'澶囨敞', + align:"center", + dataIndex: 'remark' + }, + { + title:'瀹℃牳鐘舵��', + align:"center", + dataIndex: 'approvalStatus_dictText' + + }, + { + title:'瀹℃牳鎰忚', + align:"center", + dataIndex: 'approvalOpinion' + }, + { + title:'鐩樼偣鏃堕棿', + align:"center", + dataIndex: 'inventoryTime' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align:"center", + fixed:"right", + width:147, + scopedSlots: { customRender: 'action' }, + } + ], + url: { + list: "/tms/toolsStocktakingBound/list", + submit:"/tms/toolsStocktakingBound/submit", + delete: "/tms/toolsStocktakingBound/delete", + deleteBatch: "/tms/toolsStocktakingBound/deleteBatch", + exportXlsUrl: "/tms/toolsStocktakingBound/exportXls", + importExcelUrl: "tms/toolsStocktakingBound/importExcel", + + }, + dictOptions:{}, + mainId: '', + superFieldList:[], + selectedMainId: '', + } + }, + created() { + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + } + }, + methods: { + clickThenSelect(record) { + return { + on: { + click: () => { + this.onSelectChange(record.id.split(','), [record]) + } + } + } + }, + onClearSelected() { + this.selectedRowKeys = [] + this.selectionRows = [] + + this.selectedMainId = '' + }, + onSelectChange(selectedRowKeys, selectionRows) { + if (selectedRowKeys.length == 1) { + this.mainId = selectionRows[0]['id'] + } else { + this.mainId = '' + } + this.selectedRowKeys = selectedRowKeys + this.selectionRows = selectionRows + }, + handleTabChange(pagination, filters, sorter) { + this.selectedRowKeys = [] + this.$refs.toolStockingBoundDetail.dataSource = [] + this.handleTableChange(pagination, filters, sorter) + }, + handleDelete: function (id) { + if (!this.url.delete) { + this.$message.error('璇疯缃畊rl.delete灞炴��!') + return + } + deleteAction(this.url.delete, { id: id }).then((res) => { + if (res.success) { + //閲嶆柊璁$畻鍒嗛〉闂 + this.reCalculatePage(1) + this.$message.success(res.message) + this.$refs.toolStockingBoundDetail.dataSource = [] + this.loadData() + } else { + this.$message.warning(res.message) + } + }) + }, + handleSubmit(record) { + getAction(this.url.submit,{ id: record.id }).then((res)=>{ + if (res.success) { + + this.$message.success(res.message); + this.loadData(); + this.$refs.toolStockingBoundDetail.clearList() + } else { + this.$message.warning(res.message); + } + }) + }, + searchQuery() { + this.selectedRowKeys = []; + this.$refs.toolStockingBoundDetail.loadData(); + this.$refs.toolStockingBoundDetail.selectedRowKeys = []; + this.loadData(); + }, + searchReset() { + this.queryParam = {} + this.selectedRowKeys = [] + this.$refs.toolStockingBoundDetail.dataSource = [] + this.loadData(); + }, + modalFormOk() { + this.queryParam = {} + this.selectedRowKeys = [] + this.$refs.toolStockingBoundDetail.dataSource = [] + this.loadData(); + }, + + handleEdit: function (record) { + + console.log('record:', record) + this.$refs.modalForm.title = '缂栬緫' + this.$refs.modalForm.disableSubmit = false + this.$refs.modalForm.edit(record) + + }, + handleDetail:function(record){ + + this.$refs.modalForm.title="璇︽儏"; + this.$refs.modalForm.disableSubmit = true; + this.$refs.modalForm.edit(record); + }, + handleAdd: function () { + this.$refs.modalForm.disableSubmit = false + this.$refs.modalForm.title = "鏂板宸ュ叿鐢宠鍗�"; + this.$refs.modalForm.add(); + + console.log(this.$refs.modalForm.title); + + }, + + + initDictConfig(){ + }, + } + } +</script> +<style scoped> + @import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/stocktakingBound/modules/ToolSelectorModal.vue b/src/views/tms/stocktakingBound/modules/ToolSelectorModal.vue new file mode 100644 index 0000000..eed4078 --- /dev/null +++ b/src/views/tms/stocktakingBound/modules/ToolSelectorModal.vue @@ -0,0 +1,216 @@ +<template> + <!--鏀寔鍏ㄥ睆缂╂斁--> + <a-modal :visible='visible' :title='title' switchFullscreen @ok='handleSubmit' @cancel='close' style='top:50px' + cancelText='鍏抽棴' :width='1500'> + <a-card :bordered='false'> + <div class='table-page-search-wrapper'> + <a-form layout='inline' @keyup.enter.native='searchQuery'> + <a-row :gutter='24'> + <a-col :md='8' :sm='6'> + <a-form-item label='宸ュ叿缂栫爜'> + <j-input placeholder='璇疯緭鍏ュ伐鍏风紪鐮�' v-model='queryParam.toolCode' /> + </a-form-item> + </a-col> + <a-col :md='3'> + <span style='float: left;overflow: hidden;' class='table-page-search-submitButtons'> + <a-button type='primary' @click='searchQuery' icon='search'>鏌ヨ</a-button> + <a-button @click='searchReset' icon='reload' style='margin-left: 10px'>閲嶇疆</a-button> + </span> + </a-col> + </a-row> + </a-form> + </div> + <a-table ref='table' :scroll='scrollTrigger' size='middle' rowKey='id' bordered :columns='columns' + :dataSource='dataSource' :pagination='ipagination' :rowSelection='rowSelection' :loading='loading' + @change='handleTableChange'> + + </a-table> + </a-card> + </a-modal> +</template> + +<script> +import { filterObj } from '@/utils/util' +import { getAction } from '@/api/manage' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' + +export default { + name: 'ToolSelectorModal', + mixins: [JeecgListMixin], + components: {}, + props: {}, + data() { + return { + queryParam: {}, + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: (_, __, index) => parseInt(index) + 1 + }, + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode' + }, + { + title: '涓枃鍚嶇О', + align: 'center', + dataIndex: 'chineseName' + }, + { + title: '鍨嬪彿/鍥惧彿', + align: 'center', + dataIndex: 'toolModel' + } + ], + selectedRowKeys: [], + oldSelectRows: [], + scrollTrigger: {}, + dataSource: [], + selectionRows: [], + title: '鏍规嵁鏌ヨ缁撴灉閫夋嫨宸ュ叿', + ipagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['5', '10', '30', '50', '100'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + isorter: { + column: 'createTime', + order: 'desc' + }, + visible: false, + loading: false, + url: { + list: '/tms/baseTools/listWithLedgerAndConfig' + } + } + }, + computed: { + rowSelection() { + return { + type: 'checkbox', + onChange: (selectedRowKeys, selectedRows) => { + this.selectedRowKeys = selectedRowKeys + this.onSelectChange(selectedRows) + }, + getCheckboxProps: record => ({ + props: { + disabled: record.distable + } + }), + selectedRowKeys: this.selectedRowKeys + } + } + }, + + methods: { + + async loadData(arg) { + if (arg === 1) { + this.ipagination.current = 1 + } + let that = this + this.loading = true + let params = this.getQueryParams()//鏌ヨ鏉′欢 + await getAction(this.url.list, params).then((res) => { + if (res.success) { + for (let i = 0; i < res.result.records.length; i++) { + if (that.oldSelectRows.indexOf(res.result.records[i].id) > -1) { + res.result.records[i].distable = true + } else { + res.result.records[i].distable = false + } + } + this.dataSource = res.result.records + this.ipagination.total = res.result.total + } + if (res.code === 510) { + this.$message.warning(res.message) + } + this.loading = false + }) + }, + + showModals(oldSelectRows) { + this.selectionRows = [] + this.oldSelectRows = oldSelectRows + this.visible = true + this.loadData(1) + }, + getQueryParams() { + let param = Object.assign({}, this.queryParam, this.isorter) + param.field = this.getQueryField() + param.pageNo = this.ipagination.current + param.pageSize = this.ipagination.pageSize + return filterObj(param) + }, + //鏌ヨ鏉′欢澶勭悊 + getQueryField() { + let str = 'id,' + for (let a = 0; a < this.columns.length; a++) { + str += ',' + this.columns[a].dataIndex + } + return str + }, + searchReset(num) { + let that = this + this.queryParam = [] + if (num !== 0) { + that.loadData(1) + } + that.selectborrowIds = [] + }, + close() { + this.searchReset(0) + this.selectedRowKeys = [] + this.visible = false + }, + handleTableChange(pagination, filters, sorter) { + //TODO 绛涢�� + + if (Object.keys(sorter).length > 0) { + this.isorter.column = sorter.field + this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc' + } + this.ipagination = pagination + this.loadData() + }, + handleSubmit() { + this.$bus.$emit('selectionRows', this.selectionRows) + // this.searchReset(0) + this.close() + }, + onSelectChange(selectionRows) { + this.selectionRows = selectionRows + }, + searchQuery() { + this.loadData(1) + } + } +} +</script> + +<style scoped> +.ant-table-tbody .ant-table-row td { + padding-top: 10px; + padding-bottom: 10px; +} + +#components-layout-demo-custom-trigger .trigger { + font-size: 18px; + line-height: 64px; + padding: 0 24px; + cursor: pointer; + transition: color 0.3s; +} +</style> \ No newline at end of file diff --git a/src/views/tms/stocktakingBound/modules/ToolsStocktakingBoundModal.vue b/src/views/tms/stocktakingBound/modules/ToolsStocktakingBoundModal.vue new file mode 100644 index 0000000..d0d4230 --- /dev/null +++ b/src/views/tms/stocktakingBound/modules/ToolsStocktakingBoundModal.vue @@ -0,0 +1,515 @@ +<template> + <a-modal :title="title" :width="1500" :height="1500" :visible="visible" :maskClosable="false" @ok="handleOk" + cancelText="鍏抽棴" + @cancel="handleCancel" :confirmLoading="confirmLoading"> + + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-row> + <a-col :span="12"> + <a-form-model-item label="鐩樼偣鍗曞彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderCode"> + <a-input :disabled="true" v-model="model.orderCode" placeholder="绯荤粺鑷姩鐢熸垚"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鐩樼偣绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalStatus"> + <j-dict-select-tag dictCode="stocktakingType" placeholder="璇烽�夋嫨鐩樼偣绫诲瀷" v-model="model.stocktakingType" + :disabled="disableSubmit"></j-dict-select-tag> + </a-form-model-item> + </a-col> + + + <a-col :span="12"> + <a-form-model-item label="鐩樼偣鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="stocktakingName"> + <a-input v-model="model.stocktakingName" placeholder="璇疯緭鍏ョ洏鐐瑰悕绉�"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="瀹℃牳浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reviewer"> + <j-select-user-by-dep :disabled="disableSubmit" v-model="model.reviewer" :store="'username'" + :text="'realname'" :multi="false" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鐩樼偣鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inventoryTime"> + <j-date placeholder="璇烽�夋嫨鐩樼偣鏃堕棿" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.inventoryTime" + style="width: 100%" /> + </a-form-model-item> + </a-col> + + <a-col :span="12"> + <a-form-model-item v-show="addShow" label="缁忔墜浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="handler"> + <j-dict-select-tag dictCode="sys_user,realname,id" placeholder="璇烽�夋嫨缁忔墜浜�" v-model="model.handler" + :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + + <a-col :span="12"> + <a-form-model-item v-show="addShow" label="瀹℃牳鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="approvalStatus"> + <j-dict-select-tag dictCode="approval_status" placeholder="璇烽�夋嫨瀹℃牳鐘舵��" v-model="model.approvalStatus" + :disabled="true"></j-dict-select-tag> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item v-show="addShow" label="瀹℃牳鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="approvalOpinion"> + <a-input v-model="model.approvalOpinion" placeholder="璇疯緭鍏ュ鏍告剰瑙�" type="textarea" + :disabled="model.approvalStatus==1"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item v-show="addShow" label="瀹℃牳鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inventoryTime"> + <j-date placeholder="璇烽�夋嫨瀹℃牳鏃堕棿" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.approvalDate" + style="width: 100%" /> + </a-form-model-item> + </a-col> + + <a-col :span="12"> + <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark"> + <a-input v-model="model.remark" placeholder="璇疯緭鍏ュ娉�" type="textarea"></a-input> + </a-form-model-item> + </a-col> + </a-row> + </a-form> + </a-spin> + <a-button type="primary" :style="{ marginRight: '8px', marginBottom: '8px' }" :loading="confirmLoading" + :disabled="disableSubmit" @click="selectTools()">宸ュ叿鏄庣粏 + </a-button> + <a-table ref="table" bordered size="middle" rowKey="id" :columns="columns" :dataSource="dataSource" + :scroll="{x:true}"> + <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index"> + <a-input-number :disabled="disableSubmit" :value="text" v-if="col.dataIndex == 'practicalQuantity'" :min="0" + :max="99999" + @change="(e) => handleChange(e, record.key, col, index)" style="width: 100%;" /> + <a-input-number :value="text" v-if="col.dataIndex == 'differenceValue'" :min="0" :max="99999" + :disabled="true" @change="(e) => handleChange(e, record.key, col, index)" + style="width: 100%;" /> + <j-dict-select-tag :value="text" v-if="col.dataIndex == 'surplusDeficit'" + dictCode="surplusDeficit" + :disabled="true" + style="width: 100%;" + @change="(e) => handleChange(e, record.key, col, index)" /> + <!-- <j-dict-select-tag :value="text" v-if="col.dataIndex == 'classifyId'"--> + <!-- dictCode="tms_tools_classify,type_name,id"--> + <!-- style="width: 100%;"--> + <!-- :disabled="true"--> + <!-- @change="(e) => handleChange(e, record.key, col, index)" />--> + <j-date + :value="text" + v-if="col.dataIndex == 'stocktakingDate'" + placeholder="閫夋嫨鐩樺簱鏃堕棿" + @change="(e) => handleChange(e, record.key, col, index)" + style="width: 100%;" + /> + + <a-textarea + v-if="col.dataIndex == 'remark'" + :disabled="disableSubmit" + style="margin: -5px 0" + :value="text" + @change="(e) => handleChange(e.target.value, record.key, col, index)" + /> + + </template> + + <span slot="action" slot-scope="text, record, index"> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(text, record, index)"> + <a :disabled="disableSubmit">鍒犻櫎</a> + </a-popconfirm> + </span> + </a-table> + <template slot="footer"> + <a-button :style="{ marginRight: '8px' }" @click="handleCancel()"> + 鍏抽棴 + </a-button> + + <a-button @click="handleOk()" :disabled="disableSubmit" type="primary" :loading="confirmLoading">纭畾</a-button> + </template> + <tool-selector-modal ref="toolsModalForm"></tool-selector-modal> + </a-modal> + +</template> + +<script> +import { getAction, postAction, requestPut } from '@/api/manage' +import JMultiSelectTag from '@/components/dict/JMultiSelectTag' +import Tooltip from 'ant-design-vue/es/tooltip' +import ToolSelectorModal from '@views/tms/stocktakingBound/modules/ToolSelectorModal.vue' + +export default { + name: 'ToolsStocktakingBoundModal', + components: { + ToolSelectorModal, + JMultiSelectTag, + Tooltip + }, + data() { + + return { + addShow: true, + model: {}, + formDisabled: false, + pagination: { + current: 1, + pageSize: 10, + total: 0 + }, + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + }, + width: 50 + }, + { + title: '鍒�鍏风紪鍙�', + dataIndex: 'toolCode', + align: 'center', + width: 150 + }, + + { + title: '宸ュ叿绫诲瀷', + dataIndex: 'applicationType', + align: 'center', + width: 150 + }, + { + title: '璐﹂潰搴撳瓨', + width: 150, + dataIndex: 'bookQuantity', + align: 'center' + + }, + { + title: '鍙敤鏁伴噺', + width: 150, + dataIndex: 'availableQuantity', + align: 'center' + + }, + { + title: '瀹炵洏鏁伴噺', + dataIndex: 'practicalQuantity', + align: 'center', + width: 150, + scopedSlots: { customRender: 'practicalQuantity' } + }, + { + title: '宸紓鍊�', + dataIndex: 'differenceValue', + align: 'center', + width: 150, + scopedSlots: { customRender: 'differenceValue' } + }, + + { + title: '鐩樹簭鐩樼泩', + width: 150, + dataIndex: 'surplusDeficit', + align: 'center', + scopedSlots: { customRender: 'surplusDeficit' } + }, + + { + title: '鐩樺簱鏃堕棿', + width: 150, + dataIndex: 'stocktakingDate', + align: 'center', + scopedSlots: { customRender: 'stocktakingDate' } + }, + { + title: '澶囨敞', + width: 150, + dataIndex: 'remark', + align: 'center', + scopedSlots: { customRender: 'remark' } + }, + { + title: '涓枃鍚嶇О', + dataIndex: 'chineseName', + width: 150, + align: 'center' + }, + + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + width: 150, + align: 'center' + }, + + { + title: '鍒�鍏锋潗鏂�', + width: 150, + dataIndex: 'toolMaterial', + align: 'center' + }, + { + title: '闆朵欢鏉愭枡', + width: 150, + dataIndex: 'partMaterial', + align: 'center' + }, + { + title: '鍘傚', + width: 150, + dataIndex: 'supplierId', + align: 'center' + + }, + { + title: '瀛樺偍浣嶇疆', + width: 150, + dataIndex: 'goodsShelvesId', + align: 'center' + + }, + + + { + title: '鎿嶄綔', + width: 150, + dataIndex: 'action', + scopedSlots: { customRender: 'action' }, + align: 'center' + } + ], + title: '鎿嶄綔', + visible: false, + disableSubmit: false, + codeDisable: true, + + labelCol: { + xs: { span: 24 }, + sm: { span: 6 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 18 } + }, + confirmLoading: false, + form: this.$form.createForm(this), + validatorRules: { + orderCode: [ + { required: true, message: '璇疯緭鍏ョ洏鐐瑰崟鍙�!' } + ], + handler: [ + { required: true, message: '璇疯緭鍏ョ粡鎵嬩汉!' } + ], + stocktakingName: [ + { required: true, message: '璇疯緭鍏ョ洏鐐瑰悕绉�!' } + ], + approvalStatus: [ + { required: true, message: '璇疯緭鍏ュ鏍哥姸鎬�!' } + ], + inventoryTime: [ + { required: true, message: '璇疯緭鍏ョ洏鐐规椂闂�!' } + ] + }, + url: { + add: '/tms/toolsStocktakingBound/add', + edit: '/tms/toolsStocktakingBound/edit', + queryDetailList: '/tms/toolsStocktakingBound/listToolsStocktakingBoundControllerDetailsByMainId' + + }, + dataSource: [] + } + }, + + mounted() { + this.$bus.$on('selectionRows', (data) => { + for (let i = 0; i < data.length; i++) { + this.dataSource.push({ + toolId: data[i].id, + toolCode: data[i].toolCode, + classifyId: data[i].classifyId, + applicationType: data[i].applicationType_dictText, + chineseName: data[i].chineseName, + toolModel: data[i].toolModel, + material: data[i].material, + toolMaterial: data[i].toolMaterial, + partMaterial: data[i].partMaterial, + bookQuantity: data[i].totalCount, + supplierId: data[i].supplierId, + goodsShelvesId: data[i].positionCode + }) + } + }) + }, + + methods: { + selectTools: function() { + let ids = [] + for (let i = 0; i < this.dataSource.length; i++) { + ids.push(this.dataSource[i].partId) + } + this.$refs.toolsModalForm.showModals(ids) + this.$refs.toolsModalForm.title = '閫夋嫨宸ュ叿淇℃伅' + this.$refs.toolsModalForm.disableSubmit = false + }, + add() { + this.addShow = false + this.edit() + }, + + edit(record) { + console.log(record) + console.log(this.auditFlag) + this.form.resetFields() + this.model = Object.assign({}, record) + this.visible = true + getAction(this.url.queryDetailList, { + stocktakingBoundId: record.id, + pageNo: 1, + pageSize: 99999 + }).then((res) => { + if (res.success) { + console.log(res.result.records) + this.dataSource = res.result.records + } else { + this.dataSource = null + } + }) + }, + + + + close() { + this.$emit('close') + this.visible = false + }, + + handleCancel() { + this.model = {} + this.dataSource = [] + this.close() + }, + + handleOk() { + const that = this + let data = that.dataSource + for (let i = 0; i < data.length; i++) { + if (data[i].practicalQuantity == undefined || data[i].practicalQuantity == null || data[i].practicalQuantity == '') { + that.$message.warning('璇疯緭鍏ョ' + (i + 1) + '琛岀殑瀹炵洏鏁伴噺鏁版嵁锛�') + return false + } + } + this.form.validateFields((err, values) => { + if (!err) { + that.confirmLoading = true + let formData = Object.assign(this.model, values) + if (that.dataSource.length === 0) { + that.$message.warning('璇烽�夋嫨宸ュ叿锛�') + that.confirmLoading = false + return + } + formData.toolsStocktakingBoundDetailList = that.dataSource + // formData.status = '0'; + let obj + if (!this.model.id) { + obj = postAction(this.url.add, formData) + } else { + obj = requestPut(this.url.edit, formData, { id: this.model.id }) + } + obj.then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('ok') + that.close() + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = false + }) + } + }) + }, + + handleDelete(text, record, index) { + this.dataSource.splice(index, 1) + }, + + handleChange(value, key, column, index) { + let that = this + const temp = [...that.dataSource] + const target = temp.filter(item => key === item.key)[index] + if (target) { + // if (column.dataIndex == 'practicalQuantity') { + // target[column.dataIndex] = value + // } + if (column.dataIndex === 'practicalQuantity') { + target[column.dataIndex] = value + + // 璁$畻宸紓鍊� + target.differenceValue = value - target.availableQuantity + + // 鏍规嵁宸紓鍊煎垽鏂洏浜忕洏鐩� + if (target.differenceValue > 0) { + target.surplusDeficit = 1 + } else if (target.differenceValue < 0) { + target.surplusDeficit = 2 + } else { + target.surplusDeficit = 0 + } + } + if (column.dataIndex == 'differenceValue') { + target[column.dataIndex] = value + } + if (column.dataIndex == 'classifyId') { + target[column.dataIndex] = value + } + if (column.dataIndex == 'surplusDeficit') { + target[column.dataIndex] = value // 鍋囪 value 鏄瓧绗︿覆鏍煎紡鐨勬棩鏈� + } + if (column.dataIndex == 'stocktakingDate') { + target[column.dataIndex] = value // 鍋囪 value 鏄瓧绗︿覆鏍煎紡鐨勬棩鏈� + } + if (column.dataIndex === 'remark') { + // 娉ㄦ剰杩欓噷浣跨敤鐨勬槸 e.target.value + target[column.dataIndex] = value + } + + that.dataSource = temp + } + } + } + +} +</script> + +<style lang="less" scoped> +.frozenRowClass { + color: #c9c9c9; +} + +.fontweight { + font-weight: bold; +} + +.ant-btn { + padding: 0 10px; + margin-left: 3px; +} + +.ant-form-item-control { + line-height: 0px; +} + +/** 涓昏〃鍗曡闂磋窛 */ +.ant-form .ant-form-item { + margin-bottom: 10px; +} + +/** Tab椤甸潰琛岄棿璺� */ +.ant-tabs-content .ant-form-item { + margin-bottom: 0px; +} +</style> \ No newline at end of file diff --git a/src/views/tms/storeEarlyWarning/ToolsStoreEarlyWarningList.vue b/src/views/tms/storeEarlyWarning/ToolsStoreEarlyWarningList.vue new file mode 100644 index 0000000..189bab2 --- /dev/null +++ b/src/views/tms/storeEarlyWarning/ToolsStoreEarlyWarningList.vue @@ -0,0 +1,315 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col + :md="6" + :sm="8" + > + <a-form-item + label="宸ュ叿缂栧彿" + :labelCol="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ュ伐鍏风紪鐮佹绱�" + v-model="queryParam.toolCode" + ></a-input> + </a-form-item> + </a-col> + <a-col + :md="6" + :sm="8" + > + <a-form-item + label="鍘傚" + :labelCol="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ュ巶瀹舵绱�" + v-model="queryParam.supplierId" + ></a-input> + </a-form-item> + </a-col> + <a-col + :md="6" + :sm="8" + > + <a-form-item + label="鏉愯川" + :labelCol="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ユ潗璐ㄦ绱�" + v-model="queryParam.toolMaterial" + ></a-input> + </a-form-item> + </a-col> + <a-col + :md="6" + :sm="8" + > + <a-form-item + label="鍒�鍏疯鏍�" + :labelCol="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ュ垁鍏疯鏍兼绱�" + v-model="queryParam.toolModel" + ></a-input> + </a-form-item> + </a-col> + <a-col :md="6" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </span> + </a-col> + + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> +<!-- <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>--> +<!-- <a-button type="primary" icon="download" @click="handleExportXls('tms_store_early warning')">瀵煎嚭</a-button>--> +<!-- <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">--> +<!-- <a-button type="primary" icon="import">瀵煎叆</a-button>--> +<!-- </a-upload>--> + <a-dropdown v-if="selectedRowKeys.length > 0"> + <a-menu slot="overlay"> + <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item> + </a-menu> + <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button> + </a-dropdown> + </div> + + <!-- table鍖哄煙-begin --> + <div> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� + <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + </div> + + <a-table + ref="table" + size="middle" + :scroll="{x:true}" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" + :rowClassName="setRowClassName" + @change="handleTableChange"> + + <template slot="htmlSlot" slot-scope="text"> + <div v-html="text"></div> + </template> + <template slot="imgSlot" slot-scope="text,record"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span> + <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + </template> + <template slot="fileSlot" slot-scope="text"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span> + <a-button + v-else + :ghost="true" + type="primary" + icon="download" + size="small" + @click="downloadFile(text)"> + 涓嬭浇 + </a-button> + </template> + + <span slot="action" slot-scope="text, record"> + <a @click="handleEdit(record)">缂栬緫</a> + + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handleDetail(record)">璇︽儏</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + + </a-table> + </div> + + <tools-store-early-warning-modal ref="modalForm" @ok="modalFormOk"></tools-store-early-warning-modal> + </a-card> +</template> + +<script> + + import '@/assets/less/TableExpand.less' + import { mixinDevice } from '@/utils/mixin' + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + import ToolsStoreEarlyWarningModal from './modules/ToolsStoreEarlyWarningModal.vue' + + export default { + name: 'TmsStoreEarlyWarningList', + mixins:[JeecgListMixin, mixinDevice], + components: { + ToolsStoreEarlyWarningModal + }, + data () { + return { + description: 'tms_store_early warning绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'缂栫爜', + align:"center", + dataIndex: 'classifyId' + }, + { + title:'鍚嶇О', + align:"center", + dataIndex: 'toolName' + }, + { + title:'宸ュ叿绫诲瀷', + align:"center", + dataIndex: 'toolType' + }, + { + title:'瑙勬牸', + align:"center", + dataIndex: 'toolModel' + }, + { + title:'鏉愯川', + align:"center", + dataIndex: 'materialName' + }, + { + title:'瀛樺偍浣嶇疆', + align:"center", + dataIndex: 'goodsShelvesId' + }, + { + title:'鍘傚', + align:"center", + dataIndex: 'supplierId' + }, + { + title:'搴撳瓨涓婇檺', + align:"center", + dataIndex: 'highestInventory' + }, + { + title:'搴撳瓨涓嬮檺', + align:"center", + dataIndex: 'lowerInventory' + }, + { + title:'鎬诲簱瀛樻暟閲�', + align:"center", + dataIndex: 'totalCount' + }, + { + title:'鍙敤搴撳瓨鏁伴噺', + align:"center", + dataIndex: 'availableQuantity' + }, + { + title:'鐘舵��;', + align:"center", + dataIndex: 'status' + }, + { + title:'澶囨敞', + align:"center", + dataIndex: 'remark' + }, + ], + url: { + list: "tms/toolsStoreEarlyWarning/list", + delete: "tms/toolsStoreEarlyWarning/delete", + deleteBatch: "tools/tmsStoreEarlyWarning/deleteBatch", + exportXlsUrl: "tools/tmsStoreEarlyWarning/exportXls", + importExcelUrl: "toolsStoreEarlyWarning/importExcel", + + }, + dictOptions:{}, + superFieldList:[], + } + }, + created() { + this.getSuperFieldList(); + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + }, + methods: { + setRowClassName(record,index){ + + //鍒ゆ柇骞惰繑鍥炶鐨勬牱寮忓悕绉� + if(record){ + return "bg-blue" + } + }, + initDictConfig(){ + }, + getSuperFieldList(){ + let fieldList=[]; + fieldList.push({type:'string',value:'toolCode',text:'缂栫爜',dictCode:''}) + fieldList.push({type:'string',value:'toolName',text:'鍚嶇О',dictCode:''}) + fieldList.push({type:'string',value:'toolType',text:'宸ュ叿绫诲瀷',dictCode:''}) + fieldList.push({type:'string',value:'toolModel',text:'瑙勬牸',dictCode:''}) + fieldList.push({type:'string',value:'supplierId',text:'鏉愯川',dictCode:''}) + fieldList.push({type:'string',value:'goodsShelvesId',text:'瀛樺偍浣嶇疆',dictCode:''}) + fieldList.push({type:'string',value:'toolModel',text:'鍨嬪彿/鍥惧彿',dictCode:''}) + fieldList.push({type:'string',value:'supplierId',text:'鍘傚',dictCode:''}) + fieldList.push({type:'string',value:'toolMaterial',text:'鏉愯川',dictCode:''}) + fieldList.push({type:'string',value:'totalCount',text:'鎬诲簱瀛樻暟閲�',dictCode:''}) + fieldList.push({type:'string',value:'availableQuantity',text:'鍙敤搴撳瓨鏁伴噺',dictCode:''}) + fieldList.push({type:'BigDecimal',value:'lowerInventory',text:'搴撳瓨涓嬮檺',dictCode:''}) + fieldList.push({type:'string',value:'highestInventory',text:'搴撳瓨涓婇檺',dictCode:''}) + fieldList.push({type:'string',value:'status',text:'鐘舵��;',dictCode:''}) + fieldList.push({type:'string',value:'remark',text:'澶囨敞',dictCode:''}) + fieldList.push({type:'string',value:'tenantId',text:'绉熸埛鍙�',dictCode:''}) + this.superFieldList = fieldList + } + } + } +</script> +<style scoped> + @import '~@assets/less/common.less'; + ::v-deep .bg-blue{ + + background-color:#C1194E; + + } +</style> diff --git a/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningForm.vue b/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningForm.vue new file mode 100644 index 0000000..88ead07 --- /dev/null +++ b/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningForm.vue @@ -0,0 +1,221 @@ +<template> + <a-spin :spinning="confirmLoading"> + <j-form-container :disabled="formDisabled"> + <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail"> + <a-row> + <a-col :span="8"> + <a-form-model-item label="鍒嗙被缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="classifyId"> + <a-input v-model="model.classifyId" placeholder="璇疯緭鍏ュ垎绫荤紪鍙�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="涓枃鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="chineseName"> + <a-input v-model="model.chineseName" placeholder="璇疯緭鍏ヤ腑鏂囧悕绉�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鑻辨枃鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="foreignLanguageName"> + <a-input v-model="model.foreignLanguageName" placeholder="璇疯緭鍏ヨ嫳鏂囧悕绉�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="宸ュ叿绫诲瀷;1.閫氱敤 +2.涓撶敤" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="applicationType"> + <a-input v-model="model.applicationType" placeholder="璇疯緭鍏ュ伐鍏风被鍨�;1.閫氱敤 +2.涓撶敤" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鏍囧噯绾у埆" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardLevel"> + <a-input v-model="model.standardLevel" placeholder="璇疯緭鍏ユ爣鍑嗙骇鍒�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鏍囧噯鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode"> + <a-input v-model="model.standardCode" placeholder="璇疯緭鍏ユ爣鍑嗗彿" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鍨嬪彿/鍥惧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toolModel"> + <a-input v-model="model.toolModel" placeholder="璇疯緭鍏ュ瀷鍙�/鍥惧彿" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鍘傚" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="supplierId"> + <a-input v-model="model.supplierId" placeholder="璇疯緭鍏ュ巶瀹�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="浠撳簱鐪佷唤鍩庡競" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="provinceCity"> + <a-input v-model="model.provinceCity" placeholder="璇疯緭鍏ヤ粨搴撶渷浠藉煄甯�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="搴撳尯/搴撳彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="warehouseId"> + <a-input v-model="model.warehouseId" placeholder="璇疯緭鍏ュ簱鍖�/搴撳彿" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="搴撲綅鍙�;鐢卞簱鍖�+灞�+鎺�+鍒楃粍鎴愶紝鍙互鏄涓簱浣嶅彿浠ヨ嫳鏂囩偣鍙峰垎鍓茬殑瀛楃涓层��" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="positionCode"> + <a-input v-model="model.positionCode" placeholder="璇疯緭鍏ュ簱浣嶅彿;鐢卞簱鍖�+灞�+鎺�+鍒楃粍鎴愶紝鍙互鏄涓簱浣嶅彿浠ヨ嫳鏂囩偣鍙峰垎鍓茬殑瀛楃涓层��" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="瀛樺偍浣嶇疆锛堝亸閭d釜鍘傚尯鐨勫簱锛�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="storageLocation"> + <a-input v-model="model.storageLocation" placeholder="璇疯緭鍏ュ瓨鍌ㄤ綅缃紙鍋忛偅涓巶鍖虹殑搴擄級" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="璁¢噺涓诲崟浣�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="mainUnit"> + <a-input v-model="model.mainUnit" placeholder="璇疯緭鍏ヨ閲忎富鍗曚綅" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="璁¢噺杈呭崟浣�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="auxiliaryUnit"> + <a-input v-model="model.auxiliaryUnit" placeholder="璇疯緭鍏ヨ閲忚緟鍗曚綅" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="璁¢噺涓诲崟浣嶆暟閲�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="mainCount"> + <a-input v-model="model.mainCount" placeholder="璇疯緭鍏ヨ閲忎富鍗曚綅鏁伴噺" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="璁¢噺杈呭崟浣嶆暟閲�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="auxiliaryCount"> + <a-input v-model="model.auxiliaryCount" placeholder="璇疯緭鍏ヨ閲忚緟鍗曚綅鏁伴噺" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鏄惁鏈夎閲忚緟鍗曚綅;1,鏈夎緟鍔╁崟浣�2.鏃犺緟鍔╁崟浣�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="auxiliaryUnitFlag"> + <a-input v-model="model.auxiliaryUnitFlag" placeholder="璇疯緭鍏ユ槸鍚︽湁璁¢噺杈呭崟浣�;1,鏈夎緟鍔╁崟浣�2.鏃犺緟鍔╁崟浣�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鍗曚环" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="price"> + <a-input-number v-model="model.price" placeholder="璇疯緭鍏ュ崟浠�" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鏈�浣庡簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lowerInventory"> + <a-input-number v-model="model.lowerInventory" placeholder="璇疯緭鍏ユ渶浣庡簱瀛�" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鏈�楂樺簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="highestInventory"> + <a-input v-model="model.highestInventory" placeholder="璇疯緭鍏ユ渶楂樺簱瀛�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鐘舵��;1.鍚敤 +2.鏈惎鐢�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="status"> + <a-input v-model="model.status" placeholder="璇疯緭鍏ョ姸鎬�;1.鍚敤 +2.鏈惎鐢�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark"> + <a-input v-model="model.remark" placeholder="璇疯緭鍏ュ娉�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="绉熸埛鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="tenantId"> + <a-input v-model="model.tenantId" placeholder="璇疯緭鍏ョ鎴峰彿" ></a-input> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </j-form-container> + </a-spin> +</template> + +<script> + + import { httpAction, getAction } from '@/api/manage' + import { validateDuplicateValue } from '@/utils/util' + + export default { + name: 'TmsStoreEarlyWarningForm', + components: { + }, + props: { + //琛ㄥ崟绂佺敤 + disabled: { + type: Boolean, + default: false, + required: false + } + }, + data () { + return { + model:{ + }, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 }, + }, + confirmLoading: false, + validatorRules: { + classifyId: [ + { required: true, message: '璇疯緭鍏ュ垎绫荤紪鍙�!'}, + ], + }, + url: { + add: "/org.jeecg.modules.tms/tmsStoreEarlyWarning/add", + edit: "/org.jeecg.modules.tms/tmsStoreEarlyWarning/edit", + queryById: "/org.jeecg.modules.tms/tmsStoreEarlyWarning/queryById" + } + } + }, + computed: { + formDisabled(){ + return this.disabled + }, + }, + created () { + //澶囦唤model鍘熷鍊� + this.modelDefault = JSON.parse(JSON.stringify(this.model)); + }, + methods: { + add () { + this.edit(this.modelDefault); + }, + edit (record) { + this.model = Object.assign({}, record); + this.visible = true; + }, + submitForm () { + const that = this; + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true; + let httpurl = ''; + let method = ''; + if(!this.model.id){ + httpurl+=this.url.add; + method = 'post'; + }else{ + httpurl+=this.url.edit; + method = 'put'; + } + httpAction(httpurl,this.model,method).then((res)=>{ + if(res.success){ + that.$message.success(res.message); + that.$emit('ok'); + }else{ + that.$message.warning(res.message); + } + }).finally(() => { + that.confirmLoading = false; + }) + } + + }) + }, + } + } +</script> \ No newline at end of file diff --git a/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningModal.vue b/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningModal.vue new file mode 100644 index 0000000..b92d194 --- /dev/null +++ b/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningModal.vue @@ -0,0 +1,60 @@ +<template> + <j-modal + :title="title" + :width="width" + :visible="visible" + switchFullscreen + @ok="handleOk" + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" + @cancel="handleCancel" + cancelText="鍏抽棴"> + <tms-store-early-warning-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></tms-store-early-warning-form> + </j-modal> +</template> + +<script> + + import TmsStoreEarlyWarningForm from './ToolsStoreEarlyWarningForm.vue' + export default { + name: 'TmsStoreEarlyWarningModal', + components: { + TmsStoreEarlyWarningForm + }, + data () { + return { + title:'', + width:1024, + visible: false, + disableSubmit: false + } + }, + methods: { + add () { + this.visible=true + this.$nextTick(()=>{ + this.$refs.realForm.add(); + }) + }, + edit (record) { + this.visible=true + this.$nextTick(()=>{ + this.$refs.realForm.edit(record); + }) + }, + close () { + this.$emit('close'); + this.visible = false; + }, + handleOk () { + this.$refs.realForm.submitForm(); + }, + submitCallback(){ + this.$emit('ok'); + this.visible = false; + }, + handleCancel () { + this.close() + } + } + } +</script> \ No newline at end of file diff --git a/src/views/user/Login.vue b/src/views/user/Login.vue index e7d4f86..13e478f 100644 --- a/src/views/user/Login.vue +++ b/src/views/user/Login.vue @@ -163,9 +163,13 @@ // 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()}锛屾杩庡洖鏉 @@ -181,7 +185,6 @@ duration: 60, icon: <a-icon type = 'exclamation-circle'style = 'color:red' / >, }) - } } }) -- Gitblit v1.9.3