Commit 256a68a6 by pangchong

refactor: 移除未使用的图片和组件文件

fix(panel): 修复机型类别判断逻辑
调整机型类别判断逻辑,支持更多宽体机前缀匹配

chore: 回退uview-plus版本至3.2.22

style(global-page): 添加底部间距
在全局页面组件底部添加100rpx间距

chore(login): 更新默认密码注释
添加备选密码注释说明

perf(deicing): 优化机型选择逻辑
重构机型类别判断函数,支持手动触发更新
parent 2c8245ed
......@@ -83,6 +83,7 @@
</template>
<slot v-else></slot>
</view>
<view style="height: 100rpx"></view>
<!-- 底部 -->
<template #bottom v-if="showBottom">
<view class="footer-btn" v-if="showFooterBtn" :style="{ visibility: showBottom ? 'visible' : 'hidden' }">
......
......@@ -458,7 +458,7 @@
"utif": "^2.0.1",
"util-deprecate": "^1.0.2",
"utils-merge": "^1.0.1",
"uview-plus": "^3.2.23",
"uview-plus": "3.2.22",
"v8-to-istanbul": "^8.1.1",
"vary": "^1.1.2",
"vite": "^4.0.3",
......
<template>经验库</template>
<script setup></script>
<style lang="scss"></style>
......@@ -3,7 +3,7 @@ export const loginFormRef = ref()
//表单数据
export const loginForm = reactive({
username: '', //devzj3
password: '', //Ifar_SAFE_202506_13
password: '', //Ifar_SAFE_202506_13/Ifar_9527008
verifyCode: ''
})
export const showLoad = ref(false)
......
<template>
<global-page title="个人中心">
<template #bottom>
<global-button size="large" type="primary" @tap="handleLogOut">退出登录</global-button>
</template>
</global-page>
</template>
<script setup>
import useUserStore from 'mocp/store/user'
//退出登录
const userStore = useUserStore()
const handleLogOut = () => {
userStore.handleLogOut()
}
</script>
<style lang="scss"></style>
<template>
<global-page
:title="formData.isDuty == 0 ? '添加公司值班信息' : '添加品质中心信息'"
navLeftType="text"
showNavRight
navRightType="button"
navRightText="保存"
@handleRightClick="handleRightClick"
>
<view class="mocp-form">
<up-form labelPosition="left" labelWidth="auto">
<up-form-item :label="formData.isDuty == 0 ? '公司值班经理' : '品质中心经理'" :borderBottom="true">
<global-picker pickAlign="right" clearable v-model="formData.mid" :options="selectList" emptyValue="-1"></global-picker>
</up-form-item>
<up-form-item :label="formData.isDuty == 0 ? '公司值班经理意见' : '品质中心经理意见'" :borderBottom="true">
<global-picker pickAlign="right" clearable v-model="formData.opinionType" dictkey="ar_opinionType" :emptyValue="-1"></global-picker>
</up-form-item>
<up-form-item
:label="formData.isDuty == 0 ? '公司值班经理意见描述' : '品质中心经理意见描述'"
:borderBottom="true"
labelPosition="top"
>
<up-textarea
placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容"
:height="40"
border="none"
v-model="formData.msg"
></up-textarea>
</up-form-item>
</up-form>
</view>
</global-page>
</template>
<script setup>
import { saveRqmOpinionApi } from 'mocp/api/appraisal-record'
import { getAdminListApi } from 'mocp/api/base'
import { onLoad } from '@dcloudio/uni-app'
import { reactive, ref } from 'vue'
import useAppraisalRecordStore from 'mocp/store/appraisal-record'
const appraisalRecordStore = useAppraisalRecordStore()
//表单数据
const formData = reactive({
id: '',
isDuty: 0,
mid: '-1',
opinionType: -1,
msg: ''
})
onLoad(() => {
uni.$once('appraisalRecordAdd', (data, realName) => {
Object.assign(formData, data)
getAdminList(realName || '')
})
})
//获取下拉框列表
const selectList = ref([])
const getAdminList = async (realName) => {
const params = {
pageIndex: 1,
pageSize: 100,
realName
}
const res = await getAdminListApi(params, { loading: true })
if (res.code == 200) {
selectList.value = res.data.list.map((item) => {
return {
label: `${item.nickname}(${(item.enetAccount || '无易网号') + '-' + (item.deptFullName || '无机构')})`,
value: item.id
}
})
} else {
uni.$mocpMessage.showToast(res.message)
}
}
const handleRightClick = async () => {
const res = await saveRqmOpinionApi(formData, { loading: true })
if (res.code == 200) {
uni.$mocpJump.navigateBack()
appraisalRecordStore.getRqmDetails()
uni.$mocpMessage.showToast(res.message)
} else {
uni.$mocpMessage.showToast(res.message)
}
}
</script>
<style lang="scss" scoped>
.mocp-form {
background: #fff;
padding: 0 32rpx;
}
</style>
<template>
<view class="card-details-item">
<view class="label">{{ label }}</view>
<text>{{ value }}</text>
</view>
</template>
<script setup>
const ps = defineProps({
label: {
type: String,
default: ''
},
value: {
type: String,
default: ''
}
})
</script>
<style lang="scss" scoped>
.card-details-item {
display: flex;
justify-content: space-between;
margin-bottom: 16rpx;
.label {
min-width: 50%;
color: $mocp-text-5;
}
text {
text-align: right;
word-break: break-all;
}
}
</style>
<template>
<view class="card">
<view class="card-title">
<view class="left">
<global-icon :icon="titleIcon" color="#1D2129"></global-icon>
<text class="txt">{{ title }}</text>
</view>
<view class="right" v-if="edit">
<global-button type="text" @tap="handleAdd">{{ calendar != -1 ? '编辑' : '添加' }}</global-button>
</view>
</view>
<view class="card-content">
<template v-if="type == 'appeal'">
<slot></slot>
</template>
<template v-else>
<slot></slot>
</template>
</view>
<slot name="footer" v-if="showfooter">
<view class="card-footer">
<view class="label">
<global-icon icon="idcard" color="#1D2129"></global-icon>
<text class="txt">{{ idcard || '-' }}</text>
</view>
<view class="label">
<global-icon icon="calendar" color="#1D2129"></global-icon>
<text class="txt">{{ calendar != -1 ? timeStampFormat(calendar) : '-' }}</text>
</view>
</view>
</slot>
</view>
</template>
<script setup>
import { timeStampFormat } from 'mocp/utils/tool'
const es = defineEmits(['handleAdd'])
const ps = defineProps({
// company,quality,appeal
type: {
type: String,
default: 'company'
},
title: {
type: String,
default: ''
},
titleIcon: {
type: String,
default: 'message'
},
edit: {
type: Boolean,
default: false
},
showfooter: {
type: Boolean,
default: false
},
idcard: {
type: String,
default: '-'
},
calendar: {
type: [String, Number],
default: '-'
}
})
const handleAdd = () => {
es('handleAdd')
}
</script>
<style lang="scss" scoped>
.card {
margin-top: 16rpx;
padding: 16rpx 24rpx;
border-radius: 12rpx;
color: $mocp-text-4;
background: #ffffff;
&-title {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 2rpx solid #f4f4f4;
padding-bottom: 16rpx;
color: $mocp-text-5;
.left {
display: flex;
align-items: center;
.txt {
margin-left: 8rpx;
color: $mocp-text-5;
}
}
}
&-content {
padding-top: 16rpx;
}
&-footer {
display: flex;
align-items: center;
justify-content: flex-end;
.label {
margin-left: 16rpx;
.txt {
margin-left: 16rpx;
}
}
}
}
</style>
import { reactive, ref } from 'vue'
export const formRef = ref()
export const fileList = ref([])
// 校验规则
export const rules = reactive({
eventTime: [
{
type: 'number',
required: true,
message: '请选择日期',
trigger: ['blur', 'change']
}
]
})
// 表单数据
export const formData = reactive({
id: '',
ac: '',
acOwn: '',
acType: '',
appealInfo: '-1',
appraisee: '-1',
department: '-1',
dmUid: '-1',
eventMsg: '',
eventSource: '',
eventTime: -1,
eventType: -1,
examineBasis: '',
examineType: '-1',
onDutyUser: '',
opinionMsg: '',
opinionType: -1,
score: null,
qmUid: '',
qualityOpinionMsg: '',
qualityOpinionType: -1,
status: '',
emailSendTime: -1,
file: []
})
import { getAcReduceListApi } from 'mocp/api/base'
import { formData } from './edit.compositions'
//切换机号
export const changeAc = async () => {
const res = await getAcReduceListApi({ ac: formData.ac }, { loading: true })
if (res.code == 200) {
formData.acOwn = res.data[0]?.zop3
formData.acType = res.data[0]?.zstortgc
} else {
uni.$mocpMessage.showToast(res.message)
}
}
.item {
padding: 24rpx;
margin-bottom: 16rpx;
border-radius: 12rpx;
background: linear-gradient(#e6eeff, #ffffff, #ffffff);
&-title {
display: flex;
align-items: center;
justify-content: space-between;
padding-bottom: 16rpx;
border-bottom: 2rpx solid #f4f4f4;
.desc {
display: flex;
align-items: center;
.txt {
color: $mocp-text-5;
font-size: 34rpx;
margin: 0 16rpx;
}
.place {
font-size: 28rpx;
color: $mocp-text-3;
}
}
}
&-content {
padding-top: 16rpx;
font-size: 30rpx;
color: $mocp-text-4;
line-height: 40rpx;
}
}
.item {
padding: 24rpx;
margin-bottom: 16rpx;
border-radius: 12rpx;
background: linear-gradient(#e6eeff, #ffffff, #ffffff);
&-title {
display: flex;
align-items: center;
justify-content: space-between;
padding-bottom: 16rpx;
border-bottom: 2rpx solid #f4f4f4;
.left {
display: flex;
align-items: center;
.txt {
color: $mocp-text-5;
font-size: 34rpx;
margin: 0 16rpx;
}
}
.right {
color: $mocp-primary-6;
}
}
&-content {
padding-top: 16rpx;
font-size: 30rpx;
color: $mocp-text-4;
line-height: 40rpx;
}
&-footer {
.label {
display: flex;
align-items: center;
margin-top: 16rpx;
.txt {
margin-left: 16rpx;
}
}
}
}
......@@ -45,7 +45,15 @@
<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 customize></global-picker>
<global-picker
v-model="formData.model"
pickAlign="right"
:options="allAcType"
@change="changeModel"
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>
......@@ -679,7 +687,8 @@ import {
getAntiicingFile,
confirmAntiicing2,
getAntiicing2File,
submitAntiicing2
submitAntiicing2,
changeModel
} from './constants/add.functionals'
import { onUnmounted, watch, watchEffect } from 'vue'
import { getTerminalSelect } from 'mocp/utils/permission'
......@@ -776,17 +785,6 @@ watch([() => formData.antiicing2QuantityTotal, () => formData.weatherToday, () =
antiicing2File.value = []
}
})
// 海航集团内部的宽体机——A330-,787-,747-,777-,A350-,其余为窄体,集团外部机型-机型类别无对应数据需要手动选择
const prefixes = ['A330-', '787-', '747-', '777-', 'A350-']
watchEffect(() => {
if (formData.model) {
if (prefixes.some((prefix) => formData.model.startsWith(prefix))) {
formData.modelType = '1'
} else {
formData.modelType = '2'
}
}
})
onUnmounted(() => {
resetData()
})
......
......@@ -25,6 +25,7 @@ export const changeAcreg = async (acreg) => {
if (res.data?.actype) {
formData.model = res.data.actype
}
setModelType()
if (res.data?.flightNo) {
formData.flightNoIn = res.data.flightNo
formData.flightNoOut = res.data.flightNo
......@@ -33,6 +34,19 @@ export const changeAcreg = async (acreg) => {
uni.$mocpMessage.error(res.message)
}
}
export const changeModel = (model) => {
setModelType(model)
}
// 海航集团内部的宽体机——'A33','330', '787', '747', '777', '350','A35',其余为窄体,集团外部机型-机型类别无对应数据需要手动选择
const prefixes = ['A33', '330', '787', '747', '777', '350', 'A35']
export const setModelType = () => {
if (!formData.model) return
if (prefixes.some((prefix) => formData.model.includes(prefix))) {
formData.modelType = '1'
} else {
formData.modelType = '2'
}
}
export const getDeicingFile = (value) => {
deicingFile.value = value
}
......
.item {
padding: 24rpx;
margin-bottom: 16rpx;
border-radius: 12rpx;
background: linear-gradient(#e6eeff, #ffffff, #ffffff);
&-title {
display: flex;
align-items: center;
padding-bottom: 16rpx;
border-bottom: 2rpx solid #f4f4f4;
.left {
display: flex;
align-items: center;
.txt {
color: $mocp-text-5;
font-size: 34rpx;
margin-left: 16rpx;
}
}
}
&-content {
padding-top: 16rpx;
font-size: 30rpx;
color: $mocp-text-4;
line-height: 40rpx;
}
&-footer {
display: flex;
align-items: center;
justify-content: space-between;
.label {
display: flex;
align-items: center;
margin-top: 16rpx;
.txt {
margin-left: 16rpx;
}
}
}
}
<template>
<view class="content" :style="{ height: `calc(100vh - 386rpx - ${safeAreaInsets?.top + 'px'})` }">
<view class="tab-nav">
<global-tabs :list="tabNav" @handleClick="handleClick"></global-tabs>
</view>
<scroll-view class="tab-content" scroll-y="true">
<view class="tab-content-item" v-if="activeIndex == 0">
<view class="menu-list">
<menu-item
class="menu-item"
v-for="item in userStore.getHomeMenuList"
:data="item"
:key="item.id"
@tap="goTo(item.url)"
></menu-item>
<menu-item class="menu-item" :data="userStore.allMenuItem" @tap="goAppCenter"></menu-item>
</view>
</view>
<view class="tab-content-item" v-if="activeIndex == 1">
<view class="menu-content">
<view class="menu-content-item" v-for="(value, key) in userStore.getGroupMenuList" :key="key">
<view class="menu-title">{{ key }}</view>
<view class="menu-list">
<menu-item class="menu-item" v-for="item in value" :data="item" :key="item.id" @tap="goTo(item.url)"></menu-item>
</view>
<view class="menu-line"></view>
</view>
</view>
</view>
</scroll-view>
</view>
</template>
<script setup>
import { ref } from 'vue'
import MenuItem from './components/menu-item.vue'
import useUserStore from 'mocp/store/user'
const userStore = useUserStore()
// 获取屏幕边界到安全区域距离
const { safeAreaInsets } = uni.getSystemInfoSync()
//分类
const activeIndex = ref(0)
const tabNav = ref([{ name: '常用' }, { name: '分组' }])
const handleClick = (_, index) => {
activeIndex.value = index
}
//跳转
const goTo = (url) => {
if (url) {
uni.$mocpJump.navigateTo(url)
} else {
uni.$mocpMessage.showToast('暂未开放!')
}
}
//跳转应用中心
const goAppCenter = () => {
uni.$mocpJump.navigateTo('/app-center/index')
}
</script>
<style lang="scss" scoped>
@import './constants/panel-menu.scss';
</style>
<template>
<view class="navbar">
<view class="navbar-box">
<view class="navbar-box-info">
<image src="/static/mocp/image/panel/logo.png" />
</view>
<view class="navbar-box-weather">
<image src="/static/mocp/image/panel/weather.png" />
<view class="info">
<view class="place">武汉-WUH</view>
<view class="txt">晴转多云 22°</view>
</view>
</view>
</view>
<view class="navbar-bottom-list">
<view class="list-item">
<image class="list-item-image" src="/static/mocp/image/panel/wdrw.png" />
<view class="list-item-title">我的任务</view>
<view class="list-item-txt">24</view>
</view>
<view class="list-item-line"></view>
<view class="list-item">
<image class="list-item-image" src="/static/mocp/image/panel/gjrw.png" />
<view class="list-item-title">跟机任务</view>
<view class="list-item-txt">24</view>
</view>
<!-- <view class="list-item-line"></view>
<view class="list-item">
<image class="list-item-image" src="static/mocp/image/mocp/panel/AOGrw.png" />
<view class="list-item-title">AOG任务</view>
<view class="list-item-txt">24</view>
</view> -->
</view>
</view>
</template>
<script setup></script>
<style lang="scss" scoped>
@import './constants/panel-navbar.scss';
</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