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) => {
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) => {
return http({
......@@ -63,6 +81,15 @@ export const addNonRoutineWorkApi = (data, config) => {
config
})
}
//修改非例行维护工作单
export const updateNonRoutineWorkApi = (data, config) => {
return post({
method: 'POST',
url: '/workbench/electronicBill/updateNonRoutineWork',
data,
config
})
}
//非例行维护工作单列表
export const noRoutineWorkListApi = (data, config) => {
return http({
......@@ -81,6 +108,15 @@ export const addDeicingApi = (data, config) => {
config
})
}
//修改除防冰工作单
export const updateDeicingApi = (data, config) => {
return post({
method: 'POST',
url: '/workbench/electronicBill/updateDeicing',
data,
config
})
}
//除防冰工作单列表
export const deicingListApi = (data, config) => {
return http({
......
import { http, post } from 'mocp/utils/http'
import { http } from 'mocp/utils/http'
//获取用户基本信息分页列表
export const getAdminListApi = (data, config) => {
......@@ -39,3 +39,33 @@ export const getSysSeatListApi = (data, 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 @@
background-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 {
color: #fff;
background-color: $mocp-primary-6;
......@@ -43,6 +49,12 @@
background-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 {
color: #fff;
background-color: $mocp-success-6;
......@@ -70,6 +82,12 @@
background-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 {
color: #fff;
background-color: $mocp-warning-6;
......@@ -97,6 +115,12 @@
background-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 {
color: #fff;
background-color: $mocp-danger-6;
......@@ -128,6 +152,15 @@
border: none;
}
}
&.primary-text {
@include global-button-primary-text;
&:active {
@include global-button-primary-text-active;
}
&::after {
border: none;
}
}
&.primary {
@include global-button-primary;
&:active {
......@@ -152,6 +185,15 @@
border: none;
}
}
&.success-text {
@include global-button-success-text;
&:active {
@include global-button-success-text-active;
}
&::after {
border: none;
}
}
&.success {
@include global-button-success;
&:active {
......@@ -176,6 +218,15 @@
border: none;
}
}
&.warning-text {
@include global-button-warning-text;
&:active {
@include global-button-warning-text-active;
}
&::after {
border: none;
}
}
&.warning {
@include global-button-warning;
&:active {
......@@ -200,6 +251,15 @@
border: none;
}
}
&.danger-text {
@include global-button-danger-text;
&:active {
@include global-button-danger-text-active;
}
&::after {
border: none;
}
}
&.danger {
@include global-button-danger;
&:active {
......
......@@ -38,6 +38,11 @@ const ps = defineProps({
type: String,
default: 'default'
},
//文字
text: {
type: Boolean,
default: false
},
//是否镂空
plain: {
type: Boolean,
......@@ -66,6 +71,8 @@ const getClass = computed(() => {
_class.push(ps.type + '-plain')
} else if (ps.border) {
_class.push(ps.type + '-border')
} else if (ps.text) {
_class.push(ps.type + '-text')
} else {
_class.push(ps.type)
}
......@@ -94,6 +101,7 @@ const getRadius = computed(() => {
.global-button {
border-radius: v-bind(getRadius);
height: v-bind(getSize);
min-height: v-bind(getSize);
line-height: v-bind(getSize);
.icon {
margin-right: 8rpx;
......
......@@ -17,6 +17,7 @@
import { computed, ref, watch } from 'vue'
import * as dictData from 'mocp/hooks/use-dict/dict-data'
import { cloneDeep } from 'lodash'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const es = defineEmits(['update:modelValue', 'change'])
const ps = defineProps({
......@@ -29,6 +30,10 @@ const ps = defineProps({
type: String,
default: ''
},
paramsType: {
type: String,
default: ''
},
modelValue: {
type: String,
default: ''
......@@ -112,6 +117,8 @@ const getCustomStyle = computed(() => {
const getColumns = computed(() => {
if (ps.dictkey) {
return cloneDeep(dictData[ps.dictkey])
} else if (ps.paramsType) {
return getParamsByType(ps.paramsType) || []
} else {
if (ps.options && Object.prototype.toString.call(ps.options[0]) == '[object Object]') {
return ps.options
......
<template>
<!-- 全局日期控件 -->
<!-- 全局日期控件(YYYY/MM/DD HH:mm:ss) -->
<view class="date">
<uni-datetime-picker
v-model="defaultValue"
......
<template>
<!-- 全局日期控件 -->
<!-- 全局日期控件(YYYY/MM/DD)最高只能到分 -->
<view class="date">
<up-datetime-picker
:show="show"
......@@ -35,7 +35,7 @@ const ps = defineProps({
//日历模式date,datetime,time,year-month
mode: {
type: String,
default: 'date'
default: 'datetime'
},
//是否时间戳
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 @@
</up-checkbox>
</template>
</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>
<slot :item="item" :index="index"></slot>
</template>
......@@ -80,14 +92,24 @@
</template>
<!-- 消息提醒 -->
<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>
</template>
<script setup>
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 es = defineEmits(['handleQuery', 'handleLeftClick', 'handleRightClick', 'handleFooterClick', 'handleChooseData'])
const es = defineEmits(['handleQuery', 'handleLeftClick', 'handleRightClick', 'handleFooterClick', 'handleChooseData', 'handleDelete'])
const paging = ref()
const ps = defineProps({
showEmpty: {
......@@ -276,8 +298,46 @@ const ps = defineProps({
pageSize: {
type: Number,
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样式
const getPagingStyle = computed(() => {
return {
......@@ -387,6 +447,7 @@ const openToast = (params) => {
uToastRef.value?.show(params)
})
}
uni.$on('useMessage', (params) => openToast(params))
onUnmounted(() => {
uni.$off('useMessage', openToast)
......@@ -447,6 +508,24 @@ export default {
:deep(.u-checkbox__icon-wrap) {
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 {
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>
<!-- 全局下拉框控件 -->
<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>
<view>
<up-search :placeholder="placeholder" :showAction="false" v-model="searchKey"></up-search>
......@@ -10,7 +10,9 @@
<view class="popup-content-list" v-if="getFilterColumns.length">
<view
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"
:key="index"
@tap="handleChoose(item[valueField])"
......@@ -21,6 +23,15 @@
<view style="width: 100%; height: 100%" v-else>
<global-empty></global-empty>
</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>
<up-picker
v-else
......@@ -52,7 +63,8 @@
<script setup>
import { computed, nextTick, ref, watch } from 'vue'
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 ps = defineProps({
......@@ -66,11 +78,16 @@ const ps = defineProps({
type: Boolean,
default: false
},
//是否多选(只对filter有效)---待优化
// multiple: {
// type: Boolean,
// default: false
// },
//是否多选(只对filter有效)
multiple: {
type: Boolean,
default: false
},
//是否筛选不到的时候可以自定义内容(只对filter有效)
customize: {
type: Boolean,
default: false
},
style: {
type: Object,
default: () => {
......@@ -86,6 +103,10 @@ const ps = defineProps({
type: String,
default: ''
},
paramsType: {
type: String,
default: ''
},
modelValue: {
type: [String, Number],
default: ''
......@@ -108,6 +129,10 @@ const ps = defineProps({
type: String,
default: 'value'
},
valueSplit: {
type: String,
default: ','
},
pickAlign: {
type: String,
default: 'left'
......@@ -181,6 +206,11 @@ const open = async () => {
}
searchKey.value = ''
show.value = true
if (ps.modelValue) {
multipleValue.value = ps.modelValue.split(ps.valueSplit)
} else {
multipleValue.value = []
}
}
//设置下拉框打开的默认值
const defaultIndex = ref(0)
......@@ -192,6 +222,8 @@ const getColumns = computed(() => {
} else {
throw new Error('请输入存在的dictkey值')
}
} else if (ps.paramsType) {
return getParamsByType(ps.paramsType) || []
} else {
if (ps.options) {
if (Array.isArray(ps.options)) {
......@@ -218,9 +250,28 @@ const getColumns = computed(() => {
return []
})
//监听设置labelValue的值
const multipleValue = ref([])
watch(
[() => 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 index = getColumns.value?.findIndex((option) => String(option[ps.valueField]) === String(ps.modelValue))
if (option) {
......@@ -232,6 +283,7 @@ watch(
labelValue.value = ps.modelValue
defaultIndex.value = 0
}
}
},
{ immediate: true }
)
......@@ -243,6 +295,17 @@ const confirm = (e) => {
es('update:modelValue', getColumns.value[index][ps.valueField])
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 = () => {
labelValue.value = ''
......@@ -258,6 +321,13 @@ const getFilterColumns = computed(() => {
//弹出层列表点击
const distance = ref(0)
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(
'change',
......@@ -265,6 +335,7 @@ const handleChoose = (value) => {
getColumns.value.find((item) => item[ps.valueField] == value)
)
show.value = false
}
}
//打开默认滑动到选中的位置
watch(
......@@ -299,6 +370,7 @@ watch(
&-value {
color: $mocp-text-4;
margin-right: 8rpx;
word-break: break-all;
}
&-icon {
display: flex;
......@@ -319,5 +391,12 @@ watch(
}
}
}
.customize {
display: flex;
justify-content: space-between;
align-items: center;
background: $mocp-fill-1;
padding: 10rpx 20rpx;
}
}
</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 @@
<scroll-view scroll-y class="content" :scroll-top="scrollTop" @scroll="scroll">
<slot></slot>
</scroll-view>
<slot name="bottom"></slot>
</view>
</up-popup>
</template>
......
......@@ -23,6 +23,7 @@
import { computed, ref, watch } from 'vue'
import * as dictData from 'mocp/hooks/use-dict/dict-data'
import { cloneDeep } from 'lodash'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const es = defineEmits(['update:modelValue', 'change'])
const ps = defineProps({
......@@ -35,6 +36,10 @@ const ps = defineProps({
type: String,
default: ''
},
paramsType: {
type: String,
default: ''
},
modelValue: {
type: [String, Number],
default: ''
......@@ -124,6 +129,8 @@ const getColumns = computed(() => {
} else {
throw new Error('请输入存在的dictkey值')
}
} else if (ps.paramsType) {
return getParamsByType(ps.paramsType) || []
} else {
if (ps.options && Object.prototype.toString.call(ps.options[0]) == '[object Object]') {
return ps.options
......
......@@ -39,14 +39,14 @@ const ps = defineProps({
},
activeValue: {
type: [Boolean, String, Number],
default: 1
default: '1'
},
inactiveValue: {
type: [Boolean, String, Number],
default: 0
default: '0'
}
})
const switchValue = ref(0)
const switchValue = ref('0')
watch(
() => ps.modelValue,
(value) => {
......
......@@ -65,3 +65,9 @@ export const st_followStatus = [
{ text: '已到位', class: 'mocp-color-warning-6', value: 3 },
{ 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(() => {
</script>
<style lang="scss" scoped>
.upload {
flex: 1;
&-button {
display: flex;
align-items: center;
......
......@@ -201,9 +201,7 @@ watch(
)
//监听搜索
const onChange = debounce((value) => {
if (value != ps.searchValue) {
search(value)
}
}, 200)
//获取label的内容
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 @@
export const eb_deicingType = [
{ label: 'cleansurface I-BIO', value: 'cleansurface I-BIO' },
{ label: 'FCY-1A', value: 'FCY-1A' },
{ label: 'Cleanwing', value: 'Cleanwing' },
{ label: 'Cleanwing I', value: 'Cleanwing I' },
{ label: 'FCY-9311', value: 'FCY-9311' },
{ label: 'FCY-1Bio', value: 'FCY-1Bio' }
]
......@@ -25,9 +25,10 @@ export const eb_antiicingUnit = [
export const eb_antiicingType = [
{ label: 'Cleansurface1-B10', value: 'Cleansurface1-B10' },
{ label: 'FCY-1A', value: 'FCY-1A' },
{ label: 'Cleanwing', value: 'Cleanwing' },
{ label: 'Cleanwing II', value: 'Cleanwing II' },
{ 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 = [
{ label: '海技保障', value: '1' },
......@@ -46,3 +47,7 @@ export const eb_modelType = [
{ label: '宽体机', value: '1' },
{ label: '窄体机', value: '2' }
]
export const eb_zk = [
{ label: '窄体', value: '0' },
{ label: '宽体', value: '1' }
]
......@@ -16,3 +16,5 @@ export * from './technicalAnalysis'
export * from './engineeringEvaluation'
export * from './windDamageManagement'
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 { 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 isButtonDown = false
let points = []
......@@ -15,6 +15,37 @@ export const useDrawSignature = (canvasId) => {
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) => {
let startPoint = { X: e.changedTouches[0].x, Y: e.changedTouches[0].y }
......@@ -79,7 +110,6 @@ export const useDrawSignature = (canvasId) => {
})
})
}
return {
isSigned,
touchStart,
......
......@@ -55,27 +55,6 @@ const useBaseStore = defineStore('base', {
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) {
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', {
}
},
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) {
const total =
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 { 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', {
state: () => {
return {
token: '',
userInfo: undefined, //用户信息
allMenuItem: { id: 999, name: '全部菜单', icon: 'all', group: '', count: 0 },
allUserList: [] //所有登录用户存储的信息
allUserList: [], //所有登录用户存储的信息
//席位权限
seatId: '', //当前席位id
seatPermission: ['all'], //操作权限
configData: [] //数据权限
}
},
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.filter((item) => state.getApiPaths.includes(item.apiPath) || !item.apiPath)
},
//获取分组菜单
getGroupMenuList(state) {
......@@ -59,7 +48,8 @@ const useUserStore = defineStore('mocpUser', {
},
//获取当前登录用户的首页菜单
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 = []
homeMenuList.forEach((item) => {
ids.push(item.id)
......@@ -84,22 +74,30 @@ const useUserStore = defineStore('mocpUser', {
})
})
}
//跳转工作台
uni.$mocpJump.redirectTo('/tab/index')
},
//退出登录
handleLogOut() {
this.token = ''
this.userInfo = undefined
this.resetUserInfo()
//返回登录页面
uni.$mocpJump.redirectTo('/login/index')
},
//重置用户信息
resetUserInfo() {
this.token = ''
this.userInfo = undefined
this.seatId = ''
this.seatPermission = ['all']
this.configData = []
},
//修改用户首页菜单
changeHomeMenuList(menuList) {
const index = this.allUserList.findIndex((item) => item.userId == this.userInfo.id)
this.allUserList[index].homeMenuList = menuList.map((item) => {
return { id: item.id }
})
},
setState(...args) {
this.$patch({ [args[0]]: args[1] })
}
},
// 配置持久化
......
import useUserStore from 'mocp/store/user'
const baseURL = 'https://hna-platform.anyremote.cn' //测试
// const baseURL = 'https://hna-platform.anyremote.cn' //测试
// const baseURL = 'https://moc.hnatechnic.com/api' //生产
// const baseURL = 'http://10.123.48.67/api' //Amms内网
// const baseURL = 'https://hnaelbtest.hnatechnic.com/mocptest/api' //内网
const baseURL = 'https://hnaelbtest.hnatechnic.com/mocptest/api' //内网
class ServiceLoading {
open(loading) {
......
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'
/**
* 时间戳格式化
* 1715072168340 => 2024-05-07 16:56:08
* format=YYYY/MM/DD HH:mm:ss
* 1715072168340 => 2024-05-07 16:56:08 星期二
* format=YYYY/MM/DD HH:mm:ss dddd
*/
export const timeStampFormat = (timeStamp, opt) => {
if (!timeStamp || timeStamp == -1 || timeStamp == '-1' || timeStamp == 0 || timeStamp == '0') {
......@@ -135,3 +135,26 @@ export const validateParameters = (...params) => {
// 如果没有任何参数被填写,那么也是有效的
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 @@
"style": {
"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": {
......
......@@ -46,6 +46,7 @@ import { onLoad } from '@dcloudio/uni-app'
import { ref, toRaw, watch } from 'vue'
import useUserStore from 'mocp/store/user'
import { loginApi } from 'mocp/api/user'
import { getConfigDataApi, getSeatPermissionApi, getUserSeatListApi } from 'mocp/api/system'
watch(
() => loginForm.username,
......@@ -55,8 +56,9 @@ watch(
}
}, 500)
)
const userStore = useUserStore()
onLoad(() => {
userStore.resetUserInfo()
loginForm.verifyCode = ''
getGifCaptcha()
loginAmms()
......@@ -64,18 +66,65 @@ onLoad(() => {
//登录
const loading = ref(false)
const userStore = useUserStore()
const handleLogin = async () => {
await loginFormRef.value?.validate()
try {
uni.showLoading({
title: '登陆中...',
mask: 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
}
}
//获取登录信息
const login = async () => {
const res = await loginApi(toRaw(loginForm))
if (res.code == 200) {
userStore.setUserInfo(res.data)
} else {
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
const loginAmms = () => {
const ammsToken = uni.getStorageSync('access_token')
......
......@@ -2,10 +2,10 @@
<global-page
:padding="24"
title="航站不正常事件详情"
:showFooterBtn="details.state == 0"
:showFooterBtn="details.state == 0 && checkPermi('/terminalQualityManagement/audit')"
:footerBtnText="getFooterTxt"
@handleFooterClick="handleFooterClick"
:showNavRight="auditLabel != '审核通过'"
:showNavRight="auditLabel != '审核通过' && checkPermi('/terminalQualityManagement/edit')"
@handleRightClick="navigateTo('/panel/abnormalEventManage/edit')"
>
<view class="mocp-cell" v-if="details">
......@@ -21,14 +21,14 @@
<up-cell title="责任人" :value="details.personLiable || '-'" />
<up-cell title="机号" :value="details.machineNumber || '-'" />
<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="问题点" :value="details.problemPoints || '-'" />
<up-cell title="类别" :value="getParamNameByValue('EventCategory', details.category)" />
<up-cell title="扣分情况" :value="details.pointsDeduction || '-'" />
<up-cell title="接报日期" :value="timeStampFormat(details.occurrenceTime, { format: 'YYYY/MM/DD' }) || '-'" />
<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="调查已反馈" :value="useGetDictByValue('aem_surveyListSelect2', details.survey)" />
<up-cell title="附件">
......@@ -88,14 +88,13 @@
import { storeToRefs } from 'pinia'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import useAbnormalEventManageStore from 'mocp/store/abnormalEventManage'
import useBaseStore from 'mocp/store/base'
import { timeStampFormat } from 'mocp/utils/tool'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { computed, ref } from 'vue'
import { navigateTo } from 'mocp/utils/jump'
import { reviewedAdverseEventsApi } from 'mocp/api/abnormalEventManage'
import { checkPermi, getAirlineSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore()
const abnormalEventManageStore = useAbnormalEventManageStore()
const { details } = storeToRefs(abnormalEventManageStore)
const auditLabel = computed(() => {
......@@ -141,6 +140,6 @@ const showConfirm = ref(false)
}
.mocp-title {
padding: 0 32rpx 24rpx 32rpx;
background-color: #f7f8fa;
background-color: $mocp-fill-1;
}
</style>
......@@ -10,16 +10,10 @@
<view class="mocp-form">
<up-form ref="formRef" labelPosition="left" labelWidth="auto" :model="formData" :rules="rules">
<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 label="航站" prop="terminalCode" :borderBottom="true" required>
<global-picker
pickAlign="right"
v-model="formData.terminalCode"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
<global-picker pickAlign="right" v-model="formData.terminalCode" clearable :options="getTerminalSelect()" filter></global-picker>
</up-form-item>
<up-form-item label="责任单位" prop="repairUnit" :borderBottom="true" required>
<global-picker v-model="formData.repairUnit" pickAlign="right" :options="repairUnitList" clearable filter></global-picker>
......@@ -58,7 +52,7 @@
:placeholder="formData.aviation ? '' : '请选择机号自动关联'"
>
<template #suffix>
{{ useGetDictByValue('', formData.aviation, { data: baseStore.getAirlineSelect }) || '-' }}
{{ useGetDictByValue('', formData.aviation, { data: getAirlineSelect() }) || '-' }}
</template>
</up-input>
</up-form-item>
......@@ -69,12 +63,7 @@
<up-input v-model="formData.problemPoints" border="none" inputAlign="right" placeholder="请输入" clearable></up-input>
</up-form-item>
<up-form-item label="类别" prop="category" :borderBottom="true" required>
<global-picker
v-model="formData.category"
pickAlign="right"
clearable
:options="getParamsByType('EventCategory')"
></global-picker>
<global-picker v-model="formData.category" pickAlign="right" clearable paramsType="EventCategory"></global-picker>
</up-form-item>
<up-form-item label="扣分情况" prop="pointsDeduction" :borderBottom="true" required>
<up-input
......@@ -100,12 +89,7 @@
<up-input v-model="formData.surveyUnit" border="none" inputAlign="right" placeholder="请输入" clearable></up-input>
</up-form-item>
<up-form-item label="事件性质" prop="eventProperty" :borderBottom="true" required>
<global-picker
v-model="formData.eventProperty"
pickAlign="right"
:options="getParamsByType('EventProperty')"
clearable
></global-picker>
<global-picker v-model="formData.eventProperty" pickAlign="right" paramsType="EventProperty" clearable></global-picker>
</up-form-item>
<up-form-item label="备注" prop="remake" :borderBottom="true" labelPosition="top">
<up-textarea v-model.trim="formData.remake" placeholder="请输入" :height="40" border="none"></up-textarea>
......@@ -190,13 +174,12 @@ import { onLoad } from '@dcloudio/uni-app'
import { storeToRefs } from 'pinia'
import useBaseStore from 'mocp/store/base'
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 useAbnormalEventManageStore from 'mocp/store/abnormalEventManage'
import { changeAc, getSurveyAttaFileVoList, getCorrectiveAtta, resetData } from './constants/edit.functionals'
import { updateAdverseEventsApi } from 'mocp/api/abnormalEventManage'
import { getAirlineSelect, getTerminalSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore()
//获取下拉框选项
const {
selectList: { deviceNumList, repairUnitList }
......
......@@ -23,7 +23,7 @@
<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.aviation">
{{ useGetDictByValue('', item.aviation, { data: baseStore.getAirlineSelect }) }}
{{ useGetDictByValue('', item.aviation, { data: getAirlineSelect() }) }}
</text>
</view>
</view>
......@@ -55,10 +55,9 @@ import { storeToRefs } from 'pinia'
import { onUnload } from '@dcloudio/uni-app'
import useAbnormalEventManageStore from 'mocp/store/abnormalEventManage'
import { getAdverseEventsListApi } from 'mocp/api/abnormalEventManage'
import useBaseStore from 'mocp/store/base'
import { rowClassName } from './constants/list.functionals'
import { getAirlineSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore()
//跳转
const abnormalEventManageStore = useAbnormalEventManageStore()
const { searchData } = storeToRefs(abnormalEventManageStore)
......
<template>
<global-page title="筛选">
<view class="search-form">
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker v-model="formData.state" pickAlign="right" clearable dictkey="aem_state"></global-picker>
......@@ -10,7 +9,7 @@
pickAlign="right"
v-model="formData.terminalCode"
clearable
:options="baseStore.getTerminalSelect"
:options="getTerminalSelect('航站管理-航站质量管理')"
filter
></global-picker>
</up-form-item>
......@@ -21,7 +20,7 @@
<global-picker
v-model="formData.aviation"
pickAlign="right"
:options="baseStore.getAirlineSelect"
:options="getAirlineSelect('航站管理-航站质量管理')"
clearable
filter
></global-picker>
......@@ -46,12 +45,7 @@
></global-picker>
</up-form-item>
<up-form-item label="类别" prop="category" :borderBottom="true">
<global-picker
v-model="formData.category"
pickAlign="right"
:options="getParamsByType('EventCategory')"
clearable
></global-picker>
<global-picker v-model="formData.category" pickAlign="right" paramsType="EventCategory" clearable></global-picker>
</up-form-item>
<up-form-item label="扣分范围" :borderBottom="true">
<view style="display: flex; align-items: center">
......@@ -61,12 +55,7 @@
</view>
</up-form-item>
<up-form-item label="事件性质" prop="eventProperty" :borderBottom="true">
<global-picker
v-model="formData.eventProperty"
pickAlign="right"
:options="getParamsByType('EventProperty')"
clearable
></global-picker>
<global-picker v-model="formData.eventProperty" pickAlign="right" paramsType="EventProperty" clearable></global-picker>
</up-form-item>
<up-form-item label="处理人" prop="handledBy" :borderBottom="true">
<up-input v-model="formData.handledBy" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
......@@ -75,18 +64,7 @@
<global-picker v-model="formData.reviewedState" pickAlign="right" clearable dictkey="aem_auditListSelect"></global-picker>
</up-form-item>
</up-form>
</view>
<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>
</global-page-search>
</template>
<script setup>
......@@ -95,10 +73,9 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
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 {
selectList: { repairUnitList }
} = useBaseStore()
......@@ -117,13 +94,4 @@ const handleConfirm = () => {
uni.$emit('abnormalEventManageReload')
}
</script>
<style lang="scss" scoped>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<style lang="scss" scoped></style>
<template>
<global-page title="AOG施工详情" showFooterBtn footerBtnText="修改状态" @handleFooterClick="handleFooterClick">
<global-page
title="AOG施工详情"
:showFooterBtn="checkPermi('/AOGManagement/editStatus')"
footerBtnText="修改状态"
@handleFooterClick="handleFooterClick"
>
<view class="mocp-cell">
<up-cell-group v-if="getBbDetails">
<up-cell title="负责人" :value="getBbDetails.personLiable || '-'"></up-cell>
......@@ -30,8 +35,8 @@
showCancelButton
closeOnClickOverlay
@confirm="updateAogConstruction"
@cancel="show = false"
@close="show = false"
@cancel="showConfirm = false"
@close="showConfirm = false"
></up-modal>
</global-page>
</template>
......@@ -41,6 +46,7 @@ import { storeToRefs } from 'pinia'
import useAogStore from 'mocp/store/aog'
import { ref } from 'vue'
import { updateAogConstructionApi } from 'mocp/api/aog'
import { checkPermi } from 'mocp/utils/permission'
const aogStore = useAogStore()
const { getBbDetails, details } = storeToRefs(aogStore)
......
......@@ -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.model">{{ details.model }}</text>
<text class="txt u-line-1" v-if="details.aviation">
{{ useGetDictByValue('', details.aviation, { data: baseStore.getAirlineSelect }) }}
{{ useGetDictByValue('', details.aviation, { data: getAirlineSelect() }) }}
</text>
</view>
<view class="right">
......@@ -73,11 +73,10 @@ import { storeToRefs } from 'pinia'
import { timeStampFormat } from 'mocp/utils/tool'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import useAogStore from 'mocp/store/aog'
import useBaseStore from 'mocp/store/base'
import { onLoad } from '@dcloudio/uni-app'
import { nextTick } from 'vue'
import { getAirlineSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore()
const aogStore = useAogStore()
const { getWorkBenchList, getAogDisposalPlan, getAogMaterialList, getAogSupBase, getAogConstruction, getAogOtherSup } = aogStore
const { details, disposalPlan, workBench, materialType } = storeToRefs(aogStore)
......
......@@ -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.model">{{ item.model }}</text>
<text class="txt u-line-1" v-if="item.aviation">
{{ useGetDictByValue('', item.aviation, { data: baseStore.getAirlineSelect }) }}
{{ useGetDictByValue('', item.aviation, { data: getAirlineSelect() }) }}
</text>
</view>
<view class="right">
......@@ -49,9 +49,8 @@ import { storeToRefs } from 'pinia'
import { onUnload } from '@dcloudio/uni-app'
import useAogStore from 'mocp/store/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 { searchData } = storeToRefs(aogStore)
......
<template>
<global-page title="筛选">
<view class="search-form">
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker v-model="formData.state" pickAlign="right" clearable dictkey="aog_state"></global-picker>
......@@ -9,13 +8,19 @@
<global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter></global-picker>
</up-form-item>
<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 label="航司" prop="aviation" :borderBottom="true">
<global-picker
v-model="formData.aviation"
pickAlign="right"
:options="baseStore.getAirlineSelect"
:options="getAirlineSelect('AOG管理-AOG列表')"
clearable
filter
></global-picker>
......@@ -25,20 +30,23 @@
pickAlign="right"
v-model="formData.terminal"
clearable
:options="baseStore.getTerminalSelect"
:options="getTerminalSelect('AOG管理-AOG列表')"
filter
></global-picker>
</up-form-item>
<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 label="AOG级别" prop="aogLevel" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.aogLevel"
clearable
:options="baseStore.getTerminalSelect"
filter
:options="[
{ value: 0, label: '红' },
{ value: 1, label: '黄' },
{ value: 2, label: '绿' }
]"
></global-picker>
</up-form-item>
<up-form-item label="发生日期" :borderBottom="true">
......@@ -58,30 +66,13 @@
></global-calendar>
</up-form-item>
<up-form-item label="发生地点" prop="happenAddr" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.happenAddr"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
<global-picker pickAlign="right" v-model="formData.happenAddr" clearable :options="getTerminalSelect()" filter></global-picker>
</up-form-item>
<up-form-item label="故障描述" prop="faultDesc" :borderBottom="true">
<up-input v-model="formData.faultDesc" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item>
</up-form>
</view>
<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>
</global-page-search>
</template>
<script setup>
......@@ -90,10 +81,9 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
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 {
selectList: { deviceNumList }
} = useBaseStore()
......@@ -112,13 +102,4 @@ const handleConfirm = () => {
uni.$emit('aogReload')
}
</script>
<style lang="scss" scoped>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<style lang="scss" scoped></style>
......@@ -37,7 +37,7 @@
{{ details.acType }}
</view>
<view class="txt u-line-1" v-if="details.acOwn">
{{ useGetDictByValue('', details.acOwn, { data: baseStore.getAirlineSelect }) }}
{{ useGetDictByValue('', details.acOwn, { data: getAirlineSelect() }) }}
</view>
</view>
<view class="right">{{ timeStampFormat(details.eventTime, { format: 'YYYY/MM/DD' }) }}</view>
......@@ -120,10 +120,9 @@ import useAppraisalRecordStore from 'mocp/store/appraisal-record'
import { storeToRefs } from 'pinia'
import { onLoad } from '@dcloudio/uni-app'
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 baseStore = useBaseStore()
const appraisalRecordStore = useAppraisalRecordStore()
const { details, getFileList } = storeToRefs(appraisalRecordStore)
onLoad(() => {
......
<template>
<global-page title="筛选">
<view class="search-form">
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto" :model="formData">
<up-form-item label="状态" prop="status" :borderBottom="true">
<global-picker
......@@ -45,18 +44,7 @@
></global-calendar>
</up-form-item>
</up-form>
</view>
<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>
</global-page-search>
</template>
<script setup>
......@@ -88,13 +76,4 @@ const handleConfirm = () => {
uni.$emit('appraisalRecordReload')
}
</script>
<style lang="scss" scoped>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<style lang="scss" scoped></style>
......@@ -3,7 +3,7 @@
.form {
&-title {
padding: 20rpx 32rpx;
background: #f7f8fa;
background: $mocp-fill-1;
color: $mocp-text-5;
}
&-item {
......
......@@ -22,12 +22,7 @@
</view>
</up-form-item>
<up-form-item label="应用分类" :borderBottom="true" prop="appType" required>
<global-picker
pickAlign="right"
v-model="formData.appType"
clearable
:options="getParamsByType('ApplicationType')"
></global-picker>
<global-picker pickAlign="right" v-model="formData.appType" clearable paramsType="ApplicationType"></global-picker>
</up-form-item>
</up-form>
</view>
......@@ -40,7 +35,6 @@ import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia'
import { onLoad } from '@dcloudio/uni-app'
import { savaFollowUpFeedbackApi } from 'mocp/api/assign-work'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const assignWorkStore = useAssignWorkStore()
const { arrangeWorkExtend } = storeToRefs(assignWorkStore)
......
......@@ -6,12 +6,7 @@
<up-textarea v-model="formData.trackingPoints" placeholder="请输入" :height="40" border="none"></up-textarea>
</up-form-item>
<up-form-item label="事件类型" :borderBottom="true" prop="eventType" required>
<global-picker
pickAlign="right"
v-model="formData.eventType"
clearable
:options="getParamsByType('LayoutEventType')"
></global-picker>
<global-picker pickAlign="right" v-model="formData.eventType" clearable paramsType="LayoutEventType"></global-picker>
</up-form-item>
<up-form-item label="重复/同类事件" :borderBottom="true" prop="validateType" required>
<global-checkbox checkboxAlign="right" v-model="formData.validateType" dictkey="aw_validateType"></global-checkbox>
......@@ -39,7 +34,6 @@ import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia'
import { onLoad } from '@dcloudio/uni-app'
import { savaWorkValidateApi } from 'mocp/api/assign-work'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
const assignWorkStore = useAssignWorkStore()
const { arrangeWorkExtend } = storeToRefs(assignWorkStore)
......
<template>
<global-page title="筛选">
<view class="search-form">
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto" :model="formData" ref="formRef">
<up-form-item label="任务状态" prop="state" :borderBottom="true">
<global-picker
......@@ -26,12 +25,7 @@
></global-picker>
</up-form-item>
<up-form-item label="工作类型" prop="workType" :borderBottom="true">
<global-picker
v-model="formData.workType"
pickAlign="right"
:options="getParamsByType('LayoutWorkType')"
clearable
></global-picker>
<global-picker v-model="formData.workType" pickAlign="right" paramsType="LayoutWorkType" clearable></global-picker>
</up-form-item>
<up-form-item label="开始日期" :borderBottom="true">
<global-calendar
......@@ -42,18 +36,7 @@
></global-calendar>
</up-form-item>
</up-form>
</view>
<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>
</global-page-search>
</template>
<script setup>
......@@ -61,7 +44,6 @@ import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
//获取下拉框选项
const assignWorkStore = useAssignWorkStore()
......@@ -79,13 +61,4 @@ const handleConfirm = () => {
uni.$emit('assignWorkReload')
}
</script>
<style lang="scss" scoped>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<style lang="scss" scoped></style>
......@@ -28,6 +28,7 @@
</view>
</view>
</scroll-view>
<global-empty v-if="!userStore.getHomeMenuList.length"></global-empty>
</view>
</template>
......@@ -55,7 +56,11 @@ const goTo = (url) => {
}
//跳转应用中心
const goAppCenter = () => {
if (userStore.getMenuList.length > 0) {
uni.$mocpJump.navigateTo('/panel/app-center/index')
} else {
uni.$mocpMessage.warning('暂无权限!')
}
}
</script>
<style lang="scss" scoped>
......
......@@ -62,4 +62,7 @@ const goMyToDo = () => {
</script>
<style lang="scss" scoped>
@import '../constants/panel-navbar.scss';
:deep(._block) {
display: flex !important;
}
</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>
<global-page
title="新建除防冰收费单"
:showNavRight="true"
:title="formData.id > 0 ? '编辑除防冰收费单' : '新建除防冰收费单'"
:showNavRight="formData.id > 0 ? false : true"
navRightText="今天签单"
@handleRightClick="navigateTo('/panel/electronicBill/deicing/list')"
showFooterBtn
......@@ -12,22 +12,31 @@
<view class="mocp-title">基本信息</view>
<view class="mocp-form">
<up-form-item label="航站" prop="station" :borderBottom="true" required>
<global-picker
pickAlign="right"
v-model="formData.station"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
<global-picker pickAlign="right" v-model="formData.station" clearable :options="getTerminalSelect()" filter></global-picker>
</up-form-item>
<up-form-item label="日期" prop="date" :borderBottom="true" required>
<global-date pickAlign="right" clearable v-model="formData.date" defaultToday></global-date>
</up-form-item>
<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 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 label="保障单位" prop="guaranteeUnit" :borderBottom="true" required>
<global-picker pickAlign="right" v-model="formData.guaranteeUnit" dictkey="eb_guaranteeUnit" clearable></global-picker>
......@@ -36,7 +45,7 @@
<global-picker pickAlign="right" v-model="formData.weatherToday" dictkey="eb_weatherToday" clearable></global-picker>
</up-form-item>
<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 label="机型类别" prop="modelType" :borderBottom="true" required>
<global-picker pickAlign="right" v-model="formData.modelType" dictkey="eb_modelType" clearable></global-picker>
......@@ -452,7 +461,6 @@
</template>
<script setup>
import useBaseStore from 'mocp/store/base'
import useElectronicBillStore from 'mocp/store/electronicBill'
import {
formData,
......@@ -477,9 +485,10 @@ import {
getDeicingFile,
getAntiicingFile
} 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 {
selectList: { allAc, allAcType, allAirline }
......@@ -548,6 +557,9 @@ watchEffect(() => {
}
}
})
onUnmounted(() => {
resetData()
})
</script>
<style lang="scss" scoped>
:deep(.u-fade-zoom-enter-active) {
......@@ -567,7 +579,7 @@ watchEffect(() => {
}
.mocp-title {
padding: 0 32rpx 24rpx 32rpx;
background-color: #f7f8fa;
background-color: $mocp-fill-1;
}
.mocp-subtitle {
padding-top: 12rpx;
......
......@@ -52,15 +52,15 @@ export const formData = reactive({
deicingUnit2: '',
deicingUnit3: '',
deicingUnit4: '',
expectDeicing: 0,
fixedPointDeicing: 0,
expectDeicing: '0',
fixedPointDeicing: '0',
flightNoIn: '',
flightNoOut: '',
id: undefined,
legs: '',
model: '',
nickname: '',
originalAircraftPositionDeicing: 0,
originalAircraftPositionDeicing: '0',
station: '',
username: '',
guaranteeUnit: '',
......
import { upload } from 'mocp/utils/http'
import { canvasImage } from './sign.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 () => {
uni.showLoading({
......@@ -9,8 +10,14 @@ export const handleSubmit = async () => {
mask: true
})
try {
if (!canvasImage.value.includes('https')) {
await uploadFile()
}
if (formData.id > 0) {
await updateDeicing()
} else {
await addDeicing()
}
} catch (error) {
console.error(error)
} finally {
......@@ -37,7 +44,28 @@ export const addDeicing = async () => {
}
const res = await addDeicingApi(formData, { loading: true })
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()
uni.$mocpMessage.success(res.message)
} else {
......@@ -73,7 +101,7 @@ export const resetData = () => {
antiicingUnit3: '',
antiicingUnit4: '',
customerSignImg: '',
date: '',
date: Day().valueOf(),
deicingCartNo1: '',
deicingCartNo2: '',
deicingCartNo3: '',
......@@ -97,15 +125,15 @@ export const resetData = () => {
deicingUnit2: '',
deicingUnit3: '',
deicingUnit4: '',
expectDeicing: 0,
fixedPointDeicing: 0,
expectDeicing: '0',
fixedPointDeicing: '0',
flightNoIn: '',
flightNoOut: '',
id: undefined,
legs: '',
model: '',
nickname: '',
originalAircraftPositionDeicing: 0,
originalAircraftPositionDeicing: '0',
station: '',
username: '',
guaranteeUnit: '',
......
......@@ -14,7 +14,7 @@
}"
>
<template #default="{ item }">
<view class="item">
<view class="item" @tap="goDetails(item)">
<view class="item-title">
<view class="left">
<text class="txt">{{ item.acreg }}</text>
......@@ -45,9 +45,24 @@ import { deicingListApi } from 'mocp/api/electronicBill'
import { timeStampFormat } from 'mocp/utils/tool'
import useBaseStore from 'mocp/store/base'
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 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>
<style lang="scss" scoped>
@import 'mocpStatic/css/list.scss';
......
......@@ -9,6 +9,7 @@
@touchstart="touchStart"
@touchmove="touchMove"
@touchend="touchEnd"
id="canvas"
/>
</view>
<view class="footer-btns">
......@@ -34,8 +35,14 @@ import { canvasImage } from './constants/sign.compositions'
import { handleSubmit } from './constants/sign.functionals'
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 = () => {
if (isSigned.value) {
......@@ -67,6 +74,10 @@ onBeforeUnmount(() => {
.mocp-preview {
width: 100%;
height: 300rpx;
uni-image {
width: 100%;
height: 100%;
}
}
.mocp-title {
padding: 24rpx 0;
......
<template>
<global-page padding="0 24rpx" title="收费单" auto :localData="list">
<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 }}
</global-card>
</template>
......@@ -13,7 +13,15 @@ import { navigateTo } from 'mocp/utils/jump'
import { list } from './constants/list.compositions'
import useElectronicBillStore from 'mocp/store/electronicBill'
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()
onLoad(() => {
electronicBillStore.init()
......
import { reactive, ref } from 'vue'
import { reactive } from 'vue'
export const formData = reactive({
acreg: '',
acu: undefined,
aircaraftoperator: '',
asu: undefined,
bjjkzyxs: undefined,
bjjkzyzk: undefined,
bjscpxs: undefined,
bjscpzk: undefined,
cdydq: undefined,
cgydq: undefined,
charger: undefined,
cherryPicker: undefined,
cy: undefined,
createTime: '',
createUser: undefined,
customerSignImg: '',
customerSignTime: '',
cyfdlgjcs: '',
cyfdlgjjh: '',
cydlgjcs: '',
cydlgjjh: '',
date: '',
fbjjkzyxs: undefined,
fbjjkzyzk: undefined,
fbjscpxs: undefined,
fbjscpzk: undefined,
flightNo: '',
flightNoIn: '',
flightNoOut: '',
gjcl: undefined,
gpu: undefined,
hanger: undefined,
hlgj: undefined,
hy: undefined,
id: 0,
isDel: '',
jackscrew: undefined,
jgrygs: undefined,
jsjd: undefined,
jsqjd: undefined,
ladder: undefined,
legs: '',
gkgzt: undefined,
lzqjd: undefined,
material1: '',
material2: '',
material3: '',
model: '',
ndtktsbjh: '',
ndtktsbts: undefined,
ndtrygs: undefined,
nickname: '',
number1: undefined,
number2: undefined,
number3: undefined,
oxygenCharging: undefined,
powerTool: undefined,
ptgzt: undefined,
qtgj: [],
qtxhp: undefined,
shockStrutCharging: undefined,
sjcptcc: undefined,
sjcptcr: undefined,
station: '',
tails: undefined,
tireCharging: undefined,
tjpxs: undefined,
tjpzk: undefined,
tools: undefined,
tractor: undefined,
ttfj: undefined,
updateTime: '',
updateUser: undefined,
username: '',
work1: '',
work2: '',
work3: '',
workingHours1: undefined,
workingHours2: undefined,
workingHours3: undefined
workingHours3: undefined,
xbgkcc: undefined,
xbgkcr: undefined,
yyy: undefined
})
export const rules = reactive({
......
......@@ -18,3 +18,12 @@ export const changeAcreg = async (acreg) => {
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 { canvasImage } from './sign.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 () => {
uni.showLoading({
......@@ -9,8 +10,14 @@ export const handleSubmit = async () => {
mask: true
})
try {
if (!canvasImage.value.includes('https')) {
await uploadFile()
}
if (formData.id > 0) {
await updateNonRoutineWork()
} else {
await addNonRoutineWork()
}
} catch (error) {
console.error(error)
} finally {
......@@ -25,52 +32,129 @@ export const uploadFile = async () => {
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 () => {
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) {
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, {
acreg: '',
acu: undefined,
aircaraftoperator: '',
asu: undefined,
bjjkzyxs: undefined,
bjjkzyzk: undefined,
bjscpxs: undefined,
bjscpzk: undefined,
cdydq: undefined,
cgydq: undefined,
charger: undefined,
cherryPicker: undefined,
cy: undefined,
createTime: '',
createUser: undefined,
customerSignImg: '',
date: '',
customerSignTime: '',
cyfdlgjcs: '',
cyfdlgjjh: '',
cydlgjcs: '',
cydlgjjh: '',
date: Day().valueOf(),
fbjjkzyxs: undefined,
fbjjkzyzk: undefined,
fbjscpxs: undefined,
fbjscpzk: undefined,
flightNo: '',
flightNoIn: '',
flightNoOut: '',
gjcl: undefined,
gpu: undefined,
hanger: undefined,
hlgj: undefined,
hy: undefined,
id: 0,
isDel: '',
jackscrew: undefined,
jgrygs: undefined,
jsjd: undefined,
jsqjd: undefined,
ladder: undefined,
legs: '',
gkgzt: undefined,
lzqjd: undefined,
material1: '',
material2: '',
material3: '',
model: '',
ndtktsbjh: '',
ndtktsbts: undefined,
ndtrygs: undefined,
nickname: '',
number1: undefined,
number2: undefined,
number3: undefined,
oxygenCharging: undefined,
powerTool: undefined,
ptgzt: undefined,
qtgj: [],
qtxhp: undefined,
shockStrutCharging: undefined,
sjcptcc: undefined,
sjcptcr: undefined,
station: '',
tails: undefined,
tireCharging: undefined,
tjpxs: undefined,
tjpzk: undefined,
tools: undefined,
tractor: undefined,
ttfj: undefined,
updateTime: '',
updateUser: undefined,
username: '',
work1: '',
work2: '',
work3: '',
workingHours1: 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 @@
}"
>
<template #default="{ item }">
<view class="item">
<view class="item" @tap="goDetails(item)">
<view class="item-title">
<view class="left">
<text class="txt">{{ item.acreg }}</text>
......@@ -45,9 +45,26 @@ import { noRoutineWorkListApi } from 'mocp/api/electronicBill'
import { timeStampFormat } from 'mocp/utils/tool'
import useBaseStore from 'mocp/store/base'
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 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>
<style lang="scss" scoped>
@import 'mocpStatic/css/list.scss';
......
......@@ -9,6 +9,7 @@
@touchstart="touchStart"
@touchmove="touchMove"
@touchend="touchEnd"
id="canvas"
/>
</view>
<view class="footer-btns">
......@@ -24,7 +25,7 @@
</view>
<view class="mocp-title">用户签名预览</view>
<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>
</global-page>
</template>
......@@ -33,9 +34,14 @@ import { useDrawSignature } from 'mocp/hooks/use-sign/useSign'
import { canvasImage } from './constants/sign.compositions'
import { handleSubmit } from './constants/sign.functionals'
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 = () => {
if (isSigned.value) {
......@@ -52,10 +58,6 @@ const handleClear = () => {
canvasImage.value = ''
clear()
}
onBeforeUnmount(() => {
handleClear()
formData.customerSignImg = ''
})
</script>
<style lang="scss" scoped>
.mocp-sign,
......@@ -67,6 +69,10 @@ onBeforeUnmount(() => {
.mocp-preview {
width: 100%;
height: 300rpx;
uni-image {
width: 100%;
height: 100%;
}
}
.mocp-title {
padding: 24rpx 0;
......
<template>
<global-page
title="新建例行维护工作单"
:showNavRight="true"
:title="formData.id > 0 ? '编辑例行维护工作单' : '新建例行维护工作单'"
:showNavRight="formData.id > 0 ? false : true"
navRightText="今天签单"
@handleRightClick="navigateTo('/panel/electronicBill/routineWork/list')"
showFooterBtn
......@@ -12,61 +12,76 @@
<view class="mocp-title">基本信息</view>
<view class="mocp-form">
<up-form-item label="航站" prop="station" :borderBottom="true" required>
<global-picker
pickAlign="right"
v-model="formData.station"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
<global-picker pickAlign="right" v-model="formData.station" clearable :options="getTerminalSelect()" filter></global-picker>
</up-form-item>
<up-form-item label="日期" prop="date" :borderBottom="true" required>
<global-date pickAlign="right" clearable v-model="formData.date" defaultToday></global-date>
</up-form-item>
<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 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 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 label="进港航班号" prop="flightNoIn" :borderBottom="true" required>
<up-input v-model="formData.flightNoIn" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</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-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-form-item>
</view>
<view class="mocp-title">过站维护TR</view>
<view class="mocp-form">
<up-form-item label="过站TR" prop="tr" :borderBottom="true">
<global-switch v-model="formData.tr" switchAlign="right"></global-switch>
<up-form-item label="过站维护TR" prop="tr" :borderBottom="true">
<global-switch v-model="formData.tr" switchAlign="right" :disabled="formData.overnightAfPf == '1'"></global-switch>
</up-form-item>
<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>
</view>
<view class="mocp-title">航前维护PF</view>
<view class="mocp-title">过夜维护AF+PF</view>
<view class="mocp-form">
<up-form-item label="航前PR" prop="pf" :borderBottom="true">
<global-switch v-model="formData.pf" 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 label="过夜维护AF+PF" prop="overnightAfPf" :borderBottom="true">
<global-switch v-model="formData.overnightAfPf" switchAlign="right"></global-switch>
</up-form-item>
</view>
<view class="mocp-title">设备使用记录</view>
......@@ -110,14 +125,14 @@
</template>
<script setup>
import useBaseStore from 'mocp/store/base'
import useElectronicBillStore from 'mocp/store/electronicBill'
import { formData, rules } from './constants/add.compositions'
import { navigateTo } from 'mocp/utils/jump'
import { ref } from 'vue'
import { onUnmounted, ref, watchEffect } from 'vue'
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 {
selectList: { allAc, allAcType, allAirline }
......@@ -128,6 +143,22 @@ const handleFooterClick = async () => {
await formRef.value?.validate()
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>
<style lang="scss" scoped>
.mocp-form {
......@@ -137,6 +168,6 @@ const handleFooterClick = async () => {
}
.mocp-title {
padding: 0 32rpx 24rpx 32rpx;
background-color: #f7f8fa;
background-color: $mocp-fill-1;
}
</style>
......@@ -2,13 +2,13 @@ import { reactive } from 'vue'
export const formData = reactive({
acreg: '',
af: 0,
af: '0',
airConditioning: undefined,
airStarter: undefined,
aircaraftoperator: '',
customerSignImg: '',
date: '',
diversion: 0,
diversion: '0',
flightNoIn: '',
flightNoOut: '',
groundPower: undefined,
......@@ -16,19 +16,22 @@ export const formData = reactive({
legs: '',
model: '',
nickname: '',
onCall: 0,
onCall: '0',
others1: '',
others2: '',
pf: 0,
pf: '0',
remark: '',
returnFlight: 0,
serviceAf: 0,
servicePf: 0,
serviceTr: 0,
returnFlight: '0',
serviceAf: '0',
servicePf: '0',
serviceTr: '0',
station: '',
towPus: undefined,
tr: 1,
username: ''
tr: '0',
username: '',
routineInspection: '0',
fly: '0',
overnightAfPf: '0'
})
export const rules = reactive({
......@@ -74,5 +77,19 @@ export const rules = reactive({
message: '请选择进港航班号',
trigger: ['blur', 'change']
}
],
flightNoOut: [
{
required: true,
message: '请输入出港航班号',
trigger: ['blur', 'change']
}
],
legs: [
{
required: true,
message: '请输入航段',
trigger: ['blur', 'change']
}
]
})
import { ref } from 'vue'
export const canvasImage = ref('')
export const showConfirm = ref(false)
import { upload } from 'mocp/utils/http'
import { canvasImage } from './sign.compositions'
import { canvasImage, showConfirm } from './sign.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 () => {
uni.showLoading({
......@@ -9,14 +11,38 @@ export const handleSubmit = async () => {
mask: true
})
try {
if (!canvasImage.value.includes('https')) {
await uploadFile()
}
if (formData.id > 0) {
await updateRoutineWork()
} else {
await addRoutineWork()
}
} catch (error) {
console.error(error)
} finally {
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 () => {
const res = await upload({ url: '/resource/uploadFile', filePath: canvasImage.value, name: 'file' })
if (res.code == 200) {
......@@ -28,16 +54,36 @@ export const uploadFile = async () => {
export const addRoutineWork = async () => {
const res = await addRoutineWorkApi(formData, { loading: true })
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, {
acreg: '',
af: 0,
af: '0',
airConditioning: undefined,
airStarter: undefined,
aircaraftoperator: '',
customerSignImg: '',
date: '',
diversion: 0,
date: Day().valueOf(),
diversion: '0',
flightNoIn: '',
flightNoOut: '',
groundPower: undefined,
......@@ -45,22 +91,21 @@ export const addRoutineWork = async () => {
legs: '',
model: '',
nickname: '',
onCall: 0,
onCall: '0',
others1: '',
others2: '',
pf: 0,
pf: '0',
remark: '',
returnFlight: 0,
serviceAf: 0,
servicePf: 0,
serviceTr: 0,
returnFlight: '0',
serviceAf: '0',
servicePf: '0',
serviceTr: '0',
station: '',
towPus: undefined,
tr: 1,
username: ''
tr: '0',
username: '',
routineInspection: '0',
fly: '0',
overnightAfPf: '0'
})
uni.$mocpMessage.success(res.message)
} else {
uni.$mocpMessage.error(res.message)
}
}
......@@ -14,7 +14,7 @@
}"
>
<template #default="{ item }">
<view class="item">
<view class="item" @tap="goDetails(item)">
<view class="item-title">
<view class="left">
<text class="txt">{{ item.acreg }}</text>
......@@ -23,9 +23,10 @@
<text class="txt">{{ baseStore.getTerminalObject[item.station] }}</text>
</view>
</view>
<view class="item-content u-line-3">
<view class="item-content">
<text class="txt">{{ item.aircaraftoperator }}</text>
<text class="txt">{{ item.model }}</text>
<text class="txt">{{ item.overnightAfPf == '1' ? '过夜维护AF+PF' : '' }}</text>
</view>
<view class="item-footer">
<view class="label">
......@@ -45,9 +46,24 @@ import { routineWorkListApi } from 'mocp/api/electronicBill'
import { timeStampFormat } from 'mocp/utils/tool'
import useBaseStore from 'mocp/store/base'
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 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>
<style lang="scss" scoped>
@import 'mocpStatic/css/list.scss';
......
......@@ -9,6 +9,7 @@
@touchstart="touchStart"
@touchmove="touchMove"
@touchend="touchEnd"
id="canvas"
/>
</view>
<view class="footer-btns">
......@@ -16,7 +17,7 @@
<global-button type="primary" size="large" :radius="5" @tap="handleSave">保存签名</global-button>
</view>
<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 class="footer-btn">
<global-button type="primary" plain size="large" :radius="5" @tap="handleClear">重新签名</global-button>
......@@ -24,18 +25,33 @@
</view>
<view class="mocp-title">用户签名预览</view>
<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>
<up-modal
title="单据重复"
content="系统检测到今日已有过夜数据,是否继续提交?"
:show="showConfirm"
showCancelButton
closeOnClickOverlay
@confirm="handleSubmit"
@cancel="showConfirm = false"
@close="showConfirm = false"
></up-modal>
</global-page>
</template>
<script setup>
import { useDrawSignature } from 'mocp/hooks/use-sign/useSign'
import { canvasImage } from './constants/sign.compositions'
import { handleSubmit } from './constants/sign.functionals'
import { canvasImage, showConfirm } from './constants/sign.compositions'
import { handleSubmit, routineWorkCheckRepeat } from './constants/sign.functionals'
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 = () => {
if (isSigned.value) {
......@@ -52,10 +68,6 @@ const handleClear = () => {
canvasImage.value = ''
clear()
}
onBeforeUnmount(() => {
handleClear()
formData.customerSignImg = ''
})
</script>
<style lang="scss" scoped>
.mocp-sign,
......@@ -67,6 +79,10 @@ onBeforeUnmount(() => {
.mocp-preview {
width: 100%;
height: 300rpx;
uni-image {
width: 100%;
height: 100%;
}
}
.mocp-title {
padding: 24rpx 0;
......
......@@ -297,7 +297,7 @@ const { details } = storeToRefs(engineeringEvaluationStore)
}
.mocp-title {
padding: 12rpx 32rpx 12rpx 32rpx;
background-color: #f7f8fa;
background-color: $mocp-fill-1;
display: flex;
justify-content: space-between;
align-items: center;
......@@ -309,7 +309,7 @@ const { details } = storeToRefs(engineeringEvaluationStore)
}
:deep(.u-collapse-item) {
.u-cell {
background: #f7f8fa;
background: $mocp-fill-1;
}
.u-collapse-item__content {
.u-cell {
......
<template>
<global-page title="筛选">
<view class="search-form">
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="isOpen" :borderBottom="true">
<global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="ta_isOpen"></global-picker>
......@@ -9,44 +8,40 @@
<global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker>
</up-form-item>
<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 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
v-model="formData.acOwn"
pickAlign="right"
v-model="formData.acTerminal"
:options="getAirlineSelect('机械不正常事件-工程分析')"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item>
<up-form-item label="专业类别" prop="majorClass" :borderBottom="true">
<up-form-item label="航站" prop="acTerminal" :borderBottom="true">
<global-picker
v-model="formData.majorClass"
pickAlign="right"
:options="getParamsByType('MajorCategory')"
v-model="formData.acTerminal"
clearable
:options="getTerminalSelect('机械不正常事件-工程分析')"
filter
></global-picker>
</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">
<global-picker v-model="formData.ataChapter" pickAlign="right" :options="baseStore.getATAChecked()" clearable filter />
</up-form-item>
</up-form>
</view>
<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>
</global-page-search>
</template>
<script setup>
......@@ -54,8 +49,8 @@ import useBaseStore from 'mocp/store/base'
import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
import useEngineeringEvaluationStore from 'mocp/store/engineeringEvaluation'
import { getAirlineSelect, getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项
const baseStore = useBaseStore()
......@@ -77,13 +72,4 @@ const handleConfirm = () => {
uni.$emit('engineeringEvaluationReload')
}
</script>
<style lang="scss" scoped>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<style lang="scss" scoped></style>
<template>
<global-page title="筛选">
<view class="search-form">
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker v-model="formData.state" pickAlign="right" clearable dictkey="fleet_state" />
</up-form-item>
<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 label="机号" prop="machineNumber" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter />
</up-form-item>
<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 label="ATA章节" prop="ata" :borderBottom="true">
<global-picker
......@@ -42,28 +41,10 @@
<global-calendar pickAlign="right" v-model:startTime="formData.startTime" v-model:endTime="formData.stopTime" clearable />
</up-form-item>
<up-form-item label="专业类别" prop="professionalType" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.professionalType"
clearable
:options="getParamsByType('MajorCategory')"
></global-picker>
<global-picker pickAlign="right" v-model="formData.professionalType" clearable paramsType="MajorCategory"></global-picker>
</up-form-item>
</up-form>
</view>
<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>
</global-page-search>
</template>
<script setup>
......@@ -72,8 +53,8 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
import useFleetStore from 'mocp/store/fleet'
import { getParamsByType } from 'mocp/hooks/use-params/useParams'
import { selectFaultTagByATAApi } from 'mocp/api/fleet'
import { getAirlineSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项
const baseStore = useBaseStore()
......@@ -110,14 +91,4 @@ const changeAta = async (value, data) => {
}
}
</script>
<style lang="scss" scoped>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<style lang="scss" scoped></style>
<template>
<global-page title="筛选">
<view class="screen-form">
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto">
<up-form-item label="机号" prop="ac" :borderBottom="true">
<global-picker v-model="formData.ac" pickAlign="right" clearable :options="deviceNumList" filter />
</up-form-item>
<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 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 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 label="航班号" prop="flightNo" :borderBottom="true">
<global-picker v-model="formData.flightNo" pickAlign="right" :options="baseStore.selectList.flightNumList" clearable filter />
</up-form-item>
</up-form>
</view>
<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>
</global-page-search>
</template>
<script setup>
......@@ -44,6 +30,7 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import useBaseStore from 'mocp/store/base'
import useFlightSupportStore from 'mocp/store/flight-support'
import { getAirlineSelect, getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项
const baseStore = useBaseStore()
......@@ -70,14 +57,4 @@ const handleConfirm = () => {
uni.$emit('screenReload')
}
</script>
<style lang="scss" scoped>
.screen-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<style lang="scss" scoped></style>
......@@ -42,18 +42,11 @@
<script setup>
import useFleetStore from 'mocp/store/fleet'
import { storeToRefs } from 'pinia'
import useUserStore from 'mocp/store/user'
import { timeStampFormat } from 'mocp/utils/tool'
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 { details } = storeToRefs(fleetStore)
console.log(details, details.value.creationTime, timeStampFormat('1721810489517', { format: 'YYYY-MM-DD' }))
</script>
<style lang="scss" scoped>
@import '../work-assignment/constants/details.scss';
......
<template>
<global-page title="筛选">
<view class="search-form">
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto">
<up-form-item label="机号" prop="machine_number" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.machine_number" :options="deviceNumList" clearable filter />
</up-form-item>
<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 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 label="航站" prop="termin" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.termin"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
<global-picker pickAlign="right" v-model="formData.termin" clearable :options="getTerminalSelect('信息通报')" filter></global-picker>
</up-form-item>
<up-form-item label="填报日期" :borderBottom="true">
......@@ -29,81 +22,33 @@
</up-form-item>
<up-form-item label="保障阶段" prop="guarantee" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.guarantee"
clearable
:options="getParamsByType('GuaranteeStage')"
filter
></global-picker>
<global-picker pickAlign="right" v-model="formData.guarantee" clearable paramsType="GuaranteeStage" filter></global-picker>
</up-form-item>
<up-form-item label="完成状态" prop="rlease_state" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.rlease_state"
clearable
:options="getParamsByType('ReleaseStatu')"
filter
></global-picker>
<global-picker pickAlign="right" v-model="formData.rlease_state" clearable paramsType="ReleaseStatu" filter></global-picker>
</up-form-item>
<up-form-item label="运行阶段" prop="function_Info" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.function_Info"
clearable
:options="getParamsByType('OperationPhase')"
filter
></global-picker>
<global-picker pickAlign="right" v-model="formData.function_Info" clearable paramsType="OperationPhase" filter></global-picker>
</up-form-item>
<up-form-item label="故障状态" prop="failure_state" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.failure_state"
clearable
:options="getParamsByType('RetentionBasis')"
filter
></global-picker>
<global-picker pickAlign="right" v-model="formData.failure_state" clearable paramsType="RetentionBasis" filter></global-picker>
</up-form-item>
<up-form-item label="专业类别" prop="professional" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.professional"
clearable
:options="getParamsByType('MajorCategory')"
filter
></global-picker>
<global-picker pickAlign="right" v-model="formData.professional" clearable paramsType="MajorCategory" filter></global-picker>
</up-form-item>
<up-form-item label="数据来源" prop="isType" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.isType" clearable dictkey="id_isType"></global-picker>
</up-form-item>
<up-form-item label="故障报告人" prop="reporter" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.reporter"
clearable
:options="getParamsByType('FaultReporting')"
></global-picker>
<global-picker pickAlign="right" v-model="formData.reporter" clearable paramsType="FaultReporting"></global-picker>
</up-form-item>
</up-form>
</view>
<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>
</global-page-search>
</template>
<script setup>
......@@ -112,10 +57,9 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
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 {
selectList: { deviceNumList }
} = useBaseStore()
......@@ -134,14 +78,4 @@ const handleConfirm = () => {
uni.$emit('inforDisclosureReload')
}
</script>
<style lang="scss" scoped>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<style lang="scss" scoped></style>
......@@ -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.model">{{ details.model }}</text>
<text class="txt u-line-1" v-if="details.aviation">
{{ useGetDictByValue('', details.aviation, { data: baseStore.getAirlineSelect }) }}
{{ useGetDictByValue('', details.aviation, { data: getAirlineSelect() }) }}
</text>
</view>
<view class="right">
......@@ -86,13 +86,12 @@
import { storeToRefs } from 'pinia'
import { timeStampFormat } from 'mocp/utils/tool'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import useBaseStore from 'mocp/store/base'
import useMcoStore from 'mocp/store/mco'
import { onLoad, onUnload } from '@dcloudio/uni-app'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import { getAirlineSelect } from 'mocp/utils/permission'
const query = defineProps(['id'])
const baseStore = useBaseStore()
const mcoStore = useMcoStore()
const { details, getStepList } = storeToRefs(mcoStore)
onLoad(() => {
......
......@@ -36,7 +36,7 @@ const { getMaterialsList } = storeToRefs(mcoStore)
background: #fff;
}
:deep(.u-collapse-item) {
background: #f7f8fa;
background: $mocp-fill-1;
.u-cell__body {
padding: 24rpx !important;
}
......
<template>
<global-page title="筛选">
<view class="search-form">
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker
v-model.number="formData.state"
pickAlign="right"
clearable
:options="getParamsByType('McoCurrentState')"
></global-picker>
<global-picker v-model.number="formData.state" pickAlign="right" clearable paramsType="McoCurrentState"></global-picker>
</up-form-item>
<up-form-item label="机号" prop="machineNumber" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter></global-picker>
</up-form-item>
<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
v-model="formData.model"
pickAlign="right"
v-model="formData.terminal"
:options="getTypeSelect('技术支援-MCO管理')"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item>
<up-form-item label="专业类别" prop="majorCategory" :borderBottom="true">
<up-form-item label="航站" prop="terminal" :borderBottom="true">
<global-picker
v-model="formData.majorCategory"
pickAlign="right"
:options="getParamsByType('MajorCategory')"
v-model="formData.terminal"
clearable
:options="getTerminalSelect('技术支援-MCO管理')"
filter
></global-picker>
</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">
<global-date v-model="formData.startTime" pickAlign="right" clearable></global-date>
</up-form-item>
......@@ -52,18 +47,7 @@
<global-picker v-model.number="formData.inspect" pickAlign="right" clearable dictkey="mco_choose"></global-picker>
</up-form-item>
</up-form>
</view>
<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>
</global-page-search>
</template>
<script setup>
......@@ -72,10 +56,9 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
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 {
selectList: { deviceNumList }
} = useBaseStore()
......@@ -94,13 +77,4 @@ const handleConfirm = () => {
uni.$emit('mcoReload')
}
</script>
<style lang="scss" scoped>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<style lang="scss" scoped></style>
......@@ -49,7 +49,7 @@ const { getStepDetails, getStepBackDetails } = storeToRefs(mcoStore)
}
.mocp-title {
padding: 16rpx;
background-color: #f7f8fa;
background-color: $mocp-fill-1;
}
.mocp-form {
padding: 0 32rpx;
......
......@@ -35,7 +35,7 @@ const { getToolsList } = storeToRefs(mcoStore)
background: #fff;
}
:deep(.u-collapse-item) {
background: #f7f8fa;
background: $mocp-fill-1;
.u-cell__body {
padding: 24rpx !important;
}
......
......@@ -114,7 +114,7 @@ const { details } = storeToRefs(mechanicalAbnormalEventsStore)
}
.mocp-title {
padding: 24rpx 32rpx 24rpx 32rpx;
background-color: #f7f8fa;
background-color: $mocp-fill-1;
}
.mocp-subTitle {
padding: 24rpx 32rpx 0 32rpx;
......
<template>
<global-page title="筛选">
<view class="search-form">
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="isOpen" :borderBottom="true">
<global-picker v-model="formData.isOpen" pickAlign="right" clearable dictkey="mae_isOpen"></global-picker>
......@@ -9,10 +8,22 @@
<global-picker pickAlign="right" v-model="formData.ac" :options="deviceNumList" clearable filter></global-picker>
</up-form-item>
<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 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 label="事件分类" prop="eventType" :borderBottom="true">
<global-picker v-model="formData.eventType" pickAlign="right" dictkey="mae_eventType" clearable></global-picker>
......@@ -21,13 +32,7 @@
<global-picker v-model="formData.runEvent" pickAlign="right" dictkey="mae_runEvent" clearable></global-picker>
</up-form-item>
<up-form-item label="发生航站" prop="happenStn" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.happenStn"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
<global-picker pickAlign="right" v-model="formData.happenStn" clearable :options="getTerminalSelect()" filter></global-picker>
</up-form-item>
<up-form-item label="延误定性" prop="delayNature" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.delayNature" clearable :options="delayNature"></global-picker>
......@@ -50,18 +55,7 @@
<up-input v-model="formData.msg" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item>
</up-form>
</view>
<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>
</global-page-search>
</template>
<script setup>
......@@ -70,9 +64,9 @@ import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
import useMechanicalAbnormalEventsStore from 'mocp/store/mechanicalAbnormalEvents'
import { getAirlineSelect, getTerminalSelect, getTypeSelect } from 'mocp/utils/permission'
//获取下拉框选项
const baseStore = useBaseStore()
const {
selectList: { deviceNumList, flightNumList },
rcOptions: { delayNature, delayProperty }
......@@ -92,13 +86,4 @@ const handleConfirm = () => {
uni.$emit('mechanicalAbnormalEventsReload')
}
</script>
<style lang="scss" scoped>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<style lang="scss" scoped></style>
......@@ -26,7 +26,7 @@
<view class="details-body-field">
<global-field
label="航司:"
:value="useGetDictByValue('', details.aviation, { data: baseStore.getAirlineSelect }) || '-'"
:value="useGetDictByValue('', details.aviation, { data: getAirlineSelect() }) || '-'"
></global-field>
<global-field label="航站:" :value="baseStore.getTerminalObject[details.terminal] || '-'"></global-field>
</view>
......@@ -119,6 +119,7 @@ import useBaseStore from 'mocp/store/base'
import { storeToRefs } from 'pinia'
import { timeStampFormat } from 'mocp/utils/tool'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import { getAirlineSelect } from 'mocp/utils/permission'
const baseStore = useBaseStore()
const moveDecisionStore = useMoveDecisionStore()
......
......@@ -43,18 +43,12 @@
:placeholder="formData.aviation ? '' : '请选择机号自动关联'"
>
<template #suffix>
{{ useGetDictByValue('', formData.aviation, { data: baseStore.getAirlineSelect }) }}
{{ useGetDictByValue('', formData.aviation, { data: getAirlineSelect() }) }}
</template>
</up-input>
</up-form-item>
<up-form-item label="航站" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.terminal"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
<global-picker pickAlign="right" v-model="formData.terminal" clearable :options="getTerminalSelect()" filter></global-picker>
</up-form-item>
<up-form-item label="日期" :borderBottom="true">
<global-date
......@@ -87,12 +81,7 @@
></global-date>
</up-form-item>
<up-form-item label="运行决策类型" :borderBottom="true">
<global-picker
pickAlign="right"
v-model="formData.technicalType"
clearable
:options="getParamsByType('OperationalDecisionType')"
></global-picker>
<global-picker pickAlign="right" v-model="formData.technicalType" clearable paramsType="OperationalDecisionType"></global-picker>
</up-form-item>
<up-form-item label="故障描述" :borderBottom="true" labelPosition="top">
<up-textarea v-model.trim="formData.faultDescription" placeholder="请输入" :height="40" border="none"></up-textarea>
......@@ -144,7 +133,7 @@ import useBaseStore from 'mocp/store/base'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { getAcReduceListApi } from 'mocp/api/system'
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()
//获取下拉框选项
......
<template>
<global-page title="筛选">
<view class="search-form">
<global-page-search @reset="handleReset" @confirm="handleConfirm">
<up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker v-model="formData.state" pickAlign="right" clearable dictkey="md_state"></global-picker>
......@@ -10,7 +9,7 @@
pickAlign="right"
v-model="formData.terminal"
clearable
:options="baseStore.getTerminalSelect"
:options="getTerminalSelect('维修控制-运行决策')"
filter
></global-picker>
</up-form-item>
......@@ -40,7 +39,7 @@
<global-picker
v-model="formData.aviation"
pickAlign="right"
:options="baseStore.getAirlineSelect"
:options="getAirlineSelect('维修控制-运行决策')"
clearable
filter
></global-picker>
......@@ -57,18 +56,7 @@
></global-calendar>
</up-form-item>
</up-form>
</view>
<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>
</global-page-search>
</template>
<script setup>
......@@ -77,9 +65,9 @@ import useMoveDecisionStore from 'mocp/store/move-decision'
import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash'
import { ref } from 'vue'
import { getAirlineSelect, getTerminalSelect } from 'mocp/utils/permission'
//获取下拉框选项
const baseStore = useBaseStore()
const {
selectList: { deviceNumList }
} = useBaseStore()
......@@ -98,13 +86,4 @@ const handleConfirm = () => {
uni.$emit('moveDecisionReload')
}
</script>
<style lang="scss" scoped>
.search-form {
padding: 24rpx 24rpx 0 24rpx;
background: #fff;
}
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
<style lang="scss" scoped></style>
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