eims-ui-mobile/src/pages/home/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
eims-ui-mobile/src/pages/inspect/insp-record.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
eims-ui-mobile/src/pages/repair/req-list.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
eims-ui-mobile/src/service/mobile.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/MobileController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IMobileService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/MobileServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
eims-ui-mobile/src/pages/home/index.vue
@@ -8,12 +8,14 @@ } </route> <template> <view class="bg-base overflow-hidden" :style="{ marginTop: safeAreaInsets?.top + 'px', }" <z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time hide-empty-view > <template #top> <view class="bg-white h-[80rpx] px-2 flex items-center justify-between"> <view class="flex items-center" @click="handleUserInfo"> <wd-icon name="user" size="40rpx" class="icon-color-base"></wd-icon> @@ -21,11 +23,24 @@ </view> <view class="flex items-center"> <wd-icon name="notification" size="40rpx" class="icon-color-base mr-3" @click="handleInfo"></wd-icon> <wd-icon name="tips" size="40rpx" class="icon-color-base mr-3" @click="handleInfo"></wd-icon> <wd-icon name="notification" size="40rpx" class="icon-color-base mr-3" @click="handleInfo" ></wd-icon> <wd-icon name="tips" size="40rpx" class="icon-color-base mr-3" @click="handleInfo" ></wd-icon> <wd-icon name="app" size="40rpx" class="icon-color-base" @click="handleInfo"></wd-icon> </view> </view> </template> <view class="bg-base overflow-hidden"> <view class="bg-white py-2 px-2"> <wd-img class="w-full h-[260rpx]" src="/static/images/pic4.jpeg" /> @@ -51,15 +66,15 @@ </template> <view class="flex flex-row justify-around"> <view class="flex flex-col justify-center"> <text class="text-lg text-center">0</text> <text class="text-lg text-center">{{ equTotal }}</text> <text class="text-color-gray">è®¾å¤æ»æ°</text> </view> <view class="flex flex-col justify-center"> <text class="text-lg text-center">0</text> <text class="text-color-gray">æ éè®¾å¤æ°</text> <text class="text-lg text-center">{{ fixtureTotal }}</text> <text class="text-color-gray">å·¥å ·æ»æ°</text> </view> <view class="flex flex-col justify-center"> <text class="text-lg text-center">0</text> <text class="text-lg text-center">{{ faultTotal }}</text> <text class="text-color-gray">æªä¿®å¤æ é</text> </view> </view> @@ -79,7 +94,7 @@ class="flex justify-center items-center" v-for="(item, index) in commonMenu" :key="item.id" @click.stop="goItemPage(item.path)" @click.stop="goItemPage(item)" > <image class="slot-img text-center" :src="item.icon" /> <text>{{ item.name }}</text> @@ -101,7 +116,7 @@ class="flex justify-center items-center" v-for="(item, index) in inspectMenu" :key="item.id" @click.stop="goItemPage(item.path)" @click.stop="goItemPage(item)" > <image class="slot-img text-center" :src="item.icon" /> <text>{{ item.name }}</text> @@ -122,7 +137,7 @@ use-slot class="flex justify-center items-center" v-for="(item, index) in equMenu" @click.stop="goItemPage(item.path)" @click.stop="goItemPage(item)" > <image class="slot-img text-center" :src="item.icon" /> <text>{{ item.name }}</text> @@ -131,26 +146,42 @@ </wd-card> </view> <view class="w-full h-[100rpx]"></view> </view> </z-paging> </template> <script lang="ts" setup> import { getAllMenusApi } from '@/service/menu' import { useUserStore } from '@/store' import { tabbarStore } from '@/components/fg-tabbar/tabbar' import { getEquList } from '@/service/equ' import { getRepairResList } from '@/service/repair' import { getFixtureList } from '@/service/fixture' import { receiveOrderRepair } from '@/service/mobile' import { useToast, useMessage } from 'wot-design-uni' import { ref } from 'vue' const message = useMessage() const toast = useToast() defineOptions({ name: 'Home', }) const userStore = useUserStore() const equTotal = ref(0) const faultTotal = ref(0) const fixtureTotal = ref(0) const paging = ref(null) const dataList = ref([]) // è·åå±å¹è¾¹çå°å®å ¨åºåè·ç¦» const { safeAreaInsets } = uni.getSystemInfoSync() const getAllMenus = async () => { const menuList = await getAllMenusApi() console.error(menuList) } function handleInfo() { uni.showToast({ @@ -159,25 +190,55 @@ }) } const goItemPage = (path: string) => { const url = `/${path}` const queryList = (pageNum?: number, pageSize?: number) => { getEquList({ pageNum, pageSize }) .then((res: any) => { equTotal.value = res?.total || 0 queryRepairResList() queryFixtureList() paging.value.complete(true) }) .catch((res) => { paging.value.complete(true) }) } const goItemPage = (item: any) => { if (!item?.custom) { const url = `/${item.path}` uni.navigateTo({ url, }) } else { switch (item.name) { case 'æ¥åç»´ä¿®': handleSelectReq() break } } } onLoad(() => { // getAllMenus() queryEquList() queryRepairResList() queryFixtureList() }) const commonMenu = reactive([ { id: 1, name: 'æ éæ¥ä¿®', icon: '/static/ico/ico20.png', icon: '/static/ico/ico7.png', path: 'pages/repair/repair-add', } }, { id: 2, custom: true, name: 'æ¥åç»´ä¿®', icon: '/static/ico/ico8.png', path: 'pages/repair/repair-add', }, ]) const equMenu = reactive([ @@ -240,6 +301,94 @@ } const realName = computed(() => userStore?.userInfo?.realName) /** * éæ©æ¥ä¿®å */ function handleSelectReq() { uni.navigateTo({ url: '/pages/repair/req-list', events: { // 为æå®äºä»¶æ·»å ä¸ä¸ªçå¬å¨ï¼è·å被æå¼é¡µé¢ä¼ éå°å½å页é¢çæ°æ® selectReq: function (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, } receiveOrderRepair(resData) .then((res: any) => { if (res?.id) { toast.success(res?.msg || 'æä½æå') uni.navigateTo({ url: `/pages/repair/res-detail?id=${res?.id}`, }) } else { toast.error(res?.msg || 'çæç»´ä¿®å·¥å失败ï¼è¯·éè¯') } }) .catch((res) => { toast.error(res?.msg || 'çæç»´ä¿®å·¥å失败ï¼è¯·éè¯') }) }, }, success: function (res) { // éè¿eventChannelå被æå¼é¡µé¢ä¼ éæ°æ® res.eventChannel.emit('OnSelectReq', { data: 'ç»´ä¿®å页é¢éæ©æ¥ä¿®å' }) }, }) } function queryEquList() { getEquList({ page: 1, size: 10, }) .then((res: any) => { equTotal.value = res?.total || 0 }) .catch((err) => { console.log(err) }) } function queryRepairResList() { getRepairResList({ page: 1, size: 10, status: '2', }) .then((res: any) => { faultTotal.value = res?.total || 0 }) .catch((res) => {}) } function queryFixtureList() { getFixtureList({ page: 1, size: 10, }) .then((res: any) => { fixtureTotal.value = res?.total || 0 }) .catch((res) => {}) } function goToDetail(item) { uni.navigateTo({ url: `/pages/repair/res-detail?id=${item.id}`, }) } </script> <style lang="scss" scoped> eims-ui-mobile/src/pages/inspect/insp-record.vue
@@ -119,7 +119,7 @@ <view class="w-full h-[24rpx]"></view> <wd-cell> <template #title> <text class="text-color-gray">å ¶å®</text> <text class="text-color-gray">å ¶ä»</text> </template> </wd-cell> <view class="w-full h-[1px] bg-base"></view> eims-ui-mobile/src/pages/repair/req-list.vue
@@ -24,7 +24,7 @@ } </route> <template> <z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time> <z-paging ref="paging" v-model="dataList" :auto="false" @query="queryList" show-refresher-update-time> <template #top> <wd-drop-menu v-if="!isSelectReq"> <wd-drop-menu-item @@ -264,6 +264,7 @@ // åªæ¾ç¤ºæªæ¥åæ°æ® status.value = 0 console.log('OnSelectReq', data) reloadData() }) }) @@ -272,6 +273,8 @@ reqTypeList.value.push(...rList) const sList: any = await getDictInfo(DICT_REPAIR_REQ_STATUS) statusList.value.push(...sList) reloadData() } onLoad(() => { eims-ui-mobile/src/service/mobile.ts
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ import { http } from '@/utils/http' /** * æ¤é¡µé¢æ¥å£ä¸ºç§»å¨ç«¯ç¹æ®éæ±æ°å¢æ¥å£ */ /** * æ¥åç»´ä¿®-ç»åapi * @param data */ export const receiveOrderRepair = (data: any) => { return http.post<void>('/eims/mobile/receiveOrderRepair', data) } eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/MobileController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,39 @@ package org.dromara.eims.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.web.core.BaseController; import org.dromara.eims.domain.bo.EimsRepairResBo; import org.dromara.eims.domain.vo.EimsRepairResVo; import org.dromara.eims.service.IEimsRepairResService; import org.dromara.eims.service.IMobileService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * ç§»å¨ç«¯controller * 主è¦ç¨äºä¸äºç¹æ®æä½ï¼ å¦å¿«æ·æ¥åç»´ä¿®ï¼ä¸æ¬¡è¯·æ±å¤ä¸ªæ¥å£ï¼ä¸ºä¿è¯ååæ§æ°å¢çæ¥å£ï¼ */ @Validated @RequiredArgsConstructor @RestController @RequestMapping("/eims/mobile") public class MobileController extends BaseController { private final IMobileService mobileService; @Log(title = "æ¥åç»´ä¿®-ç»åapi", businessType = BusinessType.OTHER) @RepeatSubmit() @PostMapping("receiveOrderRepair") public R<EimsRepairResVo> receiveOrderRepair(@Validated(AddGroup.class) @RequestBody EimsRepairResBo bo) { EimsRepairResVo eimsRepairResVo = mobileService.receiveOrderRepair(bo); return R.ok(eimsRepairResVo); } } eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IMobileService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package org.dromara.eims.service; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.eims.domain.bo.EimsRepairResBo; import org.dromara.eims.domain.vo.EimsRepairResVo; import java.util.Collection; import java.util.List; public interface IMobileService { /** * æ¥åç»´ä¿® * @param bo */ EimsRepairResVo receiveOrderRepair(EimsRepairResBo bo); } eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java
@@ -69,14 +69,19 @@ if(reqVo.getEquId()!=null){ EimsEquVo equVo = equMapper.selectVoById(reqVo.getEquId()); if(equVo!=null){ resVo.setAssetNo(equVo.getAssetNo()); resVo.setEquName(equVo.getEquName()); } } if(reqVo.getFixtureId()!=null){ EimsFixtureVo fixtureVo = fixtureMapper.selectVoById(reqVo.getFixtureId()); if(fixtureVo!=null){ resVo.setFixtureName(fixtureVo.getFixtureName()); resVo.setAssetNo(fixtureVo.getAssetNo()); } } } eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/MobileServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,122 @@ package org.dromara.eims.service.impl; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.dromara.common.core.constant.DictConstants; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.service.RepairResService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.eims.domain.EimsRepairRecord; import org.dromara.eims.domain.EimsRepairReq; import org.dromara.eims.domain.EimsRepairRes; import org.dromara.eims.domain.bo.EimsRepairResBo; import org.dromara.eims.domain.vo.EimsEquVo; import org.dromara.eims.domain.vo.EimsFixtureVo; import org.dromara.eims.domain.vo.EimsRepairReqVo; import org.dromara.eims.domain.vo.EimsRepairResVo; import org.dromara.eims.mapper.*; import org.dromara.eims.service.IEimsRepairResService; import org.dromara.eims.service.IMobileService; import org.dromara.eims.utils.DataFilterUtil; import org.dromara.system.domain.SysDept; import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.mapper.SysDeptMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; @RequiredArgsConstructor @Service public class MobileServiceImpl implements IMobileService { private final EimsRepairResMapper repairResMapper; private final EimsRepairReqMapper reqMapper; private final EimsRepairRecordMapper recordMapper; @Transactional(rollbackFor = Exception.class) @Override public synchronized EimsRepairResVo receiveOrderRepair(EimsRepairResBo bo) { /** * TODO æ³¨ææ¥å£è°æ´åéè°æ´ï¼æ¤æä½åæ¬ä¸ºç§»å¨ç«¯ä¾æ¬¡ä¼ éæ°æ®è°ç¨æ¥å£ï¼ç°ä¸ºä¿è¯å忧䏿¬¡æ§è°ç¨å¤ä¸ªæ¥å£ï¼ */ //1.æ°å¢ç»´ä¿®å·¥å EimsRepairRes add = MapstructUtils.convert(bo, EimsRepairRes.class); boolean flag = repairResMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); // æ°å¢ç»´ä¿®å·¥åçæ¶åæ´æ°æ¥ä¿®åæ°æ® EimsRepairReqVo reqVo = reqMapper.selectVoById(bo.getReqId()); reqVo.setRepairId(add.getId()); reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.YIJIEDAN); EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class); reqMapper.updateById(req); //å°æ°å¢æ¥ä¿®åæ¶ç»´ä¿®è®°å½ç维修工åidæ´æ° LambdaQueryWrapper<EimsRepairRecord> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EimsRepairRecord::getReqId, add.getReqId()); EimsRepairRecord one = recordMapper.selectOne(queryWrapper); if(one!=null){ one.setResId(add.getId()); recordMapper.updateById(one); } //çæç»´ä¿®è®°å½ EimsRepairRecord record = new EimsRepairRecord(); record.setReqId(add.getReqId()); record.setResId(add.getId()); record.setHandleTime(new Date()); //æ¥åç¶æ record.setOpera(DictConstants.REPAIR_RECORD_HANDLE_DETAIL.YIJIEDAN); record.setOperaUser(add.getCreateBy()); record.setOperaResult("çæç»´ä¿®å·¥å"); //æ°å¢æ¶çæè®°å½ recordMapper.insert(record); } //2.æ´æ°ç»´ä¿®å·¥å LoginUser loginUser = LoginHelper.getLoginUser(); bo.setStartTime(new Date()); bo.setStatus("2"); EimsRepairRes update = MapstructUtils.convert(bo, EimsRepairRes.class); EimsRepairResVo resVo = repairResMapper.selectVoById(bo.getId()); String status = resVo.getStatus(); //维修工åå¼å§ç»´ä¿®ï¼åæ¥æ´æ°æ¥ä¿®å 以å ç»´ä¿®è®°å½ if (bo.getStatus().equals(DictConstants.REPAIR_RES_STATUS_DETAIL.WEIXIU) && status.equals(DictConstants.REPAIR_RES_STATUS_DETAIL.YIJIEDAN)) { //2.1.设置å¼å§ç»´ä¿®æ¶é´åç¶æ TODO //2.2æ´æ°æ¥ä¿®åä¸ºç»´ä¿®ç¶æ EimsRepairReqVo reqVo = reqMapper.selectVoById(bo.getReqId()); reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.WEIXIU); EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class); reqMapper.updateById(req); //2.3çæç»´ä¿®è®°å½ EimsRepairRecord record = new EimsRepairRecord(); record.setResId(bo.getId()); record.setReqId(bo.getReqId()); record.setHandleTime(new Date()); record.setOpera(DictConstants.REPAIR_RECORD_HANDLE_DETAIL.WEIXIU); assert loginUser != null; record.setOperaUser(loginUser.getUserId()); record.setOperaResult("å¼å§ç»´ä¿®"); recordMapper.insert(record); } repairResMapper.updateById(update); return repairResMapper.selectVoById(update.getId()); } }