Commit 6092ae8d by pangchong

feat: 2020-2-14合并代码

parent fd7f50f5
import { http } from 'mocp/utils/http'
export const getDutyLogDetailApi = (data, config) => {
return http({
method: 'POST',
url: '/system/dutyLog/detail',
data,
config
})
}
export const getDutyLogListApi = (data, config) => {
return http({
method: 'POST',
url: '/system/dutyLog/list',
data,
config
})
}
export const updateDutyLogApi = (data, config) => {
return http({
method: 'POST',
url: '/system/dutyLog/update',
data,
config
})
}
...@@ -45,6 +45,24 @@ export const addRoutineWorkApi = (data, config) => { ...@@ -45,6 +45,24 @@ export const addRoutineWorkApi = (data, config) => {
config config
}) })
} }
//编辑例行维护工作单
export const updateRoutineWorkApi = (data, config) => {
return post({
method: 'POST',
url: '/workbench/electronicBill/updateRoutineWork',
data,
config
})
}
//校验:日期、机号相同,且有【过夜维护 AF+PF】数据;返回值大于0表示存在相同的
export const routineWorkCheckRepeatApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/electronicBill/routineWorkCheckRepeat',
data,
config
})
}
//例行维护工作单列表 //例行维护工作单列表
export const routineWorkListApi = (data, config) => { export const routineWorkListApi = (data, config) => {
return http({ return http({
...@@ -63,6 +81,15 @@ export const addNonRoutineWorkApi = (data, config) => { ...@@ -63,6 +81,15 @@ export const addNonRoutineWorkApi = (data, config) => {
config config
}) })
} }
//修改非例行维护工作单
export const updateNonRoutineWorkApi = (data, config) => {
return post({
method: 'POST',
url: '/workbench/electronicBill/updateNonRoutineWork',
data,
config
})
}
//非例行维护工作单列表 //非例行维护工作单列表
export const noRoutineWorkListApi = (data, config) => { export const noRoutineWorkListApi = (data, config) => {
return http({ return http({
...@@ -81,6 +108,15 @@ export const addDeicingApi = (data, config) => { ...@@ -81,6 +108,15 @@ export const addDeicingApi = (data, config) => {
config config
}) })
} }
//修改除防冰工作单
export const updateDeicingApi = (data, config) => {
return post({
method: 'POST',
url: '/workbench/electronicBill/updateDeicing',
data,
config
})
}
//除防冰工作单列表 //除防冰工作单列表
export const deicingListApi = (data, config) => { export const deicingListApi = (data, config) => {
return http({ return http({
......
import { http, post } from 'mocp/utils/http' import { http } from 'mocp/utils/http'
//获取用户基本信息分页列表 //获取用户基本信息分页列表
export const getAdminListApi = (data, config) => { export const getAdminListApi = (data, config) => {
...@@ -39,3 +39,33 @@ export const getSysSeatListApi = (data, config) => { ...@@ -39,3 +39,33 @@ export const getSysSeatListApi = (data, config) => {
config config
}) })
} }
//获取某用户拥有的席位列表(不分页)
export const getUserSeatListApi = (data, config) => {
return http({
method: 'POST',
url: '/system/getUserSeatList',
data,
config
})
}
//获取操作权限
export const getSeatPermissionApi = (data, config) => {
return http({
method: 'POST',
url: '/system/getSeatPermission',
data,
config
})
}
//获取数据权限
export const getConfigDataApi = (data, config) => {
return http({
method: 'POST',
url: '/system/sysSeatPermissionData/getConfigData',
data,
config
})
}
import { post, http } from 'mocp/utils/http'
export const unplanApplyListApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/unplanApply/unplanApplyList',
data,
config
})
}
export const addUnplanApplyApi = (data, config) => {
return post({
method: 'POST',
url: '/workbench/unplanApply/addUnplanApply',
data,
config
})
}
export const checkPakgeNoApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/unplanApply/checkPakgeNo',
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) => {
return http({
method: 'POST',
url: '/workbench/unplanApply/changeExemptStatus',
data,
config
})
}
import { post, http } from 'mocp/utils/http'
export const unplanWarningListApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/unplanWarning/unplanWarningList',
data,
config
})
}
export const addUnplanWarningApi = (data, config) => {
return post({
method: 'POST',
url: '/workbench/unplanWarning/addUnplanWarning',
data,
config
})
}
export const getUnplanWarningApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/unplanWarning/getUnplanWarning',
data,
config
})
}
export const changeStatusApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/unplanWarning/changeStatus',
data,
config
})
}
...@@ -16,6 +16,12 @@ ...@@ -16,6 +16,12 @@
background-color: darken($mocp-primary-1, 5%); background-color: darken($mocp-primary-1, 5%);
border-color: darken($mocp-primary-1, 5%); border-color: darken($mocp-primary-1, 5%);
} }
@mixin global-button-primary-text {
color: $mocp-primary-6;
}
@mixin global-button-primary-text-active {
color: darken($mocp-primary-6, 10%);
}
@mixin global-button-primary { @mixin global-button-primary {
color: #fff; color: #fff;
background-color: $mocp-primary-6; background-color: $mocp-primary-6;
...@@ -43,6 +49,12 @@ ...@@ -43,6 +49,12 @@
background-color: darken($mocp-success-1, 5%); background-color: darken($mocp-success-1, 5%);
border-color: darken($mocp-success-1, 5%); border-color: darken($mocp-success-1, 5%);
} }
@mixin global-button-success-text {
color: $mocp-success-6;
}
@mixin global-button-success-text-active {
color: darken($mocp-success-6, 10%);
}
@mixin global-button-success { @mixin global-button-success {
color: #fff; color: #fff;
background-color: $mocp-success-6; background-color: $mocp-success-6;
...@@ -70,6 +82,12 @@ ...@@ -70,6 +82,12 @@
background-color: darken($mocp-warning-1, 5%); background-color: darken($mocp-warning-1, 5%);
border-color: darken($mocp-warning-1, 5%); border-color: darken($mocp-warning-1, 5%);
} }
@mixin global-button-warning-text {
color: $mocp-warning-6;
}
@mixin global-button-warning-text-active {
color: darken($mocp-warning-6, 10%);
}
@mixin global-button-warning { @mixin global-button-warning {
color: #fff; color: #fff;
background-color: $mocp-warning-6; background-color: $mocp-warning-6;
...@@ -97,6 +115,12 @@ ...@@ -97,6 +115,12 @@
background-color: darken($mocp-danger-1, 5%); background-color: darken($mocp-danger-1, 5%);
border-color: darken($mocp-danger-1, 5%); border-color: darken($mocp-danger-1, 5%);
} }
@mixin global-button-danger-text {
color: $mocp-danger-6;
}
@mixin global-button-danger-text-active {
color: darken($mocp-danger-6, 10%);
}
@mixin global-button-danger { @mixin global-button-danger {
color: #fff; color: #fff;
background-color: $mocp-danger-6; background-color: $mocp-danger-6;
...@@ -128,6 +152,15 @@ ...@@ -128,6 +152,15 @@
border: none; border: none;
} }
} }
&.primary-text {
@include global-button-primary-text;
&:active {
@include global-button-primary-text-active;
}
&::after {
border: none;
}
}
&.primary { &.primary {
@include global-button-primary; @include global-button-primary;
&:active { &:active {
...@@ -152,6 +185,15 @@ ...@@ -152,6 +185,15 @@
border: none; border: none;
} }
} }
&.success-text {
@include global-button-success-text;
&:active {
@include global-button-success-text-active;
}
&::after {
border: none;
}
}
&.success { &.success {
@include global-button-success; @include global-button-success;
&:active { &:active {
...@@ -176,6 +218,15 @@ ...@@ -176,6 +218,15 @@
border: none; border: none;
} }
} }
&.warning-text {
@include global-button-warning-text;
&:active {
@include global-button-warning-text-active;
}
&::after {
border: none;
}
}
&.warning { &.warning {
@include global-button-warning; @include global-button-warning;
&:active { &:active {
...@@ -200,6 +251,15 @@ ...@@ -200,6 +251,15 @@
border: none; border: none;
} }
} }
&.danger-text {
@include global-button-danger-text;
&:active {
@include global-button-danger-text-active;
}
&::after {
border: none;
}
}
&.danger { &.danger {
@include global-button-danger; @include global-button-danger;
&:active { &:active {
......
...@@ -38,6 +38,11 @@ const ps = defineProps({ ...@@ -38,6 +38,11 @@ const ps = defineProps({
type: String, type: String,
default: 'default' default: 'default'
}, },
//文字
text: {
type: Boolean,
default: false
},
//是否镂空 //是否镂空
plain: { plain: {
type: Boolean, type: Boolean,
...@@ -66,6 +71,8 @@ const getClass = computed(() => { ...@@ -66,6 +71,8 @@ const getClass = computed(() => {
_class.push(ps.type + '-plain') _class.push(ps.type + '-plain')
} else if (ps.border) { } else if (ps.border) {
_class.push(ps.type + '-border') _class.push(ps.type + '-border')
} else if (ps.text) {
_class.push(ps.type + '-text')
} else { } else {
_class.push(ps.type) _class.push(ps.type)
} }
...@@ -94,6 +101,7 @@ const getRadius = computed(() => { ...@@ -94,6 +101,7 @@ const getRadius = computed(() => {
.global-button { .global-button {
border-radius: v-bind(getRadius); border-radius: v-bind(getRadius);
height: v-bind(getSize); height: v-bind(getSize);
min-height: v-bind(getSize);
line-height: v-bind(getSize); line-height: v-bind(getSize);
.icon { .icon {
margin-right: 8rpx; margin-right: 8rpx;
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
import { computed, ref, watch } from 'vue' import { computed, ref, watch } from 'vue'
import * as dictData from 'mocp/hooks/use-dict/dict-data' import * as dictData from 'mocp/hooks/use-dict/dict-data'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const es = defineEmits(['update:modelValue', 'change']) const es = defineEmits(['update:modelValue', 'change'])
const ps = defineProps({ const ps = defineProps({
...@@ -29,6 +30,10 @@ const ps = defineProps({ ...@@ -29,6 +30,10 @@ const ps = defineProps({
type: String, type: String,
default: '' default: ''
}, },
paramsType: {
type: String,
default: ''
},
modelValue: { modelValue: {
type: String, type: String,
default: '' default: ''
...@@ -112,6 +117,8 @@ const getCustomStyle = computed(() => { ...@@ -112,6 +117,8 @@ const getCustomStyle = computed(() => {
const getColumns = computed(() => { const getColumns = computed(() => {
if (ps.dictkey) { if (ps.dictkey) {
return cloneDeep(dictData[ps.dictkey]) return cloneDeep(dictData[ps.dictkey])
} else if (ps.paramsType) {
return getParamsByType(ps.paramsType) || []
} else { } else {
if (ps.options && Object.prototype.toString.call(ps.options[0]) == '[object Object]') { if (ps.options && Object.prototype.toString.call(ps.options[0]) == '[object Object]') {
return ps.options return ps.options
......
<template> <template>
<!-- 全局日期控件 --> <!-- 全局日期控件(YYYY/MM/DD HH:mm:ss) -->
<view class="date"> <view class="date">
<uni-datetime-picker <uni-datetime-picker
v-model="defaultValue" v-model="defaultValue"
......
<template> <template>
<!-- 全局日期控件 --> <!-- 全局日期控件(YYYY/MM/DD)最高只能到分 -->
<view class="date"> <view class="date">
<up-datetime-picker <up-datetime-picker
:show="show" :show="show"
...@@ -35,7 +35,7 @@ const ps = defineProps({ ...@@ -35,7 +35,7 @@ const ps = defineProps({
//日历模式date,datetime,time,year-month //日历模式date,datetime,time,year-month
mode: { mode: {
type: String, type: String,
default: 'date' default: 'datetime'
}, },
//是否时间戳 //是否时间戳
timestamp: { timestamp: {
......
<template>
<global-page :title="title">
<view class="search-form">
<slot></slot>
</view>
<template #bottom>
<view class="footer-btn">
<slot name="bottom">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">{{ resetText }}</global-button>
</up-col>
<up-col span="6">
<global-button type="primary" size="large" :radius="5" @tap="handleConfirm">{{ confirmText }}</global-button>
</up-col>
</up-row>
</slot>
</view>
</template>
</global-page>
</template>
<script setup>
const es = defineEmits(['reset', 'confirm'])
const ps = defineProps({
title: {
type: String,
default: '筛选'
},
resetText: {
type: String,
default: '重置'
},
confirmText: {
type: String,
default: '确定'
}
})
const handleReset = () => {
es('reset')
}
const handleConfirm = () => {
es('confirm')
}
</script>
<style lang="scss" scoped>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -65,6 +65,18 @@ ...@@ -65,6 +65,18 @@
</up-checkbox> </up-checkbox>
</template> </template>
</up-checkbox-group> </up-checkbox-group>
<up-swipe-action v-else-if="getShowActions">
<template v-for="(item, index) in dataList" :key="index">
<up-swipe-action-item
closeOnClick
:threshold="50"
@click="(action) => handleAction(action, item, index)"
:options="getActionOptions"
>
<slot :item="item" :index="index"></slot>
</up-swipe-action-item>
</template>
</up-swipe-action>
<template v-for="(item, index) in dataList" :key="index" v-else> <template v-for="(item, index) in dataList" :key="index" v-else>
<slot :item="item" :index="index"></slot> <slot :item="item" :index="index"></slot>
</template> </template>
...@@ -80,14 +92,24 @@ ...@@ -80,14 +92,24 @@
</template> </template>
<!-- 消息提醒 --> <!-- 消息提醒 -->
<up-toast ref="uToastRef"></up-toast> <up-toast ref="uToastRef"></up-toast>
<up-modal
:width="250"
content="确认删除吗?"
:show="showConfirm"
showCancelButton
closeOnClickOverlay
@confirm="handleConfirm"
@cancel="showConfirm = false"
@close="showConfirm = false"
></up-modal>
</z-paging> </z-paging>
</template> </template>
<script setup> <script setup>
import { filterEmptyValues } from 'mocp/utils/tool' import { filterEmptyValues } from 'mocp/utils/tool'
import { computed, nextTick, onUnmounted, ref, watch } from 'vue' import { computed, nextTick, onUnmounted, reactive, ref, watch } from 'vue'
const dataList = ref([]) const dataList = ref([])
const es = defineEmits(['handleQuery', 'handleLeftClick', 'handleRightClick', 'handleFooterClick', 'handleChooseData']) const es = defineEmits(['handleQuery', 'handleLeftClick', 'handleRightClick', 'handleFooterClick', 'handleChooseData', 'handleDelete'])
const paging = ref() const paging = ref()
const ps = defineProps({ const ps = defineProps({
showEmpty: { showEmpty: {
...@@ -276,8 +298,46 @@ const ps = defineProps({ ...@@ -276,8 +298,46 @@ const ps = defineProps({
pageSize: { pageSize: {
type: Number, type: Number,
default: 10 default: 10
},
//右滑操作菜单
showDelete: {
type: Boolean,
default: false
} }
}) })
//右滑动操作菜单
const showConfirm = ref(false)
const actionItem = reactive({
item: null,
index: null
})
const getShowActions = computed(() => {
return ps.showDelete
})
const handleConfirm = () => {
showConfirm.value = false
es('handleDelete', actionItem.item, actionItem.index)
}
const handleAction = (action, item, index) => {
if (getActionOptions.value[action['index']].name == 'delete') {
showConfirm.value = true
actionItem.item = item
actionItem.index = index
}
}
const getActionOptions = computed(() => {
const actions = []
if (ps.showDelete) {
actions.push({
text: '移除',
name: 'delete',
style: {
backgroundColor: '#f53f3f'
}
})
}
return actions
})
// z-page样式 // z-page样式
const getPagingStyle = computed(() => { const getPagingStyle = computed(() => {
return { return {
...@@ -387,6 +447,7 @@ const openToast = (params) => { ...@@ -387,6 +447,7 @@ const openToast = (params) => {
uToastRef.value?.show(params) uToastRef.value?.show(params)
}) })
} }
uni.$on('useMessage', (params) => openToast(params)) uni.$on('useMessage', (params) => openToast(params))
onUnmounted(() => { onUnmounted(() => {
uni.$off('useMessage', openToast) uni.$off('useMessage', openToast)
...@@ -447,6 +508,24 @@ export default { ...@@ -447,6 +508,24 @@ export default {
:deep(.u-checkbox__icon-wrap) { :deep(.u-checkbox__icon-wrap) {
min-width: 18px; min-width: 18px;
} }
//右滑动菜单
:deep(.u-swipe-action-item):has(.item) {
border-radius: 12rpx;
margin-bottom: 16rpx;
&:last-child {
margin-bottom: 0;
}
}
:deep(.u-swipe-action-item__right) {
top: 1px;
bottom: 1px;
right: 1px;
border-radius: 0 12rpx 12rpx 0;
}
:deep(.u-cell__title) {
display: flex;
flex-direction: column;
}
} }
.cancel { .cancel {
font-size: 28rpx; font-size: 28rpx;
......
/**
* 下拉框字典项
*/
export const opinionType = [
{ label: 'N/A', value: 0 },
{ label: '不同意', value: 1 },
{ label: '同意', value: 2 }
]
export const appealInfo = [
{ label: '无', value: 0 },
{ label: '申诉跟踪', value: 1 },
{ label: '申诉关闭', value: 2 }
]
export const eventType = [
{ label: '扣分', value: 0 },
{ label: '加分', value: 1 }
]
<template> <template>
<!-- 全局下拉框控件 --> <!-- 全局下拉框控件 -->
<view class="picker" :class="{ 'u-border': ps.border }" :style="style"> <view class="picker" :class="{ 'u-border': ps.border }" :style="style">
<global-popup v-model="show" :height="592" :customStyle="{ padding: '28rpx 32rpx' }" v-if="filter" :distance="distance"> <global-popup v-model="show" :height="592" :customStyle="{ padding: '28rpx 32rpx' }" v-if="filter || multiple" :distance="distance">
<template #top> <template #top>
<view> <view>
<up-search :placeholder="placeholder" :showAction="false" v-model="searchKey"></up-search> <up-search :placeholder="placeholder" :showAction="false" v-model="searchKey"></up-search>
...@@ -10,7 +10,9 @@ ...@@ -10,7 +10,9 @@
<view class="popup-content-list" v-if="getFilterColumns.length"> <view class="popup-content-list" v-if="getFilterColumns.length">
<view <view
class="popup-content-item u-line-1" class="popup-content-item u-line-1"
:class="{ 'mocp-color-primary-6': modelValue == item[valueField] }" :class="{
'mocp-color-primary-6': multipleValue.includes(item[valueField])
}"
v-for="(item, index) in getFilterColumns" v-for="(item, index) in getFilterColumns"
:key="index" :key="index"
@tap="handleChoose(item[valueField])" @tap="handleChoose(item[valueField])"
...@@ -21,6 +23,15 @@ ...@@ -21,6 +23,15 @@
<view style="width: 100%; height: 100%" v-else> <view style="width: 100%; height: 100%" v-else>
<global-empty></global-empty> <global-empty></global-empty>
</view> </view>
<template #bottom>
<view style="margin-top: 20rpx" v-if="multiple">
<global-button type="primary" :radius="5" @tap="confirmMultiple">确定</global-button>
</view>
<view class="customize" style="margin-top: 20rpx" v-if="customize && !getFilterColumns.length">
<text>没有找到筛选内容</text>
<global-button type="text" :radius="5" @tap="confirmCustomize">添加已输入内容</global-button>
</view>
</template>
</global-popup> </global-popup>
<up-picker <up-picker
v-else v-else
...@@ -52,7 +63,8 @@ ...@@ -52,7 +63,8 @@
<script setup> <script setup>
import { computed, nextTick, ref, watch } from 'vue' import { computed, nextTick, ref, watch } from 'vue'
import * as dictData from 'mocp/hooks/use-dict/dict-data' import * as dictData from 'mocp/hooks/use-dict/dict-data'
import { cloneDeep } from 'lodash' import { cloneDeep, min } from 'lodash'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const es = defineEmits(['update:modelValue', 'change', 'getScrollTop']) const es = defineEmits(['update:modelValue', 'change', 'getScrollTop'])
const ps = defineProps({ const ps = defineProps({
...@@ -66,11 +78,16 @@ const ps = defineProps({ ...@@ -66,11 +78,16 @@ const ps = defineProps({
type: Boolean, type: Boolean,
default: false default: false
}, },
//是否多选(只对filter有效)---待优化 //是否多选(只对filter有效)
// multiple: { multiple: {
// type: Boolean, type: Boolean,
// default: false default: false
// }, },
//是否筛选不到的时候可以自定义内容(只对filter有效)
customize: {
type: Boolean,
default: false
},
style: { style: {
type: Object, type: Object,
default: () => { default: () => {
...@@ -86,6 +103,10 @@ const ps = defineProps({ ...@@ -86,6 +103,10 @@ const ps = defineProps({
type: String, type: String,
default: '' default: ''
}, },
paramsType: {
type: String,
default: ''
},
modelValue: { modelValue: {
type: [String, Number], type: [String, Number],
default: '' default: ''
...@@ -108,6 +129,10 @@ const ps = defineProps({ ...@@ -108,6 +129,10 @@ const ps = defineProps({
type: String, type: String,
default: 'value' default: 'value'
}, },
valueSplit: {
type: String,
default: ','
},
pickAlign: { pickAlign: {
type: String, type: String,
default: 'left' default: 'left'
...@@ -181,6 +206,11 @@ const open = async () => { ...@@ -181,6 +206,11 @@ const open = async () => {
} }
searchKey.value = '' searchKey.value = ''
show.value = true show.value = true
if (ps.modelValue) {
multipleValue.value = ps.modelValue.split(ps.valueSplit)
} else {
multipleValue.value = []
}
} }
//设置下拉框打开的默认值 //设置下拉框打开的默认值
const defaultIndex = ref(0) const defaultIndex = ref(0)
...@@ -192,6 +222,8 @@ const getColumns = computed(() => { ...@@ -192,6 +222,8 @@ const getColumns = computed(() => {
} else { } else {
throw new Error('请输入存在的dictkey值') throw new Error('请输入存在的dictkey值')
} }
} else if (ps.paramsType) {
return getParamsByType(ps.paramsType) || []
} else { } else {
if (ps.options) { if (ps.options) {
if (Array.isArray(ps.options)) { if (Array.isArray(ps.options)) {
...@@ -218,9 +250,28 @@ const getColumns = computed(() => { ...@@ -218,9 +250,28 @@ const getColumns = computed(() => {
return [] return []
}) })
//监听设置labelValue的值 //监听设置labelValue的值
const multipleValue = ref([])
watch( watch(
[() => ps.modelValue, () => ps.options], [() => ps.modelValue, () => ps.options],
() => { () => {
if (ps.multiple) {
if (ps.modelValue) {
labelValue.value = ps.modelValue
.split(ps.valueSplit)
.map((item) => {
return getColumns.value.find((option) => String(option[ps.valueField]) === String(item))[ps.labelField]
})
.join(ps.valueSplit)
const indexs = ps.modelValue.split(ps.valueSplit).map((item) => {
return getColumns.value.findIndex((option) => String(option[ps.valueField]) === String(item))
})
nextTick(() => {
defaultIndex.value = min(indexs)
})
} else {
defaultIndex.value = 0
}
} else {
const option = getColumns.value?.find((option) => String(option[ps.valueField]) === String(ps.modelValue)) const option = getColumns.value?.find((option) => String(option[ps.valueField]) === String(ps.modelValue))
const index = getColumns.value?.findIndex((option) => String(option[ps.valueField]) === String(ps.modelValue)) const index = getColumns.value?.findIndex((option) => String(option[ps.valueField]) === String(ps.modelValue))
if (option) { if (option) {
...@@ -232,6 +283,7 @@ watch( ...@@ -232,6 +283,7 @@ watch(
labelValue.value = ps.modelValue labelValue.value = ps.modelValue
defaultIndex.value = 0 defaultIndex.value = 0
} }
}
}, },
{ immediate: true } { immediate: true }
) )
...@@ -243,6 +295,17 @@ const confirm = (e) => { ...@@ -243,6 +295,17 @@ const confirm = (e) => {
es('update:modelValue', getColumns.value[index][ps.valueField]) es('update:modelValue', getColumns.value[index][ps.valueField])
es('change', getColumns.value[index][ps.valueField], getColumns.value[index]) es('change', getColumns.value[index][ps.valueField], getColumns.value[index])
} }
const confirmMultiple = () => {
show.value = false
es('update:modelValue', multipleValue.value.join(ps.valueSplit))
es('change', multipleValue.value.join(ps.valueSplit))
}
//确定自定义内容
const confirmCustomize = () => {
show.value = false
es('update:modelValue', searchKey.value)
es('change', searchKey.value)
}
//点击清空按钮 //点击清空按钮
const clear = () => { const clear = () => {
labelValue.value = '' labelValue.value = ''
...@@ -258,6 +321,13 @@ const getFilterColumns = computed(() => { ...@@ -258,6 +321,13 @@ const getFilterColumns = computed(() => {
//弹出层列表点击 //弹出层列表点击
const distance = ref(0) const distance = ref(0)
const handleChoose = (value) => { const handleChoose = (value) => {
if (ps.multiple) {
if (multipleValue.value.includes(value)) {
multipleValue.value = multipleValue.value.filter((item) => item != value)
} else {
multipleValue.value.push(value)
}
} else {
es('update:modelValue', value) es('update:modelValue', value)
es( es(
'change', 'change',
...@@ -265,6 +335,7 @@ const handleChoose = (value) => { ...@@ -265,6 +335,7 @@ const handleChoose = (value) => {
getColumns.value.find((item) => item[ps.valueField] == value) getColumns.value.find((item) => item[ps.valueField] == value)
) )
show.value = false show.value = false
}
} }
//打开默认滑动到选中的位置 //打开默认滑动到选中的位置
watch( watch(
...@@ -299,6 +370,7 @@ watch( ...@@ -299,6 +370,7 @@ watch(
&-value { &-value {
color: $mocp-text-4; color: $mocp-text-4;
margin-right: 8rpx; margin-right: 8rpx;
word-break: break-all;
} }
&-icon { &-icon {
display: flex; display: flex;
...@@ -319,5 +391,12 @@ watch( ...@@ -319,5 +391,12 @@ watch(
} }
} }
} }
.customize {
display: flex;
justify-content: space-between;
align-items: center;
background: $mocp-fill-1;
padding: 10rpx 20rpx;
}
} }
</style> </style>
import * as dictData from './dictData'
import { cloneDeep } from 'lodash'
export function useDict(dictkey, opt) {
if (!dictkey && !opt?.data) {
return []
}
let currentDictList = cloneDeep((opt?.data ? opt.data : (dictData)[dictkey] || []))
if (opt?.filter) {
currentDictList = currentDictList.filter((item) => {
return opt.filter && opt.filter(item)
})
}
return currentDictList
}
export function useGetDictByLabel(dictkey, label, option) {
const enterSplit = option?.enterSplit || ','
const outputSplit = option?.enterSplit || ';'
const labelArr = label.split(enterSplit)
const values = []
useDict(dictkey, { filter: option?.filter, data: option?.data }).forEach((item) => {
if (
labelArr.some((label) => {
return label == item['label']
})
) {
values.push(item['value'])
}
})
return values.join(outputSplit)
}
export function useGetDictByValue(dictkey, value = '', option) {
const enterSplit = option?.enterSplit || ','
const outputSplit = option?.enterSplit || ';'
const valueArr = String(value).split(enterSplit)
const labels = []
useDict(dictkey, { filter: option?.filter, data: option?.data }).forEach((item) => {
if (
valueArr.some((value) => {
return value == String(item['value'])
})
) {
labels.push(item['label'])
}
})
return labels.join(outputSplit)
}
export function useGetDictByProp(dictkey, value = '', prop, option) {
const enterSplit = option?.enterSplit || ','
const outputSplit = option?.enterSplit || ';'
const valueArr = String(value).split(enterSplit)
const labels = []
useDict(dictkey, { filter: option?.filter, data: option?.data }).forEach((item) => {
if (
valueArr.some((value) => {
return value == String(item['value'])
})
) {
labels.push(item[prop])
}
})
return labels.join(outputSplit)
}
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
<scroll-view scroll-y class="content" :scroll-top="scrollTop" @scroll="scroll"> <scroll-view scroll-y class="content" :scroll-top="scrollTop" @scroll="scroll">
<slot></slot> <slot></slot>
</scroll-view> </scroll-view>
<slot name="bottom"></slot>
</view> </view>
</up-popup> </up-popup>
</template> </template>
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
import { computed, ref, watch } from 'vue' import { computed, ref, watch } from 'vue'
import * as dictData from 'mocp/hooks/use-dict/dict-data' import * as dictData from 'mocp/hooks/use-dict/dict-data'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const es = defineEmits(['update:modelValue', 'change']) const es = defineEmits(['update:modelValue', 'change'])
const ps = defineProps({ const ps = defineProps({
...@@ -35,6 +36,10 @@ const ps = defineProps({ ...@@ -35,6 +36,10 @@ const ps = defineProps({
type: String, type: String,
default: '' default: ''
}, },
paramsType: {
type: String,
default: ''
},
modelValue: { modelValue: {
type: [String, Number], type: [String, Number],
default: '' default: ''
...@@ -124,6 +129,8 @@ const getColumns = computed(() => { ...@@ -124,6 +129,8 @@ const getColumns = computed(() => {
} else { } else {
throw new Error('请输入存在的dictkey值') throw new Error('请输入存在的dictkey值')
} }
} else if (ps.paramsType) {
return getParamsByType(ps.paramsType) || []
} else { } else {
if (ps.options && Object.prototype.toString.call(ps.options[0]) == '[object Object]') { if (ps.options && Object.prototype.toString.call(ps.options[0]) == '[object Object]') {
return ps.options return ps.options
......
...@@ -39,14 +39,14 @@ const ps = defineProps({ ...@@ -39,14 +39,14 @@ const ps = defineProps({
}, },
activeValue: { activeValue: {
type: [Boolean, String, Number], type: [Boolean, String, Number],
default: 1 default: '1'
}, },
inactiveValue: { inactiveValue: {
type: [Boolean, String, Number], type: [Boolean, String, Number],
default: 0 default: '0'
} }
}) })
const switchValue = ref(0) const switchValue = ref('0')
watch( watch(
() => ps.modelValue, () => ps.modelValue,
(value) => { (value) => {
......
...@@ -65,3 +65,9 @@ export const st_followStatus = [ ...@@ -65,3 +65,9 @@ export const st_followStatus = [
{ text: '已到位', class: 'mocp-color-warning-6', value: 3 }, { text: '已到位', class: 'mocp-color-warning-6', value: 3 },
{ text: '已登机', class: 'mocp-color-success-6', value: 4 } { text: '已登机', class: 'mocp-color-success-6', value: 4 }
] ]
export const unPlan_applyStatus = [
{ text: '申请中', class: 'mocp-color-danger-6', value: '0' },
{ text: '已通过', class: 'mocp-color-primary-6', value: '1' },
{ text: '已驳回', class: 'mocp-color-primary-6', value: '2' },
{ text: '已撤销', class: 'mocp-color-primary-6', value: '3' }
]
...@@ -202,6 +202,7 @@ onBeforeUnmount(() => { ...@@ -202,6 +202,7 @@ onBeforeUnmount(() => {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.upload { .upload {
flex: 1;
&-button { &-button {
display: flex; display: flex;
align-items: center; align-items: center;
......
...@@ -201,9 +201,7 @@ watch( ...@@ -201,9 +201,7 @@ watch(
) )
//监听搜索 //监听搜索
const onChange = debounce((value) => { const onChange = debounce((value) => {
if (value != ps.searchValue) {
search(value) search(value)
}
}, 200) }, 200)
//获取label的内容 //获取label的内容
const loading = ref(false) const loading = ref(false)
......
// 建议以文件名首字母作为前缀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: 'danger', value: 'NO_JIAO_BAN' }
]
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
export const eb_deicingType = [ export const eb_deicingType = [
{ label: 'cleansurface I-BIO', value: 'cleansurface I-BIO' }, { label: 'cleansurface I-BIO', value: 'cleansurface I-BIO' },
{ label: 'FCY-1A', value: 'FCY-1A' }, { label: 'FCY-1A', value: 'FCY-1A' },
{ label: 'Cleanwing', value: 'Cleanwing' }, { label: 'Cleanwing I', value: 'Cleanwing I' },
{ label: 'FCY-9311', value: 'FCY-9311' }, { label: 'FCY-9311', value: 'FCY-9311' },
{ label: 'FCY-1Bio', value: 'FCY-1Bio' } { label: 'FCY-1Bio', value: 'FCY-1Bio' }
] ]
...@@ -25,9 +25,10 @@ export const eb_antiicingUnit = [ ...@@ -25,9 +25,10 @@ export const eb_antiicingUnit = [
export const eb_antiicingType = [ export const eb_antiicingType = [
{ label: 'Cleansurface1-B10', value: 'Cleansurface1-B10' }, { label: 'Cleansurface1-B10', value: 'Cleansurface1-B10' },
{ label: 'FCY-1A', value: 'FCY-1A' }, { label: 'FCY-1A', value: 'FCY-1A' },
{ label: 'Cleanwing', value: 'Cleanwing' }, { label: 'Cleanwing II', value: 'Cleanwing II' },
{ label: 'FCY-9311', value: 'FCY-9311' }, { label: 'FCY-9311', value: 'FCY-9311' },
{ label: 'FCY-2', value: 'FCY-2' } { label: 'FCY-2', value: 'FCY-2' },
{ label: 'FCY-4', value: 'FCY-4' }
] ]
export const eb_guaranteeUnit = [ export const eb_guaranteeUnit = [
{ label: '海技保障', value: '1' }, { label: '海技保障', value: '1' },
...@@ -46,3 +47,7 @@ export const eb_modelType = [ ...@@ -46,3 +47,7 @@ export const eb_modelType = [
{ label: '宽体机', value: '1' }, { label: '宽体机', value: '1' },
{ label: '窄体机', value: '2' } { label: '窄体机', value: '2' }
] ]
export const eb_zk = [
{ label: '窄体', value: '0' },
{ label: '宽体', value: '1' }
]
...@@ -16,3 +16,5 @@ export * from './technicalAnalysis' ...@@ -16,3 +16,5 @@ export * from './technicalAnalysis'
export * from './engineeringEvaluation' export * from './engineeringEvaluation'
export * from './windDamageManagement' export * from './windDamageManagement'
export * from './inforDisclosure' export * from './inforDisclosure'
export * from './noPlan'
export * from './dutyLog'
// 建议以文件名首字母作为前缀sa_
export const np_applyStatus = [
{ label: '申请中', value: '0' },
{ label: '已通过', value: '1' },
{ label: '已驳回', value: '2' },
{ label: '已撤销', value: '3' }
]
export const np_checkLevel = [
{ label: '高级别定检', value: '1' },
{ label: '低级别定检', value: '2' },
{ label: '专项定检', value: '3' }
]
export const np_sourceType = [
{ label: 'MOCP', value: '1' },
{ label: 'CMIC', value: '2' }
]
export const np_exemptStatus = [
{ label: '是', value: '1' },
{ label: '否', value: '0' }
]
import { ref } from 'vue' import { ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app' import { onLoad, onReady } from '@dcloudio/uni-app'
export const useDrawSignature = (canvasId) => { export const useDrawSignature = (canvasId, config = {}) => {
let ctx = null let ctx = null
let isButtonDown = false let isButtonDown = false
let points = [] let points = []
...@@ -15,6 +15,37 @@ export const useDrawSignature = (canvasId) => { ...@@ -15,6 +15,37 @@ export const useDrawSignature = (canvasId) => {
ctx.lineJoin = 'round' ctx.lineJoin = 'round'
}) })
onReady(() => {
if (config.path) {
const query = uni.createSelectorQuery()
query
.select('#' + canvasId)
.fields({ size: true }, (data) => {
if (data) {
uni.getImageInfo({
src: config.path,
success: (res) => {
const { width, height } = res
// 计算缩放比例
const scale = Math.min(data.width / width, data.height / height)
// 计算绘制的宽高
const drawWidth = width * scale
const drawHeight = height * scale
// 绘制图片
ctx.drawImage(res.path, 0, 0, drawWidth, drawHeight)
ctx.draw(true)
isSigned.value = true
},
fail: (err) => {
console.log(err)
}
})
}
})
.exec()
}
})
// 触摸开始,获取到起点 // 触摸开始,获取到起点
const touchStart = (e) => { const touchStart = (e) => {
let startPoint = { X: e.changedTouches[0].x, Y: e.changedTouches[0].y } let startPoint = { X: e.changedTouches[0].x, Y: e.changedTouches[0].y }
...@@ -79,7 +110,6 @@ export const useDrawSignature = (canvasId) => { ...@@ -79,7 +110,6 @@ export const useDrawSignature = (canvasId) => {
}) })
}) })
} }
return { return {
isSigned, isSigned,
touchStart, touchStart,
......
...@@ -55,27 +55,6 @@ const useBaseStore = defineStore('base', { ...@@ -55,27 +55,6 @@ const useBaseStore = defineStore('base', {
return q return q
}, {}) }, {})
}, },
getTerminalSelect(state) {
return state.selectList.terminalList?.map((z) => ({
value: z.terminalCode,
label: z.terminalCity + '-' + z.terminalName + '-' + z.terminalCode
}))
},
//格式化航司数据
getAirlineSelect(state) {
return state.selectList.airlineCodeList.map((z) => ({
value: z.zOP3,
zOP2: z.value,
label: z.zOP3 + z.shortName
}))
},
//格式化机型数据
getTypeSelect(state) {
return state.selectList.typeList.map((a) => ({
label: a,
value: a
}))
},
//格式化章节下拉数据 //格式化章节下拉数据
getAllATASelect(state) { getAllATASelect(state) {
return state.selectList.ATAList.map((q) => ({ return state.selectList.ATAList.map((q) => ({
......
import { getDutyLogDetailApi } from 'mocp/api/dutyLog'
import { defineStore } from 'pinia'
const useDutyLogStore = defineStore('dutyLog', {
state: () => {
return {
searchData: {
dutyManagerUname: '',
monitorLeaderUname: '',
statusStr: '',
dutyDateE: null,
dutyDateS: null
},
id: '',
details: undefined
}
},
getters: {},
actions: {
async getDetails() {
this.details = undefined
const res = await getDutyLogDetailApi({ id: this.id }, { loading: true })
if (res.code == 200) {
this.details = res.data
} else {
uni.$mocpMessage.error(res.message)
}
},
resetForm() {
this.searchData = {
dutyManagerUname: '',
monitorLeaderUname: '',
statusStr: '',
dutyDateE: null,
dutyDateS: null
}
},
setState(...args) {
this.$patch({ [args[0]]: args[1] })
}
},
// 配置持久化
persist: false
})
export default useDutyLogStore
...@@ -14,6 +14,25 @@ const useMyToDoStore = defineStore('myToDo', { ...@@ -14,6 +14,25 @@ const useMyToDoStore = defineStore('myToDo', {
} }
}, },
getters: { getters: {
getTypeNum(state) {
let num = 0
if (state.assignWorkNum > 0) {
num++
}
if (state.appraisalRecordNum > 0) {
num++
}
if (state.moveDecisionNum > 0) {
num++
}
if (state.technologyEvaluationNum > 0) {
num++
}
if (state.windDamageManagementNum > 0) {
num++
}
return num
},
getTotal(state) { getTotal(state) {
const total = const total =
state.assignWorkNum + state.appraisalRecordNum + state.moveDecisionNum + state.technologyEvaluationNum + state.windDamageManagementNum state.assignWorkNum + state.appraisalRecordNum + state.moveDecisionNum + state.technologyEvaluationNum + state.windDamageManagementNum
......
import { defineStore } from 'pinia'
import useUserStore from 'mocp/store/user'
const useInforDisclosureStore = defineStore('supportedTask', {
state: () => {
return {
searchData: {}
}
},
getters: {},
actions: {
resetForm () {
const userStore = useUserStore()
this.searchData.userId = userStore.userInfo.id
},
setState (...args) {
this.$patch({[args[0]]: args[1]})
}
},
// 配置持久化
persist: false
})
export default useInforDisclosureStore
import { getUnplanApplyApi } from 'mocp/api/unplanApply'
import { defineStore } from 'pinia'
const useUnplanApplyStore = defineStore('unplanApply', {
state: () => {
return {
searchData: {
applyStatus: '',
packageNo: '',
exemptStatus: null,
sourceType: '',
checkLevel: null,
acType: '',
airline: '',
startTime: null,
startTimeEnd: null,
applyTimeStart: null,
applyTimeEnd: null
},
id: '',
details: undefined
}
},
getters: {},
actions: {
async getDetails() {
this.details = undefined
const res = await getUnplanApplyApi({ id: this.id }, { loading: true })
if (res.code == 200) {
this.details = res.data
} else {
uni.$mocpMessage.error(res.message)
}
},
resetForm() {
this.searchData = {
applyStatus: '',
packageNo: '',
exemptStatus: null,
sourceType: '',
checkLevel: null,
acType: '',
airline: '',
startTime: null,
startTimeEnd: null,
applyTimeStart: null,
applyTimeEnd: null
}
},
setState(...args) {
this.$patch({ [args[0]]: args[1] })
}
},
// 配置持久化
persist: false
})
export default useUnplanApplyStore
import { getUnplanWarningApi } from 'mocp/api/unplanWarning'
import { defineStore } from 'pinia'
const useUnplanWarningStore = defineStore('unplanWarning', {
state: () => {
return {
searchData: {
applyStatus: '',
packageNo: '',
sourceType: '',
checkLevel: null,
acType: '',
airline: '',
startTime: null,
startTimeEnd: null,
applyTimeStart: null,
applyTimeEnd: null
},
id: '',
details: undefined
}
},
getters: {},
actions: {
async getDetails() {
this.details = undefined
const res = await getUnplanWarningApi({ id: this.id }, { loading: true })
if (res.code == 200) {
this.details = res.data
} else {
uni.$mocpMessage.error(res.message)
}
},
resetForm() {
this.searchData = {
applyStatus: '',
packageNo: '',
sourceType: '',
checkLevel: null,
acType: '',
airline: '',
startTime: null,
startTimeEnd: null,
applyTimeStart: null,
applyTimeEnd: null
}
},
setState(...args) {
this.$patch({ [args[0]]: args[1] })
}
},
// 配置持久化
persist: false
})
export default useUnplanWarningStore
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
import { ref } from 'vue' import { menuList } from 'mocpStatic/js/menu'
//默认default最多显示15个,id唯一标识
const menuList = ref([
// 生产保障
{ id: 'xxtb', name: '信息通报', icon: 'xxtb', group: '生产保障', default: true, count: 0, url: '/panel/inforDisclosure/search' },
{ id: 'hbbz', name: '航班保障', icon: 'hbbz', group: '生产保障', default: true, count: 0, url: '/panel/flight-support/list' },
{ id: 'AOG', name: 'AOG任务', icon: 'AOG', group: '生产保障', default: true, count: 0, url: '/panel/aog/search' },
{ id: 'wdgj', name: '我的跟机', icon: 'wdgj', group: '生产保障', default: true, count: 0, url: '/panel/supported-task/list' },
{ id: 'sfd', name: '收费单', icon: 'sfd', group: '生产保障', default: true, count: 0, url: '/panel/electronicBill/list' },
// 维修控制
{ id: 'yxdc', name: '运行调查', icon: 'yxdc', group: '维修控制', default: false, count: 0, url: '/panel/operationalSurvey/list' },
{ id: 'yxjc', name: '运行决策', icon: 'yxjc', group: '维修控制', default: false, count: 0, url: '/panel/move-decision/list' },
{ id: 'bzgz', name: '布置工作', icon: 'bzgz', group: '维修控制', default: false, count: 0, url: '/panel/assign-work/search' },
{ id: 'jxyw', name: '机械延误', icon: 'jxyw', group: '维修控制', default: false, count: 0, url: '/panel/mechanicalAbnormalEvents/list' },
{ id: 'ffh', name: '防风害', icon: 'ffh', group: '维修控制', default: false, count: 0, url: '/panel/windDamageManagement/list' },
// 技术支援
{ id: 'jdzt', name: '机队状态', icon: 'jdzt', group: '技术支援', default: true, count: 0, url: '/panel/fleet/search' },
{ id: 'zysq', name: '支援申请', icon: 'zysq', group: '技术支援', default: false, count: 0, url: '/panel/support-application/search' },
// { id: 'gzzl', name: '工作指令', icon: 'gzzl', group: '技术支援', default: false, count: 0, url: '/panel/work-assignment/search' },
{ id: 'jspg', name: '技术评估', icon: 'jspg', group: '技术支援', default: false, count: 0, url: '/panel/technology-evaluation/list' },
{ id: 'jsfx', name: '技术分析', icon: 'jsfx', group: '技术支援', default: false, count: 0, url: '/panel/technicalAnalysis/list' },
{ id: 'MCO', name: 'MCO', icon: 'MCO', group: '技术支援', default: true, count: 0, url: '/panel/mco/search' },
{ id: 'wjll', name: '文件浏览', icon: 'wjll', group: '技术支援', default: false, count: 0, url: '/panel/fileList/index' },
// 运行品质
{ id: 'pzfx', name: '品质分析', icon: 'pzfx', group: '运行品质', default: false, count: 0, url: '/panel/qualityAnalysis/list' },
{ id: 'khjl', name: '考核记录', icon: 'khjl', group: '运行品质', default: false, count: 0, url: '/panel/appraisal-record/list' },
{ id: 'gcfx', name: '工程分析', icon: 'gcfx', group: '运行品质', default: false, count: 0, url: '/panel/engineeringEvaluation/list' },
// 航站管理
{ id: 'bzcsj', name: '不正常事件', icon: 'bzcsj', group: '航站管理', default: false, count: 0, url: '/panel/abnormalEventManage/list' },
{ id: 'xydw', name: '协议单位', icon: 'xydw', group: '航站管理', default: false, count: 0, url: '/panel/workSupervision/list' }
])
const useUserStore = defineStore('mocpUser', { const useUserStore = defineStore('mocpUser', {
state: () => { state: () => {
return { return {
token: '', token: '',
userInfo: undefined, //用户信息 userInfo: undefined, //用户信息
allMenuItem: { id: 999, name: '全部菜单', icon: 'all', group: '', count: 0 }, allMenuItem: { id: 999, name: '全部菜单', icon: 'all', group: '', count: 0 },
allUserList: [] //所有登录用户存储的信息 allUserList: [], //所有登录用户存储的信息
//席位权限
seatId: '', //当前席位id
seatPermission: ['all'], //操作权限
configData: [] //数据权限
} }
}, },
getters: { getters: {
//获取操作权限相关
getApiPaths(state) {
if (state.seatPermission.includes('all')) {
return ['all']
} else {
return state.seatPermission.map((item) => item.apiPath)
}
},
//获取数据权限相关
getCommonConfigData(state) {
return state.configData.find((item) => item.permissionId == '0') || {}
},
//获取全部菜单 //获取全部菜单
getMenuList() { getMenuList(state) {
if (state.seatPermission.includes('all')) {
return menuList.value return menuList.value
}
return menuList.value.filter((item) => state.getApiPaths.includes(item.apiPath) || !item.apiPath)
}, },
//获取分组菜单 //获取分组菜单
getGroupMenuList(state) { getGroupMenuList(state) {
...@@ -59,7 +48,8 @@ const useUserStore = defineStore('mocpUser', { ...@@ -59,7 +48,8 @@ const useUserStore = defineStore('mocpUser', {
}, },
//获取当前登录用户的首页菜单 //获取当前登录用户的首页菜单
getHomeMenuList(state) { getHomeMenuList(state) {
const homeMenuList = state.allUserList.find((item) => item.userId == state.userInfo?.id)?.homeMenuList if (!state.userInfo) return []
const homeMenuList = state.allUserList.find((item) => item.userId == state.userInfo.id)?.homeMenuList || []
const ids = [] const ids = []
homeMenuList.forEach((item) => { homeMenuList.forEach((item) => {
ids.push(item.id) ids.push(item.id)
...@@ -84,22 +74,30 @@ const useUserStore = defineStore('mocpUser', { ...@@ -84,22 +74,30 @@ const useUserStore = defineStore('mocpUser', {
}) })
}) })
} }
//跳转工作台
uni.$mocpJump.redirectTo('/tab/index')
}, },
//退出登录 //退出登录
handleLogOut() { handleLogOut() {
this.token = '' this.resetUserInfo()
this.userInfo = undefined
//返回登录页面 //返回登录页面
uni.$mocpJump.redirectTo('/login/index') uni.$mocpJump.redirectTo('/login/index')
}, },
//重置用户信息
resetUserInfo() {
this.token = ''
this.userInfo = undefined
this.seatId = ''
this.seatPermission = ['all']
this.configData = []
},
//修改用户首页菜单 //修改用户首页菜单
changeHomeMenuList(menuList) { changeHomeMenuList(menuList) {
const index = this.allUserList.findIndex((item) => item.userId == this.userInfo.id) const index = this.allUserList.findIndex((item) => item.userId == this.userInfo.id)
this.allUserList[index].homeMenuList = menuList.map((item) => { this.allUserList[index].homeMenuList = menuList.map((item) => {
return { id: item.id } return { id: item.id }
}) })
},
setState(...args) {
this.$patch({ [args[0]]: args[1] })
} }
}, },
// 配置持久化 // 配置持久化
......
import useUserStore from 'mocp/store/user' 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 = 'https://moc.hnatechnic.com/api' //生产
// const baseURL = 'http://10.123.48.67/api' //Amms内网 // 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 { class ServiceLoading {
open(loading) { open(loading) {
......
import useBaseStore from 'mocp/store/base'
import useUserStore from 'mocp/store/user'
/**
* 操作权限校验
* @param {Array} value 校验值
* @returns {Boolean}
*/
export const checkPermi = (value) => {
const userStore = useUserStore()
if (value) {
if (userStore.getApiPaths.includes('all')) {
return true
}
if (Array.isArray(value)) {
return value.some((val) => userStore.getApiPaths.includes(val))
} else {
return userStore.getApiPaths.includes(value)
}
} else {
return false
}
}
/**
* 获取配置数据并过滤列表
* @param {String} permissionName 模块名
* @param {Array} list 原始列表
* @param {String} configKey 配置数据键名
* @returns {Array}
*/
export const getFilteredList = (permissionName, list, configKey) => {
const userStore = useUserStore()
const configData = userStore.configData.find((item) => item.permissionName === permissionName)
const commonConfig = userStore.getCommonConfigData[configKey] || ''
let configValue = ''
if (configData) {
configValue = configData.soleSettings === '1' ? configData[configKey] || '' : `${commonConfig},${configData[configKey]}`
}
//去掉末尾逗号
configValue = configValue.replace(/,$/, '')
const filteredList = list.filter((item) => new Set(configValue.split(',')).has(item.value))
return configValue ? filteredList : list
}
/**
* 权限航司下拉框数据
* @param {String} permissionName 模块名
* @returns {Array}
*/
export const getAirlineSelect = (permissionName) => {
const baseStore = useBaseStore()
const list = baseStore.selectList.airlineCodeList.map((z) => ({
value: z.zOP3,
label: z.zOP3 + z.shortName
}))
return getFilteredList(permissionName, list, 'airline')
}
/**
* 权限机型下拉框数据
* @param {String} permissionName 模块名
* @returns {Array}
*/
export const getTypeSelect = (permissionName) => {
const baseStore = useBaseStore()
const list = baseStore.selectList.typeList.map((a) => ({
label: a,
value: a
}))
return getFilteredList(permissionName, list, 'acType')
}
/**
* 权限航站下拉框数据
* @param {String} permissionName 模块名
* @returns {Array}
*/
export const getTerminalSelect = (permissionName) => {
const baseStore = useBaseStore()
const list = baseStore.selectList.terminalList?.map((z) => ({
value: z.terminalCode,
label: z.terminalCity + '-' + z.terminalName + '-' + z.terminalCode
}))
return getFilteredList(permissionName, list, 'airport')
}
...@@ -3,8 +3,8 @@ import Day from './dayjs' ...@@ -3,8 +3,8 @@ import Day from './dayjs'
/** /**
* 时间戳格式化 * 时间戳格式化
* 1715072168340 => 2024-05-07 16:56:08 * 1715072168340 => 2024-05-07 16:56:08 星期二
* format=YYYY/MM/DD HH:mm:ss * format=YYYY/MM/DD HH:mm:ss dddd
*/ */
export const timeStampFormat = (timeStamp, opt) => { export const timeStampFormat = (timeStamp, opt) => {
if (!timeStamp || timeStamp == -1 || timeStamp == '-1' || timeStamp == 0 || timeStamp == '0') { if (!timeStamp || timeStamp == -1 || timeStamp == '-1' || timeStamp == 0 || timeStamp == '0') {
...@@ -135,3 +135,26 @@ export const validateParameters = (...params) => { ...@@ -135,3 +135,26 @@ export const validateParameters = (...params) => {
// 如果没有任何参数被填写,那么也是有效的 // 如果没有任何参数被填写,那么也是有效的
return true return true
} }
/**
* 判断是否是base64图片
* @param {*} url
*/
export const isBase64Image = (url) => {
// 正则表达式匹配 Base64 图片的格式
const base64ImageRegex =
/^data:image\/(png|jpg|jpeg|gif|bmp|webp|svg+xml|tiff);base64,([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/
// 检查是否符合 Base64 图片的格式
if (!base64ImageRegex.test(url)) {
return false
}
// 提取 Base64 部分并尝试解码验证
const base64Data = url.split(',')[1]
try {
atob(base64Data) // 尝试解码
return true
} catch (e) {
return false
}
}
...@@ -852,6 +852,78 @@ ...@@ -852,6 +852,78 @@
"style": { "style": {
"navigationBarTitleText": "防沙尘暴签署单" "navigationBarTitleText": "防沙尘暴签署单"
} }
},
{
"path": "pages/modules/mocp/panel/unplanWarning/list",
"style": {
"navigationBarTitleText": "非计划预警"
}
},
{
"path": "pages/modules/mocp/panel/unplanWarning/search",
"style": {
"navigationBarTitleText": "筛选"
}
},
{
"path": "pages/modules/mocp/panel/unplanWarning/add",
"style": {
"navigationBarTitleText": "新建非计划预警"
}
},
{
"path": "pages/modules/mocp/panel/unplanWarning/details",
"style": {
"navigationBarTitleText": "非计划预警详情"
}
},
{
"path": "pages/modules/mocp/panel/unplanApply/list",
"style": {
"navigationBarTitleText": "非计划申请"
}
},
{
"path": "pages/modules/mocp/panel/unplanApply/search",
"style": {
"navigationBarTitleText": "筛选"
}
},
{
"path": "pages/modules/mocp/panel/unplanApply/add",
"style": {
"navigationBarTitleText": "新建非计划申请"
}
},
{
"path": "pages/modules/mocp/panel/unplanApply/details",
"style": {
"navigationBarTitleText": "非计划申请详情"
}
},
{
"path": "pages/modules/mocp/panel/dutyLog/list",
"style": {
"navigationBarTitleText": "海技值班"
}
},
{
"path": "pages/modules/mocp/panel/dutyLog/search",
"style": {
"navigationBarTitleText": "筛选"
}
},
{
"path": "pages/modules/mocp/panel/dutyLog/edit",
"style": {
"navigationBarTitleText": "海技值班详情"
}
},
{
"path": "pages/modules/mocp/panel/dutyLog/details",
"style": {
"navigationBarTitleText": "海技值班详情"
}
} }
], ],
"globalStyle": { "globalStyle": {
......
...@@ -46,6 +46,7 @@ import { onLoad } from '@dcloudio/uni-app' ...@@ -46,6 +46,7 @@ import { onLoad } from '@dcloudio/uni-app'
import { ref, toRaw, watch } from 'vue' import { ref, toRaw, watch } from 'vue'
import useUserStore from 'mocp/store/user' import useUserStore from 'mocp/store/user'
import { loginApi } from 'mocp/api/user' import { loginApi } from 'mocp/api/user'
import { getConfigDataApi, getSeatPermissionApi, getUserSeatListApi } from 'mocp/api/system'
watch( watch(
() => loginForm.username, () => loginForm.username,
...@@ -55,8 +56,9 @@ watch( ...@@ -55,8 +56,9 @@ watch(
} }
}, 500) }, 500)
) )
const userStore = useUserStore()
onLoad(() => { onLoad(() => {
userStore.resetUserInfo()
loginForm.verifyCode = '' loginForm.verifyCode = ''
getGifCaptcha() getGifCaptcha()
loginAmms() loginAmms()
...@@ -64,18 +66,65 @@ onLoad(() => { ...@@ -64,18 +66,65 @@ onLoad(() => {
//登录 //登录
const loading = ref(false) const loading = ref(false)
const userStore = useUserStore()
const handleLogin = async () => { const handleLogin = async () => {
await loginFormRef.value?.validate() await loginFormRef.value?.validate()
try {
uni.showLoading({
title: '登陆中...',
mask: true
})
loading.value = true loading.value = true
const res = await loginApi(toRaw(loginForm), { loading: '登陆中...' }) await login()
if (userStore.token) {
//加入席位权限
await getUserSeatList()
if (userStore.seatId) {
await Promise.all([getSeatPermission(), getConfigData()])
} else {
userStore.setState('seatPermission', [])
}
//跳转工作台
uni.$mocpJump.redirectTo('/tab/index')
}
} catch (error) {
uni.$mocpMessage.error('登录失败')
} finally {
uni.hideLoading()
loading.value = false loading.value = false
}
}
//获取登录信息
const login = async () => {
const res = await loginApi(toRaw(loginForm))
if (res.code == 200) { if (res.code == 200) {
userStore.setUserInfo(res.data) userStore.setUserInfo(res.data)
} else { } else {
uni.$mocpMessage.error(res.message) uni.$mocpMessage.error(res.message)
} }
} }
//获取席位信息
const getUserSeatList = async () => {
const res = await getUserSeatListApi({ seatScene: '2' })
if (res.code == 200) {
if (res.data?.list?.length > 0) {
userStore.setState('seatId', res.data.list[0].id)
}
}
}
//获取操作权限
const getSeatPermission = async () => {
const res = await getSeatPermissionApi({ seatId: userStore.seatId })
if (res.code == 200) {
userStore.setState('seatPermission', res.data)
}
}
//获取数据权限
const getConfigData = async () => {
const res = await getConfigDataApi({ seatId: userStore.seatId })
if (res.code == 200) {
userStore.setState('configData', res.data)
}
}
//接入amms //接入amms
const loginAmms = () => { const loginAmms = () => {
const ammsToken = uni.getStorageSync('access_token') const ammsToken = uni.getStorageSync('access_token')
......
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
<global-page <global-page
:padding="24" :padding="24"
title="航站不正常事件详情" title="航站不正常事件详情"
:showFooterBtn="details.state == 0" :showFooterBtn="details.state == 0 && checkPermi('/terminalQualityManagement/audit')"
:footerBtnText="getFooterTxt" :footerBtnText="getFooterTxt"
@handleFooterClick="handleFooterClick" @handleFooterClick="handleFooterClick"
:showNavRight="auditLabel != '审核通过'" :showNavRight="auditLabel != '审核通过' && checkPermi('/terminalQualityManagement/edit')"
@handleRightClick="navigateTo('/panel/abnormalEventManage/edit')" @handleRightClick="navigateTo('/panel/abnormalEventManage/edit')"
> >
<view class="mocp-cell" v-if="details"> <view class="mocp-cell" v-if="details">
...@@ -21,14 +21,14 @@ ...@@ -21,14 +21,14 @@
<up-cell title="责任人" :value="details.personLiable || '-'" /> <up-cell title="责任人" :value="details.personLiable || '-'" />
<up-cell title="机号" :value="details.machineNumber || '-'" /> <up-cell title="机号" :value="details.machineNumber || '-'" />
<up-cell title="机型" :value="details.model || '-'" /> <up-cell title="机型" :value="details.model || '-'" />
<up-cell title="航司" :value="useGetDictByValue('', details.aviation, { data: baseStore.getAirlineSelect })" /> <up-cell title="航司" :value="useGetDictByValue('', details.aviation, { data: getAirlineSelect() })" />
<up-cell title="事件描述" :label="details.eventDescription || '-'" /> <up-cell title="事件描述" :label="details.eventDescription || '-'" />
<up-cell title="问题点" :value="details.problemPoints || '-'" /> <up-cell title="问题点" :value="details.problemPoints || '-'" />
<up-cell title="类别" :value="getParamNameByValue('EventCategory', details.category)" /> <up-cell title="类别" :value="getParamNameByValue('EventCategory', details.category)" />
<up-cell title="扣分情况" :value="details.pointsDeduction || '-'" /> <up-cell title="扣分情况" :value="details.pointsDeduction || '-'" />
<up-cell title="接报日期" :value="timeStampFormat(details.occurrenceTime, { format: 'YYYY/MM/DD' }) || '-'" /> <up-cell title="接报日期" :value="timeStampFormat(details.occurrenceTime, { format: 'YYYY/MM/DD' }) || '-'" />
<up-cell title="调查单位" :value="details.surveyUnit || '-'" /> <up-cell title="调查单位" :value="details.surveyUnit || '-'" />
<up-cell title="事件性质" :value="getParamNameByValue('EventProperty', details.source)" /> <up-cell title="事件性质" :value="getParamNameByValue('EventProperty', details.eventProperty)" />
<up-cell title="备注" :label="details.remake || '-'" /> <up-cell title="备注" :label="details.remake || '-'" />
<up-cell title="调查已反馈" :value="useGetDictByValue('aem_surveyListSelect2', details.survey)" /> <up-cell title="调查已反馈" :value="useGetDictByValue('aem_surveyListSelect2', details.survey)" />
<up-cell title="附件"> <up-cell title="附件">
...@@ -88,14 +88,13 @@ ...@@ -88,14 +88,13 @@
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams' import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import useAbnormalEventManageStore from 'mocp/store/abnormalEventManage' import useAbnormalEventManageStore from 'mocp/store/abnormalEventManage'
import useBaseStore from 'mocp/store/base'
import { timeStampFormat } from 'mocp/utils/tool' import { timeStampFormat } from 'mocp/utils/tool'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { computed, ref } from 'vue' import { computed, ref } from 'vue'
import { navigateTo } from 'mocp/utils/jump' import { navigateTo } from 'mocp/utils/jump'
import { reviewedAdverseEventsApi } from 'mocp/api/abnormalEventManage' import { reviewedAdverseEventsApi } from 'mocp/api/abnormalEventManage'
import { checkPermi, getAirlineSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore()
const abnormalEventManageStore = useAbnormalEventManageStore() const abnormalEventManageStore = useAbnormalEventManageStore()
const { details } = storeToRefs(abnormalEventManageStore) const { details } = storeToRefs(abnormalEventManageStore)
const auditLabel = computed(() => { const auditLabel = computed(() => {
...@@ -141,6 +140,6 @@ const showConfirm = ref(false) ...@@ -141,6 +140,6 @@ const showConfirm = ref(false)
} }
.mocp-title { .mocp-title {
padding: 0 32rpx 24rpx 32rpx; padding: 0 32rpx 24rpx 32rpx;
background-color: #f7f8fa; background-color: $mocp-fill-1;
} }
</style> </style>
...@@ -10,16 +10,10 @@ ...@@ -10,16 +10,10 @@
<view class="mocp-form"> <view class="mocp-form">
<up-form ref="formRef" labelPosition="left" labelWidth="auto" :model="formData" :rules="rules"> <up-form ref="formRef" labelPosition="left" labelWidth="auto" :model="formData" :rules="rules">
<up-form-item label="事件来源" prop="source" :borderBottom="true" required> <up-form-item label="事件来源" prop="source" :borderBottom="true" required>
<global-picker v-model="formData.source" pickAlign="right" :options="getParamsByType('EventResource')" clearable></global-picker> <global-picker v-model="formData.source" pickAlign="right" paramsType="EventResource" clearable></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航站" prop="terminalCode" :borderBottom="true" required> <up-form-item label="航站" prop="terminalCode" :borderBottom="true" required>
<global-picker <global-picker pickAlign="right" v-model="formData.terminalCode" clearable :options="getTerminalSelect()" filter></global-picker>
pickAlign="right"
v-model="formData.terminalCode"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="责任单位" prop="repairUnit" :borderBottom="true" required> <up-form-item label="责任单位" prop="repairUnit" :borderBottom="true" required>
<global-picker v-model="formData.repairUnit" pickAlign="right" :options="repairUnitList" clearable filter></global-picker> <global-picker v-model="formData.repairUnit" pickAlign="right" :options="repairUnitList" clearable filter></global-picker>
...@@ -58,7 +52,7 @@ ...@@ -58,7 +52,7 @@
:placeholder="formData.aviation ? '' : '请选择机号自动关联'" :placeholder="formData.aviation ? '' : '请选择机号自动关联'"
> >
<template #suffix> <template #suffix>
{{ useGetDictByValue('', formData.aviation, { data: baseStore.getAirlineSelect }) || '-' }} {{ useGetDictByValue('', formData.aviation, { data: getAirlineSelect() }) || '-' }}
</template> </template>
</up-input> </up-input>
</up-form-item> </up-form-item>
...@@ -69,12 +63,7 @@ ...@@ -69,12 +63,7 @@
<up-input v-model="formData.problemPoints" border="none" inputAlign="right" placeholder="请输入" clearable></up-input> <up-input v-model="formData.problemPoints" border="none" inputAlign="right" placeholder="请输入" clearable></up-input>
</up-form-item> </up-form-item>
<up-form-item label="类别" prop="category" :borderBottom="true" required> <up-form-item label="类别" prop="category" :borderBottom="true" required>
<global-picker <global-picker v-model="formData.category" pickAlign="right" clearable paramsType="EventCategory"></global-picker>
v-model="formData.category"
pickAlign="right"
clearable
:options="getParamsByType('EventCategory')"
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="扣分情况" prop="pointsDeduction" :borderBottom="true" required> <up-form-item label="扣分情况" prop="pointsDeduction" :borderBottom="true" required>
<up-input <up-input
...@@ -100,12 +89,7 @@ ...@@ -100,12 +89,7 @@
<up-input v-model="formData.surveyUnit" border="none" inputAlign="right" placeholder="请输入" clearable></up-input> <up-input v-model="formData.surveyUnit" border="none" inputAlign="right" placeholder="请输入" clearable></up-input>
</up-form-item> </up-form-item>
<up-form-item label="事件性质" prop="eventProperty" :borderBottom="true" required> <up-form-item label="事件性质" prop="eventProperty" :borderBottom="true" required>
<global-picker <global-picker v-model="formData.eventProperty" pickAlign="right" paramsType="EventProperty" clearable></global-picker>
v-model="formData.eventProperty"
pickAlign="right"
:options="getParamsByType('EventProperty')"
clearable
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="备注" prop="remake" :borderBottom="true" labelPosition="top"> <up-form-item label="备注" prop="remake" :borderBottom="true" labelPosition="top">
<up-textarea v-model.trim="formData.remake" placeholder="请输入" :height="40" border="none"></up-textarea> <up-textarea v-model.trim="formData.remake" placeholder="请输入" :height="40" border="none"></up-textarea>
...@@ -190,13 +174,12 @@ import { onLoad } from '@dcloudio/uni-app' ...@@ -190,13 +174,12 @@ import { onLoad } from '@dcloudio/uni-app'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import useBaseStore from 'mocp/store/base' import useBaseStore from 'mocp/store/base'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
import { correctiveAttaFileVoList, formData, formRef, rules, surveyAttaFileVoList } from './constants/edit.compositions' import { correctiveAttaFileVoList, formData, formRef, rules, surveyAttaFileVoList } from './constants/edit.compositions'
import useAbnormalEventManageStore from 'mocp/store/abnormalEventManage' import useAbnormalEventManageStore from 'mocp/store/abnormalEventManage'
import { changeAc, getSurveyAttaFileVoList, getCorrectiveAtta, resetData } from './constants/edit.functionals' import { changeAc, getSurveyAttaFileVoList, getCorrectiveAtta, resetData } from './constants/edit.functionals'
import { updateAdverseEventsApi } from 'mocp/api/abnormalEventManage' import { updateAdverseEventsApi } from 'mocp/api/abnormalEventManage'
import { getAirlineSelect, getTerminalSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore()
//获取下拉框选项 //获取下拉框选项
const { const {
selectList: { deviceNumList, repairUnitList } selectList: { deviceNumList, repairUnitList }
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<view class="right"> <view class="right">
<text class="txt u-line-1" v-if="item.terminal">{{ item.terminal }}</text> <text class="txt u-line-1" v-if="item.terminal">{{ item.terminal }}</text>
<text class="txt u-line-1" v-if="item.aviation"> <text class="txt u-line-1" v-if="item.aviation">
{{ useGetDictByValue('', item.aviation, { data: baseStore.getAirlineSelect }) }} {{ useGetDictByValue('', item.aviation, { data: getAirlineSelect() }) }}
</text> </text>
</view> </view>
</view> </view>
...@@ -55,10 +55,9 @@ import { storeToRefs } from 'pinia' ...@@ -55,10 +55,9 @@ import { storeToRefs } from 'pinia'
import { onUnload } from '@dcloudio/uni-app' import { onUnload } from '@dcloudio/uni-app'
import useAbnormalEventManageStore from 'mocp/store/abnormalEventManage' import useAbnormalEventManageStore from 'mocp/store/abnormalEventManage'
import { getAdverseEventsListApi } from 'mocp/api/abnormalEventManage' import { getAdverseEventsListApi } from 'mocp/api/abnormalEventManage'
import useBaseStore from 'mocp/store/base'
import { rowClassName } from './constants/list.functionals' import { rowClassName } from './constants/list.functionals'
import { getAirlineSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore()
//跳转 //跳转
const abnormalEventManageStore = useAbnormalEventManageStore() const abnormalEventManageStore = useAbnormalEventManageStore()
const { searchData } = storeToRefs(abnormalEventManageStore) const { searchData } = storeToRefs(abnormalEventManageStore)
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="state" :borderBottom="true"> <up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker v-model="formData.state" pickAlign="right" clearable dictkey="aem_state"></global-picker> <global-picker v-model="formData.state" pickAlign="right" clearable dictkey="aem_state"></global-picker>
...@@ -10,7 +9,7 @@ ...@@ -10,7 +9,7 @@
pickAlign="right" pickAlign="right"
v-model="formData.terminalCode" v-model="formData.terminalCode"
clearable clearable
:options="baseStore.getTerminalSelect" :options="getTerminalSelect('航站管理-航站质量管理')"
filter filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
...@@ -21,7 +20,7 @@ ...@@ -21,7 +20,7 @@
<global-picker <global-picker
v-model="formData.aviation" v-model="formData.aviation"
pickAlign="right" pickAlign="right"
:options="baseStore.getAirlineSelect" :options="getAirlineSelect('航站管理-航站质量管理')"
clearable clearable
filter filter
></global-picker> ></global-picker>
...@@ -46,12 +45,7 @@ ...@@ -46,12 +45,7 @@
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="类别" prop="category" :borderBottom="true"> <up-form-item label="类别" prop="category" :borderBottom="true">
<global-picker <global-picker v-model="formData.category" pickAlign="right" paramsType="EventCategory" clearable></global-picker>
v-model="formData.category"
pickAlign="right"
:options="getParamsByType('EventCategory')"
clearable
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="扣分范围" :borderBottom="true"> <up-form-item label="扣分范围" :borderBottom="true">
<view style="display: flex; align-items: center"> <view style="display: flex; align-items: center">
...@@ -61,12 +55,7 @@ ...@@ -61,12 +55,7 @@
</view> </view>
</up-form-item> </up-form-item>
<up-form-item label="事件性质" prop="eventProperty" :borderBottom="true"> <up-form-item label="事件性质" prop="eventProperty" :borderBottom="true">
<global-picker <global-picker v-model="formData.eventProperty" pickAlign="right" paramsType="EventProperty" clearable></global-picker>
v-model="formData.eventProperty"
pickAlign="right"
:options="getParamsByType('EventProperty')"
clearable
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="处理人" prop="handledBy" :borderBottom="true"> <up-form-item label="处理人" prop="handledBy" :borderBottom="true">
<up-input v-model="formData.handledBy" inputAlign="right" border="none" placeholder="请输入" clearable></up-input> <up-input v-model="formData.handledBy" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
...@@ -75,18 +64,7 @@ ...@@ -75,18 +64,7 @@
<global-picker v-model="formData.reviewedState" pickAlign="right" clearable dictkey="aem_auditListSelect"></global-picker> <global-picker v-model="formData.reviewedState" pickAlign="right" clearable dictkey="aem_auditListSelect"></global-picker>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -95,10 +73,9 @@ import { storeToRefs } from 'pinia' ...@@ -95,10 +73,9 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useAbnormalEventManageStore from 'mocp/store/abnormalEventManage' import useAbnormalEventManageStore from 'mocp/store/abnormalEventManage'
import { getParamsByType } from 'mocp/hooks/use-params/useParams' import { getAirlineSelect, getTerminalSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore()
const { const {
selectList: { repairUnitList } selectList: { repairUnitList }
} = useBaseStore() } = useBaseStore()
...@@ -117,13 +94,4 @@ const handleConfirm = () => { ...@@ -117,13 +94,4 @@ const handleConfirm = () => {
uni.$emit('abnormalEventManageReload') uni.$emit('abnormalEventManageReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<template> <template>
<global-page title="AOG施工详情" showFooterBtn footerBtnText="修改状态" @handleFooterClick="handleFooterClick"> <global-page
title="AOG施工详情"
:showFooterBtn="checkPermi('/AOGManagement/editStatus')"
footerBtnText="修改状态"
@handleFooterClick="handleFooterClick"
>
<view class="mocp-cell"> <view class="mocp-cell">
<up-cell-group v-if="getBbDetails"> <up-cell-group v-if="getBbDetails">
<up-cell title="负责人" :value="getBbDetails.personLiable || '-'"></up-cell> <up-cell title="负责人" :value="getBbDetails.personLiable || '-'"></up-cell>
...@@ -30,8 +35,8 @@ ...@@ -30,8 +35,8 @@
showCancelButton showCancelButton
closeOnClickOverlay closeOnClickOverlay
@confirm="updateAogConstruction" @confirm="updateAogConstruction"
@cancel="show = false" @cancel="showConfirm = false"
@close="show = false" @close="showConfirm = false"
></up-modal> ></up-modal>
</global-page> </global-page>
</template> </template>
...@@ -41,6 +46,7 @@ import { storeToRefs } from 'pinia' ...@@ -41,6 +46,7 @@ import { storeToRefs } from 'pinia'
import useAogStore from 'mocp/store/aog' import useAogStore from 'mocp/store/aog'
import { ref } from 'vue' import { ref } from 'vue'
import { updateAogConstructionApi } from 'mocp/api/aog' import { updateAogConstructionApi } from 'mocp/api/aog'
import { checkPermi } from 'mocp/utils/permission'
const aogStore = useAogStore() const aogStore = useAogStore()
const { getBbDetails, details } = storeToRefs(aogStore) const { getBbDetails, details } = storeToRefs(aogStore)
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<text class="txt u-line-1" v-if="details.machineNumber">{{ details.machineNumber }}</text> <text class="txt u-line-1" v-if="details.machineNumber">{{ details.machineNumber }}</text>
<text class="txt u-line-1" v-if="details.model">{{ details.model }}</text> <text class="txt u-line-1" v-if="details.model">{{ details.model }}</text>
<text class="txt u-line-1" v-if="details.aviation"> <text class="txt u-line-1" v-if="details.aviation">
{{ useGetDictByValue('', details.aviation, { data: baseStore.getAirlineSelect }) }} {{ useGetDictByValue('', details.aviation, { data: getAirlineSelect() }) }}
</text> </text>
</view> </view>
<view class="right"> <view class="right">
...@@ -73,11 +73,10 @@ import { storeToRefs } from 'pinia' ...@@ -73,11 +73,10 @@ import { storeToRefs } from 'pinia'
import { timeStampFormat } from 'mocp/utils/tool' import { timeStampFormat } from 'mocp/utils/tool'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import useAogStore from 'mocp/store/aog' import useAogStore from 'mocp/store/aog'
import useBaseStore from 'mocp/store/base'
import { onLoad } from '@dcloudio/uni-app' import { onLoad } from '@dcloudio/uni-app'
import { nextTick } from 'vue' import { nextTick } from 'vue'
import { getAirlineSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore()
const aogStore = useAogStore() const aogStore = useAogStore()
const { getWorkBenchList, getAogDisposalPlan, getAogMaterialList, getAogSupBase, getAogConstruction, getAogOtherSup } = aogStore const { getWorkBenchList, getAogDisposalPlan, getAogMaterialList, getAogSupBase, getAogConstruction, getAogOtherSup } = aogStore
const { details, disposalPlan, workBench, materialType } = storeToRefs(aogStore) const { details, disposalPlan, workBench, materialType } = storeToRefs(aogStore)
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
<text class="txt u-line-1" v-if="item.machineNumber">{{ item.machineNumber }}</text> <text class="txt u-line-1" v-if="item.machineNumber">{{ item.machineNumber }}</text>
<text class="txt u-line-1" v-if="item.model">{{ item.model }}</text> <text class="txt u-line-1" v-if="item.model">{{ item.model }}</text>
<text class="txt u-line-1" v-if="item.aviation"> <text class="txt u-line-1" v-if="item.aviation">
{{ useGetDictByValue('', item.aviation, { data: baseStore.getAirlineSelect }) }} {{ useGetDictByValue('', item.aviation, { data: getAirlineSelect() }) }}
</text> </text>
</view> </view>
<view class="right"> <view class="right">
...@@ -49,9 +49,8 @@ import { storeToRefs } from 'pinia' ...@@ -49,9 +49,8 @@ import { storeToRefs } from 'pinia'
import { onUnload } from '@dcloudio/uni-app' import { onUnload } from '@dcloudio/uni-app'
import useAogStore from 'mocp/store/aog' import useAogStore from 'mocp/store/aog'
import { getAogListApi } from 'mocp/api/aog' import { getAogListApi } from 'mocp/api/aog'
import useBaseStore from 'mocp/store/base' import { getAirlineSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore()
//跳转 //跳转
const aogStore = useAogStore() const aogStore = useAogStore()
const { searchData } = storeToRefs(aogStore) const { searchData } = storeToRefs(aogStore)
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="state" :borderBottom="true"> <up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker v-model="formData.state" pickAlign="right" clearable dictkey="aog_state"></global-picker> <global-picker v-model="formData.state" pickAlign="right" clearable dictkey="aog_state"></global-picker>
...@@ -9,13 +8,19 @@ ...@@ -9,13 +8,19 @@
<global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter></global-picker> <global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="model" :borderBottom="true"> <up-form-item label="机型" prop="model" :borderBottom="true">
<global-picker v-model="formData.model" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker> <global-picker
v-model="formData.model"
pickAlign="right"
:options="getTypeSelect('AOG管理-AOG列表')"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="aviation" :borderBottom="true"> <up-form-item label="航司" prop="aviation" :borderBottom="true">
<global-picker <global-picker
v-model="formData.aviation" v-model="formData.aviation"
pickAlign="right" pickAlign="right"
:options="baseStore.getAirlineSelect" :options="getAirlineSelect('AOG管理-AOG列表')"
clearable clearable
filter filter
></global-picker> ></global-picker>
...@@ -25,20 +30,23 @@ ...@@ -25,20 +30,23 @@
pickAlign="right" pickAlign="right"
v-model="formData.terminal" v-model="formData.terminal"
clearable clearable
:options="baseStore.getTerminalSelect" :options="getTerminalSelect('AOG管理-AOG列表')"
filter filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="专业类别" prop="major" :borderBottom="true"> <up-form-item label="专业类别" prop="major" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.major" clearable :options="getParamsByType('MajorCategory')"></global-picker> <global-picker pickAlign="right" v-model="formData.major" clearable paramsType="MajorCategory"></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="AOG级别" prop="aogLevel" :borderBottom="true"> <up-form-item label="AOG级别" prop="aogLevel" :borderBottom="true">
<global-picker <global-picker
pickAlign="right" pickAlign="right"
v-model="formData.aogLevel" v-model="formData.aogLevel"
clearable clearable
:options="baseStore.getTerminalSelect" :options="[
filter { value: 0, label: '红' },
{ value: 1, label: '黄' },
{ value: 2, label: '绿' }
]"
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="发生日期" :borderBottom="true"> <up-form-item label="发生日期" :borderBottom="true">
...@@ -58,30 +66,13 @@ ...@@ -58,30 +66,13 @@
></global-calendar> ></global-calendar>
</up-form-item> </up-form-item>
<up-form-item label="发生地点" prop="happenAddr" :borderBottom="true"> <up-form-item label="发生地点" prop="happenAddr" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.happenAddr" clearable :options="getTerminalSelect()" filter></global-picker>
pickAlign="right"
v-model="formData.happenAddr"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="故障描述" prop="faultDesc" :borderBottom="true"> <up-form-item label="故障描述" prop="faultDesc" :borderBottom="true">
<up-input v-model="formData.faultDesc" inputAlign="right" border="none" placeholder="请输入" clearable></up-input> <up-input v-model="formData.faultDesc" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -90,10 +81,9 @@ import { storeToRefs } from 'pinia' ...@@ -90,10 +81,9 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useAogStore from 'mocp/store/aog' import useAogStore from 'mocp/store/aog'
import { getParamsByType } from 'mocp/hooks/use-params/useParams' import { getAirlineSelect, getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore()
const { const {
selectList: { deviceNumList } selectList: { deviceNumList }
} = useBaseStore() } = useBaseStore()
...@@ -112,13 +102,4 @@ const handleConfirm = () => { ...@@ -112,13 +102,4 @@ const handleConfirm = () => {
uni.$emit('aogReload') uni.$emit('aogReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
{{ details.acType }} {{ details.acType }}
</view> </view>
<view class="txt u-line-1" v-if="details.acOwn"> <view class="txt u-line-1" v-if="details.acOwn">
{{ useGetDictByValue('', details.acOwn, { data: baseStore.getAirlineSelect }) }} {{ useGetDictByValue('', details.acOwn, { data: getAirlineSelect() }) }}
</view> </view>
</view> </view>
<view class="right">{{ timeStampFormat(details.eventTime, { format: 'YYYY/MM/DD' }) }}</view> <view class="right">{{ timeStampFormat(details.eventTime, { format: 'YYYY/MM/DD' }) }}</view>
...@@ -120,10 +120,9 @@ import useAppraisalRecordStore from 'mocp/store/appraisal-record' ...@@ -120,10 +120,9 @@ import useAppraisalRecordStore from 'mocp/store/appraisal-record'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { onLoad } from '@dcloudio/uni-app' import { onLoad } from '@dcloudio/uni-app'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import useBaseStore from 'mocp/store/base' import { getAirlineSelect } from 'mocp/utils/permission'
const query = defineProps(['id']) const query = defineProps(['id'])
const baseStore = useBaseStore()
const appraisalRecordStore = useAppraisalRecordStore() const appraisalRecordStore = useAppraisalRecordStore()
const { details, getFileList } = storeToRefs(appraisalRecordStore) const { details, getFileList } = storeToRefs(appraisalRecordStore)
onLoad(() => { onLoad(() => {
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto" :model="formData"> <up-form labelPosition="left" labelWidth="auto" :model="formData">
<up-form-item label="状态" prop="status" :borderBottom="true"> <up-form-item label="状态" prop="status" :borderBottom="true">
<global-picker <global-picker
...@@ -45,18 +44,7 @@ ...@@ -45,18 +44,7 @@
></global-calendar> ></global-calendar>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -88,13 +76,4 @@ const handleConfirm = () => { ...@@ -88,13 +76,4 @@ const handleConfirm = () => {
uni.$emit('appraisalRecordReload') uni.$emit('appraisalRecordReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
.form { .form {
&-title { &-title {
padding: 20rpx 32rpx; padding: 20rpx 32rpx;
background: #f7f8fa; background: $mocp-fill-1;
color: $mocp-text-5; color: $mocp-text-5;
} }
&-item { &-item {
......
...@@ -22,12 +22,7 @@ ...@@ -22,12 +22,7 @@
</view> </view>
</up-form-item> </up-form-item>
<up-form-item label="应用分类" :borderBottom="true" prop="appType" required> <up-form-item label="应用分类" :borderBottom="true" prop="appType" required>
<global-picker <global-picker pickAlign="right" v-model="formData.appType" clearable paramsType="ApplicationType"></global-picker>
pickAlign="right"
v-model="formData.appType"
clearable
:options="getParamsByType('ApplicationType')"
></global-picker>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </view>
...@@ -40,7 +35,6 @@ import useAssignWorkStore from 'mocp/store/assign-work' ...@@ -40,7 +35,6 @@ import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { onLoad } from '@dcloudio/uni-app' import { onLoad } from '@dcloudio/uni-app'
import { savaFollowUpFeedbackApi } from 'mocp/api/assign-work' import { savaFollowUpFeedbackApi } from 'mocp/api/assign-work'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const assignWorkStore = useAssignWorkStore() const assignWorkStore = useAssignWorkStore()
const { arrangeWorkExtend } = storeToRefs(assignWorkStore) const { arrangeWorkExtend } = storeToRefs(assignWorkStore)
......
...@@ -6,12 +6,7 @@ ...@@ -6,12 +6,7 @@
<up-textarea v-model="formData.trackingPoints" placeholder="请输入" :height="40" border="none"></up-textarea> <up-textarea v-model="formData.trackingPoints" placeholder="请输入" :height="40" border="none"></up-textarea>
</up-form-item> </up-form-item>
<up-form-item label="事件类型" :borderBottom="true" prop="eventType" required> <up-form-item label="事件类型" :borderBottom="true" prop="eventType" required>
<global-picker <global-picker pickAlign="right" v-model="formData.eventType" clearable paramsType="LayoutEventType"></global-picker>
pickAlign="right"
v-model="formData.eventType"
clearable
:options="getParamsByType('LayoutEventType')"
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="重复/同类事件" :borderBottom="true" prop="validateType" required> <up-form-item label="重复/同类事件" :borderBottom="true" prop="validateType" required>
<global-checkbox checkboxAlign="right" v-model="formData.validateType" dictkey="aw_validateType"></global-checkbox> <global-checkbox checkboxAlign="right" v-model="formData.validateType" dictkey="aw_validateType"></global-checkbox>
...@@ -39,7 +34,6 @@ import useAssignWorkStore from 'mocp/store/assign-work' ...@@ -39,7 +34,6 @@ import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { onLoad } from '@dcloudio/uni-app' import { onLoad } from '@dcloudio/uni-app'
import { savaWorkValidateApi } from 'mocp/api/assign-work' import { savaWorkValidateApi } from 'mocp/api/assign-work'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const assignWorkStore = useAssignWorkStore() const assignWorkStore = useAssignWorkStore()
const { arrangeWorkExtend } = storeToRefs(assignWorkStore) const { arrangeWorkExtend } = storeToRefs(assignWorkStore)
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto" :model="formData" ref="formRef"> <up-form labelPosition="left" labelWidth="auto" :model="formData" ref="formRef">
<up-form-item label="任务状态" prop="state" :borderBottom="true"> <up-form-item label="任务状态" prop="state" :borderBottom="true">
<global-picker <global-picker
...@@ -26,12 +25,7 @@ ...@@ -26,12 +25,7 @@
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="工作类型" prop="workType" :borderBottom="true"> <up-form-item label="工作类型" prop="workType" :borderBottom="true">
<global-picker <global-picker v-model="formData.workType" pickAlign="right" paramsType="LayoutWorkType" clearable></global-picker>
v-model="formData.workType"
pickAlign="right"
:options="getParamsByType('LayoutWorkType')"
clearable
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="开始日期" :borderBottom="true"> <up-form-item label="开始日期" :borderBottom="true">
<global-calendar <global-calendar
...@@ -42,18 +36,7 @@ ...@@ -42,18 +36,7 @@
></global-calendar> ></global-calendar>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -61,7 +44,6 @@ import useAssignWorkStore from 'mocp/store/assign-work' ...@@ -61,7 +44,6 @@ import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
//获取下拉框选项 //获取下拉框选项
const assignWorkStore = useAssignWorkStore() const assignWorkStore = useAssignWorkStore()
...@@ -79,13 +61,4 @@ const handleConfirm = () => { ...@@ -79,13 +61,4 @@ const handleConfirm = () => {
uni.$emit('assignWorkReload') uni.$emit('assignWorkReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
</view> </view>
</view> </view>
</scroll-view> </scroll-view>
<global-empty v-if="!userStore.getHomeMenuList.length"></global-empty>
</view> </view>
</template> </template>
...@@ -55,7 +56,11 @@ const goTo = (url) => { ...@@ -55,7 +56,11 @@ const goTo = (url) => {
} }
//跳转应用中心 //跳转应用中心
const goAppCenter = () => { const goAppCenter = () => {
if (userStore.getMenuList.length > 0) {
uni.$mocpJump.navigateTo('/panel/app-center/index') uni.$mocpJump.navigateTo('/panel/app-center/index')
} else {
uni.$mocpMessage.warning('暂无权限!')
}
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -62,4 +62,7 @@ const goMyToDo = () => { ...@@ -62,4 +62,7 @@ const goMyToDo = () => {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import '../constants/panel-navbar.scss'; @import '../constants/panel-navbar.scss';
:deep(._block) {
display: flex !important;
}
</style> </style>
import { reactive, ref } from 'vue'
export const showAction = ref(false)
export const formRef = ref()
//验证
export const rules = reactive({
dutyManagerUid: [
{
required: true,
message: '请选择值班经理',
trigger: ['blur', 'change']
}
],
monitorLeaderUid: [
{
required: true,
message: '请选择监察领导',
trigger: ['blur', 'change']
}
],
successorManagerUid: [
{
required: true,
message: '请选择接班经理',
trigger: ['blur', 'change']
}
]
})
// 表单数据
export const formData = reactive({
id: '',
dutyManagerUname: '',
dutyManagerUid: '',
successorManagerUname: '',
successorManagerUid: '',
monitorLeaderUname: '',
monitorLeaderUid: '',
reportWork: '',
importantFlight: '',
meetingArrangementWork: '',
handoverWork: '',
dutyDate: undefined,
dutyArea: ''
})
import { updateDutyLogApi } from 'mocp/api/dutyLog'
import { formData, formRef, showAction } from './edit.compositions'
export const resetData = () => {
Object.assign(formData, {
id: '',
dutyManagerUname: '',
dutyManagerUid: '',
successorManagerUname: '',
successorManagerUid: '',
monitorLeaderUname: '',
monitorLeaderUid: '',
reportWork: '',
importantFlight: '',
meetingArrangementWork: '',
handoverWork: '',
dutyDate: undefined,
dutyArea: ''
})
}
export const handleRightClick = async () => {
await formRef.value?.validate()
showAction.value = true
}
//提交表单
export const handleSubmit = async (statusStr) => {
await formRef.value?.validate()
const res = await updateDutyLogApi({ ...formData, statusStr }, { loading: true })
if (res.code == 200) {
uni.$mocpJump.navigateBack()
uni.$mocpMessage.success(res.message)
uni.$emit('dutyLogReload')
uni.$emit('updateDutyLog')
} else {
uni.$mocpMessage.error(res.message)
}
}
<template>
<global-page
title="海技值班详情"
showNavRight
:showNavRight="checkPermi('/dutyLog/edit')"
navRightType="button"
@handleRightClick="navigateTo('/panel/dutyLog/edit')"
>
<template v-if="details">
<view class="mocp-title">
<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="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>
<text>{{ details.reportWork || '-' }}</text>
</template>
</up-cell>
<up-cell title="重要航班">
<template #label>
<text>{{ details.importantFlight || '-' }}</text>
</template>
</up-cell>
<up-cell title="会议布置工作">
<template #label>
<text>{{ details.meetingArrangementWork || '-' }}</text>
</template>
</up-cell>
<up-cell title="交接工作内容">
<template #label>
<text>{{ details.handoverWork || '-' }}</text>
</template>
</up-cell>
</up-cell-group>
</view>
<view class="mocp-cell">
<up-cell-group>
<up-cell title="交班操作时间" :value="timeStampFormat(details.jiaoBanTime) || '-'"></up-cell>
<up-cell title="接班操作时间" :value="timeStampFormat(details.jieBanTime) || '-'"></up-cell>
</up-cell-group>
</view>
</template>
</global-page>
</template>
<script setup>
import { storeToRefs } from 'pinia'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
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'
import { checkPermi } from 'mocp/utils/permission'
const query = defineProps(['id'])
const dutyLogStore = useDutyLogStore()
const { details } = storeToRefs(dutyLogStore)
onLoad(() => {
dutyLogStore.setState('id', query.id)
dutyLogStore.getDetails()
})
uni.$on('updateDutyLog', () => {
dutyLogStore.getDetails()
})
onUnload(() => {
uni.$off('updateDutyLog')
})
</script>
<style lang="scss" scoped>
.mocp-title {
display: flex;
align-items: center;
padding: 0 32rpx 24rpx 32rpx;
background-color: $mocp-fill-1;
.time {
font-size: 34rpx;
margin-right: 16rpx;
}
}
.mocp-cell {
background: #fff;
margin-bottom: 16rpx;
}
.mocp-title {
padding: 0 32rpx 24rpx 32rpx;
background-color: $mocp-fill-1;
}
</style>
<template>
<global-page title="海技值班详情" showNavRight navRightType="button" navRightText="保存" @handleRightClick="handleRightClick">
<view class="mocp-title">
<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="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="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="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="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="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="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="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 { 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'
const dutyLogStore = useDutyLogStore()
const { details } = storeToRefs(dutyLogStore)
onLoad(() => {
resetData()
Object.assign(formData, details.value)
})
</script>
<style lang="scss" scoped>
.mocp-title {
display: flex;
align-items: center;
padding: 0 32rpx 24rpx 32rpx;
background-color: $mocp-fill-1;
.time {
font-size: 34rpx;
margin-right: 16rpx;
}
}
.mocp-form {
background: #fff;
padding: 0 32rpx;
margin-bottom: 16rpx;
}
</style>
<template>
<global-page
title="海技值班"
isDataList
refresherEnabled
loadingMoreEnabled
auto
ref="paging"
:params="searchData"
showNavRight
navRightType="icon"
navRightIcon="saixuan-01"
@handleRightClick="handleRightClick"
: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">{{ timeStampFormat(item.dutyDate, { format: 'YYYY/MM/DD' }) }}</view>
<view class="right">
<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">{{ item.dutyManagerUname || '-' }}</view>
</view>
<view class="mocp-color-text-3 flex-1">
<view>联系电话:</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">{{ 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">{{ item.reportWork }}</view>
</view>
<view class="mocp-color-text-3 mocp-item">
重要航班:
<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">
{{ 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>
</view>
</view>
</template>
</global-page>
</template>
<script setup>
import { ref } from 'vue'
import { storeToRefs } from 'pinia'
import { onUnload } from '@dcloudio/uni-app'
import { timeStampFormat } from 'mocp/utils/tool'
import useDutyLogStore from 'mocp/store/dutyLog'
import { getDutyLogListApi } from 'mocp/api/dutyLog'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
//跳转
const dutyLogStore = useDutyLogStore()
const { searchData } = storeToRefs(dutyLogStore)
const goDetails = (data) => {
uni.$mocpJump.navigateTo('/panel/dutyLog/details', { id: data.id })
}
//筛选
const handleRightClick = () => {
uni.$mocpJump.navigateTo('/panel/dutyLog/search')
}
//刷新
const paging = ref()
uni.$on('dutyLogReload', () => {
paging.value?.reload()
})
onUnload(() => {
uni.$off('dutyLogReload')
})
</script>
<style lang="scss" scoped>
@import 'mocpStatic/css/list.scss';
.item-title {
.left {
font-size: 34rpx;
font-weight: 500;
color: $mocp-text-5;
}
}
.item-content {
.mocp-flex {
display: flex;
}
.flex-1 {
flex: 1;
}
.mocp-list {
margin-top: 16rpx;
.mocp-item {
margin-bottom: 16rpx;
}
}
}
</style>
<template>
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto">
<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="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="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.dutyDateS"
v-model:endTime="formData.dutyDateE"
clearable
></global-calendar>
</up-form-item>
</up-form>
</global-page-search>
</template>
<script setup>
import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
import useDutyLogStore from 'mocp/store/dutyLog'
//获取下拉框选项
const dutyLogStore = useDutyLogStore()
//获取查询表单数据
const { searchData } = storeToRefs(dutyLogStore)
const formData = ref(cloneDeep(searchData.value))
const handleReset = () => {
dutyLogStore.resetForm()
uni.$mocpJump.navigateBack()
uni.$emit('dutyLogReload')
}
const handleConfirm = () => {
dutyLogStore.setState('searchData', formData.value)
uni.$mocpJump.navigateBack()
uni.$emit('dutyLogReload')
}
</script>
<style lang="scss" scoped></style>
<template> <template>
<global-page <global-page
title="新建除防冰收费单" :title="formData.id > 0 ? '编辑除防冰收费单' : '新建除防冰收费单'"
:showNavRight="true" :showNavRight="formData.id > 0 ? false : true"
navRightText="今天签单" navRightText="今天签单"
@handleRightClick="navigateTo('/panel/electronicBill/deicing/list')" @handleRightClick="navigateTo('/panel/electronicBill/deicing/list')"
showFooterBtn showFooterBtn
...@@ -12,22 +12,31 @@ ...@@ -12,22 +12,31 @@
<view class="mocp-title">基本信息</view> <view class="mocp-title">基本信息</view>
<view class="mocp-form"> <view class="mocp-form">
<up-form-item label="航站" prop="station" :borderBottom="true" required> <up-form-item label="航站" prop="station" :borderBottom="true" required>
<global-picker <global-picker pickAlign="right" v-model="formData.station" clearable :options="getTerminalSelect()" filter></global-picker>
pickAlign="right"
v-model="formData.station"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="日期" prop="date" :borderBottom="true" required> <up-form-item label="日期" prop="date" :borderBottom="true" required>
<global-date pickAlign="right" clearable v-model="formData.date" defaultToday></global-date> <global-date pickAlign="right" clearable v-model="formData.date" defaultToday></global-date>
</up-form-item> </up-form-item>
<up-form-item label="机号" prop="acreg" :borderBottom="true" required> <up-form-item label="机号" prop="acreg" :borderBottom="true" required>
<global-picker pickAlign="right" v-model="formData.acreg" :options="allAc" clearable filter @change="changeAcreg"></global-picker> <global-picker
pickAlign="right"
v-model="formData.acreg"
:options="allAc"
clearable
filter
customize
@change="changeAcreg"
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="飞机所属单位" prop="aircaraftoperator" :borderBottom="true" required> <up-form-item label="飞机所属单位" prop="aircaraftoperator" :borderBottom="true" required>
<global-picker pickAlign="right" v-model="formData.aircaraftoperator" :options="allAirline" clearable filter></global-picker> <global-picker
pickAlign="right"
v-model="formData.aircaraftoperator"
:options="allAirline"
clearable
filter
customize
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="保障单位" prop="guaranteeUnit" :borderBottom="true" required> <up-form-item label="保障单位" prop="guaranteeUnit" :borderBottom="true" required>
<global-picker pickAlign="right" v-model="formData.guaranteeUnit" dictkey="eb_guaranteeUnit" clearable></global-picker> <global-picker pickAlign="right" v-model="formData.guaranteeUnit" dictkey="eb_guaranteeUnit" clearable></global-picker>
...@@ -36,7 +45,7 @@ ...@@ -36,7 +45,7 @@
<global-picker pickAlign="right" v-model="formData.weatherToday" dictkey="eb_weatherToday" clearable></global-picker> <global-picker pickAlign="right" v-model="formData.weatherToday" dictkey="eb_weatherToday" clearable></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="model" :borderBottom="true" required> <up-form-item label="机型" prop="model" :borderBottom="true" required>
<global-picker v-model="formData.model" pickAlign="right" :options="allAcType" clearable filter></global-picker> <global-picker v-model="formData.model" pickAlign="right" :options="allAcType" clearable filter customize></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型类别" prop="modelType" :borderBottom="true" required> <up-form-item label="机型类别" prop="modelType" :borderBottom="true" required>
<global-picker pickAlign="right" v-model="formData.modelType" dictkey="eb_modelType" clearable></global-picker> <global-picker pickAlign="right" v-model="formData.modelType" dictkey="eb_modelType" clearable></global-picker>
...@@ -452,7 +461,6 @@ ...@@ -452,7 +461,6 @@
</template> </template>
<script setup> <script setup>
import useBaseStore from 'mocp/store/base'
import useElectronicBillStore from 'mocp/store/electronicBill' import useElectronicBillStore from 'mocp/store/electronicBill'
import { import {
formData, formData,
...@@ -477,9 +485,10 @@ import { ...@@ -477,9 +485,10 @@ import {
getDeicingFile, getDeicingFile,
getAntiicingFile getAntiicingFile
} from './constants/add.functionals' } from './constants/add.functionals'
import { watch, watchEffect } from 'vue' import { onUnmounted, watch, watchEffect } from 'vue'
import { getTerminalSelect } from 'mocp/utils/permission'
import { resetData } from './constants/sign.functionals'
const baseStore = useBaseStore()
const electronicBillStore = useElectronicBillStore() const electronicBillStore = useElectronicBillStore()
const { const {
selectList: { allAc, allAcType, allAirline } selectList: { allAc, allAcType, allAirline }
...@@ -548,6 +557,9 @@ watchEffect(() => { ...@@ -548,6 +557,9 @@ watchEffect(() => {
} }
} }
}) })
onUnmounted(() => {
resetData()
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
:deep(.u-fade-zoom-enter-active) { :deep(.u-fade-zoom-enter-active) {
...@@ -567,7 +579,7 @@ watchEffect(() => { ...@@ -567,7 +579,7 @@ watchEffect(() => {
} }
.mocp-title { .mocp-title {
padding: 0 32rpx 24rpx 32rpx; padding: 0 32rpx 24rpx 32rpx;
background-color: #f7f8fa; background-color: $mocp-fill-1;
} }
.mocp-subtitle { .mocp-subtitle {
padding-top: 12rpx; padding-top: 12rpx;
......
...@@ -52,15 +52,15 @@ export const formData = reactive({ ...@@ -52,15 +52,15 @@ export const formData = reactive({
deicingUnit2: '', deicingUnit2: '',
deicingUnit3: '', deicingUnit3: '',
deicingUnit4: '', deicingUnit4: '',
expectDeicing: 0, expectDeicing: '0',
fixedPointDeicing: 0, fixedPointDeicing: '0',
flightNoIn: '', flightNoIn: '',
flightNoOut: '', flightNoOut: '',
id: undefined, id: undefined,
legs: '', legs: '',
model: '', model: '',
nickname: '', nickname: '',
originalAircraftPositionDeicing: 0, originalAircraftPositionDeicing: '0',
station: '', station: '',
username: '', username: '',
guaranteeUnit: '', guaranteeUnit: '',
......
import { upload } from 'mocp/utils/http' import { upload } from 'mocp/utils/http'
import { canvasImage } from './sign.compositions' import { canvasImage } from './sign.compositions'
import { antiicingFile, antiicingFlag, deicingFile, deicingFlag, formData, showAntiicing, showDeicing } from './add.compositions' import { antiicingFile, antiicingFlag, deicingFile, deicingFlag, formData, showAntiicing, showDeicing } from './add.compositions'
import { addDeicingApi } from 'mocp/api/electronicBill' import { addDeicingApi, updateDeicingApi } from 'mocp/api/electronicBill'
import Day from 'mocp/utils/dayjs'
export const handleSubmit = async () => { export const handleSubmit = async () => {
uni.showLoading({ uni.showLoading({
...@@ -9,8 +10,14 @@ export const handleSubmit = async () => { ...@@ -9,8 +10,14 @@ export const handleSubmit = async () => {
mask: true mask: true
}) })
try { try {
if (!canvasImage.value.includes('https')) {
await uploadFile() await uploadFile()
}
if (formData.id > 0) {
await updateDeicing()
} else {
await addDeicing() await addDeicing()
}
} catch (error) { } catch (error) {
console.error(error) console.error(error)
} finally { } finally {
...@@ -37,7 +44,28 @@ export const addDeicing = async () => { ...@@ -37,7 +44,28 @@ export const addDeicing = async () => {
} }
const res = await addDeicingApi(formData, { loading: true }) const res = await addDeicingApi(formData, { loading: true })
if (res.code == 200) { if (res.code == 200) {
uni.$mocpJump.navigateBack() uni.$emit('deicingReload')
uni.$mocpJump.navigateBack(2)
resetData()
uni.$mocpMessage.success(res.message)
} else {
uni.$mocpMessage.error(res.message)
}
}
export const updateDeicing = async () => {
const params = {
...formData
}
if (formData.deicingMix == 'Other') {
params.deicingMix = formData.deicingMix1 + ':' + formData.deicingMix2
}
if (formData.antiicingMix == 'Other') {
params.antiicingMix = formData.antiicingMix1 + ':' + formData.antiicingMix2
}
const res = await updateDeicingApi(formData, { loading: true })
if (res.code == 200) {
uni.$emit('deicingReload')
uni.$mocpJump.navigateBack(2)
resetData() resetData()
uni.$mocpMessage.success(res.message) uni.$mocpMessage.success(res.message)
} else { } else {
...@@ -73,7 +101,7 @@ export const resetData = () => { ...@@ -73,7 +101,7 @@ export const resetData = () => {
antiicingUnit3: '', antiicingUnit3: '',
antiicingUnit4: '', antiicingUnit4: '',
customerSignImg: '', customerSignImg: '',
date: '', date: Day().valueOf(),
deicingCartNo1: '', deicingCartNo1: '',
deicingCartNo2: '', deicingCartNo2: '',
deicingCartNo3: '', deicingCartNo3: '',
...@@ -97,15 +125,15 @@ export const resetData = () => { ...@@ -97,15 +125,15 @@ export const resetData = () => {
deicingUnit2: '', deicingUnit2: '',
deicingUnit3: '', deicingUnit3: '',
deicingUnit4: '', deicingUnit4: '',
expectDeicing: 0, expectDeicing: '0',
fixedPointDeicing: 0, fixedPointDeicing: '0',
flightNoIn: '', flightNoIn: '',
flightNoOut: '', flightNoOut: '',
id: undefined, id: undefined,
legs: '', legs: '',
model: '', model: '',
nickname: '', nickname: '',
originalAircraftPositionDeicing: 0, originalAircraftPositionDeicing: '0',
station: '', station: '',
username: '', username: '',
guaranteeUnit: '', guaranteeUnit: '',
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
}" }"
> >
<template #default="{ item }"> <template #default="{ item }">
<view class="item"> <view class="item" @tap="goDetails(item)">
<view class="item-title"> <view class="item-title">
<view class="left"> <view class="left">
<text class="txt">{{ item.acreg }}</text> <text class="txt">{{ item.acreg }}</text>
...@@ -45,9 +45,24 @@ import { deicingListApi } from 'mocp/api/electronicBill' ...@@ -45,9 +45,24 @@ import { deicingListApi } from 'mocp/api/electronicBill'
import { timeStampFormat } from 'mocp/utils/tool' import { timeStampFormat } from 'mocp/utils/tool'
import useBaseStore from 'mocp/store/base' import useBaseStore from 'mocp/store/base'
import useUserStore from 'mocp/store/user' import useUserStore from 'mocp/store/user'
import { ref } from 'vue'
import { onUnload } from '@dcloudio/uni-app'
import { formData } from './constants/add.compositions'
const baseStore = useBaseStore() const baseStore = useBaseStore()
const userStore = useUserStore() const userStore = useUserStore()
const goDetails = (data) => {
Object.assign(formData, data)
uni.$mocpJump.navigateTo('/panel/electronicBill/deicing/add')
}
//刷新
const paging = ref()
uni.$on('deicingReload', () => {
paging.value?.reload()
})
onUnload(() => {
uni.$off('deicingReload')
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import 'mocpStatic/css/list.scss'; @import 'mocpStatic/css/list.scss';
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
@touchstart="touchStart" @touchstart="touchStart"
@touchmove="touchMove" @touchmove="touchMove"
@touchend="touchEnd" @touchend="touchEnd"
id="canvas"
/> />
</view> </view>
<view class="footer-btns"> <view class="footer-btns">
...@@ -34,8 +35,14 @@ import { canvasImage } from './constants/sign.compositions' ...@@ -34,8 +35,14 @@ import { canvasImage } from './constants/sign.compositions'
import { handleSubmit } from './constants/sign.functionals' import { handleSubmit } from './constants/sign.functionals'
import { formData } from './constants/add.compositions' import { formData } from './constants/add.compositions'
import { onBeforeUnmount } from 'vue' import { onBeforeUnmount } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
const { isSigned, touchStart, touchMove, touchEnd, clear, getPath } = useDrawSignature('canvas') const { isSigned, touchStart, touchMove, touchEnd, clear, getPath } = useDrawSignature('canvas', {
path: formData.customerSignImg
})
onLoad(() => {
canvasImage.value = formData.customerSignImg
})
//保存签名 //保存签名
const handleSave = () => { const handleSave = () => {
if (isSigned.value) { if (isSigned.value) {
...@@ -67,6 +74,10 @@ onBeforeUnmount(() => { ...@@ -67,6 +74,10 @@ onBeforeUnmount(() => {
.mocp-preview { .mocp-preview {
width: 100%; width: 100%;
height: 300rpx; height: 300rpx;
uni-image {
width: 100%;
height: 100%;
}
} }
.mocp-title { .mocp-title {
padding: 24rpx 0; padding: 24rpx 0;
......
<template> <template>
<global-page padding="0 24rpx" title="收费单" auto :localData="list"> <global-page padding="0 24rpx" title="收费单" auto :localData="list">
<template #default="{ item }"> <template #default="{ item }">
<global-card :title="item.title" titleSuffix="查看详情" :rightWidth="180" @handleTitleClick="navigateTo(item.url)"> <global-card :title="item.title" titleSuffix="查看详情" :rightWidth="180" @handleTitleClick="goTo(item.url)">
描述:{{ item.desc }} 描述:{{ item.desc }}
</global-card> </global-card>
</template> </template>
...@@ -13,7 +13,15 @@ import { navigateTo } from 'mocp/utils/jump' ...@@ -13,7 +13,15 @@ import { navigateTo } from 'mocp/utils/jump'
import { list } from './constants/list.compositions' import { list } from './constants/list.compositions'
import useElectronicBillStore from 'mocp/store/electronicBill' import useElectronicBillStore from 'mocp/store/electronicBill'
import { onLoad } from '@dcloudio/uni-app' import { onLoad } from '@dcloudio/uni-app'
import { checkPermi } from 'mocp/utils/permission'
const goTo = (url) => {
if (checkPermi('/ElectronBill/edit')) {
navigateTo(url)
} else {
uni.$mocpMessage.warning('暂无权限')
}
}
const electronicBillStore = useElectronicBillStore() const electronicBillStore = useElectronicBillStore()
onLoad(() => { onLoad(() => {
electronicBillStore.init() electronicBillStore.init()
......
<template> <template>
<global-page <global-page
title="新建非例行维护工作单" :title="formData.id > 0 ? '编辑非例行维护工作单' : '新建非例行维护工作单'"
:showNavRight="true" :showNavRight="formData.id > 0 ? false : true"
navRightText="今天签单" navRightText="今天签单"
@handleRightClick="navigateTo('/panel/electronicBill/nonRoutineWork/list')" @handleRightClick="navigateTo('/panel/electronicBill/nonRoutineWork/list')"
showFooterBtn showFooterBtn
...@@ -12,25 +12,34 @@ ...@@ -12,25 +12,34 @@
<view class="mocp-title">基本信息</view> <view class="mocp-title">基本信息</view>
<view class="mocp-form"> <view class="mocp-form">
<up-form-item label="航站" prop="station" :borderBottom="true" required> <up-form-item label="航站" prop="station" :borderBottom="true" required>
<global-picker <global-picker pickAlign="right" v-model="formData.station" clearable :options="getTerminalSelect()" filter></global-picker>
pickAlign="right"
v-model="formData.station"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="日期" prop="date" :borderBottom="true" required> <up-form-item label="日期" prop="date" :borderBottom="true" required>
<global-date pickAlign="right" clearable v-model="formData.date" defaultToday></global-date> <global-date pickAlign="right" clearable v-model="formData.date" defaultToday></global-date>
</up-form-item> </up-form-item>
<up-form-item label="机号" prop="acreg" :borderBottom="true" required> <up-form-item label="机号" prop="acreg" :borderBottom="true" required>
<global-picker pickAlign="right" v-model="formData.acreg" :options="allAc" clearable filter @change="changeAcreg"></global-picker> <global-picker
pickAlign="right"
v-model="formData.acreg"
:options="allAc"
clearable
filter
customize
@change="changeAcreg"
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="飞机所属单位" prop="aircaraftoperator" :borderBottom="true" required> <up-form-item label="飞机所属单位" prop="aircaraftoperator" :borderBottom="true" required>
<global-picker pickAlign="right" v-model="formData.aircaraftoperator" :options="allAirline" clearable filter></global-picker> <global-picker
pickAlign="right"
v-model="formData.aircaraftoperator"
:options="allAirline"
clearable
filter
customize
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="model" :borderBottom="true" required> <up-form-item label="机型" prop="model" :borderBottom="true" required>
<global-picker v-model="formData.model" pickAlign="right" :options="allAcType" clearable filter></global-picker> <global-picker v-model="formData.model" pickAlign="right" :options="allAcType" clearable filter customize></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航班号" prop="flightNo" :borderBottom="true" required> <up-form-item label="航班号" prop="flightNo" :borderBottom="true" required>
<up-input v-model="formData.flightNo" inputAlign="right" border="none" placeholder="请输入" clearable></up-input> <up-input v-model="formData.flightNo" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
...@@ -140,66 +149,166 @@ ...@@ -140,66 +149,166 @@
</view> </view>
<view class="mocp-title">特种车辆、设备、工具租用记录</view> <view class="mocp-title">特种车辆、设备、工具租用记录</view>
<view class="mocp-form"> <view class="mocp-form">
<up-form-item label="牵引车(单位/次)" prop="tractor" :borderBottom="true"> <up-form-item label="金工人员工时" prop="jgrygs" :borderBottom="true">
<global-number-input v-model="formData.tractor"></global-number-input> <global-number-input v-model="formData.jgrygs" placeholder="请输入(单位/小时)" :precision="2"></global-number-input>
</up-form-item>
<up-form-item label="普通工作梯(2米以下)" prop="ptgzt" :borderBottom="true">
<global-number-input v-model="formData.ptgzt" placeholder="请输入(单位/次)"></global-number-input>
</up-form-item>
<up-form-item label="高空工作梯(2米以上)" prop="gkgzt" :borderBottom="true">
<global-number-input v-model="formData.lkgzt" placeholder="请输入(单位/次)"></global-number-input>
</up-form-item>
<up-form-item label="机身千斤顶" prop="jsqjd" :borderBottom="true">
<global-number-input v-model="formData.jsqjd" placeholder="请输入(单位/次)"></global-number-input>
</up-form-item>
<up-form-item label="轮轴千斤顶" prop="lzqjd" :borderBottom="true">
<global-number-input v-model="formData.lzqjd" placeholder="请输入(单位/次)"></global-number-input>
</up-form-item>
<up-form-item label="换轮工具" prop="hlgj" :borderBottom="true">
<global-number-input v-model="formData.hlgj" placeholder="请输入(单位/次)"></global-number-input>
</up-form-item>
<up-form-item label="工具车辆" prop="gjcl" :borderBottom="true">
<global-number-input v-model="formData.gjcl" placeholder="请输入(单位/次)"></global-number-input>
</up-form-item>
<up-form-item label="充氧" prop="cy" :borderBottom="true">
<global-number-input v-model="formData.cl" placeholder="请输入(单位/次)"></global-number-input>
</up-form-item>
<up-form-item label="充高压氮气" prop="cgydq" :borderBottom="true">
<global-number-input v-model="formData.cgydq" placeholder="请输入(单位/次)"></global-number-input>
</up-form-item> </up-form-item>
<up-form-item label="气源车(单位/次)" prop="asu" :borderBottom="true"> <up-form-item label="充低压氮气" prop="cdydq" :borderBottom="true">
<global-number-input v-model="formData.asu"></global-number-input> <global-number-input v-model="formData.cdydq" placeholder="请输入(单位/次)"></global-number-input>
</up-form-item> </up-form-item>
<up-form-item label="电源车(单位/小时)" prop="gpu" :borderBottom="true"> <up-form-item label="推/拖飞机" prop="ttfj" :borderBottom="true">
<global-number-input v-model="formData.gpu" :precision="2"></global-number-input> <global-number-input v-model="formData.ttfj" placeholder="请输入(单位/次)"></global-number-input>
</up-form-item> </up-form-item>
<up-form-item label="空调车(单位/小时)" prop="acu" :borderBottom="true"> <up-form-item label="滑油" prop="hy" :borderBottom="true">
<global-number-input v-model="formData.acu" :precision="2"></global-number-input> <global-number-input v-model="formData.hy" placeholder="请输入(单位/罐)"></global-number-input>
</up-form-item> </up-form-item>
<up-form-item label="充氧车(单位/次)" prop="oxygenCharging" :borderBottom="true"> <up-form-item label="液压油" prop="yyy" :borderBottom="true">
<global-number-input v-model="formData.oxygenCharging"></global-number-input> <global-number-input v-model="formData.yyy" placeholder="请输入(单位/罐)"></global-number-input>
</up-form-item> </up-form-item>
<up-form-item label="高空作业车(单位/小时)" prop="cherryPicker" :borderBottom="true"> <up-form-item label="金属胶带" prop="jsjd" :borderBottom="true">
<global-number-input v-model="formData.cherryPicker" :precision="2"></global-number-input> <global-number-input v-model="formData.jsjd" placeholder="请输入(单位/米)" :precision="2"></global-number-input>
</up-form-item> </up-form-item>
<up-form-item label="轮胎充气(单位/次)" prop="tireCharging" :borderBottom="true"> <up-form-item label="其它消耗品" prop="qtxhp" :borderBottom="true">
<global-number-input v-model="formData.tireCharging"></global-number-input> <global-number-input v-model="formData.qtxhp" placeholder="请输入(单位/罐)"></global-number-input>
</up-form-item> </up-form-item>
<up-form-item label="减震支柱充气(单位/次)" prop="shockStrutCharging" :borderBottom="true"> <!-- 常用非动力工具 -->
<global-number-input v-model="formData.shockStrutCharging"></global-number-input> <up-form-item label="常用非动力工具" :borderBottom="true"></up-form-item>
<up-form-item label="件号" prop="cyfdlgjjh" :borderBottom="true">
<up-input v-model="formData.cyfdlgjjh" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item> </up-form-item>
<up-form-item label="工作梯(单位/小时)" prop="ladder" :borderBottom="true"> <up-form-item label="次数" prop="cyfdlgjcs" :borderBottom="true">
<global-number-input v-model="formData.ladder" :precision="2"></global-number-input> <global-number-input v-model="formData.cyfdlgjcs" placeholder="请输入(单位/次)"></global-number-input>
</up-form-item> </up-form-item>
<up-form-item label="千斤顶(单位/小时)" prop="jackscrew" :borderBottom="true"> <!-- 常用动力工具 -->
<global-number-input v-model="formData.jackscrew" :precision="2"></global-number-input> <up-form-item label="常用动力工具" :borderBottom="true"></up-form-item>
<up-form-item label="件号" prop="cydlgjjh" :borderBottom="true">
<up-input v-model="formData.cydlgjjh" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item> </up-form-item>
<up-form-item label="动力设备工具(单位/次)" prop="powerTool" :borderBottom="true"> <up-form-item label="次数" prop="cydlgjcs" :borderBottom="true">
<global-number-input v-model="formData.powerTool"></global-number-input> <global-number-input v-model="formData.cydlgjcs" placeholder="请输入(单位/次)"></global-number-input>
</up-form-item> </up-form-item>
<up-form-item label="非动力设备工具(单位/次)" prop="tools" :borderBottom="true"> <up-form-item label="NDT人员工时" prop="ndtrygs" :borderBottom="true">
<global-number-input v-model="formData.tools"></global-number-input> <global-number-input v-model="formData.ndtrygs" placeholder="请输入(单位/小时)" :precision="2"></global-number-input>
</up-form-item> </up-form-item>
<up-form-item label="充电瓶(单位/次)" prop="charger" :borderBottom="true"> <!-- NDT/孔探设备 -->
<global-number-input v-model="formData.charger"></global-number-input> <up-form-item label="NDT/孔探设备" :borderBottom="true"></up-form-item>
<up-form-item label="件号" prop="ndtktsbjh" :borderBottom="true">
<up-input v-model="formData.ndtktsbjh" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item> </up-form-item>
<up-form-item label="尾撑(单位/小时)" prop="tails" :borderBottom="true"> <up-form-item label="天数" prop="ndtktsbts" :borderBottom="true">
<global-number-input v-model="formData.tails" :precision="2"></global-number-input> <global-number-input v-model="formData.ndtktsbts" placeholder="请输入(单位/天)"></global-number-input>
</up-form-item>
<!-- 升降车平台车 -->
<up-form-item label="升降车平台车" :borderBottom="true"></up-form-item>
<up-form-item label="人" prop="sjcptcr" :borderBottom="true">
<global-number-input v-model="formData.sjcptcr" placeholder="请输入(单位/小时)" :precision="2"></global-number-input>
</up-form-item>
<up-form-item label="车" prop="sjcptcc" :borderBottom="true">
<global-number-input v-model="formData.sjcptcc" placeholder="请输入(单位/小时)" :precision="2"></global-number-input>
</up-form-item>
<!-- 悬臂高空车 -->
<up-form-item label="悬臂高空车" :borderBottom="true"></up-form-item>
<up-form-item label="人" prop="xbgkcr" :borderBottom="true">
<global-number-input v-model="formData.xbgkcr" placeholder="请输入(单位/小时)" :precision="2"></global-number-input>
</up-form-item>
<up-form-item label="车" prop="xbgkcc" :borderBottom="true">
<global-number-input v-model="formData.xbgkcc" placeholder="请输入(单位/小时)" :precision="2"></global-number-input>
</up-form-item>
<!-- 停机坪 -->
<up-form-item label="停机坪" prop="tjpzk" :borderBottom="true">
<global-radio v-model="formData.tjpzk" dictkey="eb_zk" radioAlign="right" clearable></global-radio>
</up-form-item>
<up-form-item prop="tjpxs" :borderBottom="true">
<global-number-input v-model="formData.tjpxs" placeholder="请输入(单位/小时)" :precision="2"></global-number-input>
</up-form-item>
<!-- 北京(机库租用) -->
<up-form-item label="北京(机库租用)" prop="bjjkzyzk" :borderBottom="true">
<global-radio v-model="formData.bjjkzyzk" dictkey="eb_zk" radioAlign="right" clearable></global-radio>
</up-form-item>
<up-form-item prop="bjjkzyxs" :borderBottom="true">
<global-number-input v-model="formData.bjjkzyxs" placeholder="请输入(单位/小时)" :precision="2"></global-number-input>
</up-form-item>
<!-- 北京(试车坪) -->
<up-form-item label="北京(试车坪)" prop="bjscpzk" :borderBottom="true">
<global-radio v-model="formData.bjscpzk" dictkey="eb_zk" radioAlign="right" clearable></global-radio>
</up-form-item>
<up-form-item prop="bjscpxs" :borderBottom="true">
<global-number-input v-model="formData.bjscpxs" placeholder="请输入(单位/小时)" :precision="2"></global-number-input>
</up-form-item>
<!-- 非北京地区(机库租用) -->
<up-form-item label="非北京地区(机库租用)" prop="fbjjkzyzk" :borderBottom="true">
<global-radio v-model="formData.fbjjkzyzk" dictkey="eb_zk" radioAlign="right" clearable></global-radio>
</up-form-item>
<up-form-item prop="fbjjkzyxs" :borderBottom="true">
<global-number-input v-model="formData.fbjjkzyxs" placeholder="请输入(单位/小时)" :precision="2"></global-number-input>
</up-form-item>
<!-- 非北京地区(试车坪) -->
<up-form-item label="非北京地区(试车坪)" prop="fbjscpzk" :borderBottom="true">
<global-radio v-model="formData.fbjscpzk" dictkey="eb_zk" radioAlign="right" clearable></global-radio>
</up-form-item>
<up-form-item prop="fbjscpxs" :borderBottom="true">
<global-number-input v-model="formData.fbjscpxs" placeholder="请输入(单位/小时)" :precision="2"></global-number-input>
</up-form-item>
</view>
<!-- 其它工具 -->
<view class="mocp-form">
<up-form-item label="其它工具" :borderBottom="true">
<view style="width: 100%; display: flex; justify-content: flex-end">
<global-button type="text" @tap="addQtgj">添加</global-button>
</view>
</up-form-item>
</view>
<template v-for="(item, index) in formData.qtgj" :key="index">
<view class="mocp-title">
工具{{ index + 1 }}
<global-button text type="danger" @tap="delQtgj(index)">删除</global-button>
</view>
<view class="mocp-form">
<up-form-item label="件号" :borderBottom="true">
<up-input v-model="item.jh" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item> </up-form-item>
<up-form-item label="机库(单位/小时)" prop="hanger" :borderBottom="true"> <up-form-item label="天数" :borderBottom="true">
<global-number-input v-model="formData.hanger" :precision="2"></global-number-input> <global-number-input v-model="item.ts" placeholder="请输入(单位/天)"></global-number-input>
</up-form-item> </up-form-item>
</view> </view>
</template>
</up-form> </up-form>
</global-page> </global-page>
</template> </template>
<script setup> <script setup>
import useBaseStore from 'mocp/store/base'
import useElectronicBillStore from 'mocp/store/electronicBill' import useElectronicBillStore from 'mocp/store/electronicBill'
import { formData, rules } from './constants/add.compositions' import { formData, rules } from './constants/add.compositions'
import { navigateTo } from 'mocp/utils/jump' import { navigateTo } from 'mocp/utils/jump'
import { ref } from 'vue' import { onUnmounted, ref } from 'vue'
import { changeAcreg } from './constants/add.functionals' import { addQtgj, delQtgj, changeAcreg } from './constants/add.functionals'
import { validateParameters } from 'mocp/utils/tool' import { validateParameters } from 'mocp/utils/tool'
import { getTerminalSelect } from 'mocp/utils/permission'
import { resetData } from './constants/sign.functionals'
const baseStore = useBaseStore()
const electronicBillStore = useElectronicBillStore() const electronicBillStore = useElectronicBillStore()
const { const {
selectList: { allAc, allAcType, allAirline } selectList: { allAc, allAcType, allAirline }
...@@ -219,6 +328,9 @@ const handleFooterClick = async () => { ...@@ -219,6 +328,9 @@ const handleFooterClick = async () => {
} }
navigateTo('/panel/electronicBill/nonRoutineWork/sign') navigateTo('/panel/electronicBill/nonRoutineWork/sign')
} }
onUnmounted(() => {
resetData()
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import 'mocpStatic/css/table.scss'; @import 'mocpStatic/css/table.scss';
...@@ -229,7 +341,9 @@ const handleFooterClick = async () => { ...@@ -229,7 +341,9 @@ const handleFooterClick = async () => {
} }
.mocp-title { .mocp-title {
padding: 0 32rpx 24rpx 32rpx; padding: 0 32rpx 24rpx 32rpx;
background-color: #f7f8fa; background-color: $mocp-fill-1;
display: flex;
justify-content: space-between;
} }
.mocp-subtitle { .mocp-subtitle {
padding-top: 12rpx; padding-top: 12rpx;
......
import { reactive, ref } from 'vue' import { reactive } from 'vue'
export const formData = reactive({ export const formData = reactive({
acreg: '', acreg: '',
acu: undefined, acu: undefined,
aircaraftoperator: '', aircaraftoperator: '',
asu: undefined, asu: undefined,
bjjkzyxs: undefined,
bjjkzyzk: undefined,
bjscpxs: undefined,
bjscpzk: undefined,
cdydq: undefined,
cgydq: undefined,
charger: undefined, charger: undefined,
cherryPicker: undefined, cherryPicker: undefined,
cy: undefined,
createTime: '',
createUser: undefined,
customerSignImg: '', customerSignImg: '',
customerSignTime: '',
cyfdlgjcs: '',
cyfdlgjjh: '',
cydlgjcs: '',
cydlgjjh: '',
date: '', date: '',
fbjjkzyxs: undefined,
fbjjkzyzk: undefined,
fbjscpxs: undefined,
fbjscpzk: undefined,
flightNo: '', flightNo: '',
flightNoIn: '',
flightNoOut: '',
gjcl: undefined,
gpu: undefined, gpu: undefined,
hanger: undefined, hanger: undefined,
hlgj: undefined,
hy: undefined,
id: 0, id: 0,
isDel: '',
jackscrew: undefined, jackscrew: undefined,
jgrygs: undefined,
jsjd: undefined,
jsqjd: undefined,
ladder: undefined, ladder: undefined,
legs: '', legs: '',
gkgzt: undefined,
lzqjd: undefined,
material1: '', material1: '',
material2: '', material2: '',
material3: '', material3: '',
model: '', model: '',
ndtktsbjh: '',
ndtktsbts: undefined,
ndtrygs: undefined,
nickname: '', nickname: '',
number1: undefined, number1: undefined,
number2: undefined, number2: undefined,
number3: undefined, number3: undefined,
oxygenCharging: undefined, oxygenCharging: undefined,
powerTool: undefined, powerTool: undefined,
ptgzt: undefined,
qtgj: [],
qtxhp: undefined,
shockStrutCharging: undefined, shockStrutCharging: undefined,
sjcptcc: undefined,
sjcptcr: undefined,
station: '', station: '',
tails: undefined, tails: undefined,
tireCharging: undefined, tireCharging: undefined,
tjpxs: undefined,
tjpzk: undefined,
tools: undefined, tools: undefined,
tractor: undefined, tractor: undefined,
ttfj: undefined,
updateTime: '',
updateUser: undefined,
username: '', username: '',
work1: '', work1: '',
work2: '', work2: '',
work3: '', work3: '',
workingHours1: undefined, workingHours1: undefined,
workingHours2: undefined, workingHours2: undefined,
workingHours3: undefined workingHours3: undefined,
xbgkcc: undefined,
xbgkcr: undefined,
yyy: undefined
}) })
export const rules = reactive({ export const rules = reactive({
......
...@@ -18,3 +18,12 @@ export const changeAcreg = async (acreg) => { ...@@ -18,3 +18,12 @@ export const changeAcreg = async (acreg) => {
uni.$mocpMessage.error(res.message) uni.$mocpMessage.error(res.message)
} }
} }
export const addQtgj = () => {
formData.qtgj.push({
jh: '',
ts: undefined
})
}
export const delQtgj = (index) => {
formData.qtgj.splice(index, 1)
}
import { upload } from 'mocp/utils/http' import { upload } from 'mocp/utils/http'
import { canvasImage } from './sign.compositions' import { canvasImage } from './sign.compositions'
import { formData } from './add.compositions' import { formData } from './add.compositions'
import { addNonRoutineWorkApi } from 'mocp/api/electronicBill' import { addNonRoutineWorkApi, updateNonRoutineWorkApi } from 'mocp/api/electronicBill'
import Day from 'mocp/utils/dayjs'
export const handleSubmit = async () => { export const handleSubmit = async () => {
uni.showLoading({ uni.showLoading({
...@@ -9,8 +10,14 @@ export const handleSubmit = async () => { ...@@ -9,8 +10,14 @@ export const handleSubmit = async () => {
mask: true mask: true
}) })
try { try {
if (!canvasImage.value.includes('https')) {
await uploadFile() await uploadFile()
}
if (formData.id > 0) {
await updateNonRoutineWork()
} else {
await addNonRoutineWork() await addNonRoutineWork()
}
} catch (error) { } catch (error) {
console.error(error) console.error(error)
} finally { } finally {
...@@ -25,52 +32,129 @@ export const uploadFile = async () => { ...@@ -25,52 +32,129 @@ export const uploadFile = async () => {
uni.$mocpMessage.error(res.message) uni.$mocpMessage.error(res.message)
} }
} }
//获取其他工具
export const getQtgj = (qtgj) => {
//[{jh:abc,ts:1},{jh:abc,ts:2},{jh:abc,ts:3] => abc-1,abc-2,abc-3
//判断是否数组
if (Array.isArray(qtgj)) {
return qtgj.map((item) => `${item.jh}-${item.ts}`).join(',')
}
if (typeof qtgj == 'string') {
if (!qtgj) return []
//abc-1,abc-2,abc-3 => [{jh:abc,ts:1},{jh:abc,ts:2},{jh:abc,ts:3]
return qtgj.split(',').map((item) => {
const [jh, ts] = item.split('-')
return { jh, ts }
})
}
return qtgj
}
export const addNonRoutineWork = async () => { export const addNonRoutineWork = async () => {
const res = await addNonRoutineWorkApi(formData, { loading: true }) const res = await addNonRoutineWorkApi({ ...formData, qtgj: getQtgj(formData.qtgj) }, { loading: true })
if (res.code == 200) {
uni.$emit('nonRoutineWorkReload')
uni.$mocpJump.navigateBack(2)
resetData()
uni.$mocpMessage.success(res.message)
} else {
uni.$mocpMessage.error(res.message)
}
}
export const updateNonRoutineWork = async () => {
const res = await updateNonRoutineWorkApi({ ...formData, qtgj: getQtgj(formData.qtgj) }, { loading: true })
if (res.code == 200) { if (res.code == 200) {
uni.$mocpJump.navigateBack() uni.$emit('nonRoutineWorkReload')
uni.$mocpJump.navigateBack(2)
resetData()
uni.$mocpMessage.success(res.message)
} else {
uni.$mocpMessage.error(res.message)
}
}
export const resetData = () => {
Object.assign(formData, { Object.assign(formData, {
acreg: '', acreg: '',
acu: undefined, acu: undefined,
aircaraftoperator: '', aircaraftoperator: '',
asu: undefined, asu: undefined,
bjjkzyxs: undefined,
bjjkzyzk: undefined,
bjscpxs: undefined,
bjscpzk: undefined,
cdydq: undefined,
cgydq: undefined,
charger: undefined, charger: undefined,
cherryPicker: undefined, cherryPicker: undefined,
cy: undefined,
createTime: '',
createUser: undefined,
customerSignImg: '', customerSignImg: '',
date: '', customerSignTime: '',
cyfdlgjcs: '',
cyfdlgjjh: '',
cydlgjcs: '',
cydlgjjh: '',
date: Day().valueOf(),
fbjjkzyxs: undefined,
fbjjkzyzk: undefined,
fbjscpxs: undefined,
fbjscpzk: undefined,
flightNo: '', flightNo: '',
flightNoIn: '',
flightNoOut: '',
gjcl: undefined,
gpu: undefined, gpu: undefined,
hanger: undefined, hanger: undefined,
hlgj: undefined,
hy: undefined,
id: 0, id: 0,
isDel: '',
jackscrew: undefined, jackscrew: undefined,
jgrygs: undefined,
jsjd: undefined,
jsqjd: undefined,
ladder: undefined, ladder: undefined,
legs: '', legs: '',
gkgzt: undefined,
lzqjd: undefined,
material1: '', material1: '',
material2: '', material2: '',
material3: '', material3: '',
model: '', model: '',
ndtktsbjh: '',
ndtktsbts: undefined,
ndtrygs: undefined,
nickname: '', nickname: '',
number1: undefined, number1: undefined,
number2: undefined, number2: undefined,
number3: undefined, number3: undefined,
oxygenCharging: undefined, oxygenCharging: undefined,
powerTool: undefined, powerTool: undefined,
ptgzt: undefined,
qtgj: [],
qtxhp: undefined,
shockStrutCharging: undefined, shockStrutCharging: undefined,
sjcptcc: undefined,
sjcptcr: undefined,
station: '', station: '',
tails: undefined, tails: undefined,
tireCharging: undefined, tireCharging: undefined,
tjpxs: undefined,
tjpzk: undefined,
tools: undefined, tools: undefined,
tractor: undefined, tractor: undefined,
ttfj: undefined,
updateTime: '',
updateUser: undefined,
username: '', username: '',
work1: '', work1: '',
work2: '', work2: '',
work3: '', work3: '',
workingHours1: undefined, workingHours1: undefined,
workingHours2: undefined, workingHours2: undefined,
workingHours3: undefined workingHours3: undefined,
xbgkcc: undefined,
xbgkcr: undefined,
yyy: undefined
}) })
uni.$mocpMessage.success(res.message)
} else {
uni.$mocpMessage.error(res.message)
}
} }
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
}" }"
> >
<template #default="{ item }"> <template #default="{ item }">
<view class="item"> <view class="item" @tap="goDetails(item)">
<view class="item-title"> <view class="item-title">
<view class="left"> <view class="left">
<text class="txt">{{ item.acreg }}</text> <text class="txt">{{ item.acreg }}</text>
...@@ -45,9 +45,26 @@ import { noRoutineWorkListApi } from 'mocp/api/electronicBill' ...@@ -45,9 +45,26 @@ import { noRoutineWorkListApi } from 'mocp/api/electronicBill'
import { timeStampFormat } from 'mocp/utils/tool' import { timeStampFormat } from 'mocp/utils/tool'
import useBaseStore from 'mocp/store/base' import useBaseStore from 'mocp/store/base'
import useUserStore from 'mocp/store/user' import useUserStore from 'mocp/store/user'
import { formData } from './constants/add.compositions'
import { onUnload } from '@dcloudio/uni-app'
import { ref } from 'vue'
import { getQtgj } from './constants/sign.functionals'
const baseStore = useBaseStore() const baseStore = useBaseStore()
const userStore = useUserStore() const userStore = useUserStore()
const goDetails = (data) => {
Object.assign(formData, data)
formData.qtgj = getQtgj(formData.qtgj)
uni.$mocpJump.navigateTo('/panel/electronicBill/nonRoutineWork/add')
}
//刷新
const paging = ref()
uni.$on('nonRoutineWorkReload', () => {
paging.value?.reload()
})
onUnload(() => {
uni.$off('nonRoutineWorkReload')
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import 'mocpStatic/css/list.scss'; @import 'mocpStatic/css/list.scss';
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
@touchstart="touchStart" @touchstart="touchStart"
@touchmove="touchMove" @touchmove="touchMove"
@touchend="touchEnd" @touchend="touchEnd"
id="canvas"
/> />
</view> </view>
<view class="footer-btns"> <view class="footer-btns">
...@@ -24,7 +25,7 @@ ...@@ -24,7 +25,7 @@
</view> </view>
<view class="mocp-title">用户签名预览</view> <view class="mocp-title">用户签名预览</view>
<view class="mocp-preview"> <view class="mocp-preview">
<image :src="canvasImage" mode="widthFix" :show-loading="true" width="100%" height="100%" v-if="canvasImage"></image> <image :src="canvasImage" mode="widthFix" :show-loading="true" v-if="canvasImage"></image>
</view> </view>
</global-page> </global-page>
</template> </template>
...@@ -33,9 +34,14 @@ import { useDrawSignature } from 'mocp/hooks/use-sign/useSign' ...@@ -33,9 +34,14 @@ import { useDrawSignature } from 'mocp/hooks/use-sign/useSign'
import { canvasImage } from './constants/sign.compositions' import { canvasImage } from './constants/sign.compositions'
import { handleSubmit } from './constants/sign.functionals' import { handleSubmit } from './constants/sign.functionals'
import { formData } from './constants/add.compositions' import { formData } from './constants/add.compositions'
import { onBeforeUnmount } from 'vue' import { onLoad } from '@dcloudio/uni-app'
const { isSigned, touchStart, touchMove, touchEnd, clear, getPath } = useDrawSignature('canvas') const { isSigned, touchStart, touchMove, touchEnd, clear, getPath } = useDrawSignature('canvas', {
path: formData.customerSignImg
})
onLoad(() => {
canvasImage.value = formData.customerSignImg
})
//保存签名 //保存签名
const handleSave = () => { const handleSave = () => {
if (isSigned.value) { if (isSigned.value) {
...@@ -52,10 +58,6 @@ const handleClear = () => { ...@@ -52,10 +58,6 @@ const handleClear = () => {
canvasImage.value = '' canvasImage.value = ''
clear() clear()
} }
onBeforeUnmount(() => {
handleClear()
formData.customerSignImg = ''
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.mocp-sign, .mocp-sign,
...@@ -67,6 +69,10 @@ onBeforeUnmount(() => { ...@@ -67,6 +69,10 @@ onBeforeUnmount(() => {
.mocp-preview { .mocp-preview {
width: 100%; width: 100%;
height: 300rpx; height: 300rpx;
uni-image {
width: 100%;
height: 100%;
}
} }
.mocp-title { .mocp-title {
padding: 24rpx 0; padding: 24rpx 0;
......
<template> <template>
<global-page <global-page
title="新建例行维护工作单" :title="formData.id > 0 ? '编辑例行维护工作单' : '新建例行维护工作单'"
:showNavRight="true" :showNavRight="formData.id > 0 ? false : true"
navRightText="今天签单" navRightText="今天签单"
@handleRightClick="navigateTo('/panel/electronicBill/routineWork/list')" @handleRightClick="navigateTo('/panel/electronicBill/routineWork/list')"
showFooterBtn showFooterBtn
...@@ -12,61 +12,76 @@ ...@@ -12,61 +12,76 @@
<view class="mocp-title">基本信息</view> <view class="mocp-title">基本信息</view>
<view class="mocp-form"> <view class="mocp-form">
<up-form-item label="航站" prop="station" :borderBottom="true" required> <up-form-item label="航站" prop="station" :borderBottom="true" required>
<global-picker <global-picker pickAlign="right" v-model="formData.station" clearable :options="getTerminalSelect()" filter></global-picker>
pickAlign="right"
v-model="formData.station"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="日期" prop="date" :borderBottom="true" required> <up-form-item label="日期" prop="date" :borderBottom="true" required>
<global-date pickAlign="right" clearable v-model="formData.date" defaultToday></global-date> <global-date pickAlign="right" clearable v-model="formData.date" defaultToday></global-date>
</up-form-item> </up-form-item>
<up-form-item label="机号" prop="acreg" :borderBottom="true" required> <up-form-item label="机号" prop="acreg" :borderBottom="true" required>
<global-picker pickAlign="right" v-model="formData.acreg" :options="allAc" clearable filter @change="changeAcreg"></global-picker> <global-picker
pickAlign="right"
v-model="formData.acreg"
:options="allAc"
clearable
filter
customize
@change="changeAcreg"
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="飞机所属单位" prop="aircaraftoperator" :borderBottom="true" required> <up-form-item label="飞机所属单位" prop="aircaraftoperator" :borderBottom="true" required>
<global-picker pickAlign="right" v-model="formData.aircaraftoperator" :options="allAirline" clearable filter></global-picker> <global-picker
pickAlign="right"
v-model="formData.aircaraftoperator"
:options="allAirline"
clearable
filter
customize
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="model" :borderBottom="true" required> <up-form-item label="机型" prop="model" :borderBottom="true" required>
<global-picker v-model="formData.model" pickAlign="right" :options="allAcType" clearable filter></global-picker> <global-picker v-model="formData.model" pickAlign="right" :options="allAcType" clearable filter customize></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="进港航班号" prop="flightNoIn" :borderBottom="true" required> <up-form-item label="进港航班号" prop="flightNoIn" :borderBottom="true" required>
<up-input v-model="formData.flightNoIn" inputAlign="right" border="none" placeholder="请输入" clearable></up-input> <up-input v-model="formData.flightNoIn" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item> </up-form-item>
<up-form-item label="出港航班号" prop="flightNoOut" :borderBottom="true"> <up-form-item label="出港航班号" prop="flightNoOut" :borderBottom="true" required>
<up-input v-model="formData.flightNoOut" inputAlign="right" border="none" placeholder="请输入" clearable></up-input> <up-input v-model="formData.flightNoOut" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item> </up-form-item>
<up-form-item label="航段" prop="legs" :borderBottom="true"> <up-form-item label="航段" prop="legs" :borderBottom="true" required>
<up-input v-model="formData.legs" inputAlign="right" border="none" placeholder="请输入" clearable></up-input> <up-input v-model="formData.legs" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item> </up-form-item>
</view> </view>
<view class="mocp-title">过站维护TR</view> <view class="mocp-title">过站维护TR</view>
<view class="mocp-form"> <view class="mocp-form">
<up-form-item label="过站TR" prop="tr" :borderBottom="true"> <up-form-item label="过站维护TR" prop="tr" :borderBottom="true">
<global-switch v-model="formData.tr" switchAlign="right"></global-switch> <global-switch v-model="formData.tr" switchAlign="right" :disabled="formData.overnightAfPf == '1'"></global-switch>
</up-form-item> </up-form-item>
<up-form-item label="一般勤务" prop="serviceTr" :borderBottom="true"> <up-form-item label="一般勤务" prop="serviceTr" :borderBottom="true">
<global-switch v-model="formData.serviceTr" switchAlign="right"></global-switch> <global-switch
v-model="formData.serviceTr"
switchAlign="right"
:disabled="formData.tr == '1' || formData.overnightAfPf == '1'"
></global-switch>
</up-form-item>
<up-form-item label="例行检查" prop="routineInspection" :borderBottom="true">
<global-switch
v-model="formData.routineInspection"
switchAlign="right"
:disabled="formData.tr == '1' || formData.overnightAfPf == '1'"
></global-switch>
</up-form-item>
<up-form-item label="飞机放行" prop="fly" :borderBottom="true">
<global-switch
v-model="formData.fly"
switchAlign="right"
:disabled="formData.tr == '1' || formData.overnightAfPf == '1'"
></global-switch>
</up-form-item> </up-form-item>
</view> </view>
<view class="mocp-title">航前维护PF</view> <view class="mocp-title">过夜维护AF+PF</view>
<view class="mocp-form"> <view class="mocp-form">
<up-form-item label="航前PR" prop="pf" :borderBottom="true"> <up-form-item label="过夜维护AF+PF" prop="overnightAfPf" :borderBottom="true">
<global-switch v-model="formData.pf" switchAlign="right"></global-switch> <global-switch v-model="formData.overnightAfPf" switchAlign="right"></global-switch>
</up-form-item>
<up-form-item label="一般勤务" prop="servicePf" :borderBottom="true">
<global-switch v-model="formData.servicePf" switchAlign="right"></global-switch>
</up-form-item>
</view>
<view class="mocp-title">航后维护AF</view>
<view class="mocp-form">
<up-form-item label="航后AF" prop="af" :borderBottom="true">
<global-switch v-model="formData.af" switchAlign="right"></global-switch>
</up-form-item>
<up-form-item label="一般勤务" prop="serviceAf" :borderBottom="true">
<global-switch v-model="formData.serviceAf" switchAlign="right"></global-switch>
</up-form-item> </up-form-item>
</view> </view>
<view class="mocp-title">设备使用记录</view> <view class="mocp-title">设备使用记录</view>
...@@ -110,14 +125,14 @@ ...@@ -110,14 +125,14 @@
</template> </template>
<script setup> <script setup>
import useBaseStore from 'mocp/store/base'
import useElectronicBillStore from 'mocp/store/electronicBill' import useElectronicBillStore from 'mocp/store/electronicBill'
import { formData, rules } from './constants/add.compositions' import { formData, rules } from './constants/add.compositions'
import { navigateTo } from 'mocp/utils/jump' import { navigateTo } from 'mocp/utils/jump'
import { ref } from 'vue' import { onUnmounted, ref, watchEffect } from 'vue'
import { changeAcreg } from './constants/add.functionals' import { changeAcreg } from './constants/add.functionals'
import { getTerminalSelect } from 'mocp/utils/permission'
import { resetData } from './constants/sign.functionals'
const baseStore = useBaseStore()
const electronicBillStore = useElectronicBillStore() const electronicBillStore = useElectronicBillStore()
const { const {
selectList: { allAc, allAcType, allAirline } selectList: { allAc, allAcType, allAirline }
...@@ -128,6 +143,22 @@ const handleFooterClick = async () => { ...@@ -128,6 +143,22 @@ const handleFooterClick = async () => {
await formRef.value?.validate() await formRef.value?.validate()
navigateTo('/panel/electronicBill/routineWork/sign') navigateTo('/panel/electronicBill/routineWork/sign')
} }
watchEffect(() => {
if (formData.tr == '1') {
formData.serviceTr = '0'
formData.routineInspection = '0'
formData.fly = '0'
}
if (formData.overnightAfPf == '1') {
formData.tr = '0'
formData.serviceTr = '0'
formData.routineInspection = '0'
formData.fly = '0'
}
})
onUnmounted(() => {
resetData()
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.mocp-form { .mocp-form {
...@@ -137,6 +168,6 @@ const handleFooterClick = async () => { ...@@ -137,6 +168,6 @@ const handleFooterClick = async () => {
} }
.mocp-title { .mocp-title {
padding: 0 32rpx 24rpx 32rpx; padding: 0 32rpx 24rpx 32rpx;
background-color: #f7f8fa; background-color: $mocp-fill-1;
} }
</style> </style>
...@@ -2,13 +2,13 @@ import { reactive } from 'vue' ...@@ -2,13 +2,13 @@ import { reactive } from 'vue'
export const formData = reactive({ export const formData = reactive({
acreg: '', acreg: '',
af: 0, af: '0',
airConditioning: undefined, airConditioning: undefined,
airStarter: undefined, airStarter: undefined,
aircaraftoperator: '', aircaraftoperator: '',
customerSignImg: '', customerSignImg: '',
date: '', date: '',
diversion: 0, diversion: '0',
flightNoIn: '', flightNoIn: '',
flightNoOut: '', flightNoOut: '',
groundPower: undefined, groundPower: undefined,
...@@ -16,19 +16,22 @@ export const formData = reactive({ ...@@ -16,19 +16,22 @@ export const formData = reactive({
legs: '', legs: '',
model: '', model: '',
nickname: '', nickname: '',
onCall: 0, onCall: '0',
others1: '', others1: '',
others2: '', others2: '',
pf: 0, pf: '0',
remark: '', remark: '',
returnFlight: 0, returnFlight: '0',
serviceAf: 0, serviceAf: '0',
servicePf: 0, servicePf: '0',
serviceTr: 0, serviceTr: '0',
station: '', station: '',
towPus: undefined, towPus: undefined,
tr: 1, tr: '0',
username: '' username: '',
routineInspection: '0',
fly: '0',
overnightAfPf: '0'
}) })
export const rules = reactive({ export const rules = reactive({
...@@ -74,5 +77,19 @@ export const rules = reactive({ ...@@ -74,5 +77,19 @@ export const rules = reactive({
message: '请选择进港航班号', message: '请选择进港航班号',
trigger: ['blur', 'change'] trigger: ['blur', 'change']
} }
],
flightNoOut: [
{
required: true,
message: '请输入出港航班号',
trigger: ['blur', 'change']
}
],
legs: [
{
required: true,
message: '请输入航段',
trigger: ['blur', 'change']
}
] ]
}) })
import { ref } from 'vue' import { ref } from 'vue'
export const canvasImage = ref('') export const canvasImage = ref('')
export const showConfirm = ref(false)
import { upload } from 'mocp/utils/http' import { upload } from 'mocp/utils/http'
import { canvasImage } from './sign.compositions' import { canvasImage, showConfirm } from './sign.compositions'
import { formData } from './add.compositions' import { formData } from './add.compositions'
import { addRoutineWorkApi } from 'mocp/api/electronicBill' import { addRoutineWorkApi, routineWorkCheckRepeatApi, updateRoutineWorkApi } from 'mocp/api/electronicBill'
import { timeStampFormat } from 'mocp/utils/tool'
import Day from 'mocp/utils/dayjs'
export const handleSubmit = async () => { export const handleSubmit = async () => {
uni.showLoading({ uni.showLoading({
...@@ -9,14 +11,38 @@ export const handleSubmit = async () => { ...@@ -9,14 +11,38 @@ export const handleSubmit = async () => {
mask: true mask: true
}) })
try { try {
if (!canvasImage.value.includes('https')) {
await uploadFile() await uploadFile()
}
if (formData.id > 0) {
await updateRoutineWork()
} else {
await addRoutineWork() await addRoutineWork()
}
} catch (error) { } catch (error) {
console.error(error) console.error(error)
} finally { } finally {
uni.hideLoading() uni.hideLoading()
} }
} }
export const routineWorkCheckRepeat = async () => {
0
const params = {
acreg: formData.acreg,
date: timeStampFormat(formData.date, { format: 'YYYY-MM-DD' }),
id: formData.id
}
const res = await routineWorkCheckRepeatApi(params, { loading: true })
if (res.code == 200) {
if (res.data > 0) {
showConfirm.value = true
} else {
handleSubmit()
}
} else {
uni.$mocpMessage.error(res.message)
}
}
export const uploadFile = async () => { export const uploadFile = async () => {
const res = await upload({ url: '/resource/uploadFile', filePath: canvasImage.value, name: 'file' }) const res = await upload({ url: '/resource/uploadFile', filePath: canvasImage.value, name: 'file' })
if (res.code == 200) { if (res.code == 200) {
...@@ -28,16 +54,36 @@ export const uploadFile = async () => { ...@@ -28,16 +54,36 @@ export const uploadFile = async () => {
export const addRoutineWork = async () => { export const addRoutineWork = async () => {
const res = await addRoutineWorkApi(formData, { loading: true }) const res = await addRoutineWorkApi(formData, { loading: true })
if (res.code == 200) { if (res.code == 200) {
uni.$mocpJump.navigateBack() uni.$emit('routineWorkReload')
uni.$mocpJump.navigateBack(2)
resetData()
uni.$mocpMessage.success(res.message)
} else {
uni.$mocpMessage.error(res.message)
}
}
export const updateRoutineWork = async () => {
const res = await updateRoutineWorkApi(formData, { loading: true })
if (res.code == 200) {
uni.$emit('routineWorkReload')
uni.$mocpJump.navigateBack(2)
resetData()
uni.$mocpMessage.success(res.message)
} else {
uni.$mocpMessage.error(res.message)
}
}
export const resetData = () => {
showConfirm.value = false
Object.assign(formData, { Object.assign(formData, {
acreg: '', acreg: '',
af: 0, af: '0',
airConditioning: undefined, airConditioning: undefined,
airStarter: undefined, airStarter: undefined,
aircaraftoperator: '', aircaraftoperator: '',
customerSignImg: '', customerSignImg: '',
date: '', date: Day().valueOf(),
diversion: 0, diversion: '0',
flightNoIn: '', flightNoIn: '',
flightNoOut: '', flightNoOut: '',
groundPower: undefined, groundPower: undefined,
...@@ -45,22 +91,21 @@ export const addRoutineWork = async () => { ...@@ -45,22 +91,21 @@ export const addRoutineWork = async () => {
legs: '', legs: '',
model: '', model: '',
nickname: '', nickname: '',
onCall: 0, onCall: '0',
others1: '', others1: '',
others2: '', others2: '',
pf: 0, pf: '0',
remark: '', remark: '',
returnFlight: 0, returnFlight: '0',
serviceAf: 0, serviceAf: '0',
servicePf: 0, servicePf: '0',
serviceTr: 0, serviceTr: '0',
station: '', station: '',
towPus: undefined, towPus: undefined,
tr: 1, tr: '0',
username: '' username: '',
routineInspection: '0',
fly: '0',
overnightAfPf: '0'
}) })
uni.$mocpMessage.success(res.message)
} else {
uni.$mocpMessage.error(res.message)
}
} }
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
}" }"
> >
<template #default="{ item }"> <template #default="{ item }">
<view class="item"> <view class="item" @tap="goDetails(item)">
<view class="item-title"> <view class="item-title">
<view class="left"> <view class="left">
<text class="txt">{{ item.acreg }}</text> <text class="txt">{{ item.acreg }}</text>
...@@ -23,9 +23,10 @@ ...@@ -23,9 +23,10 @@
<text class="txt">{{ baseStore.getTerminalObject[item.station] }}</text> <text class="txt">{{ baseStore.getTerminalObject[item.station] }}</text>
</view> </view>
</view> </view>
<view class="item-content u-line-3"> <view class="item-content">
<text class="txt">{{ item.aircaraftoperator }}</text> <text class="txt">{{ item.aircaraftoperator }}</text>
<text class="txt">{{ item.model }}</text> <text class="txt">{{ item.model }}</text>
<text class="txt">{{ item.overnightAfPf == '1' ? '过夜维护AF+PF' : '' }}</text>
</view> </view>
<view class="item-footer"> <view class="item-footer">
<view class="label"> <view class="label">
...@@ -45,9 +46,24 @@ import { routineWorkListApi } from 'mocp/api/electronicBill' ...@@ -45,9 +46,24 @@ import { routineWorkListApi } from 'mocp/api/electronicBill'
import { timeStampFormat } from 'mocp/utils/tool' import { timeStampFormat } from 'mocp/utils/tool'
import useBaseStore from 'mocp/store/base' import useBaseStore from 'mocp/store/base'
import useUserStore from 'mocp/store/user' import useUserStore from 'mocp/store/user'
import { formData } from './constants/add.compositions'
import { ref } from 'vue'
import { onUnload } from '@dcloudio/uni-app'
const baseStore = useBaseStore() const baseStore = useBaseStore()
const userStore = useUserStore() const userStore = useUserStore()
const goDetails = (data) => {
Object.assign(formData, data)
uni.$mocpJump.navigateTo('/panel/electronicBill/routineWork/add')
}
//刷新
const paging = ref()
uni.$on('routineWorkReload', () => {
paging.value?.reload()
})
onUnload(() => {
uni.$off('routineWorkReload')
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import 'mocpStatic/css/list.scss'; @import 'mocpStatic/css/list.scss';
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
@touchstart="touchStart" @touchstart="touchStart"
@touchmove="touchMove" @touchmove="touchMove"
@touchend="touchEnd" @touchend="touchEnd"
id="canvas"
/> />
</view> </view>
<view class="footer-btns"> <view class="footer-btns">
...@@ -16,7 +17,7 @@ ...@@ -16,7 +17,7 @@
<global-button type="primary" size="large" :radius="5" @tap="handleSave">保存签名</global-button> <global-button type="primary" size="large" :radius="5" @tap="handleSave">保存签名</global-button>
</view> </view>
<view class="footer-btn"> <view class="footer-btn">
<global-button type="primary" size="large" :radius="5" @tap="handleSubmit" :disabled="!canvasImage">保存单据</global-button> <global-button type="primary" size="large" :radius="5" @tap="routineWorkCheckRepeat" :disabled="!canvasImage">保存单据</global-button>
</view> </view>
<view class="footer-btn"> <view class="footer-btn">
<global-button type="primary" plain size="large" :radius="5" @tap="handleClear">重新签名</global-button> <global-button type="primary" plain size="large" :radius="5" @tap="handleClear">重新签名</global-button>
...@@ -24,18 +25,33 @@ ...@@ -24,18 +25,33 @@
</view> </view>
<view class="mocp-title">用户签名预览</view> <view class="mocp-title">用户签名预览</view>
<view class="mocp-preview"> <view class="mocp-preview">
<image :src="canvasImage" mode="widthFix" :show-loading="true" width="100%" height="100%" v-if="canvasImage"></image> <image :src="canvasImage" mode="widthFix" :show-loading="true" v-if="canvasImage"></image>
</view> </view>
<up-modal
title="单据重复"
content="系统检测到今日已有过夜数据,是否继续提交?"
:show="showConfirm"
showCancelButton
closeOnClickOverlay
@confirm="handleSubmit"
@cancel="showConfirm = false"
@close="showConfirm = false"
></up-modal>
</global-page> </global-page>
</template> </template>
<script setup> <script setup>
import { useDrawSignature } from 'mocp/hooks/use-sign/useSign' import { useDrawSignature } from 'mocp/hooks/use-sign/useSign'
import { canvasImage } from './constants/sign.compositions' import { canvasImage, showConfirm } from './constants/sign.compositions'
import { handleSubmit } from './constants/sign.functionals' import { handleSubmit, routineWorkCheckRepeat } from './constants/sign.functionals'
import { formData } from './constants/add.compositions' import { formData } from './constants/add.compositions'
import { onBeforeUnmount } from 'vue' import { onLoad } from '@dcloudio/uni-app'
const { isSigned, touchStart, touchMove, touchEnd, clear, getPath } = useDrawSignature('canvas') const { isSigned, touchStart, touchMove, touchEnd, clear, getPath } = useDrawSignature('canvas', {
path: formData.customerSignImg
})
onLoad(() => {
canvasImage.value = formData.customerSignImg
})
//保存签名 //保存签名
const handleSave = () => { const handleSave = () => {
if (isSigned.value) { if (isSigned.value) {
...@@ -52,10 +68,6 @@ const handleClear = () => { ...@@ -52,10 +68,6 @@ const handleClear = () => {
canvasImage.value = '' canvasImage.value = ''
clear() clear()
} }
onBeforeUnmount(() => {
handleClear()
formData.customerSignImg = ''
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.mocp-sign, .mocp-sign,
...@@ -67,6 +79,10 @@ onBeforeUnmount(() => { ...@@ -67,6 +79,10 @@ onBeforeUnmount(() => {
.mocp-preview { .mocp-preview {
width: 100%; width: 100%;
height: 300rpx; height: 300rpx;
uni-image {
width: 100%;
height: 100%;
}
} }
.mocp-title { .mocp-title {
padding: 24rpx 0; padding: 24rpx 0;
......
...@@ -297,7 +297,7 @@ const { details } = storeToRefs(engineeringEvaluationStore) ...@@ -297,7 +297,7 @@ const { details } = storeToRefs(engineeringEvaluationStore)
} }
.mocp-title { .mocp-title {
padding: 12rpx 32rpx 12rpx 32rpx; padding: 12rpx 32rpx 12rpx 32rpx;
background-color: #f7f8fa; background-color: $mocp-fill-1;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
...@@ -309,7 +309,7 @@ const { details } = storeToRefs(engineeringEvaluationStore) ...@@ -309,7 +309,7 @@ const { details } = storeToRefs(engineeringEvaluationStore)
} }
:deep(.u-collapse-item) { :deep(.u-collapse-item) {
.u-cell { .u-cell {
background: #f7f8fa; background: $mocp-fill-1;
} }
.u-collapse-item__content { .u-collapse-item__content {
.u-cell { .u-cell {
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="isOpen" :borderBottom="true"> <up-form-item label="状态" prop="isOpen" :borderBottom="true">
<global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="ta_isOpen"></global-picker> <global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="ta_isOpen"></global-picker>
...@@ -9,44 +8,40 @@ ...@@ -9,44 +8,40 @@
<global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker> <global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="acType" :borderBottom="true"> <up-form-item label="机型" prop="acType" :borderBottom="true">
<global-picker v-model="formData.acType" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker> <global-picker
v-model="formData.acType"
pickAlign="right"
:options="getTypeSelect('机械不正常事件-工程分析')"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="acOwn" :borderBottom="true"> <up-form-item label="航司" prop="acOwn" :borderBottom="true">
<global-picker v-model="formData.acOwn" pickAlign="right" :options="baseStore.getAirlineSelect" clearable filter></global-picker>
</up-form-item>
<up-form-item label="航站" prop="acTerminal" :borderBottom="true">
<global-picker <global-picker
v-model="formData.acOwn"
pickAlign="right" pickAlign="right"
v-model="formData.acTerminal" :options="getAirlineSelect('机械不正常事件-工程分析')"
clearable clearable
:options="baseStore.getTerminalSelect"
filter filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="专业类别" prop="majorClass" :borderBottom="true"> <up-form-item label="航站" prop="acTerminal" :borderBottom="true">
<global-picker <global-picker
v-model="formData.majorClass"
pickAlign="right" pickAlign="right"
:options="getParamsByType('MajorCategory')" v-model="formData.acTerminal"
clearable clearable
:options="getTerminalSelect('机械不正常事件-工程分析')"
filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="专业类别" prop="majorClass" :borderBottom="true">
<global-picker v-model="formData.majorClass" pickAlign="right" paramsType="MajorCategory" clearable></global-picker>
</up-form-item>
<up-form-item label="ATA章节" prop="ataChapter" :borderBottom="true"> <up-form-item label="ATA章节" prop="ataChapter" :borderBottom="true">
<global-picker v-model="formData.ataChapter" pickAlign="right" :options="baseStore.getATAChecked()" clearable filter /> <global-picker v-model="formData.ataChapter" pickAlign="right" :options="baseStore.getATAChecked()" clearable filter />
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -54,8 +49,8 @@ import useBaseStore from 'mocp/store/base' ...@@ -54,8 +49,8 @@ import useBaseStore from 'mocp/store/base'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
import useEngineeringEvaluationStore from 'mocp/store/engineeringEvaluation' import useEngineeringEvaluationStore from 'mocp/store/engineeringEvaluation'
import { getAirlineSelect, getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore() const baseStore = useBaseStore()
...@@ -77,13 +72,4 @@ const handleConfirm = () => { ...@@ -77,13 +72,4 @@ const handleConfirm = () => {
uni.$emit('engineeringEvaluationReload') uni.$emit('engineeringEvaluationReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="state" :borderBottom="true"> <up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker v-model="formData.state" pickAlign="right" clearable dictkey="fleet_state" /> <global-picker v-model="formData.state" pickAlign="right" clearable dictkey="fleet_state" />
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="aviation" :borderBottom="true"> <up-form-item label="航司" prop="aviation" :borderBottom="true">
<global-picker v-model="formData.aviation" pickAlign="right" :options="baseStore.getAirlineSelect" clearable filter /> <global-picker v-model="formData.aviation" pickAlign="right" :options="getAirlineSelect('技术支援-机队状态管理')" clearable filter />
</up-form-item> </up-form-item>
<up-form-item label="机号" prop="machineNumber" :borderBottom="true"> <up-form-item label="机号" prop="machineNumber" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter /> <global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter />
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="model" :borderBottom="true"> <up-form-item label="机型" prop="model" :borderBottom="true">
<global-picker v-model="formData.model" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter /> <global-picker v-model="formData.model" pickAlign="right" :options="getTypeSelect('技术支援-机队状态管理')" clearable filter />
</up-form-item> </up-form-item>
<up-form-item label="ATA章节" prop="ata" :borderBottom="true"> <up-form-item label="ATA章节" prop="ata" :borderBottom="true">
<global-picker <global-picker
...@@ -42,28 +41,10 @@ ...@@ -42,28 +41,10 @@
<global-calendar pickAlign="right" v-model:startTime="formData.startTime" v-model:endTime="formData.stopTime" clearable /> <global-calendar pickAlign="right" v-model:startTime="formData.startTime" v-model:endTime="formData.stopTime" clearable />
</up-form-item> </up-form-item>
<up-form-item label="专业类别" prop="professionalType" :borderBottom="true"> <up-form-item label="专业类别" prop="professionalType" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.professionalType" clearable paramsType="MajorCategory"></global-picker>
pickAlign="right"
v-model="formData.professionalType"
clearable
:options="getParamsByType('MajorCategory')"
></global-picker>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6">
<global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button>
</up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -72,8 +53,8 @@ import { storeToRefs } from 'pinia' ...@@ -72,8 +53,8 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useFleetStore from 'mocp/store/fleet' import useFleetStore from 'mocp/store/fleet'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
import { selectFaultTagByATAApi } from 'mocp/api/fleet' import { selectFaultTagByATAApi } from 'mocp/api/fleet'
import { getAirlineSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore() const baseStore = useBaseStore()
...@@ -110,14 +91,4 @@ const changeAta = async (value, data) => { ...@@ -110,14 +91,4 @@ const changeAta = async (value, data) => {
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="screen-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="机号" prop="ac" :borderBottom="true"> <up-form-item label="机号" prop="ac" :borderBottom="true">
<global-picker v-model="formData.ac" pickAlign="right" clearable :options="deviceNumList" filter /> <global-picker v-model="formData.ac" pickAlign="right" clearable :options="deviceNumList" filter />
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="acType" :borderBottom="true"> <up-form-item label="机型" prop="acType" :borderBottom="true">
<global-picker v-model="formData.acType" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter /> <global-picker v-model="formData.acType" pickAlign="right" :options="getTypeSelect()" clearable filter />
</up-form-item> </up-form-item>
<up-form-item label="航站" prop="terminal" :borderBottom="true"> <up-form-item label="航站" prop="terminal" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.terminal" clearable :options="baseStore.getTerminalSelect" filter /> <global-picker pickAlign="right" v-model="formData.terminal" clearable :options="getTerminalSelect()" filter />
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="acOwn" :borderBottom="true"> <up-form-item label="航司" prop="acOwn" :borderBottom="true">
<global-picker v-model="formData.acOwn" pickAlign="right" :options="baseStore.getAirlineSelect" clearable filter /> <global-picker v-model="formData.acOwn" pickAlign="right" :options="getAirlineSelect()" clearable filter />
</up-form-item> </up-form-item>
<up-form-item label="航班号" prop="flightNo" :borderBottom="true"> <up-form-item label="航班号" prop="flightNo" :borderBottom="true">
<global-picker v-model="formData.flightNo" pickAlign="right" :options="baseStore.selectList.flightNumList" clearable filter /> <global-picker v-model="formData.flightNo" pickAlign="right" :options="baseStore.selectList.flightNumList" clearable filter />
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6">
<global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button>
</up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -44,6 +30,7 @@ import { storeToRefs } from 'pinia' ...@@ -44,6 +30,7 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import useBaseStore from 'mocp/store/base' import useBaseStore from 'mocp/store/base'
import useFlightSupportStore from 'mocp/store/flight-support' import useFlightSupportStore from 'mocp/store/flight-support'
import { getAirlineSelect, getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore() const baseStore = useBaseStore()
...@@ -70,14 +57,4 @@ const handleConfirm = () => { ...@@ -70,14 +57,4 @@ const handleConfirm = () => {
uni.$emit('screenReload') uni.$emit('screenReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.screen-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -42,18 +42,11 @@ ...@@ -42,18 +42,11 @@
<script setup> <script setup>
import useFleetStore from 'mocp/store/fleet' import useFleetStore from 'mocp/store/fleet'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import useUserStore from 'mocp/store/user'
import { timeStampFormat } from 'mocp/utils/tool' import { timeStampFormat } from 'mocp/utils/tool'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { ref } from 'vue'
import { getFleetListApi } from 'mocp/api/fleet'
import { WorkTaskIsSuccessApi } from 'mocp/api/work-assignment'
import Day from 'mocp/utils/dayjs'
const fleetStore = useFleetStore() const fleetStore = useFleetStore()
const { details } = storeToRefs(fleetStore) const { details } = storeToRefs(fleetStore)
console.log(details, details.value.creationTime, timeStampFormat('1721810489517', { format: 'YYYY-MM-DD' }))
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import '../work-assignment/constants/details.scss'; @import '../work-assignment/constants/details.scss';
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="机号" prop="machine_number" :borderBottom="true"> <up-form-item label="机号" prop="machine_number" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.machine_number" :options="deviceNumList" clearable filter /> <global-picker pickAlign="right" v-model="formData.machine_number" :options="deviceNumList" clearable filter />
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="planeModel" :borderBottom="true"> <up-form-item label="机型" prop="planeModel" :borderBottom="true">
<global-picker v-model="formData.planeModel" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter /> <global-picker v-model="formData.planeModel" pickAlign="right" :options="getTypeSelect('信息通报')" clearable filter />
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="aviation" :borderBottom="true"> <up-form-item label="航司" prop="aviation" :borderBottom="true">
<global-picker v-model="formData.aviation" pickAlign="right" :options="baseStore.getAirlineSelect" clearable filter /> <global-picker v-model="formData.aviation" pickAlign="right" :options="getAirlineSelect('信息通报')" clearable filter />
</up-form-item> </up-form-item>
<up-form-item label="航站" prop="termin" :borderBottom="true"> <up-form-item label="航站" prop="termin" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.termin" clearable :options="getTerminalSelect('信息通报')" filter></global-picker>
pickAlign="right"
v-model="formData.termin"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="填报日期" :borderBottom="true"> <up-form-item label="填报日期" :borderBottom="true">
...@@ -29,81 +22,33 @@ ...@@ -29,81 +22,33 @@
</up-form-item> </up-form-item>
<up-form-item label="保障阶段" prop="guarantee" :borderBottom="true"> <up-form-item label="保障阶段" prop="guarantee" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.guarantee" clearable paramsType="GuaranteeStage" filter></global-picker>
pickAlign="right"
v-model="formData.guarantee"
clearable
:options="getParamsByType('GuaranteeStage')"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="完成状态" prop="rlease_state" :borderBottom="true"> <up-form-item label="完成状态" prop="rlease_state" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.rlease_state" clearable paramsType="ReleaseStatu" filter></global-picker>
pickAlign="right"
v-model="formData.rlease_state"
clearable
:options="getParamsByType('ReleaseStatu')"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="运行阶段" prop="function_Info" :borderBottom="true"> <up-form-item label="运行阶段" prop="function_Info" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.function_Info" clearable paramsType="OperationPhase" filter></global-picker>
pickAlign="right"
v-model="formData.function_Info"
clearable
:options="getParamsByType('OperationPhase')"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="故障状态" prop="failure_state" :borderBottom="true"> <up-form-item label="故障状态" prop="failure_state" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.failure_state" clearable paramsType="RetentionBasis" filter></global-picker>
pickAlign="right"
v-model="formData.failure_state"
clearable
:options="getParamsByType('RetentionBasis')"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="专业类别" prop="professional" :borderBottom="true"> <up-form-item label="专业类别" prop="professional" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.professional" clearable paramsType="MajorCategory" filter></global-picker>
pickAlign="right"
v-model="formData.professional"
clearable
:options="getParamsByType('MajorCategory')"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="数据来源" prop="isType" :borderBottom="true"> <up-form-item label="数据来源" prop="isType" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.isType" clearable dictkey="id_isType"></global-picker> <global-picker pickAlign="right" v-model="formData.isType" clearable dictkey="id_isType"></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="故障报告人" prop="reporter" :borderBottom="true"> <up-form-item label="故障报告人" prop="reporter" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.reporter" clearable paramsType="FaultReporting"></global-picker>
pickAlign="right"
v-model="formData.reporter"
clearable
:options="getParamsByType('FaultReporting')"
></global-picker>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6">
<global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button>
</up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -112,10 +57,9 @@ import { storeToRefs } from 'pinia' ...@@ -112,10 +57,9 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useInforDisclosureStore from 'mocp/store/inforDisclosure' import useInforDisclosureStore from 'mocp/store/inforDisclosure'
import { getParamsByType } from 'mocp/hooks/use-params/useParams' import { getAirlineSelect, getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore()
const { const {
selectList: { deviceNumList } selectList: { deviceNumList }
} = useBaseStore() } = useBaseStore()
...@@ -134,14 +78,4 @@ const handleConfirm = () => { ...@@ -134,14 +78,4 @@ const handleConfirm = () => {
uni.$emit('inforDisclosureReload') uni.$emit('inforDisclosureReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<text class="txt u-line-1" v-if="details.machineNumber">{{ details.machineNumber }}</text> <text class="txt u-line-1" v-if="details.machineNumber">{{ details.machineNumber }}</text>
<text class="txt u-line-1" v-if="details.model">{{ details.model }}</text> <text class="txt u-line-1" v-if="details.model">{{ details.model }}</text>
<text class="txt u-line-1" v-if="details.aviation"> <text class="txt u-line-1" v-if="details.aviation">
{{ useGetDictByValue('', details.aviation, { data: baseStore.getAirlineSelect }) }} {{ useGetDictByValue('', details.aviation, { data: getAirlineSelect() }) }}
</text> </text>
</view> </view>
<view class="right"> <view class="right">
...@@ -86,13 +86,12 @@ ...@@ -86,13 +86,12 @@
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { timeStampFormat } from 'mocp/utils/tool' import { timeStampFormat } from 'mocp/utils/tool'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import useBaseStore from 'mocp/store/base'
import useMcoStore from 'mocp/store/mco' import useMcoStore from 'mocp/store/mco'
import { onLoad, onUnload } from '@dcloudio/uni-app' import { onLoad, onUnload } from '@dcloudio/uni-app'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams' import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import { getAirlineSelect } from 'mocp/utils/permission'
const query = defineProps(['id']) const query = defineProps(['id'])
const baseStore = useBaseStore()
const mcoStore = useMcoStore() const mcoStore = useMcoStore()
const { details, getStepList } = storeToRefs(mcoStore) const { details, getStepList } = storeToRefs(mcoStore)
onLoad(() => { onLoad(() => {
......
...@@ -36,7 +36,7 @@ const { getMaterialsList } = storeToRefs(mcoStore) ...@@ -36,7 +36,7 @@ const { getMaterialsList } = storeToRefs(mcoStore)
background: #fff; background: #fff;
} }
:deep(.u-collapse-item) { :deep(.u-collapse-item) {
background: #f7f8fa; background: $mocp-fill-1;
.u-cell__body { .u-cell__body {
padding: 24rpx !important; padding: 24rpx !important;
} }
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="state" :borderBottom="true"> <up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker <global-picker v-model.number="formData.state" pickAlign="right" clearable paramsType="McoCurrentState"></global-picker>
v-model.number="formData.state"
pickAlign="right"
clearable
:options="getParamsByType('McoCurrentState')"
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机号" prop="machineNumber" :borderBottom="true"> <up-form-item label="机号" prop="machineNumber" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter></global-picker> <global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="model" :borderBottom="true"> <up-form-item label="机型" prop="model" :borderBottom="true">
<global-picker v-model="formData.model" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker>
</up-form-item>
<up-form-item label="航站" prop="terminal" :borderBottom="true">
<global-picker <global-picker
v-model="formData.model"
pickAlign="right" pickAlign="right"
v-model="formData.terminal" :options="getTypeSelect('技术支援-MCO管理')"
clearable clearable
:options="baseStore.getTerminalSelect"
filter filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="专业类别" prop="majorCategory" :borderBottom="true"> <up-form-item label="航站" prop="terminal" :borderBottom="true">
<global-picker <global-picker
v-model="formData.majorCategory"
pickAlign="right" pickAlign="right"
:options="getParamsByType('MajorCategory')" v-model="formData.terminal"
clearable clearable
:options="getTerminalSelect('技术支援-MCO管理')"
filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="专业类别" prop="majorCategory" :borderBottom="true">
<global-picker v-model="formData.majorCategory" pickAlign="right" paramsType="MajorCategory" clearable></global-picker>
</up-form-item>
<up-form-item label="执行日期(开始)" prop="startTime" :borderBottom="true"> <up-form-item label="执行日期(开始)" prop="startTime" :borderBottom="true">
<global-date v-model="formData.startTime" pickAlign="right" clearable></global-date> <global-date v-model="formData.startTime" pickAlign="right" clearable></global-date>
</up-form-item> </up-form-item>
...@@ -52,18 +47,7 @@ ...@@ -52,18 +47,7 @@
<global-picker v-model.number="formData.inspect" pickAlign="right" clearable dictkey="mco_choose"></global-picker> <global-picker v-model.number="formData.inspect" pickAlign="right" clearable dictkey="mco_choose"></global-picker>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -72,10 +56,9 @@ import { storeToRefs } from 'pinia' ...@@ -72,10 +56,9 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useMcoStore from 'mocp/store/mco' import useMcoStore from 'mocp/store/mco'
import { getParamsByType } from 'mocp/hooks/use-params/useParams' import { getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore()
const { const {
selectList: { deviceNumList } selectList: { deviceNumList }
} = useBaseStore() } = useBaseStore()
...@@ -94,13 +77,4 @@ const handleConfirm = () => { ...@@ -94,13 +77,4 @@ const handleConfirm = () => {
uni.$emit('mcoReload') uni.$emit('mcoReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -49,7 +49,7 @@ const { getStepDetails, getStepBackDetails } = storeToRefs(mcoStore) ...@@ -49,7 +49,7 @@ const { getStepDetails, getStepBackDetails } = storeToRefs(mcoStore)
} }
.mocp-title { .mocp-title {
padding: 16rpx; padding: 16rpx;
background-color: #f7f8fa; background-color: $mocp-fill-1;
} }
.mocp-form { .mocp-form {
padding: 0 32rpx; padding: 0 32rpx;
......
...@@ -35,7 +35,7 @@ const { getToolsList } = storeToRefs(mcoStore) ...@@ -35,7 +35,7 @@ const { getToolsList } = storeToRefs(mcoStore)
background: #fff; background: #fff;
} }
:deep(.u-collapse-item) { :deep(.u-collapse-item) {
background: #f7f8fa; background: $mocp-fill-1;
.u-cell__body { .u-cell__body {
padding: 24rpx !important; padding: 24rpx !important;
} }
......
...@@ -114,7 +114,7 @@ const { details } = storeToRefs(mechanicalAbnormalEventsStore) ...@@ -114,7 +114,7 @@ const { details } = storeToRefs(mechanicalAbnormalEventsStore)
} }
.mocp-title { .mocp-title {
padding: 24rpx 32rpx 24rpx 32rpx; padding: 24rpx 32rpx 24rpx 32rpx;
background-color: #f7f8fa; background-color: $mocp-fill-1;
} }
.mocp-subTitle { .mocp-subTitle {
padding: 24rpx 32rpx 0 32rpx; padding: 24rpx 32rpx 0 32rpx;
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="isOpen" :borderBottom="true"> <up-form-item label="状态" prop="isOpen" :borderBottom="true">
<global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="mae_isOpen"></global-picker> <global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="mae_isOpen"></global-picker>
...@@ -9,10 +8,22 @@ ...@@ -9,10 +8,22 @@
<global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker> <global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="acType" :borderBottom="true"> <up-form-item label="机型" prop="acType" :borderBottom="true">
<global-picker v-model="formData.acType" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker> <global-picker
v-model="formData.acType"
pickAlign="right"
:options="getTypeSelect('机械不正常事件')"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="acOwn" :borderBottom="true"> <up-form-item label="航司" prop="acOwn" :borderBottom="true">
<global-picker v-model="formData.acOwn" pickAlign="right" :options="baseStore.getAirlineSelect" clearable filter></global-picker> <global-picker
v-model="formData.acOwn"
pickAlign="right"
:options="getAirlineSelect('机械不正常事件')"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="事件分类" prop="eventType" :borderBottom="true"> <up-form-item label="事件分类" prop="eventType" :borderBottom="true">
<global-picker v-model="formData.eventType" pickAlign="right" dictkey="mae_eventType" clearable></global-picker> <global-picker v-model="formData.eventType" pickAlign="right" dictkey="mae_eventType" clearable></global-picker>
...@@ -21,13 +32,7 @@ ...@@ -21,13 +32,7 @@
<global-picker v-model="formData.runEvent" pickAlign="right" dictkey="mae_runEvent" clearable></global-picker> <global-picker v-model="formData.runEvent" pickAlign="right" dictkey="mae_runEvent" clearable></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="发生航站" prop="happenStn" :borderBottom="true"> <up-form-item label="发生航站" prop="happenStn" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.happenStn" clearable :options="getTerminalSelect()" filter></global-picker>
pickAlign="right"
v-model="formData.happenStn"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="延误定性" prop="delayNature" :borderBottom="true"> <up-form-item label="延误定性" prop="delayNature" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.delayNature" clearable :options="delayNature"></global-picker> <global-picker pickAlign="right" v-model="formData.delayNature" clearable :options="delayNature"></global-picker>
...@@ -50,18 +55,7 @@ ...@@ -50,18 +55,7 @@
<up-input v-model="formData.msg" inputAlign="right" border="none" placeholder="请输入" clearable></up-input> <up-input v-model="formData.msg" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -70,9 +64,9 @@ import { storeToRefs } from 'pinia' ...@@ -70,9 +64,9 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useMechanicalAbnormalEventsStore from 'mocp/store/mechanicalAbnormalEvents' import useMechanicalAbnormalEventsStore from 'mocp/store/mechanicalAbnormalEvents'
import { getAirlineSelect, getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore()
const { const {
selectList: { deviceNumList, flightNumList }, selectList: { deviceNumList, flightNumList },
rcOptions: { delayNature, delayProperty } rcOptions: { delayNature, delayProperty }
...@@ -92,13 +86,4 @@ const handleConfirm = () => { ...@@ -92,13 +86,4 @@ const handleConfirm = () => {
uni.$emit('mechanicalAbnormalEventsReload') uni.$emit('mechanicalAbnormalEventsReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
<view class="details-body-field"> <view class="details-body-field">
<global-field <global-field
label="航司:" label="航司:"
:value="useGetDictByValue('', details.aviation, { data: baseStore.getAirlineSelect }) || '-'" :value="useGetDictByValue('', details.aviation, { data: getAirlineSelect() }) || '-'"
></global-field> ></global-field>
<global-field label="航站:" :value="baseStore.getTerminalObject[details.terminal] || '-'"></global-field> <global-field label="航站:" :value="baseStore.getTerminalObject[details.terminal] || '-'"></global-field>
</view> </view>
...@@ -119,6 +119,7 @@ import useBaseStore from 'mocp/store/base' ...@@ -119,6 +119,7 @@ import useBaseStore from 'mocp/store/base'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { timeStampFormat } from 'mocp/utils/tool' import { timeStampFormat } from 'mocp/utils/tool'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams' import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import { getAirlineSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore() const baseStore = useBaseStore()
const moveDecisionStore = useMoveDecisionStore() const moveDecisionStore = useMoveDecisionStore()
......
...@@ -43,18 +43,12 @@ ...@@ -43,18 +43,12 @@
:placeholder="formData.aviation ? '' : '请选择机号自动关联'" :placeholder="formData.aviation ? '' : '请选择机号自动关联'"
> >
<template #suffix> <template #suffix>
{{ useGetDictByValue('', formData.aviation, { data: baseStore.getAirlineSelect }) }} {{ useGetDictByValue('', formData.aviation, { data: getAirlineSelect() }) }}
</template> </template>
</up-input> </up-input>
</up-form-item> </up-form-item>
<up-form-item label="航站" :borderBottom="true"> <up-form-item label="航站" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.terminal" clearable :options="getTerminalSelect()" filter></global-picker>
pickAlign="right"
v-model="formData.terminal"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="日期" :borderBottom="true"> <up-form-item label="日期" :borderBottom="true">
<global-date <global-date
...@@ -87,12 +81,7 @@ ...@@ -87,12 +81,7 @@
></global-date> ></global-date>
</up-form-item> </up-form-item>
<up-form-item label="运行决策类型" :borderBottom="true"> <up-form-item label="运行决策类型" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.technicalType" clearable paramsType="OperationalDecisionType"></global-picker>
pickAlign="right"
v-model="formData.technicalType"
clearable
:options="getParamsByType('OperationalDecisionType')"
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="故障描述" :borderBottom="true" labelPosition="top"> <up-form-item label="故障描述" :borderBottom="true" labelPosition="top">
<up-textarea v-model.trim="formData.faultDescription" placeholder="请输入" :height="40" border="none"></up-textarea> <up-textarea v-model.trim="formData.faultDescription" placeholder="请输入" :height="40" border="none"></up-textarea>
...@@ -144,7 +133,7 @@ import useBaseStore from 'mocp/store/base' ...@@ -144,7 +133,7 @@ import useBaseStore from 'mocp/store/base'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { getAcReduceListApi } from 'mocp/api/system' import { getAcReduceListApi } from 'mocp/api/system'
import { updateDecisionApi } from 'mocp/api/move-decision' import { updateDecisionApi } from 'mocp/api/move-decision'
import { getParamsByType } from 'mocp/hooks/use-params/useParams' import { getAirlineSelect, getTerminalSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore() const baseStore = useBaseStore()
//获取下拉框选项 //获取下拉框选项
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="state" :borderBottom="true"> <up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker v-model="formData.state" pickAlign="right" clearable dictkey="md_state"></global-picker> <global-picker v-model="formData.state" pickAlign="right" clearable dictkey="md_state"></global-picker>
...@@ -10,7 +9,7 @@ ...@@ -10,7 +9,7 @@
pickAlign="right" pickAlign="right"
v-model="formData.terminal" v-model="formData.terminal"
clearable clearable
:options="baseStore.getTerminalSelect" :options="getTerminalSelect('维修控制-运行决策')"
filter filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
...@@ -40,7 +39,7 @@ ...@@ -40,7 +39,7 @@
<global-picker <global-picker
v-model="formData.aviation" v-model="formData.aviation"
pickAlign="right" pickAlign="right"
:options="baseStore.getAirlineSelect" :options="getAirlineSelect('维修控制-运行决策')"
clearable clearable
filter filter
></global-picker> ></global-picker>
...@@ -57,18 +56,7 @@ ...@@ -57,18 +56,7 @@
></global-calendar> ></global-calendar>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -77,9 +65,9 @@ import useMoveDecisionStore from 'mocp/store/move-decision' ...@@ -77,9 +65,9 @@ import useMoveDecisionStore from 'mocp/store/move-decision'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import { getAirlineSelect, getTerminalSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore()
const { const {
selectList: { deviceNumList } selectList: { deviceNumList }
} = useBaseStore() } = useBaseStore()
...@@ -98,13 +86,4 @@ const handleConfirm = () => { ...@@ -98,13 +86,4 @@ const handleConfirm = () => {
uni.$emit('moveDecisionReload') uni.$emit('moveDecisionReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -19,19 +19,6 @@ ...@@ -19,19 +19,6 @@
> >
<template #default="{ item }"> <template #default="{ item }">
<template v-for="option in item.basicInfoList" :key="option.id"> <template v-for="option in item.basicInfoList" :key="option.id">
<up-swipe-action>
<up-swipe-action-item
@click="handleDelete(item)"
:options="[
{
text: '移除',
style: {
backgroundColor: '#f53f3f'
}
}
]"
></up-swipe-action-item>
</up-swipe-action>
<view class="item" @tap="goDetails(item, option)"> <view class="item" @tap="goDetails(item, option)">
<view class="item-title"> <view class="item-title">
<view class="left"> <view class="left">
...@@ -87,6 +74,7 @@ import { timeStampFormat } from 'mocp/utils/tool' ...@@ -87,6 +74,7 @@ import { timeStampFormat } from 'mocp/utils/tool'
import useBaseStore from 'mocp/store/base' import useBaseStore from 'mocp/store/base'
import { ref } from 'vue' import { ref } from 'vue'
import { onUnload } from '@dcloudio/uni-app' import { onUnload } from '@dcloudio/uni-app'
import { checkPermi } from 'mocp/utils/permission'
const taskList = { const taskList = {
1: { 1: {
...@@ -123,15 +111,13 @@ const ps = defineProps({ ...@@ -123,15 +111,13 @@ const ps = defineProps({
}) })
//跳转 //跳转
const goDetails = (data, option) => { const goDetails = (data, option) => {
if (checkPermi('/windDamageWorkInspection')) {
windDamageManagementStore.setState('tabIndex', taskList[option.taskType].index) windDamageManagementStore.setState('tabIndex', taskList[option.taskType].index)
windDamageManagementStore.setState('basicId', option.id) windDamageManagementStore.setState('basicId', option.id)
windDamageManagementStore.setState('weatherId', data.id) windDamageManagementStore.setState('weatherId', data.id)
windDamageManagementStore.setState('weatherSource', data.weatherSource) windDamageManagementStore.setState('weatherSource', data.weatherSource)
uni.$mocpJump.navigateTo(taskList[option.taskType].url) uni.$mocpJump.navigateTo(taskList[option.taskType].url)
} }
//删除
const handleDelete = (data) => {
console.log(data)
} }
const handleQuery = ({ res }) => { const handleQuery = ({ res }) => {
myToDoStore.setState('windDamageManagementNum', myToDoStore.countWindDamageManagementNum(res.data)) myToDoStore.setState('windDamageManagementNum', myToDoStore.countWindDamageManagementNum(res.data))
......
...@@ -16,19 +16,6 @@ ...@@ -16,19 +16,6 @@
auto auto
> >
<template #default="{ item }"> <template #default="{ item }">
<up-swipe-action>
<up-swipe-action-item
@click="handleDelete(item)"
:options="[
{
text: '移除',
style: {
backgroundColor: '#f53f3f'
}
}
]"
></up-swipe-action-item>
</up-swipe-action>
<view class="item" @tap="goDetails(item)"> <view class="item" @tap="goDetails(item)">
<view class="item-title"> <view class="item-title">
<view class="desc"> <view class="desc">
...@@ -52,6 +39,7 @@ import { getRqmListForMobileApi } from 'mocp/api/my-toDo' ...@@ -52,6 +39,7 @@ import { getRqmListForMobileApi } from 'mocp/api/my-toDo'
import useUserStore from 'mocp/store/user' import useUserStore from 'mocp/store/user'
import useMyToDoStore from 'mocp/store/my-toDo' import useMyToDoStore from 'mocp/store/my-toDo'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { checkPermi } from 'mocp/utils/permission'
const userStore = useUserStore() const userStore = useUserStore()
const myToDoStore = useMyToDoStore() const myToDoStore = useMyToDoStore()
...@@ -64,13 +52,11 @@ const ps = defineProps({ ...@@ -64,13 +52,11 @@ const ps = defineProps({
}) })
//跳转 //跳转
const goDetails = (data) => { const goDetails = (data) => {
if (checkPermi('/AppraisalRecord')) {
uni.$mocpJump.navigateTo('/panel/appraisal-record/details', { uni.$mocpJump.navigateTo('/panel/appraisal-record/details', {
id: data.id id: data.id
}) })
} }
//删除
const handleDelete = (data) => {
console.log(data)
} }
const handleQuery = ({ res }) => { const handleQuery = ({ res }) => {
myToDoStore.setState('appraisalRecordNum', parseInt(res.total) || 0) myToDoStore.setState('appraisalRecordNum', parseInt(res.total) || 0)
......
...@@ -16,19 +16,6 @@ ...@@ -16,19 +16,6 @@
auto auto
> >
<template #default="{ item }"> <template #default="{ item }">
<up-swipe-action>
<up-swipe-action-item
@click="handleDelete(item)"
:options="[
{
text: '移除',
style: {
backgroundColor: '#f53f3f'
}
}
]"
></up-swipe-action-item>
</up-swipe-action>
<view class="item" @tap="goDetails(item)"> <view class="item" @tap="goDetails(item)">
<view class="item-title"> <view class="item-title">
<view class="left"> <view class="left">
...@@ -67,6 +54,7 @@ import { getArrangeWorkListForAppApi } from 'mocp/api/my-toDo' ...@@ -67,6 +54,7 @@ import { getArrangeWorkListForAppApi } from 'mocp/api/my-toDo'
import useUserStore from 'mocp/store/user' import useUserStore from 'mocp/store/user'
import useMyToDoStore from 'mocp/store/my-toDo' import useMyToDoStore from 'mocp/store/my-toDo'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { checkPermi } from 'mocp/utils/permission'
const userStore = useUserStore() const userStore = useUserStore()
const myToDoStore = useMyToDoStore() const myToDoStore = useMyToDoStore()
...@@ -78,11 +66,9 @@ const ps = defineProps({ ...@@ -78,11 +66,9 @@ const ps = defineProps({
} }
}) })
const goDetails = (data) => { const goDetails = (data) => {
if (checkPermi('/assignWork')) {
uni.$mocpJump.navigateTo('/panel/assign-work/details', { id: data.id }) uni.$mocpJump.navigateTo('/panel/assign-work/details', { id: data.id })
} }
//删除
const handleDelete = (data) => {
console.log(data)
} }
const handleQuery = ({ res }) => { const handleQuery = ({ res }) => {
myToDoStore.setState('assignWorkNum', parseInt(res.data.total) || 0) myToDoStore.setState('assignWorkNum', parseInt(res.data.total) || 0)
......
...@@ -13,18 +13,6 @@ ...@@ -13,18 +13,6 @@
auto auto
> >
<template #default="{ item }"> <template #default="{ item }">
<up-swipe-action>
<up-swipe-action-item
@click="handleDelete(item)"
:options="[
{
text: '移除',
style: {
backgroundColor: '#f53f3f'
}
}
]"
>
<view class="item" @tap="goDetails(item)"> <view class="item" @tap="goDetails(item)">
<view class="item-title"> <view class="item-title">
<view class="left"> <view class="left">
...@@ -47,8 +35,6 @@ ...@@ -47,8 +35,6 @@
</view> </view>
</view> </view>
</view> </view>
</up-swipe-action-item>
</up-swipe-action>
</template> </template>
</global-page> </global-page>
</up-collapse-item> </up-collapse-item>
...@@ -61,6 +47,7 @@ import useMoveDecisionStore from 'mocp/store/move-decision' ...@@ -61,6 +47,7 @@ import useMoveDecisionStore from 'mocp/store/move-decision'
import { getDecisiongetDecisionToDoApi } from 'mocp/api/my-toDo' import { getDecisiongetDecisionToDoApi } from 'mocp/api/my-toDo'
import useMyToDoStore from 'mocp/store/my-toDo' import useMyToDoStore from 'mocp/store/my-toDo'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { checkPermi } from 'mocp/utils/permission'
const myToDoStore = useMyToDoStore() const myToDoStore = useMyToDoStore()
const { getMoveDecisionNum } = storeToRefs(myToDoStore) const { getMoveDecisionNum } = storeToRefs(myToDoStore)
...@@ -73,13 +60,11 @@ const ps = defineProps({ ...@@ -73,13 +60,11 @@ const ps = defineProps({
//跳转 //跳转
const moveDecisionStore = useMoveDecisionStore() const moveDecisionStore = useMoveDecisionStore()
const goDetails = (data) => { const goDetails = (data) => {
if (checkPermi('/MoveDecision')) {
uni.$mocpJump.navigateTo('/panel/move-decision/details', { id: data.id }).then(() => { uni.$mocpJump.navigateTo('/panel/move-decision/details', { id: data.id }).then(() => {
moveDecisionStore.setState('details', data) moveDecisionStore.setState('details', data)
}) })
} }
//删除
const handleDelete = (data) => {
console.log(data)
} }
const handleQuery = ({ res }) => { const handleQuery = ({ res }) => {
myToDoStore.setState('moveDecisionNum', parseInt(res.data.total) || 0) myToDoStore.setState('moveDecisionNum', parseInt(res.data.total) || 0)
......
...@@ -13,19 +13,6 @@ ...@@ -13,19 +13,6 @@
auto auto
> >
<template #default="{ item }"> <template #default="{ item }">
<up-swipe-action>
<up-swipe-action-item
@click="handleDelete(item)"
:options="[
{
text: '移除',
style: {
backgroundColor: '#f53f3f'
}
}
]"
></up-swipe-action-item>
</up-swipe-action>
<view class="item" @tap="goDetails(item)"> <view class="item" @tap="goDetails(item)">
<view class="item-title"> <view class="item-title">
<view class="left"> <view class="left">
...@@ -35,7 +22,7 @@ ...@@ -35,7 +22,7 @@
<text class="txt u-line-1" v-if="item.ac">{{ item.ac }}</text> <text class="txt u-line-1" v-if="item.ac">{{ item.ac }}</text>
<text class="txt u-line-1" v-if="item.model">{{ item.model }}</text> <text class="txt u-line-1" v-if="item.model">{{ item.model }}</text>
<text class="txt u-line-1" v-if="item.aviation"> <text class="txt u-line-1" v-if="item.aviation">
{{ useGetDictByValue('', item.aviation, { data: baseStore.getAirlineSelect }) }} {{ useGetDictByValue('', item.aviation, { data: getAirlineSelect() }) }}
</text> </text>
</view> </view>
</view> </view>
...@@ -57,18 +44,17 @@ ...@@ -57,18 +44,17 @@
</template> </template>
<script setup> <script setup>
import useBaseStore from 'mocp/store/base'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import Day from 'mocp/utils/dayjs' import Day from 'mocp/utils/dayjs'
import useTechnologyEvaluationStore from 'mocp/store/technology-evaluation' import useTechnologyEvaluationStore from 'mocp/store/technology-evaluation'
import { getTechnicalEvaluationToDoApi } from 'mocp/api/my-toDo' import { getTechnicalEvaluationToDoApi } from 'mocp/api/my-toDo'
import useMyToDoStore from 'mocp/store/my-toDo' import useMyToDoStore from 'mocp/store/my-toDo'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { checkPermi, getAirlineSelect } from 'mocp/utils/permission'
const myToDoStore = useMyToDoStore() const myToDoStore = useMyToDoStore()
const { getTechnologyEvaluationNum } = storeToRefs(myToDoStore) const { getTechnologyEvaluationNum } = storeToRefs(myToDoStore)
const baseStore = useBaseStore()
const ps = defineProps({ const ps = defineProps({
height: { height: {
type: String, type: String,
...@@ -78,13 +64,11 @@ const ps = defineProps({ ...@@ -78,13 +64,11 @@ const ps = defineProps({
//跳转 //跳转
const technologyEvaluationStore = useTechnologyEvaluationStore() const technologyEvaluationStore = useTechnologyEvaluationStore()
const goDetails = (data) => { const goDetails = (data) => {
if (checkPermi('/technologyEvaluation')) {
uni.$mocpJump.navigateTo('/panel/technology-evaluation/details', { id: data.id }).then(() => { uni.$mocpJump.navigateTo('/panel/technology-evaluation/details', { id: data.id }).then(() => {
technologyEvaluationStore.setState('details', data) technologyEvaluationStore.setState('details', data)
}) })
} }
//删除
const handleDelete = (data) => {
console.log(data)
} }
const handleQuery = ({ res }) => { const handleQuery = ({ res }) => {
myToDoStore.setState('technologyEvaluationNum', parseInt(res.data.total) || 0) myToDoStore.setState('technologyEvaluationNum', parseInt(res.data.total) || 0)
......
...@@ -32,12 +32,12 @@ import useMyToDoStore from 'mocp/store/my-toDo' ...@@ -32,12 +32,12 @@ import useMyToDoStore from 'mocp/store/my-toDo'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
const { windowHeight, safeAreaInsets } = uni.getSystemInfoSync() const { windowHeight, safeAreaInsets } = uni.getSystemInfoSync()
const myToDoStore = useMyToDoStore()
const { getTotal, getTypeNum } = storeToRefs(myToDoStore)
//内容高度-nav高度-底部安全区-底部安全区 //内容高度-nav高度-底部安全区-底部安全区
const getHeight = computed(() => { const getHeight = computed(() => {
return windowHeight - 44 - safeAreaInsets?.top - safeAreaInsets?.bottom - 75 * 4 + 'px' return windowHeight - 44 - safeAreaInsets?.top - safeAreaInsets?.bottom - 75 * getTypeNum.value + 'px'
}) })
const myToDoStore = useMyToDoStore()
const { getTotal } = storeToRefs(myToDoStore)
//全部清除 //全部清除
const show = ref(false) const show = ref(false)
const handleRightClick = () => { const handleRightClick = () => {
...@@ -49,17 +49,11 @@ const confirm = () => { ...@@ -49,17 +49,11 @@ const confirm = () => {
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.item {
margin-bottom: 0;
}
.u-swipe-action { .u-swipe-action {
margin-bottom: 16rpx; margin-bottom: 16rpx;
} }
</style> </style>
<style lang="scss" scoped> <style lang="scss" scoped>
.item:last-child {
margin-bottom: 0;
}
:deep(.u-collapse-item) { :deep(.u-collapse-item) {
margin-bottom: 16rpx; margin-bottom: 16rpx;
.u-cell__body { .u-cell__body {
......
...@@ -255,7 +255,7 @@ const getCollapseValue = computed(() => { ...@@ -255,7 +255,7 @@ const getCollapseValue = computed(() => {
} }
.mocp-title { .mocp-title {
padding: 12rpx 32rpx 12rpx 32rpx; padding: 12rpx 32rpx 12rpx 32rpx;
background-color: #f7f8fa; background-color: $mocp-fill-1;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
...@@ -266,7 +266,7 @@ const getCollapseValue = computed(() => { ...@@ -266,7 +266,7 @@ const getCollapseValue = computed(() => {
} }
:deep(.u-collapse-item) { :deep(.u-collapse-item) {
.u-cell { .u-cell {
background: #f7f8fa; background: $mocp-fill-1;
} }
.u-collapse-item__content { .u-collapse-item__content {
.u-cell { .u-cell {
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="isOpen" :borderBottom="true"> <up-form-item label="状态" prop="isOpen" :borderBottom="true">
<global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="mae_isOpen"></global-picker> <global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="mae_isOpen"></global-picker>
...@@ -10,15 +9,27 @@ ...@@ -10,15 +9,27 @@
pickAlign="right" pickAlign="right"
v-model="formData.acTerminal" v-model="formData.acTerminal"
clearable clearable
:options="baseStore.getTerminalSelect" :options="getTerminalSelect('机械不正常事件')"
filter filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="acOwn" :borderBottom="true"> <up-form-item label="航司" prop="acOwn" :borderBottom="true">
<global-picker v-model="formData.acOwn" pickAlign="right" :options="baseStore.getAirlineSelect" clearable filter></global-picker> <global-picker
v-model="formData.acOwn"
pickAlign="right"
:options="getAirlineSelect('机械不正常事件')"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="acType" :borderBottom="true"> <up-form-item label="机型" prop="acType" :borderBottom="true">
<global-picker v-model="formData.acType" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker> <global-picker
v-model="formData.acType"
pickAlign="right"
:options="getTypeSelect('机械不正常事件')"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机号" prop="ac" :borderBottom="true"> <up-form-item label="机号" prop="ac" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker> <global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker>
...@@ -43,18 +54,7 @@ ...@@ -43,18 +54,7 @@
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -63,9 +63,9 @@ import { storeToRefs } from 'pinia' ...@@ -63,9 +63,9 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useOperationalSurveyStore from 'mocp/store/operationalSurvey' import useOperationalSurveyStore from 'mocp/store/operationalSurvey'
import { getAirlineSelect, getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore()
const { const {
selectList: { deviceNumList } selectList: { deviceNumList }
} = useBaseStore() } = useBaseStore()
...@@ -84,13 +84,4 @@ const handleConfirm = () => { ...@@ -84,13 +84,4 @@ const handleConfirm = () => {
uni.$emit('operationalSurveyReload') uni.$emit('operationalSurveyReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -183,7 +183,7 @@ const getCollapseValue = computed(() => { ...@@ -183,7 +183,7 @@ const getCollapseValue = computed(() => {
} }
.mocp-title { .mocp-title {
padding: 12rpx 32rpx 12rpx 32rpx; padding: 12rpx 32rpx 12rpx 32rpx;
background-color: #f7f8fa; background-color: $mocp-fill-1;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
...@@ -194,7 +194,7 @@ const getCollapseValue = computed(() => { ...@@ -194,7 +194,7 @@ const getCollapseValue = computed(() => {
} }
:deep(.u-collapse-item) { :deep(.u-collapse-item) {
.u-cell { .u-cell {
background: #f7f8fa; background: $mocp-fill-1;
} }
.u-collapse-item__content { .u-collapse-item__content {
.u-cell { .u-cell {
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="isOpen" :borderBottom="true"> <up-form-item label="状态" prop="isOpen" :borderBottom="true">
<global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="qa_isOpen"></global-picker> <global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="qa_isOpen"></global-picker>
...@@ -9,17 +8,29 @@ ...@@ -9,17 +8,29 @@
<global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker> <global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="acType" :borderBottom="true"> <up-form-item label="机型" prop="acType" :borderBottom="true">
<global-picker v-model="formData.acType" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker> <global-picker
v-model="formData.acType"
pickAlign="right"
:options="getTypeSelect('维修控制-品质分析')"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="acOwn" :borderBottom="true"> <up-form-item label="航司" prop="acOwn" :borderBottom="true">
<global-picker v-model="formData.acOwn" pickAlign="right" :options="baseStore.getAirlineSelect" clearable filter></global-picker> <global-picker
v-model="formData.acOwn"
pickAlign="right"
:options="getAirlineSelect('维修控制-品质分析')"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航站" prop="acTerminal" :borderBottom="true"> <up-form-item label="航站" prop="acTerminal" :borderBottom="true">
<global-picker <global-picker
pickAlign="right" pickAlign="right"
v-model="formData.acTerminal" v-model="formData.acTerminal"
clearable clearable
:options="baseStore.getTerminalSelect" :options="getTerminalSelect('维修控制-品质分析')"
filter filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
...@@ -27,30 +38,10 @@ ...@@ -27,30 +38,10 @@
<global-picker v-model="formData.dimension1" pickAlign="right" :options="getDimension1" clearable filter></global-picker> <global-picker v-model="formData.dimension1" pickAlign="right" :options="getDimension1" clearable filter></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="责任单位" prop="liabilityBelong" :borderBottom="true"> <up-form-item label="责任单位" prop="liabilityBelong" :borderBottom="true">
<global-picker <global-picker v-model="formData.liabilityBelong" pickAlign="right" paramsType="RcQaLiabilityBelong" clearable filter></global-picker>
v-model="formData.liabilityBelong"
pickAlign="right"
:options="getParamsByType('RcQaLiabilityBelong')"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
<!-- <up-form-item label="事件描述" prop="eventMsg" :borderBottom="true">
<up-input v-model="formData.eventMsg" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item> -->
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -59,10 +50,9 @@ import { storeToRefs } from 'pinia' ...@@ -59,10 +50,9 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useQualityAnalysisStore from 'mocp/store/qualityAnalysis' import useQualityAnalysisStore from 'mocp/store/qualityAnalysis'
import { getParamsByType } from 'mocp/hooks/use-params/useParams' import { getAirlineSelect, getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore()
const { const {
selectList: { deviceNumList } selectList: { deviceNumList }
} = useBaseStore() } = useBaseStore()
...@@ -81,13 +71,4 @@ const handleConfirm = () => { ...@@ -81,13 +71,4 @@ const handleConfirm = () => {
uni.$emit('qualityAnalysisReload') uni.$emit('qualityAnalysisReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -33,29 +33,18 @@ ...@@ -33,29 +33,18 @@
:placeholder="formData.aviation ? '' : '请选择机号自动关联'" :placeholder="formData.aviation ? '' : '请选择机号自动关联'"
> >
<template #suffix> <template #suffix>
{{ useGetDictByValue('', formData.aviation, { data: baseStore.getAirlineSelect }) }} {{ useGetDictByValue('', formData.aviation, { data: getAirlineSelect() }) }}
</template> </template>
</up-input> </up-input>
</up-form-item> </up-form-item>
<up-form-item label="航站" prop="terminal" :borderBottom="true" required> <up-form-item label="航站" prop="terminal" :borderBottom="true" required>
<global-picker <global-picker pickAlign="right" v-model="formData.terminal" clearable :options="getTerminalSelect()" filter></global-picker>
pickAlign="right"
v-model="formData.terminal"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="ATA章节" prop="ata" :borderBottom="true" required> <up-form-item label="ATA章节" prop="ata" :borderBottom="true" required>
<global-picker v-model="formData.ata" pickAlign="right" :options="baseStore.getATASelect" clearable filter></global-picker> <global-picker v-model="formData.ata" pickAlign="right" :options="baseStore.getATASelect" clearable filter></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="专业" prop="specialty" :borderBottom="true" required> <up-form-item label="专业" prop="specialty" :borderBottom="true" required>
<global-picker <global-picker v-model="formData.specialty" pickAlign="right" paramsType="MajorCategory" clearable></global-picker>
v-model="formData.specialty"
pickAlign="right"
:options="getParamsByType('MajorCategory')"
clearable
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="发动机型号" prop="engineModel" :borderBottom="true"> <up-form-item label="发动机型号" prop="engineModel" :borderBottom="true">
<global-picker <global-picker
...@@ -105,11 +94,11 @@ ...@@ -105,11 +94,11 @@
<script setup> <script setup>
import useBaseStore from 'mocp/store/base' import useBaseStore from 'mocp/store/base'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { formData, formRef, relatedSeatSet, rules } from './constants/add.compositions' import { formData, formRef, relatedSeatSet, rules } from './constants/add.compositions'
import { onBeforeOpen, changeAc, handleSubmit } from './constants/add.functionals' import { onBeforeOpen, changeAc, handleSubmit } from './constants/add.functionals'
import useUserStore from 'mocp/store/user' import useUserStore from 'mocp/store/user'
import { getAirlineSelect, getTerminalSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore() const baseStore = useBaseStore()
const userStore = useUserStore() const userStore = useUserStore()
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
<up-cell title="机号" :value="details.machineNumber || '-'"></up-cell> <up-cell title="机号" :value="details.machineNumber || '-'"></up-cell>
<up-cell title="机型" :value="details.model || '-'"></up-cell> <up-cell title="机型" :value="details.model || '-'"></up-cell>
<up-cell title="相关席位" :value="details.relevantSeatsName || '-'"></up-cell> <up-cell title="相关席位" :value="details.relevantSeatsName || '-'"></up-cell>
<up-cell title="航司" :value="useGetDictByValue('', details.aviation, { data: baseStore.getAirlineSelect }) || '-'"></up-cell> <up-cell title="航司" :value="useGetDictByValue('', details.aviation, { data: getAirlineSelect() }) || '-'"></up-cell>
<up-cell title="航站" :value="details.terminal || '-'"></up-cell> <up-cell title="航站" :value="details.terminal || '-'"></up-cell>
<up-cell title="ATA章节" :value="details.ata || '-'"></up-cell> <up-cell title="ATA章节" :value="details.ata || '-'"></up-cell>
<up-cell title="专业" :value="getParamNameByValue('MajorCategory', details.specialty) || '-'"></up-cell> <up-cell title="专业" :value="getParamNameByValue('MajorCategory', details.specialty) || '-'"></up-cell>
...@@ -35,10 +35,9 @@ ...@@ -35,10 +35,9 @@
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import useSupportApplicationStore from 'mocp/store/support-application' import useSupportApplicationStore from 'mocp/store/support-application'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import useBaseStore from 'mocp/store/base'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams' import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import { getAirlineSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore()
const supportApplicationStore = useSupportApplicationStore() const supportApplicationStore = useSupportApplicationStore()
const { details } = storeToRefs(supportApplicationStore) const { details } = storeToRefs(supportApplicationStore)
</script> </script>
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
@handleRightClick="handleRightClick" @handleRightClick="handleRightClick"
:api="getSupportRequestListApi" :api="getSupportRequestListApi"
:padding="24" :padding="24"
showFooterBtn :showFooterBtn="checkPermi('/supportApplication/start')"
footerBtnText="新建" footerBtnText="新建"
@handleFooterClick="handleFooterClick" @handleFooterClick="handleFooterClick"
> >
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
<text class="txt u-line-1" v-if="item.machineNumber">{{ item.machineNumber }}</text> <text class="txt u-line-1" v-if="item.machineNumber">{{ item.machineNumber }}</text>
<text class="txt u-line-1" v-if="item.model">{{ item.model }}</text> <text class="txt u-line-1" v-if="item.model">{{ item.model }}</text>
<text class="txt u-line-1" v-if="item.aviation"> <text class="txt u-line-1" v-if="item.aviation">
{{ useGetDictByValue('', item.aviation, { data: baseStore.getAirlineSelect }) }} {{ useGetDictByValue('', item.aviation, { data: getAirlineSelect() }) }}
</text> </text>
</view> </view>
<view class="label"> <view class="label">
...@@ -52,9 +52,8 @@ import { storeToRefs } from 'pinia' ...@@ -52,9 +52,8 @@ import { storeToRefs } from 'pinia'
import { onUnload } from '@dcloudio/uni-app' import { onUnload } from '@dcloudio/uni-app'
import { getSupportRequestListApi } from 'mocp/api/support-application' import { getSupportRequestListApi } from 'mocp/api/support-application'
import useSupportApplicationStore from 'mocp/store/support-application' import useSupportApplicationStore from 'mocp/store/support-application'
import useBaseStore from 'mocp/store/base' import { checkPermi, getAirlineSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore()
//跳转 //跳转
const supportApplicationStore = useSupportApplicationStore() const supportApplicationStore = useSupportApplicationStore()
const { searchData } = storeToRefs(supportApplicationStore) const { searchData } = storeToRefs(supportApplicationStore)
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="state" :borderBottom="true"> <up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker v-model="formData.state" pickAlign="right" clearable dictkey="wa_state"></global-picker> <global-picker v-model="formData.state" pickAlign="right" clearable dictkey="wa_state"></global-picker>
...@@ -9,13 +8,19 @@ ...@@ -9,13 +8,19 @@
<global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter></global-picker> <global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="model" :borderBottom="true"> <up-form-item label="机型" prop="model" :borderBottom="true">
<global-picker v-model="formData.model" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker> <global-picker
v-model="formData.model"
pickAlign="right"
:options="getTypeSelect('技术支援-支援申请')"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="aviation" :borderBottom="true"> <up-form-item label="航司" prop="aviation" :borderBottom="true">
<global-picker <global-picker
v-model="formData.aviation" v-model="formData.aviation"
pickAlign="right" pickAlign="right"
:options="baseStore.getAirlineSelect" :options="getAirlineSelect('技术支援-支援申请')"
clearable clearable
filter filter
></global-picker> ></global-picker>
...@@ -25,40 +30,18 @@ ...@@ -25,40 +30,18 @@
pickAlign="right" pickAlign="right"
v-model="formData.terminal" v-model="formData.terminal"
clearable clearable
:options="baseStore.getTerminalSelect" :options="getTerminalSelect('技术支援-支援申请')"
filter filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="专业" prop="specialty" :borderBottom="true"> <up-form-item label="专业" prop="specialty" :borderBottom="true">
<global-picker <global-picker v-model="formData.specialty" pickAlign="right" paramsType="MajorCategory" clearable></global-picker>
v-model="formData.specialty"
pickAlign="right"
:options="getParamsByType('MajorCategory')"
clearable
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="发动机型号" prop="engineModel" :borderBottom="true"> <up-form-item label="发动机型号" prop="engineModel" :borderBottom="true">
<global-picker <global-picker v-model="formData.engineModel" pickAlign="right" :options="baseStore.getEngineSelect" clearable filter></global-picker>
v-model="formData.engineModel"
pickAlign="right"
:options="baseStore.getEngineSelect"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -67,7 +50,7 @@ import { storeToRefs } from 'pinia' ...@@ -67,7 +50,7 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useSupportApplicationStore from 'mocp/store/support-application' import useSupportApplicationStore from 'mocp/store/support-application'
import { getParamsByType } from 'mocp/hooks/use-params/useParams' import { getAirlineSelect, getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore() const baseStore = useBaseStore()
...@@ -89,13 +72,4 @@ const handleConfirm = () => { ...@@ -89,13 +72,4 @@ const handleConfirm = () => {
uni.$emit('supportApplicationReload') uni.$emit('supportApplicationReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
:tabList="tabList" :tabList="tabList"
tabValueField="state" tabValueField="state"
tabsWidth="50%" tabsWidth="50%"
chooseDataType="checkbox" :chooseDataType="checkPermi('/workbench/edit') ? 'checkbox' : ''"
@handleChooseData="handleChooseData" @handleChooseData="handleChooseData"
localPaging localPaging
alone alone
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
<supportedTaskItem :item="item" /> <supportedTaskItem :item="item" />
</template> </template>
<template #bottom> <template #bottom v-if="checkPermi('/workbench/edit')">
<view class="footer-btn"> <view class="footer-btn">
<up-row gutter="10"> <up-row gutter="10">
<up-col span="6"> <up-col span="6">
...@@ -44,6 +44,7 @@ import supportedTaskItem from './components/supportedTaskItem.vue' ...@@ -44,6 +44,7 @@ import supportedTaskItem from './components/supportedTaskItem.vue'
import { followAcTagAll } from 'mocp/utils/getFlightList' import { followAcTagAll } from 'mocp/utils/getFlightList'
import { orderBy } from 'lodash' import { orderBy } from 'lodash'
import Day from 'mocp/utils/dayjs' import Day from 'mocp/utils/dayjs'
import { checkPermi } from 'mocp/utils/permission'
const paging = ref(null) const paging = ref(null)
const showAction = ref(false) const showAction = ref(false)
......
...@@ -182,7 +182,7 @@ const { details } = storeToRefs(technicalAnalysisStore) ...@@ -182,7 +182,7 @@ const { details } = storeToRefs(technicalAnalysisStore)
} }
.mocp-title { .mocp-title {
padding: 12rpx 32rpx 12rpx 32rpx; padding: 12rpx 32rpx 12rpx 32rpx;
background-color: #f7f8fa; background-color: $mocp-fill-1;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
...@@ -194,7 +194,7 @@ const { details } = storeToRefs(technicalAnalysisStore) ...@@ -194,7 +194,7 @@ const { details } = storeToRefs(technicalAnalysisStore)
} }
:deep(.u-collapse-item) { :deep(.u-collapse-item) {
.u-cell { .u-cell {
background: #f7f8fa; background: $mocp-fill-1;
} }
.u-collapse-item__content { .u-collapse-item__content {
.u-cell { .u-cell {
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="isOpen" :borderBottom="true"> <up-form-item label="状态" prop="isOpen" :borderBottom="true">
<global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="ta_isOpen"></global-picker> <global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="ta_isOpen"></global-picker>
...@@ -9,44 +8,40 @@ ...@@ -9,44 +8,40 @@
<global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker> <global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="acType" :borderBottom="true"> <up-form-item label="机型" prop="acType" :borderBottom="true">
<global-picker v-model="formData.acType" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker> <global-picker
v-model="formData.acType"
pickAlign="right"
:options="getTypeSelect('机械不正常事件')"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="acOwn" :borderBottom="true"> <up-form-item label="航司" prop="acOwn" :borderBottom="true">
<global-picker v-model="formData.acOwn" pickAlign="right" :options="baseStore.getAirlineSelect" clearable filter></global-picker>
</up-form-item>
<up-form-item label="航站" prop="acTerminal" :borderBottom="true">
<global-picker <global-picker
v-model="formData.acOwn"
pickAlign="right" pickAlign="right"
v-model="formData.acTerminal" :options="getAirlineSelect('机械不正常事件')"
clearable clearable
:options="baseStore.getTerminalSelect"
filter filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="专业类别" prop="majorClass" :borderBottom="true"> <up-form-item label="航站" prop="acTerminal" :borderBottom="true">
<global-picker <global-picker
v-model="formData.majorClass"
pickAlign="right" pickAlign="right"
:options="getParamsByType('MajorCategory')" v-model="formData.acTerminal"
clearable clearable
:options="getTerminalSelect('机械不正常事件')"
filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="专业类别" prop="majorClass" :borderBottom="true">
<global-picker v-model="formData.majorClass" pickAlign="right" paramsType="MajorCategory" clearable></global-picker>
</up-form-item>
<up-form-item label="ATA章节" prop="ataChapter" :borderBottom="true"> <up-form-item label="ATA章节" prop="ataChapter" :borderBottom="true">
<global-picker v-model="formData.ataChapter" pickAlign="right" :options="baseStore.getATAChecked()" clearable filter /> <global-picker v-model="formData.ataChapter" pickAlign="right" :options="baseStore.getATAChecked()" clearable filter />
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -55,7 +50,7 @@ import { storeToRefs } from 'pinia' ...@@ -55,7 +50,7 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useTechnicalAnalysisStore from 'mocp/store/technicalAnalysis' import useTechnicalAnalysisStore from 'mocp/store/technicalAnalysis'
import { getParamsByType } from 'mocp/hooks/use-params/useParams' import { getAirlineSelect, getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore() const baseStore = useBaseStore()
...@@ -77,13 +72,4 @@ const handleConfirm = () => { ...@@ -77,13 +72,4 @@ const handleConfirm = () => {
uni.$emit('technicalAnalysisReload') uni.$emit('technicalAnalysisReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
pickAlign="right" pickAlign="right"
v-model="formData.estimateType" v-model="formData.estimateType"
clearable clearable
:options="getParamsByType('EvaluateEstimateType')" paramsType="EvaluateEstimateType"
emptyValue="0" emptyValue="0"
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
...@@ -54,7 +54,6 @@ import useTechnologyEvaluationStore from 'mocp/store/technology-evaluation' ...@@ -54,7 +54,6 @@ import useTechnologyEvaluationStore from 'mocp/store/technology-evaluation'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { reactive, ref } from 'vue' import { reactive, ref } from 'vue'
import { addEngineeringApi } from 'mocp/api/technology-evaluation' import { addEngineeringApi } from 'mocp/api/technology-evaluation'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const technologyEvaluationStore = useTechnologyEvaluationStore() const technologyEvaluationStore = useTechnologyEvaluationStore()
const { details } = storeToRefs(technologyEvaluationStore) const { details } = storeToRefs(technologyEvaluationStore)
......
...@@ -13,11 +13,7 @@ ...@@ -13,11 +13,7 @@
<view class="form-title">非持续适航文件</view> <view class="form-title">非持续适航文件</view>
<view class="form-item"> <view class="form-item">
<up-form-item :borderBottom="true"> <up-form-item :borderBottom="true">
<global-checkbox <global-checkbox v-model="formData.nonFileType" placement="column" paramsType="EvaluateNonFileType"></global-checkbox>
v-model="formData.nonFileType"
placement="column"
:options="getParamsByType('EvaluateNonFileType')"
></global-checkbox>
</up-form-item> </up-form-item>
<up-form-item label="非持续适航文件描述" :borderBottom="true" labelPosition="top"> <up-form-item label="非持续适航文件描述" :borderBottom="true" labelPosition="top">
<up-textarea placeholder="请输入" :height="40" border="none" v-model="formData.nonName"></up-textarea> <up-textarea placeholder="请输入" :height="40" border="none" v-model="formData.nonName"></up-textarea>
...@@ -28,11 +24,7 @@ ...@@ -28,11 +24,7 @@
<view class="form-title">持续适航文件</view> <view class="form-title">持续适航文件</view>
<view class="form-item"> <view class="form-item">
<up-form-item :borderBottom="true"> <up-form-item :borderBottom="true">
<global-checkbox <global-checkbox v-model="formData.fileType" placement="column" paramsType="EvaluateFileType"></global-checkbox>
v-model="formData.fileType"
placement="column"
:options="getParamsByType('EvaluateFileType')"
></global-checkbox>
</up-form-item> </up-form-item>
<up-form-item label="持续适航文件描述" :borderBottom="true" labelPosition="top"> <up-form-item label="持续适航文件描述" :borderBottom="true" labelPosition="top">
<up-textarea placeholder="请输入" :height="40" border="none" v-model="formData.fileTypeName"></up-textarea> <up-textarea placeholder="请输入" :height="40" border="none" v-model="formData.fileTypeName"></up-textarea>
...@@ -43,11 +35,7 @@ ...@@ -43,11 +35,7 @@
<view class="form-title">批准类别</view> <view class="form-title">批准类别</view>
<view class="form-item"> <view class="form-item">
<up-form-item :borderBottom="true"> <up-form-item :borderBottom="true">
<global-checkbox <global-checkbox v-model="formData.ratifyType" placement="column" paramsType="EvaluateRatifyType"></global-checkbox>
v-model="formData.ratifyType"
placement="column"
:options="getParamsByType('EvaluateRatifyType')"
></global-checkbox>
</up-form-item> </up-form-item>
</view> </view>
</view> </view>
...@@ -62,7 +50,6 @@ import useTechnologyEvaluationStore from 'mocp/store/technology-evaluation' ...@@ -62,7 +50,6 @@ import useTechnologyEvaluationStore from 'mocp/store/technology-evaluation'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { reactive } from 'vue' import { reactive } from 'vue'
import { addSupportFileApi } from 'mocp/api/technology-evaluation' import { addSupportFileApi } from 'mocp/api/technology-evaluation'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const technologyEvaluationStore = useTechnologyEvaluationStore() const technologyEvaluationStore = useTechnologyEvaluationStore()
const { details } = storeToRefs(technologyEvaluationStore) const { details } = storeToRefs(technologyEvaluationStore)
...@@ -104,7 +91,7 @@ const handleSave = async () => { ...@@ -104,7 +91,7 @@ const handleSave = async () => {
.form { .form {
&-title { &-title {
padding: 20rpx 32rpx; padding: 20rpx 32rpx;
background: #f7f8fa; background: $mocp-fill-1;
color: $mocp-text-5; color: $mocp-text-5;
} }
&-item { &-item {
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<view class="details-body-item"> <view class="details-body-item">
<global-field <global-field
label="航司:" label="航司:"
:value="useGetDictByValue('', details.aviation, { data: baseStore.getAirlineSelect }) || '-'" :value="useGetDictByValue('', details.aviation, { data: getAirlineSelect() }) || '-'"
></global-field> ></global-field>
<global-field label="航站:" :value="baseStore.getTerminalObject[details.terminal] || '-'"></global-field> <global-field label="航站:" :value="baseStore.getTerminalObject[details.terminal] || '-'"></global-field>
</view> </view>
...@@ -213,6 +213,7 @@ import useBaseStore from 'mocp/store/base' ...@@ -213,6 +213,7 @@ import useBaseStore from 'mocp/store/base'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { computed } from 'vue' import { computed } from 'vue'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams' import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import { getAirlineSelect } from 'mocp/utils/permission'
const technologyEvaluationStore = useTechnologyEvaluationStore() const technologyEvaluationStore = useTechnologyEvaluationStore()
const { details } = storeToRefs(technologyEvaluationStore) const { details } = storeToRefs(technologyEvaluationStore)
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
<text class="txt u-line-1" v-if="item.ac">{{ item.ac }}</text> <text class="txt u-line-1" v-if="item.ac">{{ item.ac }}</text>
<text class="txt u-line-1" v-if="item.model">{{ item.model }}</text> <text class="txt u-line-1" v-if="item.model">{{ item.model }}</text>
<text class="txt u-line-1" v-if="item.aviation"> <text class="txt u-line-1" v-if="item.aviation">
{{ useGetDictByValue('', item.aviation, { data: baseStore.getAirlineSelect }) }} {{ useGetDictByValue('', item.aviation, { data: getAirlineSelect() }) }}
</text> </text>
</view> </view>
</view> </view>
...@@ -49,12 +49,11 @@ import { ref } from 'vue' ...@@ -49,12 +49,11 @@ import { ref } from 'vue'
import Day from 'mocp/utils/dayjs' import Day from 'mocp/utils/dayjs'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import useTechnologyEvaluationStore from 'mocp/store/technology-evaluation' import useTechnologyEvaluationStore from 'mocp/store/technology-evaluation'
import useBaseStore from 'mocp/store/base'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { onUnload } from '@dcloudio/uni-app' import { onUnload } from '@dcloudio/uni-app'
import { getTechnicalEvaluationApi } from 'mocp/api/technology-evaluation' import { getTechnicalEvaluationApi } from 'mocp/api/technology-evaluation'
import { getAirlineSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore()
//跳转 //跳转
const technologyEvaluationStore = useTechnologyEvaluationStore() const technologyEvaluationStore = useTechnologyEvaluationStore()
const { searchData } = storeToRefs(technologyEvaluationStore) const { searchData } = storeToRefs(technologyEvaluationStore)
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto" :model="formData" ref="formRef"> <up-form labelPosition="left" labelWidth="auto" :model="formData" ref="formRef">
<up-form-item label="状态" prop="state" :borderBottom="true"> <up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker v-model="formData.state" pickAlign="right" clearable dictkey="te_state"></global-picker> <global-picker v-model="formData.state" pickAlign="right" clearable dictkey="te_state"></global-picker>
...@@ -9,13 +8,19 @@ ...@@ -9,13 +8,19 @@
<global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker> <global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="model" :borderBottom="true"> <up-form-item label="机型" prop="model" :borderBottom="true">
<global-picker v-model="formData.model" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker> <global-picker
v-model="formData.model"
pickAlign="right"
:options="getTypeSelect('技术支援-技术评估')"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="aviation" :borderBottom="true"> <up-form-item label="航司" prop="aviation" :borderBottom="true">
<global-picker <global-picker
v-model="formData.aviation" v-model="formData.aviation"
pickAlign="right" pickAlign="right"
:options="baseStore.getAirlineSelect" :options="getAirlineSelect('技术支援-技术评估')"
clearable clearable
filter filter
></global-picker> ></global-picker>
...@@ -32,18 +37,7 @@ ...@@ -32,18 +37,7 @@
></global-calendar> ></global-calendar>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -52,6 +46,7 @@ import useTechnologyEvaluationStore from 'mocp/store/technology-evaluation' ...@@ -52,6 +46,7 @@ import useTechnologyEvaluationStore from 'mocp/store/technology-evaluation'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import { getAirlineSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore() const baseStore = useBaseStore()
...@@ -73,13 +68,4 @@ const handleConfirm = () => { ...@@ -73,13 +68,4 @@ const handleConfirm = () => {
uni.$emit('technologyEvaluationReload') uni.$emit('technologyEvaluationReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<template>
<global-page title="新增非计划申请" showFooterBtn footerBtnText="提交" @handleFooterClick="handleFooterClick">
<view class="mocp-form">
<up-form labelPosition="left" labelWidth="auto" :model="formData" :rules="rules" ref="formRef">
<up-form-item label="工作包编号" prop="packageNo" :borderBottom="true" required>
<up-input
v-model="formData.packageNo"
border="none"
inputAlign="right"
placeholder="请输入"
clearable
@blur="checkPakgeNo"
></up-input>
</up-form-item>
<up-form-item label="延期天数" prop="delayDay" :borderBottom="true" required>
<up-input v-model="formData.delayDay" type="number" border="none" inputAlign="right" placeholder="请输入" clearable></up-input>
</up-form-item>
<up-form-item label="申请原因" prop="warningReason" :borderBottom="true" required>
<global-picker v-model="formData.warningReason" pickAlign="right" paramsType="WarningReason" clearable multiple></global-picker>
</up-form-item>
<up-form-item label="缺件航材" :borderBottom="true">
<global-switch v-model="formData.materialDelay" switchAlign="right"></global-switch>
</up-form-item>
<up-form-item :borderBottom="true" v-if="formData.materialDelay == 1">
<view style="width: 100%">
<view class="materialDelay__input" v-for="(item, index) in materialPns" :key="index">
<up-input v-model="materialPns[index]" placeholder="请输入" clearable />
<view class="materialDelay__icon">
<up-icon
name="minus-circle-fill"
size="22"
style="margin-left: 10rpx"
v-if="index > 0"
@tap="materialPns.splice(index, 1)"
></up-icon>
<up-icon
name="plus-circle-fill"
size="22"
style="margin-left: 10rpx"
v-if="index + 1 == materialPns.length"
@tap="addMaterialPns"
></up-icon>
</view>
</view>
</view>
</up-form-item>
<up-form-item label="具体原因" prop="reason" :borderBottom="true" labelPosition="top" required>
<up-textarea placeholder="请输入" :height="40" border="none" v-model="formData.reason"></up-textarea>
</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>
</up-form>
</view>
</global-page>
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app'
import { formData, formRef, materialPns, rules } from './constants/add.compositions'
import { handleSubmit, checkPakgeNo, addMaterialPns, resetData } from './constants/add.functionals'
const handleFooterClick = () => {
handleSubmit()
}
onLoad(() => {
resetData()
})
</script>
<style lang="scss" scoped>
.mocp-form {
background: #fff;
padding: 0 32rpx;
.materialDelay__input {
width: 100%;
display: flex;
margin-bottom: 10rpx;
&:last-child {
margin-bottom: 0;
}
}
.materialDelay__icon {
width: 100rpx;
display: flex;
}
}
</style>
import { reactive, ref } from 'vue'
export const formRef = ref()
//验证
export const rules = reactive({
packageNo: [
{
required: true,
message: '请输入工作包编号',
trigger: ['blur', 'change']
}
],
warningReason: [
{
required: true,
message: '请输入申请原因',
trigger: ['blur', 'change']
}
],
reason: [
{
required: true,
message: '请输入具体原因',
trigger: ['blur', 'change']
}
],
delayDay: [
{
required: true,
type: 'number',
message: '请输入延期天数',
trigger: ['blur', 'change']
}
],
approver: [
{
required: true,
message: '请选择审核人',
trigger: ['blur']
}
]
})
// 表单数据
export const materialPns = ref([''])
export const formData = reactive({
packageNo: '',
delayDay: '',
approver: '',
warningReason: '',
materialDelay: '0',
materialPns: '',
reason: '',
delayDay: null
})
import { addUnplanApplyApi, checkPakgeNoApi } from 'mocp/api/unplanApply'
import { formData, formRef, materialPns } from './add.compositions'
export const resetData = () => {
materialPns.value = ['']
Object.assign(formData, {
packageNo: '',
delayDay: '',
approver: '',
warningReason: '',
materialDelay: '0',
materialPns: '',
reason: '',
delayDay: null
})
}
//验证包号
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 handleSubmit = async () => {
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 })
if (res.code == 200) {
uni.$mocpJump.navigateBack()
uni.$mocpMessage.success(res.message)
uni.$emit('unplanApplyReload')
} else {
uni.$mocpMessage.error(res.message)
}
}
import { reactive, ref } from 'vue'
export const formRef = ref()
export const rules = reactive({
examineReason: [
{
required: true,
message: '请输入审核说明',
trigger: ['blur', 'change']
}
]
})
export const showAction = ref(false)
export const showConfirm = ref(false)
export const formData = reactive({
examineReason: ''
})
import { changeExemptStatusApi, changeStatusApi } from 'mocp/api/unplanApply'
import { formData, formRef } from './details.compositions'
export const handleSelect = async (value, id) => {
if (value !== '3') {
await formRef.value?.validate()
}
const params = {
id,
applyStatus: value,
examineReason: formData.examineReason
}
const res = await changeStatusApi(params, { loading: true })
if (res.code == 200) {
uni.$mocpJump.navigateBack()
uni.$emit('unplanApplyReload')
uni.$mocpMessage.success(res.message)
} else {
uni.$mocpMessage.error(res.message)
}
}
export const changeExemptStatus = async (id, status, callBack) => {
const res = await changeExemptStatusApi({ id, status }, { loading: '修改中...' })
if (res.code == 200) {
uni.$mocpMessage.success(res.message)
callBack()
} else {
uni.$mocpMessage.error(res.message)
}
}
<template>
<global-page
title="非计划申请详情"
:showFooterBtn="showFooterBtn"
:footerBtnText="isCreateUser ? '撤销' : '审核'"
@handleFooterClick="handleFooterClick"
>
<view class="mocp-cell">
<up-cell-group v-if="details">
<up-cell title="是否豁免">
<template #value>
<global-switch v-model="details.exemptStatus" switchAlign="right" @change="changeExempt"></global-switch>
</template>
</up-cell>
<up-cell title="审核状态">
<template #value>
<global-text-status :value="details.applyStatus" dictkey="unPlan_applyStatus"></global-text-status>
</template>
</up-cell>
<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="timeStampFormat(details.startTime) || '-'"></up-cell>
<up-cell title="计划结束时间" :value="timeStampFormat(details.endTime) || '-'"></up-cell>
<up-cell title="延期天数" :value="details.delayDay || '-'"></up-cell>
<up-cell title="申请原因">
<template #label>
{{ getParamNameByValue('WarningReason', details.warningReason, { isArray: true }) || '-' }}
</template>
</up-cell>
<up-cell title="缺件航材">
<template #label>
<template v-if="details.materialPns && details.materialDelay == '1'">
<view v-for="(item, index) in details.materialPns.split(',')" :key="index">{{ item }}</view>
</template>
<view v-else></view>
</template>
</up-cell>
<up-cell title="具体原因">
<template #label>{{ details.reason || '-' }}</template>
</up-cell>
<up-cell title="申请人" :value="details.createUserName || '-'"></up-cell>
<up-cell title="申请时间" :value="timeStampFormat(details.createTime) || '-'"></up-cell>
<template v-if="['1', '2'].includes(details.applyStatus)">
<up-cell title="审核人" :value="details.approverName || '-'"></up-cell>
<up-cell title="审核时间" :value="timeStampFormat(details.updateTime) || '-'"></up-cell>
<up-cell title="审核说明">
<template #label>{{ details.examineReason || '-' }}</template>
</up-cell>
</template>
<view class="mocp-form" v-if="isApprover && details.applyStatus == '0'">
<up-form labelPosition="left" labelWidth="auto" :model="formData" :rules="rules" ref="formRef">
<up-form-item label="审核说明" prop="examineReason" :borderBottom="true" required>
<up-input v-model="formData.examineReason" border="none" inputAlign="right" placeholder="请输入" clearable></up-input>
</up-form-item>
</up-form>
</view>
</up-cell-group>
</view>
<global-action-sheet
v-model="showAction"
title="审核"
description="审核本条非计划申请"
:options="[
{ label: '审核驳回', value: '2' },
{ label: '审核通过', value: '1' }
]"
@select="(value) => handleSelect(value, details.id)"
></global-action-sheet>
<up-modal
:width="250"
content="确认撤销审核吗?"
:show="showConfirm"
showCancelButton
closeOnClickOverlay
@confirm="handleSelect('3', details.id)"
@cancel="showConfirm = false"
@close="showConfirm = false"
></up-modal>
</global-page>
</template>
<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 { timeStampFormat } from 'mocp/utils/tool'
import { changeExemptStatus, handleSelect } from './constants/details.functionals'
import { formData, rules, formRef, showAction, showConfirm } from './constants/details.compositions'
import { computed } from 'vue'
import useUserStore from 'mocp/store/user'
import useUnplanApplyStore from 'mocp/store/unplanApply'
const query = defineProps(['id'])
const unplanApplyStore = useUnplanApplyStore()
const { details } = storeToRefs(unplanApplyStore)
const userStore = useUserStore()
const isCreateUser = computed(() => {
return userStore.userInfo.id == details.value?.createUser
})
const isApprover = computed(() => {
return userStore.userInfo.id == details.value?.approver
})
const showFooterBtn = computed(() => {
return details.value?.applyStatus == '0' && (isCreateUser.value || isApprover.value)
})
//是否豁免
const changeExempt = (status) => {
changeExemptStatus(details.value?.id, status, () => {
unplanApplyStore.getDetails()
})
}
onLoad(() => {
showConfirm.value = false
unplanApplyStore.setState('id', query.id)
unplanApplyStore.getDetails()
formData.examineReason = ''
})
const handleFooterClick = () => {
if (isCreateUser.value) {
showConfirm.value = true
} else {
showAction.value = true
}
}
</script>
<style lang="scss" scoped>
.mocp-cell {
background: #fff;
}
.mocp-form {
background: #fff;
padding: 0 32rpx;
}
</style>
<template>
<global-page
title="非计划申请"
isDataList
refresherEnabled
loadingMoreEnabled
auto
ref="paging"
:params="searchData"
showNavRight
navRightType="icon"
navRightIcon="saixuan-01"
@handleRightClick="handleRightClick"
:api="unplanApplyListApi"
:padding="24"
:showFooterBtn="checkPermi('/noplan/edit')"
footerBtnText="新增申请"
@handleFooterClick="handleFooterClick"
>
<template #default="{ item }">
<view class="item" :class="{ 'wrong-class': item.applyStatus == '0' }" @tap="goDetails(item)">
<view class="item-title">
<view class="left" style="min-width: 100rpx">
<global-text-status :value="item.applyStatus" dictkey="unPlan_applyStatus"></global-text-status>
</view>
<view class="right">
<text class="txt u-line-1" v-if="item.acType">{{ item.acType }}</text>
<text class="txt u-line-1" v-if="item.packageName">{{ item.packageName }}</text>
</view>
</view>
<view class="item-content">
<view class="u-line-3">预警原因:{{ getParamNameByValue('WarningReason', item.warningReason, { isArray: true }) || '无' }}</view>
<view class="u-line-3">具体原因:{{ item.reason || '无' }}</view>
</view>
<view class="item-footer">
<view class="label">
<global-icon icon="calendar"></global-icon>
<text class="txt">
{{ timeStampFormat(item.createTime, { format: 'YYYY/MM/DD HH:mm' }) }}
</text>
</view>
<view class="label">
<global-icon icon="idcard"></global-icon>
<text class="txt u-line-1">申请人:{{ item.createUserName || '-' }}</text>
</view>
</view>
</view>
</template>
</global-page>
</template>
<script setup>
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/unplanApply'
import useUnplanApplyStore from 'mocp/store/unplanApply'
import { checkPermi } from 'mocp/utils/permission'
//跳转
const unplanApplyStore = useUnplanApplyStore()
const { searchData } = storeToRefs(unplanApplyStore)
const goDetails = (data) => {
uni.$mocpJump.navigateTo('/panel/unplanApply/details', { id: data.id })
}
//筛选
const handleRightClick = () => {
uni.$mocpJump.navigateTo('/panel/unplanApply/search')
}
//刷新
const paging = ref()
uni.$on('unplanApplyReload', () => {
paging.value?.reload()
})
//新建
const handleFooterClick = () => {
uni.$mocpJump.navigateTo('/panel/unplanApply/add')
}
onUnload(() => {
uni.$off('unplanApplyReload')
})
</script>
<style lang="scss" scoped>
@import 'mocpStatic/css/list.scss';
.wrong-class {
background: linear-gradient(138.51deg, #ffe1e1 6.14%, #ffffff 125.66%);
}
</style>
<template>
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto">
<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>
<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>
<up-form-item label="是否豁免" prop="exemptStatus" :borderBottom="true">
<global-picker v-model="formData.exemptStatus" pickAlign="right" clearable dictkey="np_exemptStatus"></global-picker>
</up-form-item>
<up-form-item label="数据来源" prop="sourceType" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.sourceType" dictkey="np_sourceType" clearable></global-picker>
</up-form-item>
<up-form-item label="定检类型" prop="checkLevel" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.checkLevel" dictkey="np_checkLevel" clearable></global-picker>
</up-form-item>
<up-form-item label="机型" prop="acType" :borderBottom="true">
<global-picker
v-model="formData.acType"
pickAlign="right"
:options="getTypeSelect('定检管理-非计划管理')"
clearable
filter
></global-picker>
</up-form-item>
<up-form-item label="航司" prop="airline" :borderBottom="true">
<global-picker
v-model="formData.airline"
pickAlign="right"
:options="getAirlineSelect('定检管理-非计划管理')"
clearable
filter
></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"
clearable
></global-calendar>
</up-form-item>
<up-form-item label="申请时间" :borderBottom="true">
<global-calendar
pickAlign="right"
v-model:startTime="formData.applyTimeStart"
v-model:endTime="formData.applyTimeEnd"
clearable
></global-calendar>
</up-form-item>
</up-form>
</global-page-search>
</template>
<script setup>
import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
import useUnplanApplyStore from 'mocp/store/unplanApply'
import { getAirlineSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项
const unplanApplyStore = useUnplanApplyStore()
//获取查询表单数据
const { searchData } = storeToRefs(unplanApplyStore)
const formData = ref(cloneDeep(searchData.value))
const handleReset = () => {
unplanApplyStore.resetForm()
uni.$mocpJump.navigateBack()
uni.$emit('unplanApplyReload')
}
const handleConfirm = () => {
unplanApplyStore.setState('searchData', formData.value)
uni.$mocpJump.navigateBack()
uni.$emit('unplanApplyReload')
}
</script>
<style lang="scss" scoped></style>
<template>
<global-page title="新增非计划预警" showFooterBtn footerBtnText="提交" @handleFooterClick="handleFooterClick">
<view class="mocp-form">
<up-form labelPosition="left" labelWidth="auto" :model="formData" :rules="rules" ref="formRef">
<up-form-item label="工作包编号" prop="packageNo" :borderBottom="true" required>
<up-input
v-model="formData.packageNo"
border="none"
inputAlign="right"
placeholder="请输入"
clearable
@blur="checkPakgeNo"
></up-input>
</up-form-item>
<up-form-item label="申请原因" prop="warningReason" :borderBottom="true" required>
<global-picker v-model="formData.warningReason" pickAlign="right" paramsType="WarningReason" clearable multiple></global-picker>
</up-form-item>
<up-form-item label="缺件航材" :borderBottom="true">
<global-switch v-model="formData.materialDelay" switchAlign="right"></global-switch>
</up-form-item>
<up-form-item :borderBottom="true" v-if="formData.materialDelay == 1">
<view style="width: 100%">
<view class="materialDelay__input" v-for="(item, index) in materialPns" :key="index">
<up-input v-model="materialPns[index]" placeholder="请输入" clearable />
<view class="materialDelay__icon">
<up-icon
name="minus-circle-fill"
size="22"
style="margin-left: 10rpx"
v-if="index > 0"
@tap="materialPns.splice(index, 1)"
></up-icon>
<up-icon
name="plus-circle-fill"
size="22"
style="margin-left: 10rpx"
v-if="index + 1 == materialPns.length"
@tap="addMaterialPns"
></up-icon>
</view>
</view>
</view>
</up-form-item>
<up-form-item label="具体原因" prop="reason" :borderBottom="true" labelPosition="top" required>
<up-textarea placeholder="请输入" :height="40" border="none" v-model="formData.reason"></up-textarea>
</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>
</up-form>
</view>
</global-page>
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app'
import { formData, formRef, materialPns, rules } from './constants/add.compositions'
import { handleSubmit, checkPakgeNo, addMaterialPns, resetData } from './constants/add.functionals'
const handleFooterClick = () => {
handleSubmit()
}
onLoad(() => {
resetData()
})
</script>
<style lang="scss" scoped>
.mocp-form {
background: #fff;
padding: 0 32rpx;
.materialDelay__input {
width: 100%;
display: flex;
margin-bottom: 10rpx;
&:last-child {
margin-bottom: 0;
}
}
.materialDelay__icon {
width: 100rpx;
display: flex;
}
}
</style>
import { reactive, ref } from 'vue'
export const formRef = ref()
//验证
export const rules = reactive({
packageNo: [
{
required: true,
message: '请输入工作包编号',
trigger: ['blur', 'change']
}
],
warningReason: [
{
required: true,
message: '请输入申请原因',
trigger: ['blur', 'change']
}
],
reason: [
{
required: true,
message: '请输入具体原因',
trigger: ['blur', 'change']
}
],
approver: [
{
required: true,
message: '请选择审核人',
trigger: ['blur']
}
]
})
// 表单数据
export const materialPns = ref([''])
export const formData = reactive({
packageNo: '',
delayDay: '',
approver: '',
warningReason: '',
materialDelay: '0',
materialPns: '',
reason: ''
})
import { addUnplanWarningApi } from 'mocp/api/unplanWarning'
import { formData, formRef, materialPns } from './add.compositions'
import { checkPakgeNoApi } from 'mocp/api/unplanApply'
export const resetData = () => {
materialPns.value = ['']
Object.assign(formData, {
packageNo: '',
delayDay: '',
approver: '',
warningReason: '',
materialDelay: '0',
materialPns: '',
reason: ''
})
}
//验证包号
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 handleSubmit = async () => {
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 addUnplanWarningApi(formData, { loading: true })
if (res.code == 200) {
uni.$mocpJump.navigateBack()
uni.$mocpMessage.success(res.message)
uni.$emit('unplanWarningReload')
} else {
uni.$mocpMessage.error(res.message)
}
}
import { reactive, ref } from 'vue'
export const formRef = ref()
export const rules = reactive({
examineReason: [
{
required: true,
message: '请输入审核说明',
trigger: ['blur', 'change']
}
]
})
export const showAction = ref(false)
export const showConfirm = ref(false)
export const formData = reactive({
examineReason: ''
})
import { changeStatusApi } from 'mocp/api/unplanWarning'
import { formData, formRef } from './details.compositions'
export const handleSelect = async (value, id) => {
if (value !== '3') {
await formRef.value?.validate()
}
const params = {
id,
applyStatus: value,
examineReason: formData.examineReason
}
const res = await changeStatusApi(params, { loading: true })
if (res.code == 200) {
uni.$mocpJump.navigateBack()
uni.$emit('unplanWarningReload')
uni.$mocpMessage.success(res.message)
} else {
uni.$mocpMessage.error(res.message)
}
}
<template>
<global-page
title="非计划预警详情"
:showFooterBtn="showFooterBtn"
:footerBtnText="isCreateUser ? '撤销' : '审核'"
@handleFooterClick="handleFooterClick"
>
<view class="mocp-cell">
<up-cell-group v-if="details">
<up-cell title="审核状态">
<template #value>
<global-text-status :value="details.applyStatus" dictkey="unPlan_applyStatus"></global-text-status>
</template>
</up-cell>
<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="timeStampFormat(details.startTime) || '-'"></up-cell>
<up-cell title="计划结束时间" :value="timeStampFormat(details.endTime) || '-'"></up-cell>
<up-cell title="申请原因">
<template #label>
{{ getParamNameByValue('WarningReason', details.warningReason, { isArray: true }) || '-' }}
</template>
</up-cell>
<up-cell title="缺件航材">
<template #label>
<template v-if="details.materialPns && details.materialDelay == '1'">
<view v-for="(item, index) in details.materialPns.split(',')" :key="index">{{ item }}</view>
</template>
<view v-else></view>
</template>
</up-cell>
<up-cell title="具体原因">
<template #label>{{ details.reason || '-' }}</template>
</up-cell>
<up-cell title="申请人" :value="details.createUserName || '-'"></up-cell>
<up-cell title="申请时间" :value="timeStampFormat(details.createTime) || '-'"></up-cell>
<template v-if="['1', '2'].includes(details.applyStatus)">
<up-cell title="审核人" :value="details.approverName || '-'"></up-cell>
<up-cell title="审核时间" :value="timeStampFormat(details.updateTime) || '-'"></up-cell>
<up-cell title="审核说明">
<template #label>{{ details.examineReason || '-' }}</template>
</up-cell>
</template>
<view class="mocp-form" v-if="isApprover && details.applyStatus == '0'">
<up-form labelPosition="left" labelWidth="auto" :model="formData" :rules="rules" ref="formRef">
<up-form-item label="审核说明" prop="examineReason" :borderBottom="true" required>
<up-input v-model="formData.examineReason" border="none" inputAlign="right" placeholder="请输入" clearable></up-input>
</up-form-item>
</up-form>
</view>
</up-cell-group>
</view>
<global-action-sheet
v-model="showAction"
title="审核"
description="审核本条非计划预警"
:options="[
{ label: '审核驳回', value: '2' },
{ label: '审核通过', value: '1' }
]"
@select="(value) => handleSelect(value, details.id)"
></global-action-sheet>
<up-modal
:width="250"
content="确认撤销审核吗?"
:show="showConfirm"
showCancelButton
closeOnClickOverlay
@confirm="handleSelect('3', details.id)"
@cancel="showConfirm = false"
@close="showConfirm = false"
></up-modal>
</global-page>
</template>
<script setup>
import { storeToRefs } from 'pinia'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import useUnplanWarningStore from 'mocp/store/unplanWarning'
import { onLoad } from '@dcloudio/uni-app'
import { timeStampFormat } from 'mocp/utils/tool'
import { handleSelect } from './constants/details.functionals'
import { formData, rules, formRef, showAction, showConfirm } from './constants/details.compositions'
import { computed } from 'vue'
import useUserStore from 'mocp/store/user'
const query = defineProps(['id'])
const unplanWarningStore = useUnplanWarningStore()
const { details } = storeToRefs(unplanWarningStore)
const userStore = useUserStore()
const isCreateUser = computed(() => {
return userStore.userInfo.id == details.value?.createUser
})
const isApprover = computed(() => {
return userStore.userInfo.id == details.value?.approver
})
const showFooterBtn = computed(() => {
return details.value?.applyStatus == '0' && (isCreateUser.value || isApprover.value)
})
onLoad(() => {
showConfirm.value = false
unplanWarningStore.setState('id', query.id)
unplanWarningStore.getDetails()
formData.examineReason = ''
})
const handleFooterClick = () => {
if (isCreateUser.value) {
showConfirm.value = true
} else {
showAction.value = true
}
}
</script>
<style lang="scss" scoped>
.mocp-cell {
background: #fff;
}
.mocp-form {
background: #fff;
padding: 0 32rpx;
}
</style>
<template>
<global-page
title="非计划预警"
isDataList
refresherEnabled
loadingMoreEnabled
auto
ref="paging"
:params="searchData"
showNavRight
navRightType="icon"
navRightIcon="saixuan-01"
@handleRightClick="handleRightClick"
:api="unplanWarningListApi"
:padding="24"
:showFooterBtn="checkPermi('/noplan/edit')"
footerBtnText="新增预警"
@handleFooterClick="handleFooterClick"
>
<template #default="{ item }">
<view class="item" :class="{ 'wrong-class': item.applyStatus == '0' }" @tap="goDetails(item)">
<view class="item-title">
<view class="left" style="min-width: 100rpx">
<global-text-status :value="item.applyStatus" dictkey="unPlan_applyStatus"></global-text-status>
</view>
<view class="right">
<text class="txt u-line-1" v-if="item.acType">{{ item.acType }}</text>
<text class="txt u-line-1" v-if="item.packageName">{{ item.packageName }}</text>
</view>
</view>
<view class="item-content">
<view class="u-line-3">预警原因:{{ getParamNameByValue('WarningReason', item.warningReason, { isArray: true }) || '无' }}</view>
<view class="u-line-3">具体原因:{{ item.reason || '无' }}</view>
</view>
<view class="item-footer">
<view class="label">
<global-icon icon="calendar"></global-icon>
<text class="txt">
{{ timeStampFormat(item.createTime, { format: 'YYYY/MM/DD HH:mm' }) }}
</text>
</view>
<view class="label">
<global-icon icon="idcard"></global-icon>
<text class="txt u-line-1">申请人:{{ item.createUserName || '-' }}</text>
</view>
</view>
</view>
</template>
</global-page>
</template>
<script setup>
import { ref } from 'vue'
import { storeToRefs } from 'pinia'
import { onUnload } from '@dcloudio/uni-app'
import { unplanWarningListApi } from 'mocp/api/unplanWarning'
import useUnplanWarningStore from 'mocp/store/unplanWarning'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import { timeStampFormat } from 'mocp/utils/tool'
import { checkPermi } from 'mocp/utils/permission'
//跳转
const unplanWarningStore = useUnplanWarningStore()
const { searchData } = storeToRefs(unplanWarningStore)
const goDetails = (data) => {
uni.$mocpJump.navigateTo('/panel/unplanWarning/details', { id: data.id })
}
//筛选
const handleRightClick = () => {
uni.$mocpJump.navigateTo('/panel/unplanWarning/search')
}
//刷新
const paging = ref()
uni.$on('unplanWarningReload', () => {
paging.value?.reload()
})
//新建
const handleFooterClick = () => {
uni.$mocpJump.navigateTo('/panel/unplanWarning/add')
}
onUnload(() => {
uni.$off('unplanWarningReload')
})
</script>
<style lang="scss" scoped>
@import 'mocpStatic/css/list.scss';
.wrong-class {
background: linear-gradient(138.51deg, #ffe1e1 6.14%, #ffffff 125.66%);
}
</style>
<template>
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto">
<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>
<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>
<up-form-item label="数据来源" prop="sourceType" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.sourceType" dictkey="np_sourceType" clearable></global-picker>
</up-form-item>
<up-form-item label="定检类型" prop="checkLevel" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.checkLevel" dictkey="np_checkLevel" clearable></global-picker>
</up-form-item>
<up-form-item label="机型" prop="acType" :borderBottom="true">
<global-picker
v-model="formData.acType"
pickAlign="right"
:options="getTypeSelect('定检管理-非计划管理')"
clearable
filter
></global-picker>
</up-form-item>
<up-form-item label="航司" prop="airline" :borderBottom="true">
<global-picker
v-model="formData.airline"
pickAlign="right"
:options="getAirlineSelect('定检管理-非计划管理')"
clearable
filter
></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"
clearable
></global-calendar>
</up-form-item>
<up-form-item label="申请时间" :borderBottom="true">
<global-calendar
pickAlign="right"
v-model:startTime="formData.applyTimeStart"
v-model:endTime="formData.applyTimeEnd"
clearable
></global-calendar>
</up-form-item>
</up-form>
</global-page-search>
</template>
<script setup>
import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
import useUnplanWarningStore from 'mocp/store/unplanWarning'
import { getAirlineSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项
const unplanWarningStore = useUnplanWarningStore()
//获取查询表单数据
const { searchData } = storeToRefs(unplanWarningStore)
const formData = ref(cloneDeep(searchData.value))
const handleReset = () => {
unplanWarningStore.resetForm()
uni.$mocpJump.navigateBack()
uni.$emit('unplanWarningReload')
}
const handleConfirm = () => {
unplanWarningStore.setState('searchData', formData.value)
uni.$mocpJump.navigateBack()
uni.$emit('unplanWarningReload')
}
</script>
<style lang="scss" scoped></style>
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
} }
:deep(.u-collapse-item) { :deep(.u-collapse-item) {
.u-cell { .u-cell {
background: #f7f8fa; background: $mocp-fill-1;
} }
.u-collapse-item__content { .u-collapse-item__content {
.u-cell { .u-cell {
......
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="isOpen" :borderBottom="true"> <up-form-item label="状态" prop="isOpen" :borderBottom="true">
<global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="wdm_isOpen"></global-picker> <global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="wdm_isOpen"></global-picker>
...@@ -13,7 +12,7 @@ ...@@ -13,7 +12,7 @@
pickAlign="right" pickAlign="right"
v-model="formData.terminal" v-model="formData.terminal"
clearable clearable
:options="baseStore.getTerminalSelect" :options="getTerminalSelect('防风害管理')"
filter filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
...@@ -26,29 +25,17 @@ ...@@ -26,29 +25,17 @@
></global-calendar> ></global-calendar>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
import useBaseStore from 'mocp/store/base'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useWindDamageManagementStore from 'mocp/store/windDamageManagement' import useWindDamageManagementStore from 'mocp/store/windDamageManagement'
import { getTerminalSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore()
const windDamageManagementStore = useWindDamageManagementStore() const windDamageManagementStore = useWindDamageManagementStore()
//获取查询表单数据 //获取查询表单数据
const { getSearchData } = storeToRefs(windDamageManagementStore) const { getSearchData } = storeToRefs(windDamageManagementStore)
...@@ -64,13 +51,4 @@ const handleConfirm = () => { ...@@ -64,13 +51,4 @@ const handleConfirm = () => {
uni.$emit('windDamageManagementReload') uni.$emit('windDamageManagementReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -41,6 +41,6 @@ const query = defineProps(['id']) ...@@ -41,6 +41,6 @@ const query = defineProps(['id'])
color: $mocp-text-5; color: $mocp-text-5;
font-size: 24rpx; font-size: 24rpx;
padding: 20rpx 0; padding: 20rpx 0;
background: #f7f8fa; background: $mocp-fill-1;
} }
</style> </style>
<template> <template>
<global-page title="筛选"> <global-page-search @reset="handleReset" @confirm="handleConfirm">
<view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="state" :borderBottom="true"> <up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker v-model="formData.state" pickAlign="right" clearable dictkey="wa_state"></global-picker> <global-picker v-model="formData.state" pickAlign="right" clearable dictkey="wa_state"></global-picker>
...@@ -9,25 +8,13 @@ ...@@ -9,25 +8,13 @@
<global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter></global-picker> <global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机型" prop="model" :borderBottom="true"> <up-form-item label="机型" prop="model" :borderBottom="true">
<global-picker v-model="formData.model" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker> <global-picker v-model="formData.model" pickAlign="right" :options="getTypeSelect()" clearable filter></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="aviation" :borderBottom="true"> <up-form-item label="航司" prop="aviation" :borderBottom="true">
<global-picker <global-picker v-model="formData.aviation" pickAlign="right" :options="getAirlineSelect()" clearable filter></global-picker>
v-model="formData.aviation"
pickAlign="right"
:options="baseStore.getAirlineSelect"
clearable
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航站" prop="terminal" :borderBottom="true"> <up-form-item label="航站" prop="terminal" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.terminal" clearable :options="getTerminalSelect()" filter></global-picker>
pickAlign="right"
v-model="formData.terminal"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="发起人" prop="sponsor" :borderBottom="true"> <up-form-item label="发起人" prop="sponsor" :borderBottom="true">
<up-input v-model="formData.sponsor" inputAlign="right" border="none" placeholder="请输入" clearable></up-input> <up-input v-model="formData.sponsor" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
...@@ -36,18 +23,7 @@ ...@@ -36,18 +23,7 @@
<global-date v-model="formData.feedbackTime" pickAlign="right" clearable></global-date> <global-date v-model="formData.feedbackTime" pickAlign="right" clearable></global-date>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </global-page-search>
<template #bottom>
<view class="footer-btn">
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row>
</view>
</template>
</global-page>
</template> </template>
<script setup> <script setup>
...@@ -56,9 +32,9 @@ import { storeToRefs } from 'pinia' ...@@ -56,9 +32,9 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useWorkAssignmentStore from 'mocp/store/work-assignment' import useWorkAssignmentStore from 'mocp/store/work-assignment'
import { getAirlineSelect, getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore()
const { const {
selectList: { deviceNumList } selectList: { deviceNumList }
} = useBaseStore() } = useBaseStore()
...@@ -77,13 +53,4 @@ const handleConfirm = () => { ...@@ -77,13 +53,4 @@ const handleConfirm = () => {
uni.$emit('workAssignmentReload') uni.$emit('workAssignmentReload')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
:deep(.u-swipe-action-item) {
border-radius: 12rpx;
margin-bottom: 16rpx;
&:last-child {
margin-bottom: 0;
}
.item {
margin-bottom: 0;
}
}
.item { .item {
padding: 24rpx; padding: 24rpx;
margin-bottom: 16rpx;
border-radius: 12rpx; border-radius: 12rpx;
background: linear-gradient(#e6eeff, #ffffff, #ffffff); background: linear-gradient(#e6eeff, #ffffff, #ffffff);
margin-bottom: 16rpx;
&:last-child {
margin-bottom: 0;
}
&-title { &-title {
display: flex; display: flex;
align-items: center; align-items: center;
......
import { ref } from 'vue'
//默认default最多显示15个,id唯一标识
export const menuList = ref([
// 生产保障
{
id: 'xxtb',
name: '信息通报',
icon: 'xxtb',
group: '生产保障',
default: true,
count: 0,
url: '/panel/inforDisclosure/search',
apiPath: '/informationAbout'
},
{
id: 'hbbz',
name: '航班保障',
icon: 'hbbz',
group: '生产保障',
default: true,
count: 0,
url: '/panel/flight-support/list',
apiPath: '/workbench'
},
{
id: 'AOG',
name: 'AOG任务',
icon: 'AOG',
group: '生产保障',
default: true,
count: 0,
url: '/panel/aog/search',
apiPath: '/AOGManagement'
},
{
id: 'wdgj',
name: '我的跟机',
icon: 'wdgj',
group: '生产保障',
default: true,
count: 0,
url: '/panel/supported-task/list',
apiPath: '/workbench'
},
{
id: 'sfd',
name: '收费单',
icon: 'sfd',
group: '生产保障',
default: true,
count: 0,
url: '/panel/electronicBill/list',
apiPath: '/ElectronBill'
},
// 维修控制
{
id: 'yxdc',
name: '运行调查',
icon: 'yxdc',
group: '维修控制',
default: false,
count: 0,
url: '/panel/operationalSurvey/list',
apiPath: '/operationalSurvey'
},
{
id: 'yxjc',
name: '运行决策',
icon: 'yxjc',
group: '维修控制',
default: false,
count: 0,
url: '/panel/move-decision/list',
apiPath: '/MoveDecision'
},
{
id: 'bzgz',
name: '布置工作',
icon: 'bzgz',
group: '维修控制',
default: false,
count: 0,
url: '/panel/assign-work/search',
apiPath: '/assignWork'
},
{
id: 'jxyw',
name: '机械延误',
icon: 'jxyw',
group: '维修控制',
default: false,
count: 0,
url: '/panel/mechanicalAbnormalEvents/list',
apiPath: '/mechanicalAbnormalEvents'
},
{
id: 'ffh',
name: '防风害',
icon: 'ffh',
group: '维修控制',
default: false,
count: 0,
url: '/panel/windDamageManagement/list',
apiPath: '/windDamageWorkInspection'
},
{
id: 'hjzb',
name: '海技值班',
icon: 'hjzb',
group: '维修控制',
default: false,
count: 0,
url: '/panel/dutyLog/list',
apiPath: '/dutyLog'
},
// 技术支援
{
id: 'jdzt',
name: '机队状态',
icon: 'jdzt',
group: '技术支援',
default: true,
count: 0,
url: '/panel/fleet/search',
apiPath: '/fleetStatusManagement'
},
{
id: 'zysq',
name: '支援申请',
icon: 'zysq',
group: '技术支援',
default: false,
count: 0,
url: '/panel/support-application/search',
apiPath: '/supportApplication'
},
// { id: 'gzzl', name: '工作指令', icon: 'gzzl', group: '技术支援', default: false, count: 0, url: '/panel/work-assignment/search',"apiPath":"/workAssignment" },
{
id: 'jspg',
name: '技术评估',
icon: 'jspg',
group: '技术支援',
default: false,
count: 0,
url: '/panel/technology-evaluation/list',
apiPath: '/technologyEvaluation'
},
{
id: 'jsfx',
name: '技术分析',
icon: 'jsfx',
group: '技术支援',
default: false,
count: 0,
url: '/panel/technicalAnalysis/list',
apiPath: '/technicalAnalysis'
},
{
id: 'MCO',
name: 'MCO',
icon: 'MCO',
group: '技术支援',
default: true,
count: 0,
url: '/panel/mco/search',
apiPath: '/mcoManagement'
},
{
id: 'wjll',
name: '文件浏览',
icon: 'wjll',
group: '技术支援',
default: false,
count: 0,
url: '/panel/fileList/index',
apiPath: '/ElectronBill'
},
// 运行品质
{
id: 'pzfx',
name: '品质分析',
icon: 'pzfx',
group: '运行品质',
default: false,
count: 0,
url: '/panel/qualityAnalysis/list',
apiPath: '/qualityAnalysis'
},
{
id: 'khjl',
name: '考核记录',
icon: 'khjl',
group: '运行品质',
default: false,
count: 0,
url: '/panel/appraisal-record/list',
apiPath: '/AppraisalRecord'
},
{
id: 'gcfx',
name: '工程分析',
icon: 'gcfx',
group: '运行品质',
default: false,
count: 0,
url: '/panel/engineeringEvaluation/list',
apiPath: '/engineeringEvaluation'
},
// 航站管理
{
id: 'bzcsj',
name: '不正常事件',
icon: 'bzcsj',
group: '航站管理',
default: false,
count: 0,
url: '/panel/abnormalEventManage/list',
apiPath: '/terminalQualityManagement'
},
{
id: 'xydw',
name: '协议单位',
icon: 'xydw',
group: '航站管理',
default: false,
count: 0,
url: '/panel/workSupervision/list',
apiPath: '/terminalQualityManagement'
},
// 定检管理
{
id: 'fjhyj',
name: '非计划预警',
icon: 'fjhyj',
group: '定检管理',
default: false,
count: 0,
url: '/panel/unplanWarning/list',
apiPath: '/noplan'
},
{
id: 'fjhsq',
name: '非计划申请',
icon: 'fjhsq',
group: '定检管理',
default: false,
count: 0,
url: '/panel/unplanApply/list',
apiPath: '/noplan'
}
])
export const variable = {
/* 主色 */
$mocpPrimary7: '#0e42d2',
$mocpPrimary6: '#165dff',
$mocpPrimary3: '#94bfff',
$mocpPrimary2: '#bedaff',
$mocpPrimary1: '#e8f3ff',
/* 线条 Line */
$mocpLine1: '#e5e6eb',
/* 填充 Fill */
$mocpFill4: '#c9cdd4',
$mocpFill3: '#e5e6eb',
$mocpFill2: '#f2f3f5',
$mocpFill1: '#f7f8fa',
/* 文字 Text */
$mocpText5: '#1d2129',
$mocpText4: '#4e5969',
$mocpText3: '#86909c',
$mocpText2: '#c9cdd4',
$mocpText1: '#ffffff',
/* 成功 Success */
$mocpSuccess7: '#009a29',
$mocpSuccess6: '#00b42a',
$mocpSuccess3: '#7be188',
$mocpSuccess2: '#aff0b5',
$mocpSuccess1: '#e8ffea',
/* 警告/提醒 Warning/Notice */
$mocpWarning7: '#d25f00',
$mocpWarning6: '#ff7d00',
$mocpWarning3: '#ffcf8b',
$mocpWarning2: '#ffe4ba',
$mocpWarning1: '#fff7e8',
/* 错误 Danger */
$mocpDanger7: '#cb2634',
$mocpDanger6: '#f53f3f',
$mocpDanger3: '#fbaca3',
$mocpDanger2: '#fdcdc5',
$mocpDanger1: '#ffece8'
}
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