| | |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/fixture/fixture-list", |
| | | "type": "page", |
| | | "layout": "default", |
| | | "needLogin": true, |
| | | "style": { |
| | | "navigationBarTitleText": "å·¥å
·å表" |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/inspect/insp-add", |
| | | "type": "page", |
| | | "layout": "default", |
| | |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/repair/repair-add", |
| | | "type": "page", |
| | | "layout": "default", |
| | | "style": { |
| | | "navigationBarTitleText": "æ·»å æ¥ä¿®", |
| | | "app-plus": { |
| | | "titleNView": { |
| | | "buttons": [ |
| | | { |
| | | "text": "æäº¤", |
| | | "fontSize": "14px", |
| | | "color": "#FFFFFF" |
| | | }, |
| | | { |
| | | "text": "", |
| | | "fontSize": "24px", |
| | | "color": "#FFFFFF" |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/repair/req-list", |
| | | "type": "page", |
| | | "layout": "default", |
| | | "needLogin": true, |
| | | "style": { |
| | | "navigationBarTitleText": "è®¾å¤æ¥ä¿®", |
| | | "app-plus": { |
| | | "titleNView": { |
| | | "buttons": [ |
| | | { |
| | | "text": "æ°å¢", |
| | | "fontSize": "14px", |
| | | "color": "#FFFFFF" |
| | | }, |
| | | { |
| | | "text": "", |
| | | "fontSize": "24px", |
| | | "color": "#FFFFFF" |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/repair/res-list", |
| | | "type": "page", |
| | | "layout": "default", |
| | | "needLogin": true, |
| | | "style": { |
| | | "navigationBarTitleText": "设å¤ç»´ä¿®", |
| | | "app-plus": { |
| | | "titleNView": { |
| | | "buttons": [ |
| | | { |
| | | "text": "æ¥å", |
| | | "fontSize": "14px", |
| | | "color": "#FFFFFF" |
| | | }, |
| | | { |
| | | "text": "", |
| | | "fontSize": "24px", |
| | | "color": "#FFFFFF" |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/spare/index", |
| | | "type": "page", |
| | | "layout": "tabbar", |
| | |
| | | </view> |
| | | </view> |
| | | </template> |
| | | <view class="flex h-[80rpx]" @click.stop="itemClick(item)"> |
| | | <view class="flex h-[80rpx] items-center" @click.stop="itemClick(item)"> |
| | | <image class="slot-img text-center" src="/static/images/camera.png" /> |
| | | <view> |
| | | <view class="flex-1"> |
| | | <view class="text-color-base"> |
| | | {{ item.equName }} |
| | | <text class="text-color-gray ml-2 text-mini">{{ item.modelNo }}</text> |
| | |
| | | <view class="text-color-gray text-xs mt-1"> |
| | | {{ item.location }} | {{ item.madeIn }} |
| | | </view> |
| | | </view> |
| | | <view v-if="isSelectEqu"> |
| | | <wd-button |
| | | size="small" |
| | | icon="edit-outline" |
| | | @click.stop="handleSelectEqu(item)" |
| | | > |
| | | éä¸ |
| | | </wd-button> |
| | | </view> |
| | | </view> |
| | | </wd-card> |
| | |
| | | getEquList({ pageNum, pageSize }) |
| | | .then((res: any) => { |
| | | // 请å¿å¨ç½ç»è¯·æ±åè°ä¸ç»dataListèµå¼ï¼ï¼åªéè¦è°ç¨completeå°±å¯ä»¥äº |
| | | console.log(res) |
| | | paging.value.complete(res.rows) |
| | | paging.value.completeByTotal(res.rows, res.total) |
| | | }) |
| | | .catch((res) => { |
| | | // å¦æè¯·æ±å¤±è´¥åpaging.value.complete(false)ï¼ä¼èªå¨å±ç¤ºéè¯¯é¡µé¢ |
| | |
| | | * @param item |
| | | */ |
| | | function itemClick(item: any) { |
| | | |
| | | } |
| | | |
| | | /** |
| | | * å
¶å®é¡µé¢éæ©è®¾å¤ |
| | | * @param item |
| | | */ |
| | | function handleSelectEqu(item: any) { |
| | | if (isSelectEqu.value) { |
| | | emitSelectEqu(item) |
| | | uni.navigateBack() |
| | |
| | | const instance: any = getCurrentInstance().proxy |
| | | const event = instance.getOpenerEventChannel() |
| | | eventChannel.value = event |
| | | event.on('handleSelectEqu', function (data) { |
| | | event.on('OnSelectEqu', function (data) { |
| | | isSelectEqu.value = true |
| | | console.log('handleSelectEqu', data) |
| | | console.log('OnSelectEqu', data) |
| | | }) |
| | | }) |
| | | </script> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <route lang="json5" type="page"> |
| | | { |
| | | layout: 'default', |
| | | needLogin: true, |
| | | style: { |
| | | navigationBarTitleText: 'å·¥å
·å表', |
| | | }, |
| | | } |
| | | </route> |
| | | <template> |
| | | <z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time> |
| | | <template #top> |
| | | <wd-drop-menu> |
| | | <wd-drop-menu-item v-model="fixtureType" :options="typeList" @change="handleFixtureType" /> |
| | | <wd-drop-menu-item v-model="status" :options="statusList" @change="handleFixtureStatu" /> |
| | | </wd-drop-menu> |
| | | </template> |
| | | |
| | | <view class="bg-base"> |
| | | <wd-card type="rectangle" v-for="(item, index) in dataList" :key="item.id"> |
| | | <template #title> |
| | | <view class="flex justify-between items-center"> |
| | | <view class="flex items-center menu-title-box"> |
| | | <view class="menu-indicator"></view> |
| | | <text class="ml-1 text-xs">{{ item.fixtureName }}</text> |
| | | <text class="ml-1 text-mini text-color-gray">{{ item.assetNo }}</text> |
| | | </view> |
| | | |
| | | <view> |
| | | <text class="icon-color-base">详æ
</text> |
| | | <wd-icon name="arrow-right" custom-class="icon-color-base"></wd-icon> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | <view class="flex h-[80rpx] items-center" @click.stop="itemClick(item)"> |
| | | <image class="slot-img text-center" src="/static/images/camera.png" /> |
| | | <view class="flex-1"> |
| | | <view class="text-color-base"> |
| | | <text class="text-color-gray text-mini">ç±»å: {{ item.fixtureTypeName }}</text> |
| | | <text class="text-color-gray ml-2 text-mini">è§æ ¼: {{ item.specNo }}</text> |
| | | <text class="text-color-gray ml-2 text-mini">åå·: {{ item.modelNo }}</text> |
| | | </view> |
| | | <view class="text-color-gray text-xs mt-1 flex"> |
| | | <template |
| | | v-if="!item.borrowStatus || item.borrowStatus === '0'" |
| | | > |
| | | <view class="flex items-center"> |
| | | <wd-icon class="icon-color-success" name="check-outline" size="28rpx"></wd-icon> |
| | | <text class="ml-[2px]">空é²</text> |
| | | </view> |
| | | </template> |
| | | |
| | | <template |
| | | v-if="item.borrowStatus === '1'" |
| | | > |
| | | <view class="flex items-center"> |
| | | <wd-icon class="text-color-primary" name="check-outline" size="28rpx"></wd-icon> |
| | | <text class="ml-[2px]">ååº</text> |
| | | </view> |
| | | </template> |
| | | <text v-if="item.borrowUserName" class="mx-2">|</text> |
| | | <view class="flex items-center"> |
| | | <wd-icon name="setting" size="26rpx"></wd-icon> |
| | | <text class="ml-[2px]">{{ item.borrowUserName }}</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view v-if="isSelectFixture"> |
| | | <wd-button size="small" icon="edit-outline" @click.stop="handleSelectFixture(item)"> |
| | | éä¸ |
| | | </wd-button> |
| | | </view> |
| | | </view> |
| | | </wd-card> |
| | | </view> |
| | | </z-paging> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { onMounted, getCurrentInstance, ref } from 'vue' |
| | | |
| | | import { getFixtureList } from '@/service/fixture' |
| | | |
| | | // å·¥å
፱Ȍ |
| | | const fixtureType = ref<number>(0) |
| | | // å·¥å
·ç¶æ |
| | | const status = ref<number>(0) |
| | | |
| | | const isSelectFixture = ref(false) |
| | | |
| | | const typeList = ref<Record<string, any>[]>([{ label: 'ææå·¥å
·', value: 0 }]) |
| | | const statusList = ref<Record<string, any>[]>([{ label: 'ææç¶æ', value: 0 }]) |
| | | function handleFixtureType({ value }) { |
| | | console.log(value) |
| | | } |
| | | function handleFixtureStatu({ value }) { |
| | | console.log(value) |
| | | } |
| | | |
| | | const paging = ref(null) |
| | | const dataList = ref([]) |
| | | |
| | | const queryList = (pageNum?: number, pageSize?: number) => { |
| | | // è¿éçpageNoåpageSizeä¼èªå¨è®¡ç®å¥½ï¼ç´æ¥ä¼ ç»æå¡å¨å³å¯ |
| | | // è¿éç请æ±åªæ¯æ¼ç¤ºï¼è¯·æ¿æ¢æèªå·±ç项ç®çç½ç»è¯·æ±ï¼å¹¶å¨ç½ç»è¯·æ±åè°ä¸éè¿paging.value.complete(请æ±åæ¥çæ°ç»)å°è¯·æ±ç»æä¼ ç»z-paging |
| | | getFixtureList({ pageNum, pageSize }) |
| | | .then((res: any) => { |
| | | // 请å¿å¨ç½ç»è¯·æ±åè°ä¸ç»dataListèµå¼ï¼ï¼åªéè¦è°ç¨completeå°±å¯ä»¥äº |
| | | paging.value.completeByTotal(res.rows, res.total) |
| | | }) |
| | | .catch((res) => { |
| | | // å¦æè¯·æ±å¤±è´¥åpaging.value.complete(false)ï¼ä¼èªå¨å±ç¤ºéè¯¯é¡µé¢ |
| | | // 注æï¼æ¯æ¬¡é½éè¦å¨catchä¸åè¿å¥è¯å¾éº»ç¦ï¼z-pagingæä¾äºæ¹æ¡å¯ä»¥å
¨å±ç»ä¸å¤ç |
| | | // å¨åºå±çç½ç»è¯·æ±æåºå¼å¸¸æ¶ï¼åuni.$emit('z-paging-error-emit');å³å¯ |
| | | paging.value.complete(false) |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * å·¥å
·æ¡ç®ç¹å»äºä»¶ |
| | | * @param item |
| | | */ |
| | | function itemClick(item: any) {} |
| | | |
| | | /** |
| | | * å
¶å®é¡µé¢éæ©å·¥å
· |
| | | * @param item |
| | | */ |
| | | function handleSelectFixture(item: any) { |
| | | if (isSelectFixture.value) { |
| | | emitSelectFixture(item) |
| | | uni.navigateBack() |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 鿩工å
·åè° |
| | | * @param equ |
| | | */ |
| | | function emitSelectFixture(fixture: any) { |
| | | eventChannel.value.emit('selectFixture', { |
| | | data: fixture, |
| | | }) |
| | | } |
| | | |
| | | const eventChannel = ref<any>() |
| | | onMounted(() => { |
| | | const instance: any = getCurrentInstance().proxy |
| | | const event = instance.getOpenerEventChannel() |
| | | eventChannel.value = event |
| | | event.on('OnSelectFixture', function (data) { |
| | | isSelectFixture.value = true |
| | | console.log('OnSelectFixture', data) |
| | | }) |
| | | }) |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .menu-title-box { |
| | | height: 30rpx; |
| | | line-height: 30rpx; |
| | | } |
| | | |
| | | .slot-img { |
| | | width: 72rpx; |
| | | height: 72rpx; |
| | | margin-right: 24rpx; |
| | | } |
| | | .text-mini { |
| | | font-size: 22rpx; |
| | | } |
| | | |
| | | .menu-indicator { |
| | | width: 6rpx; |
| | | height: 22rpx; |
| | | border-radius: 10rpx; |
| | | background-color: $uni-color-primary; |
| | | } |
| | | :deep(.wd-card__footer) { |
| | | padding: 10rpx !important; |
| | | } |
| | | :deep(.wd-card__title-content) { |
| | | padding: 20rpx 0 !important; |
| | | } |
| | | </style> |
| | |
| | | name: '设å¤ç®¡ç', |
| | | icon: '/static/menu/menu1.png', |
| | | path: 'pages/equ/equ-list', |
| | | } |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: 'å·¥å
·ç®¡ç', |
| | | icon: '/static/menu/menu1.png', |
| | | path: 'pages/fixture/fixture-list', |
| | | }, |
| | | ]) |
| | | |
| | | const inspectMenu = reactive([ |
| | |
| | | { |
| | | id: 1, |
| | | name: 'ç¹æ£æ±æ»', |
| | | icon: '/static/menu/menu2.png', |
| | | icon: '/static/menu/menu4.png', |
| | | path: 'pages/inspect/insp-st', |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: 'ä¿å
»æ±æ»', |
| | | icon: '/static/menu/menu1.png', |
| | | icon: '/static/menu/menu3.png', |
| | | path: 'pages/maint/maint-st', |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: 'ç¹æ£è®°å½', |
| | | icon: '/static/menu/menu3.png', |
| | | path: 'pages/inspect/insp-record', |
| | | name: 'è®¾å¤æ¥ä¿®', |
| | | icon: '/static/menu/menu1.png', |
| | | path: 'pages/repair/req-list', |
| | | }, |
| | | { |
| | | id: 4, |
| | | name: 'ç¹æ£è®¡å', |
| | | icon: '/static/menu/menu4.png', |
| | | path: 'pages/inspect/insp-add', |
| | | name: '设å¤ç»´ä¿®', |
| | | icon: '/static/menu/menu2.png', |
| | | path: 'pages/repair/res-list', |
| | | }, |
| | | ]) |
| | | |
| | |
| | | height: 72rpx; |
| | | margin-left: 4rpx; |
| | | } |
| | | :deep(.wd-grid-item__content){ |
| | | align-items: center; |
| | | } |
| | | </style> |
| | |
| | | getInspStRecordList(params) |
| | | .then((res: any) => { |
| | | // 请å¿å¨ç½ç»è¯·æ±åè°ä¸ç»dataListèµå¼ï¼ï¼åªéè¦è°ç¨completeå°±å¯ä»¥äº |
| | | paging.value.complete(res.rows) |
| | | paging.value.completeByTotal(res.rows, res.total) |
| | | }) |
| | | .catch((res) => { |
| | | // å¦æè¯·æ±å¤±è´¥åpaging.value.complete(false)ï¼ä¼èªå¨å±ç¤ºéè¯¯é¡µé¢ |
| | |
| | | <wd-drop-menu-item v-model="viewMode" :options="viewModeList" @change="handleViewMode" /> |
| | | <wd-drop-menu-item v-model="equName" :options="equList" @change="handleEquName" /> |
| | | </wd-drop-menu> |
| | | <wd-divider></wd-divider> |
| | | </template> |
| | | <view class="bg-base"> |
| | | <view class="w-full h-[24rpx]"></view> |
| | | <wd-card type="rectangle" v-for="(item, index) in dataList" :key="item.id"> |
| | | <template #title> |
| | | <view class="flex justify-between"> |
| | |
| | | getInspStList({ pageNum, pageSize, viewMode: viewMode.value }) |
| | | .then((res: any) => { |
| | | // 请å¿å¨ç½ç»è¯·æ±åè°ä¸ç»dataListèµå¼ï¼ï¼åªéè¦è°ç¨completeå°±å¯ä»¥äº |
| | | paging.value.complete(res.rows) |
| | | paging.value.completeByTotal(res.rows, res.total) |
| | | }) |
| | | .catch((res) => { |
| | | // å¦æè¯·æ±å¤±è´¥åpaging.value.complete(false)ï¼ä¼èªå¨å±ç¤ºéè¯¯é¡µé¢ |
| | |
| | | uni.$on('insp-st-refresh', reloadData) |
| | | }) |
| | | onUnload(() => { |
| | | uni.$off('insp-st-refres', reloadData) |
| | | uni.$off('insp-st-refresh', reloadData) |
| | | }) |
| | | </script> |
| | | |
| | |
| | | getMaintStOrderList(params) |
| | | .then((res: any) => { |
| | | // 请å¿å¨ç½ç»è¯·æ±åè°ä¸ç»dataListèµå¼ï¼ï¼åªéè¦è°ç¨completeå°±å¯ä»¥äº |
| | | paging.value.complete(res.rows) |
| | | paging.value.completeByTotal(res.rows, res.total) |
| | | }) |
| | | .catch((res) => { |
| | | // å¦æè¯·æ±å¤±è´¥åpaging.value.complete(false)ï¼ä¼èªå¨å±ç¤ºéè¯¯é¡µé¢ |
| | |
| | | <wd-drop-menu-item v-model="equName" :options="equList" @change="handleEquName" /> |
| | | <wd-drop-menu-item v-model="status" :options="statusList" @change="handleStatus" /> |
| | | </wd-drop-menu> |
| | | <wd-divider></wd-divider> |
| | | </template> |
| | | <view class="bg-base"> |
| | | <view class="w-full h-[24rpx]"></view> |
| | | <wd-card type="rectangle" v-for="(item, index) in dataList" :key="item.id"> |
| | | <template #title> |
| | | <view class="flex justify-between"> |
| | |
| | | getMaintStList(params) |
| | | .then((res: any) => { |
| | | // 请å¿å¨ç½ç»è¯·æ±åè°ä¸ç»dataListèµå¼ï¼ï¼åªéè¦è°ç¨completeå°±å¯ä»¥äº |
| | | paging.value.complete(res.rows) |
| | | paging.value.completeByTotal(res.rows, res.total) |
| | | }) |
| | | .catch((res) => { |
| | | // å¦æè¯·æ±å¤±è´¥åpaging.value.complete(false)ï¼ä¼èªå¨å±ç¤ºéè¯¯é¡µé¢ |
| | |
| | | paging.value.reload() |
| | | } |
| | | onLoad(() => { |
| | | queryList() |
| | | uni.$on('maint-st-refresh', reloadData) |
| | | }) |
| | | onUnload(() => { |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <route lang="json5" type="page"> |
| | | { |
| | | layout: 'default', |
| | | style: { |
| | | navigationBarTitleText: 'æ·»å æ¥ä¿®', |
| | | 'app-plus': { |
| | | titleNView: { |
| | | buttons: [ |
| | | { |
| | | text: 'æäº¤', |
| | | fontSize: '14px', |
| | | color: '#FFFFFF', |
| | | }, |
| | | { |
| | | text: '', |
| | | fontSize: '24px', |
| | | color: '#FFFFFF', |
| | | }, |
| | | ], |
| | | }, |
| | | }, |
| | | }, |
| | | } |
| | | </route> |
| | | |
| | | <template> |
| | | <view class="bg-base"> |
| | | <wd-form ref="form" :model="model"> |
| | | <wd-cell-group custom-class="group" title="ç±»åä¿¡æ¯" border> |
| | | <wd-picker |
| | | prop="reqType" |
| | | :columns="reqList" |
| | | label-key="dictLabel" |
| | | value-key="dictValue" |
| | | label="æ
éç±»å" |
| | | v-model="model.reqType" |
| | | @confirm="handleConfirmReqType" |
| | | /> |
| | | </wd-cell-group> |
| | | |
| | | <wd-cell-group |
| | | v-if="model.reqType === '1'" |
| | | custom-class="mt-2" |
| | | title="设å¤ä¿¡æ¯" |
| | | use-slot |
| | | border |
| | | > |
| | | <template #value> |
| | | <view class="text-color-gray flex items-center"> |
| | | <wd-icon class="icon-color-base" name="scan" size="30rpx"></wd-icon> |
| | | <text class="ml-1">æ«è®¾å¤ç æ·»å </text> |
| | | </view> |
| | | </template> |
| | | <wd-input |
| | | @click.stop="handleSelectEqu" |
| | | label="设å¤åç§°" |
| | | label-width="200rpx" |
| | | prop="equName" |
| | | readonly |
| | | required |
| | | suffix-icon="arrow-right" |
| | | clearable |
| | | v-model="model.equName" |
| | | placeholder="è¯·éæ©è®¾å¤" |
| | | /> |
| | | </wd-cell-group> |
| | | |
| | | <wd-cell-group |
| | | v-if="model.reqType === '2'" |
| | | custom-class="mt-2" |
| | | title="å·¥å
·ä¿¡æ¯" |
| | | use-slot |
| | | border |
| | | > |
| | | <template #value> |
| | | <view class="text-color-gray flex items-center"> |
| | | <wd-icon class="icon-color-base" name="scan" size="30rpx"></wd-icon> |
| | | <text class="ml-1">æ«å·¥å
·ç æ·»å </text> |
| | | </view> |
| | | </template> |
| | | <wd-input |
| | | @click.stop="handleSelectFixture" |
| | | label="å·¥å
·åç§°" |
| | | label-width="200rpx" |
| | | prop="fixtureName" |
| | | readonly |
| | | required |
| | | suffix-icon="arrow-right" |
| | | clearable |
| | | v-model="model.fixtureName" |
| | | placeholder="è¯·éæ©å·¥å
·" |
| | | /> |
| | | </wd-cell-group> |
| | | |
| | | <wd-cell-group custom-class="mt-2" title="æ
éä¿¡æ¯" border> |
| | | <wd-input |
| | | v-if="false" |
| | | label="æ¥ä¿®åå·" |
| | | placeholder="è¯·çææ¥ä¿®åå·" |
| | | label-width="200rpx" |
| | | v-model="model.code" |
| | | prop="code" |
| | | > |
| | | <template #suffix> |
| | | <wd-button size="small" icon="edit-outline" @click.stop="handleRepairCode"> |
| | | çæ |
| | | </wd-button> |
| | | </template> |
| | | </wd-input> |
| | | |
| | | <wd-textarea |
| | | label="æ¥ä¿®æè¿°" |
| | | label-width="200rpx" |
| | | type="textarea" |
| | | v-model="model.reqDesc" |
| | | auto-height |
| | | :maxlength="200" |
| | | show-word-limit |
| | | placeholder="请è¾å
¥æ¥ä¿®æè¿°" |
| | | clearable |
| | | prop="reqDesc" |
| | | /> |
| | | <wd-cell title="æ¥ä¿®å¾ç" title-width="200rpx" prop="fileList"> |
| | | <wd-upload |
| | | :auto-upload="false" |
| | | :file-list="model.fileList" |
| | | :action="VITE_UPLOAD_BASEURL" |
| | | @change="handleFileChange" |
| | | ></wd-upload> |
| | | </wd-cell> |
| | | |
| | | <wd-datetime-picker |
| | | label="åçæ¶é´" |
| | | label-width="200rpx" |
| | | placeholder="è¯·éæ©æ
éåçæ¶é´" |
| | | prop="occTime" |
| | | v-model="occTime" |
| | | @open="openOccTime" |
| | | @confirm="handleOccTimeConfirm" |
| | | /> |
| | | </wd-cell-group> |
| | | |
| | | <wd-cell-group custom-class="mt-2" title="å
¶ä»ä¿¡æ¯" border> |
| | | <wd-picker |
| | | :columns="faultList" |
| | | label-key="dictLabel" |
| | | value-key="dictValue" |
| | | label="æ
éç±»å«" |
| | | v-model="model.faultType" |
| | | @confirm="handleConfirmFaultType" |
| | | /> |
| | | <wd-picker |
| | | :columns="urgencyList" |
| | | label-key="dictLabel" |
| | | value-key="dictValue" |
| | | label="ç´§æ¥ç¨åº¦" |
| | | v-model="model.urgencyLevel" |
| | | @confirm="handleConfirmUrgencyLevel" |
| | | /> |
| | | </wd-cell-group> |
| | | </wd-form> |
| | | </view> |
| | | </template> |
| | | <script setup lang="ts"> |
| | | import { reactive, ref } from 'vue' |
| | | import { getEnvBaseUploadUrl } from '@/utils' |
| | | import { generateCode } from '@/service/utils' |
| | | import { addRepairReq } from '@/service/repair' |
| | | import { formatDate } from '@/utils/DateUtils' |
| | | import { useToast, useMessage } from 'wot-design-uni' |
| | | import { useUserStore } from '@/store' |
| | | import { |
| | | DICT_REPAIR_FAULT_TYPE, |
| | | DICT_REPAIR_REQ_TYPE, |
| | | DICT_REPAIR_URGENCY_LEVEL, |
| | | getDictInfo, |
| | | } from '@/service/dict' |
| | | |
| | | const VITE_UPLOAD_BASEURL = `${getEnvBaseUploadUrl()}` |
| | | const message = useMessage() |
| | | const toast = useToast() |
| | | const userStore = useUserStore() |
| | | |
| | | // æ¥ä¿®ç±»å |
| | | const reqList = ref<any>([]) |
| | | // æ
éç±»å« |
| | | const faultList = ref<any>([]) |
| | | // ç´§æ¥ç¨åº¦ |
| | | const urgencyList = ref<any>([]) |
| | | |
| | | const form = ref() |
| | | const occTime = ref(0) |
| | | const model = reactive<{ |
| | | code: string |
| | | status: string |
| | | reqDesc: string |
| | | occTime: string |
| | | reqTime: string |
| | | reqDept: number | string |
| | | reqUser: number | string |
| | | equId: string |
| | | equName: string |
| | | reqType: string |
| | | faultType: string |
| | | urgencyLevel: string |
| | | fixtureId: string |
| | | fixtureName: string |
| | | fileList: [] |
| | | }>({ |
| | | code: '', |
| | | reqDesc: '', |
| | | status: '', |
| | | occTime: '', |
| | | reqTime: '', |
| | | reqDept: null, |
| | | reqUser: null, |
| | | equId: '', |
| | | equName: '', |
| | | reqType: '', |
| | | faultType: '', |
| | | urgencyLevel: '', |
| | | fixtureId: '', |
| | | fixtureName: '', |
| | | fileList: [], |
| | | }) |
| | | |
| | | /** |
| | | * éæ©è®¾å¤ |
| | | */ |
| | | function handleSelectEqu() { |
| | | uni.navigateTo({ |
| | | url: '/pages/equ/equ-list', |
| | | events: { |
| | | // 为æå®äºä»¶æ·»å ä¸ä¸ªçå¬å¨ï¼è·å被æå¼é¡µé¢ä¼ éå°å½å页é¢çæ°æ® |
| | | selectEqu: function (data) { |
| | | model.equId = data.data.equId |
| | | model.equName = data.data.equName |
| | | }, |
| | | }, |
| | | success: function (res) { |
| | | // éè¿eventChannelå被æå¼é¡µé¢ä¼ éæ°æ® |
| | | res.eventChannel.emit('OnSelectEqu', { data: 'ç¹æ£é¡µé¢éæ©è®¾å¤' }) |
| | | }, |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 鿩工å
· |
| | | */ |
| | | function handleSelectFixture() { |
| | | uni.navigateTo({ |
| | | url: '/pages/fixture/fixture-list', |
| | | events: { |
| | | // 为æå®äºä»¶æ·»å ä¸ä¸ªçå¬å¨ï¼è·å被æå¼é¡µé¢ä¼ éå°å½å页é¢çæ°æ® |
| | | selectFixture: function (data) { |
| | | model.fixtureId = data.data.id |
| | | model.fixtureName = data.data.fixtureName |
| | | }, |
| | | }, |
| | | success: function (res) { |
| | | // éè¿eventChannelå被æå¼é¡µé¢ä¼ éæ°æ® |
| | | res.eventChannel.emit('OnSelectFixture', { data: 'æ·»å 维修页é¢éæ©å·¥å
·' }) |
| | | }, |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * çææ¥ä¿®ç¼å· |
| | | */ |
| | | async function handleRepairCode() { |
| | | try { |
| | | const code: any = await generateCode('BXD') |
| | | model.code = code |
| | | console.log('çææ¥ä¿®åå·:', code) |
| | | |
| | | message |
| | | .confirm({ |
| | | msg: 'ç¡®å®æäº¤ï¼', |
| | | title: 'æç¤º', |
| | | beforeConfirm: ({ resolve }) => { |
| | | resolve(true) |
| | | handleAddRepairReq() |
| | | }, |
| | | }) |
| | | .then(() => {}) |
| | | .catch((error) => { |
| | | console.log(error) |
| | | }) |
| | | } catch (error) { |
| | | console.error('çææ¥ä¿®åå·å¤±è´¥:', error) |
| | | toast.error('çææ¥ä¿®åå·å¤±è´¥,è¯·æ£æ¥ç½ç»åéè¯') |
| | | } |
| | | } |
| | | |
| | | function handleAddRepairReq() { |
| | | // è¡¥å
å¿
è¦å段 |
| | | model.status = '0' |
| | | model.reqTime = formatDate(new Date()) |
| | | model.reqDept = userStore?.userInfo?.deptId |
| | | model.reqUser = userStore?.userInfo?.userId |
| | | addRepairReq(model) |
| | | .then((res: any) => { |
| | | if (res?.code === 200) { |
| | | toast.success(res?.msg) |
| | | uni.$emit('req-list-refresh') |
| | | setTimeout(() => { |
| | | uni.navigateBack() |
| | | }, 1500) |
| | | } |
| | | }) |
| | | .catch((res) => { |
| | | toast.error(res?.data?.msg || '请æ±å¤±è´¥') |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * ä¸ä¼ ç¹æ£å¾ç |
| | | * @param fileList |
| | | */ |
| | | function handleFileChange({ fileList }) { |
| | | model.fileList = fileList |
| | | } |
| | | |
| | | function checkData() { |
| | | if (!model.reqType) { |
| | | toast.error('è¯·éæ©æ¥ä¿®ç±»å') |
| | | return false |
| | | } |
| | | if (model.reqType === '1' && !model.equId) { |
| | | toast.error('è¯·éæ©æ¥ä¿®è®¾å¤') |
| | | return false |
| | | } |
| | | if (model.reqType === '2' && !model.fixtureId) { |
| | | toast.error('è¯·éæ©æ¥ä¿®å·¥å
·') |
| | | return false |
| | | } |
| | | if (!model.occTime) { |
| | | toast.error('请éåçæ¶é´') |
| | | return false |
| | | } |
| | | return true |
| | | } |
| | | |
| | | function handleSubmit() { |
| | | if (!checkData()) { |
| | | return false |
| | | } |
| | | handleRepairCode() |
| | | } |
| | | |
| | | /** |
| | | * æå¼åçæ¶é´ æ¶é´éæ©å¨ |
| | | */ |
| | | function openOccTime() { |
| | | occTime.value = Date.now() |
| | | } |
| | | /** |
| | | * ç¡®è®¤éæ©åçæ¶é´ |
| | | */ |
| | | function handleOccTimeConfirm({ value }) { |
| | | model.occTime = formatDate(new Date(value)) |
| | | } |
| | | |
| | | /** |
| | | * éæ©æ¥ä¿®ç±»å |
| | | */ |
| | | function handleConfirmReqType({ value }) { |
| | | } |
| | | |
| | | /** |
| | | * éæ©æ
éç±»å« |
| | | */ |
| | | function handleConfirmFaultType({ value }) { |
| | | } |
| | | |
| | | /** |
| | | * éæ©ç´§æ¥ç¨åº¦ |
| | | */ |
| | | function handleConfirmUrgencyLevel({ value }) { |
| | | } |
| | | |
| | | async function initData() { |
| | | const reqTypeList = await getDictInfo(DICT_REPAIR_REQ_TYPE) |
| | | reqList.value = reqTypeList |
| | | |
| | | const fList = await getDictInfo(DICT_REPAIR_FAULT_TYPE) |
| | | faultList.value = fList |
| | | |
| | | const uList = await getDictInfo(DICT_REPAIR_URGENCY_LEVEL) |
| | | urgencyList.value = uList |
| | | } |
| | | |
| | | onNavigationBarButtonTap((e) => { |
| | | if (e.index === 0) { |
| | | handleSubmit() |
| | | } |
| | | }) |
| | | |
| | | onLoad((options) => { |
| | | initData() |
| | | }) |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | .footer { |
| | | background: white; |
| | | padding: 60rpx 42rpx; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <route lang="json5"> |
| | | { |
| | | layout: 'default', |
| | | needLogin: true, |
| | | style: { |
| | | navigationBarTitleText: 'è®¾å¤æ¥ä¿®', |
| | | 'app-plus': { |
| | | titleNView: { |
| | | buttons: [ |
| | | { |
| | | text: 'æ°å¢', |
| | | fontSize: '14px', |
| | | color: '#FFFFFF', |
| | | }, |
| | | { |
| | | text: '', |
| | | fontSize: '24px', |
| | | color: '#FFFFFF', |
| | | }, |
| | | ], |
| | | }, |
| | | }, |
| | | }, |
| | | } |
| | | </route> |
| | | <template> |
| | | <z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time> |
| | | <template #top> |
| | | <wd-drop-menu v-if="!isSelectReq"> |
| | | <wd-drop-menu-item |
| | | v-model="reqTypeId" |
| | | label-key="dictLabel" |
| | | value-key="dictValue" |
| | | :options="reqTypeList" |
| | | @change="handleReqType" |
| | | /> |
| | | <wd-drop-menu-item |
| | | v-model="status" |
| | | label-key="dictLabel" |
| | | value-key="dictValue" |
| | | :options="statusList" |
| | | @change="handleReqStatu" |
| | | /> |
| | | </wd-drop-menu> |
| | | </template> |
| | | |
| | | <view class="bg-base"> |
| | | <wd-card type="rectangle" v-for="(item, index) in dataList" :key="item.id"> |
| | | <template #title> |
| | | <view class="flex justify-between items-center"> |
| | | <view class="flex items-center menu-title-box"> |
| | | <view class="menu-indicator"></view> |
| | | <text class="ml-1 text-xs">{{ item.code }}</text> |
| | | </view> |
| | | |
| | | <view> |
| | | <wd-button size="small" v-if="item.status === '0'" type="info">å¾
æ¥å</wd-button> |
| | | <wd-button size="small" v-else-if="item.status === '1'" type="warning"> |
| | | å·²æ¥å |
| | | </wd-button> |
| | | <wd-button size="small" v-else-if="item.status === '2'" type="primary"> |
| | | ç»´ä¿®ä¸ |
| | | </wd-button> |
| | | <wd-button size="small" v-else-if="item.status === '3'" type="success"> |
| | | 已宿 |
| | | </wd-button> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | <wd-swipe-action> |
| | | <view class="flex h-[160rpx] items-center" @click.stop="itemClick(item)"> |
| | | <image |
| | | v-if="item.reqType === '1'" |
| | | class="slot-img text-center" |
| | | src="/static/ico/ico-huiyi.png" |
| | | /> |
| | | <image |
| | | v-else-if="item.reqType === '2'" |
| | | class="slot-img text-center" |
| | | src="/static/ico/ico-setting.png" |
| | | /> |
| | | <image |
| | | v-else-if="item.reqType === '3'" |
| | | class="slot-img text-center" |
| | | src="/static/ico/ico-faxian.png" |
| | | /> |
| | | <view class="flex-1 mt-1"> |
| | | <view class="text-color-base"> |
| | | <template v-if="item.reqType === '1'"> |
| | | <text>设å¤ç±»å</text> |
| | | <text class="mx-2">|</text> |
| | | <text>{{ item.equName }}</text> |
| | | </template> |
| | | |
| | | <template v-if="item.reqType === '2'"> |
| | | <text>å·¥å
፱Ȍ</text> |
| | | <text class="mx-2">|</text> |
| | | <text>{{ item.fixtureName }}</text> |
| | | </template> |
| | | |
| | | <template v-if="item.reqType === '3'"> |
| | | <text>å
¶ä»ç±»å</text> |
| | | </template> |
| | | <view class="text-color-gray mt-1 text-mini"> |
| | | <text>åçæ¶é´: {{ item.occTime }}</text> |
| | | </view> |
| | | |
| | | <view class="text-color-gray mt-1 text-mini"> |
| | | <text>æ¥ä¿®æ¶é´: {{ item.reqTime }}</text> |
| | | </view> |
| | | <view class="text-color-gray mt-1 text-mini"> |
| | | <text>æ¥ä¿®äºº: {{ item.reqUserName }}</text> |
| | | </view> |
| | | </view> |
| | | <view class="text-color-gray text-xs mt-1"> |
| | | {{ item.location }} {{ item.madeIn }} |
| | | </view> |
| | | </view> |
| | | <view v-if="isSelectReq"> |
| | | <wd-button size="small" icon="edit-outline" @click.stop="handleSelectReq(item)"> |
| | | éä¸ |
| | | </wd-button> |
| | | </view> |
| | | </view> |
| | | <template #right> |
| | | <view class="h-full px-3 flex items-center"> |
| | | <wd-button size="small" type="error" @click.stop="handleDelete(item)">å é¤</wd-button> |
| | | </view> |
| | | </template> |
| | | </wd-swipe-action> |
| | | </wd-card> |
| | | </view> |
| | | </z-paging> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { onMounted, getCurrentInstance, ref } from 'vue' |
| | | import { useToast, useMessage } from 'wot-design-uni' |
| | | import { getRepairReqList, delRepairReq } from '@/service/repair' |
| | | import { DICT_REPAIR_REQ_STATUS, DICT_REPAIR_REQ_TYPE, getDictInfo } from '@/service/dict' |
| | | |
| | | const message = useMessage() |
| | | const toast = useToast() |
| | | // æ¥ä¿®åç±»å |
| | | const reqTypeId = ref<number>(-1) |
| | | // æ¥ä¿®åå¤çç¶æ |
| | | const status = ref<number>(-1) |
| | | |
| | | const isSelectReq = ref(false) |
| | | |
| | | const reqTypeList = ref<any>([{ dictLabel: 'ææç±»å', dictValue: -1 }]) |
| | | const statusList = ref<any>([{ dictLabel: 'ææç¶æ', dictValue: -1 }]) |
| | | function handleReqType({ value }) { |
| | | reloadData() |
| | | } |
| | | function handleReqStatu({ value }) { |
| | | reloadData() |
| | | } |
| | | |
| | | const paging = ref(null) |
| | | const dataList = ref([]) |
| | | |
| | | const queryList = (pageNum?: number, pageSize?: number) => { |
| | | const parmams = { |
| | | pageNum, |
| | | pageSize, |
| | | reqType: reqTypeId.value, |
| | | status: status.value, |
| | | } |
| | | if (reqTypeId.value === -1) { |
| | | delete parmams.reqType |
| | | } |
| | | if (status.value === -1) { |
| | | delete parmams.status |
| | | } |
| | | |
| | | getRepairReqList(parmams) |
| | | .then((res: any) => { |
| | | paging.value.completeByTotal(res.rows, res.total) |
| | | }) |
| | | .catch((res) => { |
| | | paging.value.complete(false) |
| | | }) |
| | | } |
| | | function reloadData() { |
| | | paging.value.reload() |
| | | } |
| | | |
| | | /** |
| | | * å é¤ |
| | | * @param item |
| | | */ |
| | | function handleDelete(item: any) { |
| | | message |
| | | .confirm({ |
| | | msg: 'ç¡®å®å é¤ï¼', |
| | | title: 'æç¤º', |
| | | beforeConfirm: ({ resolve }) => { |
| | | resolve(true) |
| | | if (item.status !== '0') { |
| | | toast.error('该æ¥ä¿®å已被æ¥åï¼è¯·è系管çå!') |
| | | } else { |
| | | delRepairReq(item.id) |
| | | .then((res: any) => { |
| | | if (res?.code === 200) { |
| | | toast.success('å 餿å') |
| | | reloadData() |
| | | } |
| | | }) |
| | | .catch((res) => { |
| | | toast.error('å é¤å¤±è´¥') |
| | | }) |
| | | } |
| | | }, |
| | | }) |
| | | .then(() => {}) |
| | | .catch((error) => { |
| | | console.log(error) |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * æ¡ç®ç¹å»äºä»¶ |
| | | * @param item |
| | | */ |
| | | function itemClick(item: any) {} |
| | | |
| | | /** |
| | | * å
¶å®é¡µé¢éæ©æ¥ä¿®å |
| | | * @param item |
| | | */ |
| | | function handleSelectReq(item: any) { |
| | | if (isSelectReq.value) { |
| | | emitSelectReq(item) |
| | | uni.navigateBack() |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * éæ©åè° |
| | | * @param req |
| | | */ |
| | | function emitSelectReq(req: any) { |
| | | eventChannel.value.emit('selectReq', { |
| | | data: req, |
| | | }) |
| | | } |
| | | |
| | | onNavigationBarButtonTap((e) => { |
| | | if (e.index === 0 && !isSelectReq.value) { |
| | | uni.navigateTo({ |
| | | url: `/pages/repair/repair-add`, |
| | | }) |
| | | } |
| | | }) |
| | | |
| | | const eventChannel = ref<any>() |
| | | onMounted(() => { |
| | | const instance: any = getCurrentInstance().proxy |
| | | const event = instance.getOpenerEventChannel() |
| | | eventChannel.value = event |
| | | event.on('OnSelectReq', function (data) { |
| | | isSelectReq.value = true |
| | | // åªæ¾ç¤ºæªæ¥åæ°æ® |
| | | status.value = 0 |
| | | console.log('OnSelectReq', data) |
| | | }) |
| | | }) |
| | | |
| | | async function initData() { |
| | | const rList: any = await getDictInfo(DICT_REPAIR_REQ_TYPE) |
| | | reqTypeList.value.push(...rList) |
| | | const sList: any = await getDictInfo(DICT_REPAIR_REQ_STATUS) |
| | | statusList.value.push(...sList) |
| | | } |
| | | |
| | | onLoad(() => { |
| | | initData() |
| | | uni.$on('req-list-refresh', reloadData) |
| | | }) |
| | | onUnload(() => { |
| | | uni.$off('req-list-refresh', reloadData) |
| | | }) |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .menu-title-box { |
| | | height: 30rpx; |
| | | line-height: 30rpx; |
| | | } |
| | | |
| | | .slot-img { |
| | | width: 72rpx; |
| | | height: 72rpx; |
| | | margin-right: 24rpx; |
| | | } |
| | | .text-mini { |
| | | font-size: 22rpx; |
| | | } |
| | | |
| | | .menu-indicator { |
| | | width: 6rpx; |
| | | height: 22rpx; |
| | | border-radius: 10rpx; |
| | | background-color: $uni-color-primary; |
| | | } |
| | | :deep(.wd-card__title-content) { |
| | | padding: 16rpx !important; |
| | | } |
| | | :deep(.wd-card__content) { |
| | | padding: 16rpx !important; |
| | | } |
| | | :deep(.wd-card__footer) { |
| | | padding: 10rpx !important; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <route lang="json5"> |
| | | { |
| | | layout: 'default', |
| | | needLogin: true, |
| | | style: { |
| | | navigationBarTitleText: '设å¤ç»´ä¿®', |
| | | 'app-plus': { |
| | | titleNView: { |
| | | buttons: [ |
| | | { |
| | | text: 'æ¥å', |
| | | fontSize: '14px', |
| | | color: '#FFFFFF', |
| | | }, |
| | | { |
| | | text: '', |
| | | fontSize: '24px', |
| | | color: '#FFFFFF', |
| | | }, |
| | | ], |
| | | }, |
| | | }, |
| | | }, |
| | | } |
| | | </route> |
| | | <template> |
| | | <z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time> |
| | | <template #top> |
| | | <wd-drop-menu> |
| | | <wd-drop-menu-item |
| | | v-model="resTypeId" |
| | | label-key="dictLabel" |
| | | value-key="dictValue" |
| | | :options="resTypeList" |
| | | @change="handleResType" |
| | | /> |
| | | <wd-drop-menu-item |
| | | v-model="status" |
| | | label-key="dictLabel" |
| | | value-key="dictValue" |
| | | :options="statusList" |
| | | @change="handleResStatu" |
| | | /> |
| | | </wd-drop-menu> |
| | | </template> |
| | | |
| | | <view class="bg-base"> |
| | | <wd-card type="rectangle" v-for="(item, index) in dataList" :key="item.id"> |
| | | <template #title> |
| | | <view class="flex justify-between items-center"> |
| | | <view class="flex items-center menu-title-box"> |
| | | <view class="menu-indicator"></view> |
| | | <text class="ml-1 text-xs">{{ item.resCode }}</text> |
| | | <text class="text-color-gray ml-2 text-mini">æ¥å:{{ item.createTime }}</text> |
| | | </view> |
| | | |
| | | <view> |
| | | <wd-tag size="small" v-if="item.status === '1'" type="warning">å·²æ¥å</wd-tag> |
| | | <wd-tag size="small" v-else-if="item.status === '2'" type="primary">ç»´ä¿®ä¸</wd-tag> |
| | | <wd-tag size="small" v-else-if="item.status === '3'" type="success">已宿</wd-tag> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | <view class="flex h-[240rpx] items-center" @click.stop="itemClick(item)"> |
| | | <image |
| | | v-if="item.reqType === '1'" |
| | | class="slot-img text-center" |
| | | src="/static/ico/ico-huiyi.png" |
| | | /> |
| | | <image |
| | | v-else-if="item.reqType === '2'" |
| | | class="slot-img text-center" |
| | | src="/static/ico/ico-setting.png" |
| | | /> |
| | | <image |
| | | v-else-if="item.reqType === '3'" |
| | | class="slot-img text-center" |
| | | src="/static/ico/ico-faxian.png" |
| | | /> |
| | | <view class="flex-1 mt-1"> |
| | | <view class="text-color-base"> |
| | | <template v-if="item.reqType === '1'"> |
| | | <text>设å¤ç±»å</text> |
| | | <text class="mx-2">|</text> |
| | | <text>{{ item.equName }}</text> |
| | | </template> |
| | | |
| | | <template v-if="item.reqType === '2'"> |
| | | <text>å·¥å
፱Ȍ</text> |
| | | <text class="mx-2">|</text> |
| | | <text>{{ item.fixtureName }}</text> |
| | | </template> |
| | | |
| | | <template v-if="item.reqType === '3'"> |
| | | <text>å
¶ä»ç±»å</text> |
| | | </template> |
| | | <view class="text-color-gray mt-1 text-mini"> |
| | | <text>æ¥ä¿®äºº: {{ item.reqUserName }}</text> |
| | | </view> |
| | | <view class="text-color-gray mt-1 text-mini"> |
| | | <text>æ¥ä¿®æ¶é´: {{ item.reqTime }}</text> |
| | | </view> |
| | | |
| | | <view class="text-color-gray mt-1 text-mini"> |
| | | <text>å¼å§æ¶é´: {{ item.startTime }}</text> |
| | | </view> |
| | | <view class="text-color-gray mt-1 text-mini"> |
| | | <text>宿æ¶é´: {{ item.endTime }}</text> |
| | | </view> |
| | | <view class="text-color-gray mt-1 text-mini"> |
| | | <text>维修人: {{ item.resUserName }}</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view> |
| | | <wd-button v-if="item.status === '1'" size="small" icon="edit-outline">å¼å§ç»´ä¿®</wd-button> |
| | | <wd-button v-if="item.status === '2'" size="small" icon="edit-outline">ç»´ä¿®ä¸</wd-button> |
| | | <wd-button v-if="item.status === '3'" size="small" icon="edit-outline">已宿</wd-button> |
| | | </view> |
| | | </view> |
| | | </wd-card> |
| | | </view> |
| | | </z-paging> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { onMounted, getCurrentInstance, ref } from 'vue' |
| | | import { useToast, useMessage } from 'wot-design-uni' |
| | | import { getRepairResList, addRepairRes } from '@/service/repair' |
| | | import { DICT_REPAIR_RES_STATUS, DICT_REPAIR_REQ_TYPE, getDictInfo } from '@/service/dict' |
| | | import { useUserStore } from '@/store' |
| | | const userStore = useUserStore() |
| | | |
| | | const message = useMessage() |
| | | const toast = useToast() |
| | | // ç»´ä¿®åç±»å |
| | | const resTypeId = ref<number>(0) |
| | | // ç»´ä¿®åå¤çç¶æ |
| | | const status = ref<number>(0) |
| | | |
| | | const isSelectRes = ref(false) |
| | | |
| | | const resTypeList = ref<any>([{ dictLabel: 'ææç±»å', dictValue: 0 }]) |
| | | const statusList = ref<any>([{ dictLabel: 'ææç¶æ', dictValue: 0 }]) |
| | | function handleResType({ value }) { |
| | | reloadData() |
| | | } |
| | | function handleResStatu({ value }) { |
| | | reloadData() |
| | | } |
| | | |
| | | const paging = ref(null) |
| | | const dataList = ref([]) |
| | | |
| | | const queryList = (pageNum?: number, pageSize?: number) => { |
| | | const parmams = { |
| | | pageNum, |
| | | pageSize, |
| | | reqType: resTypeId.value, |
| | | status: status.value, |
| | | } |
| | | if (resTypeId.value === 0) { |
| | | delete parmams.reqType |
| | | } |
| | | if (status.value === 0) { |
| | | delete parmams.status |
| | | } |
| | | getRepairResList(parmams) |
| | | .then((res: any) => { |
| | | paging.value.completeByTotal(res.rows, res.total) |
| | | }) |
| | | .catch((res) => { |
| | | paging.value.complete(false) |
| | | }) |
| | | } |
| | | function reloadData() { |
| | | paging.value.reload() |
| | | } |
| | | |
| | | /** |
| | | * æ¡ç®ç¹å»äºä»¶ |
| | | * @param item |
| | | */ |
| | | function itemClick(item: any) {} |
| | | |
| | | onNavigationBarButtonTap((e) => { |
| | | if (e.index === 0) { |
| | | handleSelectReq() |
| | | } |
| | | }) |
| | | |
| | | /** |
| | | * éæ©æ¥ä¿®å |
| | | */ |
| | | function handleSelectReq() { |
| | | uni.navigateTo({ |
| | | url: '/pages/repair/req-list', |
| | | events: { |
| | | // 为æå®äºä»¶æ·»å ä¸ä¸ªçå¬å¨ï¼è·å被æå¼é¡µé¢ä¼ éå°å½å页é¢çæ°æ® |
| | | selectReq: function (data) { |
| | | console.error(data) |
| | | // éæ©æ¥ä¿®ååï¼ä¿®æ¹æ¥ä¿®åç¶æåæ°å¢ç»´ä¿®å·¥å |
| | | const resCode = `WXD${data.data.code.slice(3)}` |
| | | const deptId = userStore?.userInfo?.deptId |
| | | const userId = userStore?.userInfo?.userId |
| | | const resData = { |
| | | reqId: data.data.id, |
| | | reqCode: data.data.code, |
| | | reqUser: data.data.reqUser, |
| | | reqDept: data.data.reqDept, |
| | | resCode, |
| | | status: '1', |
| | | resUser: userId, |
| | | resDept: deptId, |
| | | } |
| | | addRepairRes(resData) |
| | | .then((res: any) => { |
| | | if (res.code === 200) { |
| | | toast.success(res?.msg || 'æä½æå') |
| | | reloadData() |
| | | } else { |
| | | toast.error(res?.msg || 'çæç»´ä¿®å·¥å失败ï¼è¯·éè¯') |
| | | } |
| | | }) |
| | | .catch((res) => { |
| | | toast.error(res?.msg || 'çæç»´ä¿®å·¥å失败ï¼è¯·éè¯') |
| | | }) |
| | | }, |
| | | }, |
| | | success: function (res) { |
| | | // éè¿eventChannelå被æå¼é¡µé¢ä¼ éæ°æ® |
| | | res.eventChannel.emit('OnSelectReq', { data: 'ç»´ä¿®å页é¢éæ©æ¥ä¿®å' }) |
| | | }, |
| | | }) |
| | | } |
| | | |
| | | async function initData() { |
| | | const rList: any = await getDictInfo(DICT_REPAIR_REQ_TYPE) |
| | | resTypeList.value.push(...rList) |
| | | const sList: any = await getDictInfo(DICT_REPAIR_RES_STATUS) |
| | | statusList.value.push(...sList) |
| | | } |
| | | onLoad((options) => { |
| | | initData() |
| | | }) |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .menu-title-box { |
| | | height: 30rpx; |
| | | line-height: 30rpx; |
| | | } |
| | | |
| | | .slot-img { |
| | | width: 72rpx; |
| | | height: 72rpx; |
| | | margin-right: 24rpx; |
| | | } |
| | | .text-mini { |
| | | font-size: 22rpx; |
| | | } |
| | | |
| | | .menu-indicator { |
| | | width: 6rpx; |
| | | height: 22rpx; |
| | | border-radius: 10rpx; |
| | | background-color: $uni-color-primary; |
| | | } |
| | | :deep(.wd-card__title-content) { |
| | | padding: 16rpx !important; |
| | | } |
| | | :deep(.wd-card__content) { |
| | | padding: 16rpx !important; |
| | | } |
| | | :deep(.wd-card__footer) { |
| | | padding: 10rpx !important; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | export interface DictData { |
| | | createBy: string; |
| | | createTime: string; |
| | | cssClass: string; |
| | | default: boolean; |
| | | dictCode: number; |
| | | dictLabel: string; |
| | | dictSort: number; |
| | | dictType: string; |
| | | dictValue: string; |
| | | isDefault: string; |
| | | listClass: string; |
| | | remark: string; |
| | | status: string; |
| | | updateBy?: any; |
| | | updateTime?: any; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import { http } from '@/utils/http' |
| | | import type { DictData } from './dict.d' |
| | | |
| | | |
| | | export const DICT_REPAIR_REQ_TYPE = 'repair_req_type' |
| | | export const DICT_REPAIR_URGENCY_LEVEL = 'repair_urgency_level' |
| | | export const DICT_REPAIR_FAULT_TYPE = 'repair_fault_type' |
| | | export const DICT_REPAIR_REQ_STATUS = 'repair_req_status' |
| | | export const DICT_REPAIR_RES_STATUS = 'repair_res_status' |
| | | |
| | | export const getDictInfo = (dictType: string) => { |
| | | return http.get<DictData[]>(`/system/dict/data/type/${dictType}`) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | export interface FixtureVO { |
| | | /** |
| | | * |
| | | */ |
| | | id: number | string; |
| | | |
| | | /** |
| | | * æ²»å
·ç¼ç |
| | | */ |
| | | fixtureCode: string; |
| | | |
| | | /** |
| | | * æ²»å
·åç§° |
| | | */ |
| | | fixtureName: string; |
| | | |
| | | /** |
| | | * æ²»å
·ï¼å·¥å
·ï¼ç±»å |
| | | */ |
| | | fixtureType: number; |
| | | |
| | | /** |
| | | * æ²»å
·æè¿° |
| | | */ |
| | | fixtureDesc: string; |
| | | |
| | | /** |
| | | * åç¨é¨é¨ |
| | | */ |
| | | borrowDept: number | string; |
| | | /** |
| | | * åç¨é¨é¨ |
| | | */ |
| | | borrowDeptName: string; |
| | | |
| | | /** |
| | | * åç¨äºº |
| | | */ |
| | | borrowUser: number | string; |
| | | /** |
| | | * åç¨äºº |
| | | */ |
| | | borrowUserName: string; |
| | | /** |
| | | * åç¨ç¶æ |
| | | */ |
| | | borrowStatus: string; |
| | | |
| | | createTime: string; |
| | | |
| | | /** |
| | | * ç¶æï¼åå
¸ï¼ |
| | | */ |
| | | status: string; |
| | | |
| | | /** |
| | | * èµäº§ç¼å· |
| | | */ |
| | | assetNo: string; |
| | | |
| | | /** |
| | | * åå· |
| | | */ |
| | | modelNo: string; |
| | | |
| | | /** |
| | | * è§æ ¼ |
| | | */ |
| | | specNo: string; |
| | | |
| | | /** |
| | | * å¶é å |
| | | */ |
| | | madeIn: string; |
| | | |
| | | /** |
| | | * éè´æ¥æ |
| | | */ |
| | | purchaseDate: string; |
| | | |
| | | /** |
| | | * ä½¿ç¨æ¥æ |
| | | */ |
| | | deployDate: string; |
| | | |
| | | /** |
| | | * 使ç¨å¹´é |
| | | */ |
| | | serviceLife: number; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | remark: string; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import { http } from '@/utils/http' |
| | | import type { FixtureVO } from './fixture.d' |
| | | |
| | | /** |
| | | * å·¥å
·å表 |
| | | */ |
| | | export const getFixtureList = (params: any) => { |
| | | return http.get<FixtureVO[]>('/eims/fixture/list', params) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | export interface RepairReqVO { |
| | | /** |
| | | * æ¥ä¿®id |
| | | */ |
| | | id: number | string; |
| | | |
| | | /** |
| | | * æ¥ä¿®åå· |
| | | */ |
| | | code: string; |
| | | |
| | | /** |
| | | * æ¥ä¿®ç¶æ |
| | | */ |
| | | status: string; |
| | | |
| | | /** |
| | | * åçäºä»¶ |
| | | */ |
| | | occTime: string; |
| | | |
| | | /** |
| | | * æ¥ä¿®æ¶é´ |
| | | */ |
| | | reqTime: string; |
| | | |
| | | /** |
| | | * æ¥ä¿®äººé¨é¨ |
| | | */ |
| | | reqDept: number; |
| | | |
| | | /** |
| | | * æ¥ä¿®äºº |
| | | */ |
| | | reqUser: number; |
| | | |
| | | /** |
| | | * æ¥ä¿®æè¿° |
| | | */ |
| | | reqDesc: string; |
| | | |
| | | /** |
| | | * ç´§æ¥ç¨åº¦ |
| | | */ |
| | | urgencyLevel: string; |
| | | |
| | | /** |
| | | * æ
éå¾ç |
| | | */ |
| | | faultPicture: string; |
| | | |
| | | /** |
| | | * æ¥ä¿®ç±»å |
| | | */ |
| | | reqType: string; |
| | | |
| | | /** |
| | | * 设å¤id |
| | | */ |
| | | equId: number | string; |
| | | |
| | | /** |
| | | * ç»´ä¿®åid |
| | | */ |
| | | repairId: number | string; |
| | | |
| | | /** |
| | | * 维修人é¨é¨ |
| | | */ |
| | | repairDept: number; |
| | | |
| | | /** |
| | | * 维修人 |
| | | */ |
| | | repairUser: number; |
| | | |
| | | /** |
| | | * æ
éç±»å« |
| | | */ |
| | | faultType: string; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | remark: string; |
| | | } |
| | | |
| | | export interface RepairResVO { |
| | | /** |
| | | * |
| | | */ |
| | | id: number | string; |
| | | |
| | | /** |
| | | * æ¥ä¿®åid |
| | | */ |
| | | reqId: number | string; |
| | | |
| | | /** |
| | | * ç»´ä¿®åå· |
| | | */ |
| | | resCode: string; |
| | | |
| | | /** |
| | | * 维修人 |
| | | */ |
| | | resUser: number; |
| | | |
| | | /** |
| | | * 维修人é¨é¨ |
| | | */ |
| | | resDept: number; |
| | | |
| | | /** |
| | | * åå åæ |
| | | |
| | | */ |
| | | resReason: string; |
| | | |
| | | /** |
| | | * å¤çæªæ½ |
| | | */ |
| | | resHandle: string; |
| | | |
| | | /** |
| | | * é¢é²æªæ½ |
| | | */ |
| | | resPrevent: string; |
| | | |
| | | /** |
| | | * ç»´ä¿®ç¶æ(åå
¸) |
| | | */ |
| | | status: string; |
| | | |
| | | /** |
| | | * å¼å§æ¶é´ |
| | | */ |
| | | startTime: string; |
| | | |
| | | /** |
| | | * ç»ææ¶é´ |
| | | */ |
| | | endTime: string; |
| | | |
| | | /** |
| | | * 使ç¨å·¥å
· |
| | | */ |
| | | useFixture: string; |
| | | |
| | | /** |
| | | * 使ç¨å¤ä»¶ |
| | | */ |
| | | useParts: string; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | remark: string; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import { http } from '@/utils/http' |
| | | import type { RepairReqVO, RepairResVO } from './repair.d' |
| | | type ID = number | string |
| | | |
| | | /** |
| | | * æ°å¢æ¥ä¿®å |
| | | * @param data |
| | | */ |
| | | export const addRepairReq = (data: any) => { |
| | | return http.post<void>('/eims/repairReq', data) |
| | | } |
| | | /** |
| | | * å 餿¥ä¿®å |
| | | * @param id |
| | | */ |
| | | export const delRepairReq = (id: ID) => { |
| | | return http.del<void>(`/eims/repairReq/${id}`) |
| | | } |
| | | /** |
| | | * æ¥ä¿®åå表 |
| | | */ |
| | | export const getRepairReqList = (params: any) => { |
| | | return http.get<RepairReqVO[]>('/eims/repairReq/list', params) |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * ç»´ä¿®åå表 |
| | | */ |
| | | export const getRepairResList = (params: any) => { |
| | | return http.get<RepairResVO[]>('/eims/repairRes/list', params) |
| | | } |
| | | /** |
| | | * æ°å¢ç»´ä¿®å |
| | | * @param data |
| | | */ |
| | | export const addRepairRes = (data: any) => { |
| | | return http.post<void>('/eims/repairRes/add', data) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import { http } from '@/utils/http' |
| | | |
| | | /** |
| | | * çæåç§åå· |
| | | * @param prefix åå·åç¼ |
| | | */ |
| | | export const generateCode = (prefix: string) => { |
| | | return http.get<string>(`/eims/generate/${prefix}`) |
| | | } |
| | |
| | | .text-color-gray { |
| | | color: $uni-text-color-grey; |
| | | } |
| | | .text-color-primary { |
| | | color: $uni-color-primary; |
| | | } |
| | | .text-color-success { |
| | | color: $uni-color-success; |
| | | } |
| | | |
| | | // 徿 é¢è² |
| | | .icon-color-base { |
| | |
| | | url: "/pages/home/index" | |
| | | "/pages/equ/equ-list" | |
| | | "/pages/equ/index" | |
| | | "/pages/fixture/fixture-list" | |
| | | "/pages/inspect/insp-add" | |
| | | "/pages/inspect/insp-record" | |
| | | "/pages/inspect/insp-st" | |
| | |
| | | "/pages/maint/maint-st" | |
| | | "/pages/maint/order-detail" | |
| | | "/pages/my/index" | |
| | | "/pages/repair/repair-add" | |
| | | "/pages/repair/req-list" | |
| | | "/pages/repair/res-list" | |
| | | "/pages/spare/index"; |
| | | } |
| | | interface RedirectToOptions extends NavigateToOptions {} |
| | |
| | | }) |
| | | } |
| | | |
| | | export const httpDel = <T>(url: string) => { |
| | | return http<T>({ |
| | | url, |
| | | method: 'DELETE', |
| | | }) |
| | | } |
| | | |
| | | http.get = httpGet |
| | | http.post = httpPost |
| | | http.put = httpPut |
| | | http.del = httpDel |
| | |
| | | minWidth: 200 |
| | | }, |
| | | { |
| | | title: 'åçæ¶é´', |
| | | field: 'occTime', |
| | | sortable: true, |
| | | minWidth: 200 |
| | | }, |
| | | { |
| | | title: 'æ
éç±»å«', |
| | | field: 'faultType', |
| | | minWidth: 100, |
| | | slots: { |
| | | default: ({ row }) => { |
| | | if(!row.faultType){ |
| | | return '' |
| | | } |
| | | return renderDict(row.faultType, DictEnum.REPAIR_FAULT_TYPE); |
| | | } |
| | | } |
| | |
| | | /** |
| | | * æ¥ä¿®åå· |
| | | */ |
| | | @NotBlank(message = "æ¥ä¿®åå·ä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) |
| | | private String code; |
| | | |
| | | /** |
| | | * æ¥ä¿®ç¶æ |
| | | */ |
| | | @NotBlank(message = "æ¥ä¿®ç¶æä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) |
| | | private String status; |
| | | |
| | | /** |
| | |
| | | /** |
| | | * æ¥ä¿®äººé¨é¨ |
| | | */ |
| | | @NotNull(message = "æ¥ä¿®äººé¨é¨ä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) |
| | | private Long reqDept; |
| | | |
| | | /** |
| | | * æ¥ä¿®äºº |
| | | */ |
| | | @NotNull(message = "æ¥ä¿®äººä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) |
| | | private Long reqUser; |
| | | |
| | | /** |
| | | * æ¥ä¿®æè¿° |
| | | */ |
| | | @NotBlank(message = "æ¥ä¿®æè¿°ä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) |
| | | private String reqDesc; |
| | | |
| | | /** |
| | | * ç´§æ¥ç¨åº¦ |
| | | */ |
| | | @NotBlank(message = "ç´§æ¥ç¨åº¦ä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) |
| | | private String urgencyLevel; |
| | | |
| | | /** |
| | |
| | | /** |
| | | * æ¥ä¿®ç±»å |
| | | */ |
| | | @NotBlank(message = "æ¥ä¿®ç±»åä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) |
| | | private String reqType; |
| | | |
| | | /** |
| | |
| | | /** |
| | | * æ
éç±»å« |
| | | */ |
| | | @NotBlank(message = "æ
éç±»å«ä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) |
| | | private String faultType; |
| | | |
| | | /** |
| | |
| | | |
| | | // å
³èè¡¨åæ®µ |
| | | private String reqCode;//æ¥ä¿®åç¼ç |
| | | private String reqType;//æ¥ä¿®åç±»å |
| | | |
| | | |
| | | |
| | |
| | | |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import org.dromara.common.mybatis.core.domain.BaseEntity; |
| | | import org.dromara.common.translation.annotation.Translation; |
| | | import org.dromara.common.translation.constant.TransConstant; |
| | | import org.dromara.eims.domain.EimsRepairRes; |
| | |
| | | @Data |
| | | @ExcelIgnoreUnannotated |
| | | @AutoMapper(target = EimsRepairRes.class) |
| | | public class EimsRepairResVo implements Serializable { |
| | | public class EimsRepairResVo extends BaseEntity implements Serializable { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public Boolean insertByBo(EimsRepairResBo bo) { |
| | | public synchronized Boolean insertByBo(EimsRepairResBo bo) { |
| | | EimsRepairRes add = MapstructUtils.convert(bo, EimsRepairRes.class); |
| | | validEntityBeforeSave(add); |
| | | boolean flag = baseMapper.insert(add) > 0; |
| | |
| | | qw.like(StringUtils.isNotBlank(bo.getResCode()), "res.res_code", bo.getResCode()); |
| | | qw.like(StringUtils.isNotBlank(bo.getReqCode()), "req.code", bo.getReqCode()); |
| | | qw.eq(bo.getResUser() != null, "res.res_user", bo.getResUser()); |
| | | qw.eq(bo.getReqType() != null, "req.req_type", bo.getReqType()); |
| | | qw.eq(bo.getReqUser() != null, "res.req_user", bo.getReqUser()); |
| | | |
| | | List<Long> resDeptIds = getAllDescendantIds(bo.getResDept()); |