Commit 1c0686af by pangchong

feat: 海技值班

parent ef00b30b
import { post, http } from 'mocp/utils/http'
import { http } from 'mocp/utils/http'
export const unplanApplyListApi = (data, config) => {
export const getDutyLogDetailApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/unplanApply/unplanApplyList',
url: '/system/dutyLog/detail',
data,
config
})
}
export const addUnplanApplyApi = (data, config) => {
return post({
method: 'POST',
url: '/workbench/unplanApply/addUnplanApply',
data,
config
})
}
export const checkPakgeNoApi = (data, config) => {
export const getDutyLogListApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/unplanApply/checkPakgeNo',
url: '/system/dutyLog/list',
data,
config
})
}
export const getUnplanApplyApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/unplanApply/getUnplanApply',
data,
config
})
}
export const changeStatusApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/unplanApply/changeStatus',
data,
config
})
}
export const changeExemptStatusApi = (data, config) => {
export const updateDutyLogApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/unplanApply/changeExemptStatus',
url: '/system/dutyLog/update',
data,
config
})
......
// 建议以文件名首字母作为前缀dl_
export const dl_status = [
{ label: '已交班', value: 'JIAO_BAN' },
{ label: '已接班', value: 'JIE_BAN' },
{ label: '未交班', value: 'NO_JIAO_BAN' }
]
export const dl_statusColor = [
{ label: 'primary', value: 'JIAO_BAN' },
{ label: 'info', value: 'JIE_BAN' },
{ label: 'success', value: 'NO_JIAO_BAN' }
]
......@@ -17,3 +17,4 @@ export * from './engineeringEvaluation'
export * from './windDamageManagement'
export * from './inforDisclosure'
export * from './noPlan'
export * from './dutyLog'
import { getUnplanApplyApi } from 'mocp/api/dutyLog'
import { getDutyLogDetailApi } from 'mocp/api/dutyLog'
import { defineStore } from 'pinia'
const useDutyLogStore = defineStore('dutyLog', {
state: () => {
return {
searchData: {
applyStatus: '',
packageNo: '',
exemptStatus: null,
sourceType: '',
checkLevel: null,
acType: '',
airline: '',
startTime: null,
startTimeEnd: null,
applyTimeStart: null,
applyTimeEnd: null
dutyManagerUname: '',
monitorLeaderUname: '',
statusStr: '',
dutyDateE: null,
dutyDateS: null
},
id: '',
details: undefined
......@@ -25,7 +19,7 @@ const useDutyLogStore = defineStore('dutyLog', {
actions: {
async getDetails() {
this.details = undefined
const res = await getUnplanApplyApi({ id: this.id }, { loading: true })
const res = await getDutyLogDetailApi({ id: this.id }, { loading: true })
if (res.code == 200) {
this.details = res.data
} else {
......@@ -34,17 +28,11 @@ const useDutyLogStore = defineStore('dutyLog', {
},
resetForm() {
this.searchData = {
applyStatus: '',
packageNo: '',
exemptStatus: null,
sourceType: '',
checkLevel: null,
acType: '',
airline: '',
startTime: null,
startTimeEnd: null,
applyTimeStart: null,
applyTimeEnd: null
dutyManagerUname: '',
monitorLeaderUname: '',
statusStr: '',
dutyDateE: null,
dutyDateS: null
}
},
setState(...args) {
......
import useUserStore from 'mocp/store/user'
// const baseURL = 'https://hna-platform.anyremote.cn' //测试
const baseURL = 'https://hna-platform.anyremote.cn' //测试
// const baseURL = 'https://moc.hnatechnic.com/api' //生产
// const baseURL = 'http://10.123.48.67/api' //Amms内网
const baseURL = 'https://hnaelbtest.hnatechnic.com/mocptest/api' //内网
// const baseURL = 'https://hnaelbtest.hnatechnic.com/mocptest/api' //内网
class ServiceLoading {
open(loading) {
......
......@@ -3,8 +3,8 @@ import Day from './dayjs'
/**
* 时间戳格式化
* 1715072168340 => 2024-05-07 16:56:08
* format=YYYY/MM/DD HH:mm:ss
* 1715072168340 => 2024-05-07 16:56:08 星期二
* format=YYYY/MM/DD HH:mm:ss dddd
*/
export const timeStampFormat = (timeStamp, opt) => {
if (!timeStamp || timeStamp == -1 || timeStamp == '-1' || timeStamp == 0 || timeStamp == '0') {
......
......@@ -3,7 +3,7 @@ export const loginFormRef = ref()
//表单数据
export const loginForm = reactive({
username: 'devzj3', //devzj3
password: 'Ifar_9527008', //Ifar_9527008 / Ifar2016_0525
password: 'Ifar2016_0525', //Ifar_9527008 / Ifar2016_0525
verifyCode: ''
})
export const showLoad = ref(false)
......
......@@ -76,13 +76,13 @@ const handleLogin = async () => {
loading.value = true
await login()
if (userStore.token) {
// //加入席位权限
// await getUserSeatList()
// if (userStore.seatId) {
// await Promise.all([getSeatPermission(), getConfigData()])
// } else {
// userStore.setState('seatPermission', [])
// }
//加入席位权限
await getUserSeatList()
if (userStore.seatId) {
await Promise.all([getSeatPermission(), getConfigData()])
} else {
userStore.setState('seatPermission', [])
}
//跳转工作台
uni.$mocpJump.redirectTo('/tab/index')
}
......
import { reactive, ref } from 'vue'
export const showAction = ref(false)
export const formRef = ref()
//验证
export const rules = reactive({
packageNo: [
dutyManagerUid: [
{
required: true,
message: '请输入工作包号',
message: '请选择值班经理',
trigger: ['blur', 'change']
}
],
warningReason: [
monitorLeaderUid: [
{
required: true,
message: '请输入申请原因',
message: '请选择监察领导',
trigger: ['blur', 'change']
}
],
reason: [
successorManagerUid: [
{
required: true,
message: '请输入具体原因',
message: '请选择接班经理',
trigger: ['blur', 'change']
}
],
delayDay: [
{
required: true,
type: 'number',
message: '请输入延期天数',
trigger: ['blur', 'change']
}
],
approver: [
{
required: true,
message: '请选择审核人',
trigger: ['blur']
}
]
})
// 表单数据
export const formData = reactive({
packageNo: '',
delayDay: '',
approver: '',
warningReason: '',
materialDelay: '0',
materialPns: '',
reason: '',
delayDay: null
id: '',
dutyManagerUname: '',
dutyManagerUid: '',
successorManagerUname: '',
successorManagerUid: '',
monitorLeaderUname: '',
monitorLeaderUid: '',
reportWork: '',
importantFlight: '',
meetingArrangementWork: '',
handoverWork: '',
dutyDate: undefined,
dutyArea: ''
})
import { addUnplanApplyApi, checkPakgeNoApi } from 'mocp/api/unplanApply'
import { formData, formRef } from './edit.compositions'
import { updateDutyLogApi } from 'mocp/api/dutyLog'
import { formData, formRef, showAction } from './edit.compositions'
export const resetData = () => {
Object.assign(formData, {
packageNo: '',
delayDay: '',
approver: '',
warningReason: '',
materialDelay: '0',
materialPns: '',
reason: '',
delayDay: null
id: '',
dutyManagerUname: '',
dutyManagerUid: '',
successorManagerUname: '',
successorManagerUid: '',
monitorLeaderUname: '',
monitorLeaderUid: '',
reportWork: '',
importantFlight: '',
meetingArrangementWork: '',
handoverWork: '',
dutyDate: undefined,
dutyArea: ''
})
}
//验证包号
export const checkPakgeNo = async (packageNo) => {
if (!packageNo) return
const res = await checkPakgeNoApi({ packageNo }, { loading: '验证包号中...' })
if (res.code == 200) {
} else {
formData.packageNo = ''
uni.$mocpMessage.error(res.message)
}
}
export const addMaterialPns = () => {
if (materialPns.value.length >= 10) return uni.$mocpMessage.warning('缺件航材最多填写10个')
materialPns.value.push('')
export const handleRightClick = async () => {
await formRef.value?.validate()
showAction.value = true
}
//提交表单
export const handleSubmit = async () => {
export const handleSubmit = async (statusStr) => {
await formRef.value?.validate()
if (formData.materialDelay == '0') {
formData.materialPns = ''
} else {
const materialPnsStr = materialPns.value.join(',')
if (materialPnsStr) {
formData.materialPns = materialPnsStr
} else {
return uni.$mocpMessage.error('请输入缺件航材')
}
}
const res = await addUnplanApplyApi(formData, { loading: true })
const res = await updateDutyLogApi({ ...formData, statusStr }, { loading: true })
if (res.code == 200) {
uni.$mocpJump.navigateBack()
uni.$mocpMessage.success(res.message)
uni.$emit('unplanApplyReload')
uni.$emit('dutyLogReload')
uni.$emit('updateDutyLog')
} else {
uni.$mocpMessage.error(res.message)
}
......
......@@ -2,44 +2,46 @@
<global-page title="海技值班详情" showNavRight navRightType="button" @handleRightClick="navigateTo('/panel/dutyLog/edit')">
<template v-if="details">
<view class="mocp-title">
<view class="mocp-color-text-5 time">2024-12-11 星期三</view>
<global-tag type="success">未交班</global-tag>
<view class="mocp-color-text-5 time">{{ timeStampFormat(details.dutyDate, { format: 'YYYY/MM/DD dddd' }) }}</view>
<global-tag :type="useGetDictByValue('dl_statusColor', details.status)">
{{ useGetDictByValue('dl_status', details.status) }}
</global-tag>
</view>
<view class="mocp-cell">
<up-cell-group>
<up-cell title="值班经理" :value="useGetDictByValue('np_sourceType', details.sourceType)"></up-cell>
<up-cell title="监察领导" :value="details.packageNo || '-'"></up-cell>
<up-cell title="接班经理" :value="details.packageName || '-'"></up-cell>
<up-cell title="值班经理" :value="details.dutyManagerUname + details.dutyManagerPhone || '-'"></up-cell>
<up-cell title="监察领导" :value="details.monitorLeaderUname + details.monitorLeaderPhone || '-'"></up-cell>
<up-cell title="接班经理" :value="details.successorManagerUname + details.successorManagerPhone || '-'"></up-cell>
</up-cell-group>
</view>
<view class="mocp-cell">
<up-cell-group>
<up-cell title="汇报工作">
<template #label>
{{ getParamNameByValue('WarningReason', details.warningReason, { isArray: true }) || '-' }}
<text>{{ details.reportWork || '-' }}</text>
</template>
</up-cell>
<up-cell title="重要航班">
<template #label>
{{ getParamNameByValue('WarningReason', details.warningReason, { isArray: true }) || '-' }}
<text>{{ details.importantFlight || '-' }}</text>
</template>
</up-cell>
<up-cell title="会议布置工作">
<template #label>
{{ getParamNameByValue('WarningReason', details.warningReason, { isArray: true }) || '-' }}
<text>{{ details.meetingArrangementWork || '-' }}</text>
</template>
</up-cell>
<up-cell title="交接工作内容">
<template #label>
{{ getParamNameByValue('WarningReason', details.warningReason, { isArray: true }) || '-' }}
<text>{{ details.handoverWork || '-' }}</text>
</template>
</up-cell>
</up-cell-group>
</view>
<view class="mocp-cell">
<up-cell-group>
<up-cell title="交接操作时间" :value="timeStampFormat(details.createTime) || '-'"></up-cell>
<up-cell title="接班操作时间" :value="timeStampFormat(details.createTime) || '-'"></up-cell>
<up-cell title="交班操作时间" :value="timeStampFormat(details.jiaoBanTime) || '-'"></up-cell>
<up-cell title="接班操作时间" :value="timeStampFormat(details.jieBanTime) || '-'"></up-cell>
</up-cell-group>
</view>
</template>
......@@ -49,8 +51,7 @@
<script setup>
import { storeToRefs } from 'pinia'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import { onLoad } from '@dcloudio/uni-app'
import { onLoad, onUnload } from '@dcloudio/uni-app'
import { timeStampFormat } from 'mocp/utils/tool'
import useDutyLogStore from 'mocp/store/dutyLog'
import { navigateTo } from 'mocp/utils/jump'
......@@ -63,6 +64,12 @@ onLoad(() => {
dutyLogStore.setState('id', query.id)
dutyLogStore.getDetails()
})
uni.$on('updateDutyLog', () => {
dutyLogStore.getDetails()
})
onUnload(() => {
uni.$off('updateDutyLog')
})
</script>
<style lang="scss" scoped>
.mocp-title {
......
<template>
<global-page title="海技值班详情" showNavRight navRightType="button" navRightText="保存" @handleRightClick="handleSubmit">
<global-page
title="海技值班详情"
:showNavRight="checkPermi('/dutyLog/edit')"
navRightType="button"
navRightText="保存"
@handleRightClick="handleRightClick"
>
<view class="mocp-title">
<view class="mocp-color-text-5 time">2024-12-11 星期三</view>
<global-tag type="success">未交班</global-tag>
<view class="mocp-color-text-5 time">{{ timeStampFormat(formData.dutyDate, { format: 'YYYY/MM/DD dddd' }) }}</view>
<global-tag :type="useGetDictByValue('dl_statusColor', formData.status)">
{{ useGetDictByValue('dl_status', formData.status) }}
</global-tag>
</view>
<up-form labelPosition="left" labelWidth="auto" :model="formData" :rules="rules" ref="formRef">
<view class="mocp-form">
<up-form-item label="值班经理" prop="approver" :borderBottom="true" required>
<custom-admin-picker pickAlign="right" clearable v-model="formData.approver"></custom-admin-picker>
<up-form-item label="值班经理" prop="dutyManagerUid" :borderBottom="true" required>
<custom-admin-picker
pickAlign="right"
clearable
v-model="formData.dutyManagerUid"
:search-value="formData.dutyManagerUname"
></custom-admin-picker>
</up-form-item>
<up-form-item label="监察领导" prop="approver" :borderBottom="true" required>
<custom-admin-picker pickAlign="right" clearable v-model="formData.approver"></custom-admin-picker>
<up-form-item label="监察领导" prop="monitorLeaderUid" :borderBottom="true" required>
<custom-admin-picker
pickAlign="right"
clearable
v-model="formData.monitorLeaderUid"
:search-value="formData.monitorLeaderUname"
></custom-admin-picker>
</up-form-item>
<up-form-item label="接班经理" prop="approver" :borderBottom="true" required>
<custom-admin-picker pickAlign="right" clearable v-model="formData.approver"></custom-admin-picker>
<up-form-item label="接班经理" prop="successorManagerUid" :borderBottom="true" required>
<custom-admin-picker
pickAlign="right"
clearable
v-model="formData.successorManagerUid"
:search-value="formData.successorManagerUname"
></custom-admin-picker>
</up-form-item>
</view>
<view class="mocp-form">
<up-form-item label="汇报工作" prop="reason" :borderBottom="true" labelPosition="top" required>
<up-textarea placeholder="请输入" :height="40" border="none" v-model="formData.reason" count :maxlength="1000"></up-textarea>
<up-form-item label="汇报工作" prop="reportWork" :borderBottom="true" labelPosition="top">
<up-textarea placeholder="请输入" :height="40" border="none" v-model="formData.reportWork" count :maxlength="1000"></up-textarea>
</up-form-item>
</view>
<view class="mocp-form">
<up-form-item label="重要航班" prop="reason" :borderBottom="true" labelPosition="top" required>
<up-textarea placeholder="请输入" :height="40" border="none" v-model="formData.reason" count :maxlength="1000"></up-textarea>
<up-form-item label="重要航班" prop="importantFlight" :borderBottom="true" labelPosition="top">
<up-textarea
placeholder="请输入"
:height="40"
border="none"
v-model="formData.importantFlight"
count
:maxlength="1000"
></up-textarea>
</up-form-item>
</view>
<view class="mocp-form">
<up-form-item label="会议布置工作" prop="reason" :borderBottom="true" labelPosition="top" required>
<up-textarea placeholder="请输入" :height="40" border="none" v-model="formData.reason" count :maxlength="1000"></up-textarea>
<up-form-item label="会议布置工作" prop="meetingArrangementWork" :borderBottom="true" labelPosition="top">
<up-textarea
placeholder="请输入"
:height="40"
border="none"
v-model="formData.meetingArrangementWork"
count
:maxlength="1000"
></up-textarea>
</up-form-item>
</view>
<view class="mocp-form">
<up-form-item label="交接工作内容" prop="reason" :borderBottom="true" labelPosition="top" required>
<up-textarea placeholder="请输入" :height="40" border="none" v-model="formData.reason" count :maxlength="1000"></up-textarea>
<up-form-item label="交接工作内容" prop="handoverWork" :borderBottom="true" labelPosition="top">
<up-textarea
placeholder="请输入"
:height="40"
border="none"
v-model="formData.handoverWork"
count
:maxlength="1000"
></up-textarea>
</up-form-item>
</view>
</up-form>
<global-action-sheet
v-model="showAction"
:options="[
{ label: '未交班并保存', value: 'NO_JIAO_BAN' },
{ label: '已交班并保存', value: 'JIAO_BAN' },
{ label: '已接班保存', value: 'JIE_BAN' }
]"
@select="handleSubmit"
></global-action-sheet>
</global-page>
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app'
import { formData, formRef, rules } from './constants/edit.compositions'
import { handleSubmit, resetData } from './constants/edit.functionals'
import { storeToRefs } from 'pinia'
import { formData, formRef, rules, showAction } from './constants/edit.compositions'
import { handleSubmit, resetData, handleRightClick } from './constants/edit.functionals'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { timeStampFormat } from 'mocp/utils/tool'
import useDutyLogStore from 'mocp/store/dutyLog'
import { checkPermi } from 'mocp/utils/permission'
const dutyLogStore = useDutyLogStore()
const { details } = storeToRefs(dutyLogStore)
onLoad(() => {
resetData()
Object.assign(formData, details.value)
})
</script>
<style lang="scss" scoped>
......
......@@ -11,51 +11,53 @@
navRightType="icon"
navRightIcon="saixuan-01"
@handleRightClick="handleRightClick"
:api="unplanApplyListApi"
:api="getDutyLogListApi"
:padding="24"
>
<template #default="{ item }">
<view class="item" :class="{ 'wrong-class': item.applyStatus == '0' }" @tap="goDetails(item)">
<view class="item-title">
<view class="left">2024-12-11</view>
<view class="left">{{ timeStampFormat(item.dutyDate, { format: 'YYYY/MM/DD' }) }}</view>
<view class="right">
<global-tag type="success">未交班</global-tag>
<global-tag :type="useGetDictByValue('dl_statusColor', item.status)">
{{ useGetDictByValue('dl_status', item.status) }}
</global-tag>
</view>
</view>
<view class="item-content">
<view class="mocp-flex">
<view class="mocp-color-text-3 flex-1">
<view>值班经理:</view>
<view class="u-line-1 mocp-color-text-5">周琎</view>
<view class="u-line-1 mocp-color-text-5">{{ item.dutyManagerUname || '-' }}</view>
</view>
<view class="mocp-color-text-3 flex-1">
<view>联系电话:</view>
<view class="u-line-1 mocp-color-text-5">15108535283</view>
<view class="u-line-1 mocp-color-text-5">{{ item.dutyManagerPhone || '-' }}</view>
</view>
<view class="mocp-color-text-3 flex-1">
<view>监察领导:</view>
<view class="u-line-1 mocp-color-text-5">赵萸艳</view>
<view class="u-line-1 mocp-color-text-5">{{ item.monitorLeaderUname || '-' }}</view>
</view>
</view>
<view class="mocp-list">
<view class="mocp-color-text-3 mocp-item">
汇报工作:
<view class="u-line-1 mocp-color-text-5">2024年09月04日执行JD5705(海口-武汉)航班,在海口过站</view>
<view class="u-line-1 mocp-color-text-5">{{ item.reportWork }}</view>
</view>
<view class="mocp-color-text-3 mocp-item">
重要航班:
<view class="u-line-1 mocp-color-text-5">滑出后机组反馈1号刹车温度高,无警告信息</view>
<view class="u-line-1 mocp-color-text-5">{{ item.importantFlight }}</view>
</view>
<view class="mocp-color-text-3 mocp-item">
会议布置工作:
<view class="u-line-1 mocp-color-text-5">
机组决定滑回处理,滑回后机组反映左起落架1号轮开刹车风扇基本不降温,核实一号刹车风扇不工作,处理中
{{ item.meetingArrangementWork }}
</view>
</view>
<view class="mocp-color-text-3 mocp-item">
交接工作内容:
<view class="u-line-1 mocp-color-text-5">
对飞机有安全隐患梯架、设备在指定位置并与地面固定物系留,其中外单位梯架需通报机场和相关单位处理,并在未得到处理前安排人员进行监护
{{ item.handoverWork }}
</view>
</view>
</view>
......@@ -69,10 +71,10 @@
import { ref } from 'vue'
import { storeToRefs } from 'pinia'
import { onUnload } from '@dcloudio/uni-app'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import { timeStampFormat } from 'mocp/utils/tool'
import { unplanApplyListApi } from 'mocp/api/dutyLog'
import useDutyLogStore from 'mocp/store/dutyLog'
import { getDutyLogListApi } from 'mocp/api/dutyLog'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
//跳转
const dutyLogStore = useDutyLogStore()
......
<template>
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto">
<up-form-item label="值班经理" prop="packageNo" :borderBottom="true">
<up-input v-model="formData.packageNo" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
<up-form-item label="值班经理" prop="dutyManagerUname" :borderBottom="true">
<up-input v-model="formData.dutyManagerUname" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item>
<up-form-item label="监察领导" prop="packageNo" :borderBottom="true">
<up-input v-model="formData.packageNo" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
<up-form-item label="监察领导" prop="monitorLeaderUname" :borderBottom="true">
<up-input v-model="formData.monitorLeaderUname" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item>
<up-form-item label="状态" prop="applyStatus" :borderBottom="true">
<global-picker v-model="formData.applyStatus" pickAlign="right" clearable dictkey="np_applyStatus"></global-picker>
<up-form-item label="状态" prop="statusStr" :borderBottom="true">
<global-picker v-model="formData.statusStr" pickAlign="right" clearable dictkey="dl_status"></global-picker>
</up-form-item>
<up-form-item label="值班日期" :borderBottom="true">
<global-calendar
pickAlign="right"
v-model:startTime="formData.startTime"
v-model:endTime="formData.startTimeEnd"
v-model:startTime="formData.dutyDateS"
v-model:endTime="formData.dutyDateE"
clearable
></global-calendar>
</up-form-item>
......
......@@ -246,6 +246,7 @@ export const menuList = ref([
group: '定检管理',
default: false,
count: 0,
url: '/panel/dutyLog/list'
url: '/panel/dutyLog/list',
apiPath: '/dutyLog'
}
])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment