Commit f8ef0f04 by liujinbo

Merge branch 'refs/heads/master' into master_ljb

parents 506ea510 9f2a4fd3
...@@ -27,6 +27,7 @@ declare module 'vue' { ...@@ -27,6 +27,7 @@ declare module 'vue' {
GlobalPopup: typeof import('./src/mocp/components/global-popup/global-popup.vue')['default'] GlobalPopup: typeof import('./src/mocp/components/global-popup/global-popup.vue')['default']
GlobalRadio: typeof import('./src/mocp/components/global-radio/global-radio.vue')['default'] GlobalRadio: typeof import('./src/mocp/components/global-radio/global-radio.vue')['default']
GlobalTabs: typeof import('./src/mocp/components/global-tabs/global-tabs.vue')['default'] GlobalTabs: typeof import('./src/mocp/components/global-tabs/global-tabs.vue')['default']
GlobalTag: typeof import('./src/mocp/components/global-tag/global-tag.vue')['default']
GlobalUpload: typeof import('./src/mocp/components/global-upload/global-upload.vue')['default'] GlobalUpload: typeof import('./src/mocp/components/global-upload/global-upload.vue')['default']
GlobalUploadImage: typeof import('./src/mocp/components/global-upload-image/global-upload-image.vue')['default'] GlobalUploadImage: typeof import('./src/mocp/components/global-upload-image/global-upload-image.vue')['default']
// 自定义组件 // 自定义组件
......
import { http } from 'mocp/utils/http' import { http } from 'mocp/utils/http'
export const getDecisionApi = (data, config) => { export const getWorkTaskListApi = (data, config) => {
return http({ return http({
method: 'POST', method: 'POST',
url: '/workbench/getDecision', url: '/workbench/getWorkTaskList',
data, data,
config config
}) })
} }
export const updateDecisionApi = (data, config) => { export const WorkTaskIsSuccessApi = (data, config) => {
return http({ return http({
method: 'POST', method: 'POST',
url: '/workbench/updateDecision', url: '/workbench/WorkTaskIsSuccess',
data,
config
})
}
export const updateMcoDirectorInfoApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/updateMcoDirectorInfo',
data,
config
})
}
export const updateApproverInfoApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/updateApproverInfo',
data, data,
config config
}) })
......
@mixin global-button-light { //primary
@mixin global-button-primary-plain {
color: $mocp-primary-6; color: $mocp-primary-6;
background-color: $mocp-primary-1; background-color: $mocp-primary-1;
} }
@mixin global-button-light-active { @mixin global-button-primary-plain-active {
color: darken($mocp-primary-6, 10%); color: darken($mocp-primary-6, 10%);
background-color: darken($mocp-primary-1, 5%); background-color: darken($mocp-primary-1, 5%);
border-color: darken($mocp-primary-1, 5%); border-color: darken($mocp-primary-1, 5%);
...@@ -16,6 +17,16 @@ ...@@ -16,6 +17,16 @@
background-color: darken($mocp-primary-7, 5%); background-color: darken($mocp-primary-7, 5%);
border-color: darken($mocp-primary-7, 5%); border-color: darken($mocp-primary-7, 5%);
} }
//success
@mixin global-button-success-plain {
color: $mocp-success-6;
background-color: $mocp-success-1;
}
@mixin global-button-success-plain-active {
color: darken($mocp-success-6, 10%);
background-color: darken($mocp-success-1, 5%);
border-color: darken($mocp-success-1, 5%);
}
@mixin global-button-success { @mixin global-button-success {
color: #fff; color: #fff;
background-color: $mocp-success-6; background-color: $mocp-success-6;
...@@ -25,6 +36,16 @@ ...@@ -25,6 +36,16 @@
background-color: darken($mocp-success-7, 5%); background-color: darken($mocp-success-7, 5%);
border-color: darken($mocp-success-7, 5%); border-color: darken($mocp-success-7, 5%);
} }
//warning
@mixin global-button-warning-plain {
color: $mocp-warning-6;
background-color: $mocp-warning-1;
}
@mixin global-button-warning-plain-active {
color: darken($mocp-warning-6, 10%);
background-color: darken($mocp-warning-1, 5%);
border-color: darken($mocp-warning-1, 5%);
}
@mixin global-button-warning { @mixin global-button-warning {
color: #fff; color: #fff;
background-color: $mocp-warning-6; background-color: $mocp-warning-6;
...@@ -34,6 +55,16 @@ ...@@ -34,6 +55,16 @@
background-color: darken($mocp-warning-7, 5%); background-color: darken($mocp-warning-7, 5%);
border-color: darken($mocp-warning-7, 5%); border-color: darken($mocp-warning-7, 5%);
} }
//danger
@mixin global-button-danger-plain {
color: $mocp-danger-6;
background-color: $mocp-danger-1;
}
@mixin global-button-danger-plain-active {
color: darken($mocp-danger-6, 10%);
background-color: darken($mocp-danger-1, 5%);
border-color: darken($mocp-danger-1, 5%);
}
@mixin global-button-danger { @mixin global-button-danger {
color: #fff; color: #fff;
background-color: $mocp-danger-6; background-color: $mocp-danger-6;
...@@ -47,10 +78,10 @@ ...@@ -47,10 +78,10 @@
padding: 0 20rpx; padding: 0 20rpx;
margin: 0; margin: 0;
font-size: 28rpx; font-size: 28rpx;
&.light { &.primary-plain {
@include global-button-light; @include global-button-primary-plain;
&:active { &:active {
@include global-button-light-active; @include global-button-primary-plain-active;
} }
&::after { &::after {
border: none; border: none;
...@@ -62,18 +93,45 @@ ...@@ -62,18 +93,45 @@
@include global-button-primary-active; @include global-button-primary-active;
} }
} }
&.success-plain {
@include global-button-success-plain;
&:active {
@include global-button-success-plain-active;
}
&::after {
border: none;
}
}
&.success { &.success {
@include global-button-success; @include global-button-success;
&:active { &:active {
@include global-button-success-active; @include global-button-success-active;
} }
} }
&.warning-plain {
@include global-button-warning-plain;
&:active {
@include global-button-warning-plain-active;
}
&::after {
border: none;
}
}
&.warning { &.warning {
@include global-button-warning; @include global-button-warning;
&:active { &:active {
@include global-button-warning-active; @include global-button-warning-active;
} }
} }
&.danger-plain {
@include global-button-danger-plain;
&:active {
@include global-button-danger-plain-active;
}
&::after {
border: none;
}
}
&.danger { &.danger {
@include global-button-danger; @include global-button-danger;
&:active { &:active {
......
<template> <template>
<!-- 全局button --> <!-- 全局button -->
<button :class="getClass" :style="style" :loading="loading" :disabled="disabled"> <button :class="getClass" :style="style" :loading="loading" :disabled="disabled">
<global-icon class="icon" :icon="icon" v-if="icon"></global-icon>
<slot></slot> <slot></slot>
</button> </button>
</template> </template>
...@@ -22,7 +23,12 @@ const ps = defineProps({ ...@@ -22,7 +23,12 @@ const ps = defineProps({
return {} return {}
} }
}, },
//default,light,primary,success,warning,danger,text //图标
icon: {
type: String,
default: ''
},
//default,primary,success,warning,danger,text
type: { type: {
type: String, type: String,
default: 'default' default: 'default'
...@@ -32,6 +38,11 @@ const ps = defineProps({ ...@@ -32,6 +38,11 @@ const ps = defineProps({
type: String, type: String,
default: 'default' default: 'default'
}, },
//是否镂空
plain: {
type: Boolean,
default: false
},
loading: { loading: {
type: Boolean, type: Boolean,
default: false default: false
...@@ -46,9 +57,12 @@ const getClass = computed(() => { ...@@ -46,9 +57,12 @@ const getClass = computed(() => {
if (ps.class) { if (ps.class) {
_class.push(ps.class) _class.push(ps.class)
} }
if (ps.type) { if (ps.plain) {
_class.push(ps.type + '-plain')
} else {
_class.push(ps.type) _class.push(ps.type)
} }
return _class return _class
}) })
const getSize = computed(() => { const getSize = computed(() => {
...@@ -75,5 +89,8 @@ const getRadius = computed(() => { ...@@ -75,5 +89,8 @@ const getRadius = computed(() => {
border-radius: v-bind(getRadius); border-radius: v-bind(getRadius);
height: v-bind(getSize); height: v-bind(getSize);
line-height: v-bind(getSize); line-height: v-bind(getSize);
.icon {
margin-right: 8rpx;
}
} }
</style> </style>
...@@ -11,7 +11,7 @@ const ps = defineProps({ ...@@ -11,7 +11,7 @@ const ps = defineProps({
}, },
color: { color: {
type: String, type: String,
default: '#4E5969' default: 'currentColor'
}, },
size: { size: {
type: [Number, String], type: [Number, String],
......
...@@ -167,8 +167,12 @@ const defaultIndex = ref(0) ...@@ -167,8 +167,12 @@ const defaultIndex = ref(0)
//获取下拉框的内容Columns //获取下拉框的内容Columns
const getColumns = computed(() => { const getColumns = computed(() => {
if (ps.dictkey) { if (ps.dictkey) {
if (dictData[ps.dictkey]) {
return cloneDeep(dictData[ps.dictkey]) return cloneDeep(dictData[ps.dictkey])
} else { } else {
throw new Error('请输入存在的dictkey值')
}
} else {
if (ps.options && Object.prototype.toString.call(ps.options[0]) == '[object Object]') { if (ps.options && Object.prototype.toString.call(ps.options[0]) == '[object Object]') {
return ps.options return ps.options
} else { } else {
...@@ -185,8 +189,8 @@ const getColumns = computed(() => { ...@@ -185,8 +189,8 @@ const getColumns = computed(() => {
watch( watch(
[() => ps.modelValue, () => ps.options], [() => ps.modelValue, () => ps.options],
() => { () => {
const option = getColumns.value.find((option) => String(option[ps.valueField]) === String(ps.modelValue)) const option = getColumns.value?.find((option) => String(option[ps.valueField]) === String(ps.modelValue))
const index = getColumns.value.findIndex((option) => String(option[ps.valueField]) === String(ps.modelValue)) const index = getColumns.value?.findIndex((option) => String(option[ps.valueField]) === String(ps.modelValue))
if (option) { if (option) {
labelValue.value = option[ps.labelField] labelValue.value = option[ps.labelField]
nextTick(() => { nextTick(() => {
......
<template>
<text class="global-tag" :class="getClass">
<slot></slot>
</text>
</template>
<script setup>
import { computed } from 'vue'
const ps = defineProps({
//primary / success / warning / danger
type: {
type: String,
default: 'primary'
},
class: {
type: String,
default: ''
},
radious: {
type: [String, Number],
default: 6
}
})
//获取class
const getClass = computed(() => {
const _class = []
if (ps.class) {
_class.push(ps.class)
}
if (ps.type == 'primary') {
_class.push('mocp-bg-primary-2')
_class.push('mocp-color-primary-6')
}
if (ps.type == 'success') {
_class.push('mocp-bg-success-2')
_class.push('mocp-color-success-6')
}
if (ps.type == 'warning') {
_class.push('mocp-bg-warning-2')
_class.push('mocp-color-warning-6')
}
if (ps.type == 'danger') {
_class.push('mocp-bg-danger-2')
_class.push('mocp-color-danger-6')
}
return _class
})
//获取圆角
const getRadious = computed(() => {
if (typeof ps.radious == 'string') {
return ps.radious
} else {
return ps.radious + 'rpx'
}
})
</script>
<style lang="scss" scoped>
.global-tag {
font-size: 24rpx;
padding: 4rpx 8rpx;
border-radius: v-bind(getRadious);
}
</style>
...@@ -72,7 +72,7 @@ const ps = defineProps({ ...@@ -72,7 +72,7 @@ const ps = defineProps({
} }
}, },
fileList: { fileList: {
type: Array, type: [Array, String],
default: () => { default: () => {
return [] return []
} }
...@@ -102,7 +102,13 @@ const fileList = ref([]) ...@@ -102,7 +102,13 @@ const fileList = ref([])
watch( watch(
() => ps.fileList, () => ps.fileList,
(value) => { (value) => {
if (value) {
if (Array.isArray(value)) {
fileList.value = cloneDeep(value) fileList.value = cloneDeep(value)
} else {
fileList.value = JSON.parse(value)
}
}
}, },
{ immediate: true } { immediate: true }
) )
......
...@@ -2,3 +2,4 @@ export * from './appraisal-record' ...@@ -2,3 +2,4 @@ export * from './appraisal-record'
export * from './assign-work' export * from './assign-work'
export * from './move-decision' export * from './move-decision'
export * from './technology-evaluation' export * from './technology-evaluation'
export * from './work-assignment'
// 建议以文件名首字母作为前缀wa_
export const wa_state = [
{ label: 'OPEN', value: '1' },
{ label: 'CLOSE', value: '2' }
]
export const wa_isSuccess = [
{ label: '已拒绝', value: '1' },
{ label: '待接收', value: '2' },
{ label: '已接收', value: '3' }
]
export const wa_isSuccessType = [
{ label: 'danger', value: '1' },
{ label: 'primary', value: '2' },
{ label: 'success', value: '3' }
]
...@@ -4,12 +4,13 @@ const useWorkAssignmentStore = defineStore('workAssignment', { ...@@ -4,12 +4,13 @@ const useWorkAssignmentStore = defineStore('workAssignment', {
state: () => { state: () => {
return { return {
searchData: { searchData: {
state: 1, state: '1',
presenter: '', machineNumber: '',
seat: '', model: '',
workType: null, aviation: '',
startDateTime: null, terminal: '',
endDateTime: null feedbackTime: '',
sponsor: ''
}, },
details: undefined details: undefined
} }
...@@ -18,12 +19,13 @@ const useWorkAssignmentStore = defineStore('workAssignment', { ...@@ -18,12 +19,13 @@ const useWorkAssignmentStore = defineStore('workAssignment', {
actions: { actions: {
resetForm() { resetForm() {
this.searchData = { this.searchData = {
state: 1, state: '1',
presenter: '', machineNumber: '',
seat: '', model: '',
workType: null, aviation: '',
startDateTime: null, terminal: '',
endDateTime: null feedbackTime: '',
sponsor: ''
} }
}, },
setState(...args) { setState(...args) {
...@@ -31,6 +33,16 @@ const useWorkAssignmentStore = defineStore('workAssignment', { ...@@ -31,6 +33,16 @@ const useWorkAssignmentStore = defineStore('workAssignment', {
} }
}, },
// 配置持久化 // 配置持久化
persist: false persist: {
// 调整为兼容多端的API
storage: {
setItem(key, value) {
uni.setStorageSync(key, value)
},
getItem(key) {
return uni.getStorageSync(key)
}
}
}
}) })
export default useWorkAssignmentStore export default useWorkAssignmentStore
...@@ -254,6 +254,12 @@ ...@@ -254,6 +254,12 @@
"style": { "style": {
"navigationBarTitleText": "工作任务指令" "navigationBarTitleText": "工作任务指令"
} }
},
{
"path": "pages/modules/mocp/panel/work-assignment/details",
"style": {
"navigationBarTitleText": "工作任务指令详情"
}
} }
], ],
"globalStyle": { "globalStyle": {
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
<view class="footer-btn"> <view class="footer-btn">
<up-row gutter="10"> <up-row gutter="10">
<up-col span="6"> <up-col span="6">
<global-button type="light" size="large" :radius="5" @tap="handleReset">重置</global-button> <global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col> </up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col> <up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row> </up-row>
......
...@@ -202,12 +202,21 @@ const assignWorkStore = useAssignWorkStore() ...@@ -202,12 +202,21 @@ const assignWorkStore = useAssignWorkStore()
const { details, arrangeWorkExtendList, arrangeWorkExtend } = storeToRefs(assignWorkStore) const { details, arrangeWorkExtendList, arrangeWorkExtend } = storeToRefs(assignWorkStore)
onLoad(async () => { onLoad(async () => {
assignWorkStore.setState('id', query.id) assignWorkStore.setState('id', query.id)
if (arrangeWorkExtendList.value.length > 1) {
uni.showLoading({ uni.showLoading({
title: '加载中...', title: '加载中...',
mask: true mask: true
}) })
await Promise.all([assignWorkStore.getArrangeWorkDetail(), assignWorkStore.getEnetOrgTree()]) await Promise.all([assignWorkStore.getArrangeWorkDetail(), assignWorkStore.getEnetOrgTree()])
uni.hideLoading() uni.hideLoading()
} else {
uni.showLoading({
title: '加载中...',
mask: true
})
await assignWorkStore.getArrangeWorkDetail()
uni.hideLoading()
}
}) })
//责任公司弹框 //责任公司弹框
const companyPopupRef = ref() const companyPopupRef = ref()
......
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
<view class="footer-btn"> <view class="footer-btn">
<up-row gutter="10"> <up-row gutter="10">
<up-col span="6"> <up-col span="6">
<global-button type="light" size="large" :radius="5" @tap="handleReset">重置</global-button> <global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col> </up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col> <up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row> </up-row>
......
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
<view class="footer-btn"> <view class="footer-btn">
<up-row gutter="10"> <up-row gutter="10">
<up-col span="6"> <up-col span="6">
<global-button type="light" size="large" :radius="5" @tap="handleReset">重置</global-button> <global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col> </up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col> <up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row> </up-row>
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
<view class="footer-btn"> <view class="footer-btn">
<up-row gutter="10"> <up-row gutter="10">
<up-col span="6"> <up-col span="6">
<global-button type="light" size="large" :radius="5" @tap="handleReset">重置</global-button> <global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col> </up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col> <up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row> </up-row>
......
.details {
padding: 16rpx 24rpx;
border-radius: 12rpx;
background: #ffffff;
color: $mocp-text-4;
&-header {
&-top {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16rpx;
}
&-bottom {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 16rpx;
.left {
display: flex;
align-items: center;
.left-icon {
margin-right: 16rpx;
}
}
}
}
&-body {
&-content {
padding: 16rpx 0;
font-size: 30rpx;
border-top: 2rpx solid #f4f4f4;
border-bottom: 2rpx solid #f4f4f4;
}
&-file {
padding-top: 16rpx;
image {
width: 100%;
}
}
}
&-footer {
padding-top: 16rpx;
border-top: 2rpx solid #f4f4f4;
.row {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16rpx;
&:last-child {
margin-bottom: 0;
}
}
}
}
<template>
<global-page :padding="24" title="工作任务指令详情">
<template v-if="details">
<view class="details">
<view class="details-header">
<view class="details-header-top">
<view class="left">
<custom-state :value="useGetDictByValue('wa_state', details.state)" :size="32"></custom-state>
</view>
<view class="right">
<global-tag :type="useGetDictByValue('wa_isSuccessType', details.isSuccess)">
{{ useGetDictByValue('wa_isSuccess', details.isSuccess) }}
</global-tag>
</view>
</view>
<view class="details-header-bottom">
<view class="left">
<global-icon class="left-icon" icon="Vector" size="24" color="#DD4012"></global-icon>
<view class="txt">{{ details.aviation }} {{ details.machineNumber }} {{ details.model }}</view>
</view>
<view class="right">
<view class="txt">{{ details.terminal }}</view>
</view>
</view>
</view>
<view class="details-body">
<view class="details-body-content">
{{ details.taskDescription || '无' }}
</view>
<view class="details-body-file">
<global-upload :fileList="details.taskFile" :showUpload="false"></global-upload>
</view>
</view>
<view class="details-footer">
<view class="row">
<global-field label="反馈时限:" :value="timeStampFormat(details.feedbackTime, { format: 'YYYY/MM/DD' })"></global-field>
</view>
<view class="row">
<global-field label="发起人:" :value="details.sponsor || '-'"></global-field>
<global-field label="发起时间:" :value="timeStampFormat(details.creationTime, { format: 'YYYY/MM/DD' })"></global-field>
</view>
<view class="row">
<global-field label="接收人:" :value="details.recipient || '-'"></global-field>
<global-field label="接收时间:" :value="timeStampFormat(details.recipientTime, { format: 'YYYY/MM/DD' })"></global-field>
</view>
</view>
</view>
</template>
<template #bottom>
<view class="footer-btn">
<template
v-if="
details.sponsorId == userStore.userInfo?.realUserInfo.id ||
details.recipientId == userStore.userInfo?.realUserInfo.id ||
details.isSuccess != '2'
"
>
<global-button type="success" plain size="large" :radius="5" icon="check-circle-filled" v-if="details.isSuccess == '3'">
已接收
</global-button>
<global-button type="danger" plain size="large" :radius="5" icon="close-circle-filled" v-if="details.isSuccess == '1'">
已拒绝
</global-button>
</template>
<template v-else>
<up-row gutter="10">
<up-col span="6">
<global-button type="primary" plain size="large" :radius="5" @tap="confirm('1')">拒绝</global-button>
</up-col>
<up-col span="6">
<global-button type="primary" size="large" :radius="5" @tap="confirm('3')">接收</global-button>
</up-col>
</up-row>
</template>
</view>
</template>
<up-modal
:width="250"
:content="isSuccessValue == '1' ? '确认拒绝吗?' : '确认接收吗?'"
:show="show"
showCancelButton
closeOnClickOverlay
@confirm="handleWorkTaskIsSuccess"
@cancel="show = false"
@close="show = false"
></up-modal>
</global-page>
</template>
<script setup>
import useWorkAssignmentStore from 'mocp/store/work-assignment'
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 { WorkTaskIsSuccessApi } from 'mocp/api/work-assignment'
const workAssignmentStore = useWorkAssignmentStore()
const { details } = storeToRefs(workAssignmentStore)
const userStore = useUserStore()
//接收或者拒绝
const show = ref(false)
const isSuccessValue = ref('')
const confirm = (isSuccess) => {
show.value = true
isSuccessValue.value = isSuccess
}
const handleWorkTaskIsSuccess = async () => {
const params = {
id: details.value.id,
isSuccess: isSuccessValue.value
}
const res = await WorkTaskIsSuccessApi(params, { loading: true })
if ((res.code = 200)) {
show.value = false
uni.$mocpMessage.success(res.message)
//更新详情
workAssignmentStore.setState('details', res.data)
} else {
uni.$mocpMessage.error(res.message)
}
}
</script>
<style lang="scss" scoped>
@import './constants/details.scss';
.footer-btn {
padding: 24rpx 32rpx;
background-color: #fff;
}
</style>
...@@ -11,28 +11,30 @@ ...@@ -11,28 +11,30 @@
navRightType="icon" navRightType="icon"
navRightIcon="saixuan-01" navRightIcon="saixuan-01"
@handleRightClick="handleRightClick" @handleRightClick="handleRightClick"
:api="getDecisionApi" :api="getWorkTaskListApi"
:padding="24" :padding="24"
> >
<template #="{ dataList }"> <template #="{ dataList }">
<view class="item" v-for="item in dataList" :key="item.id" @tap="goDetails(item)"> <view class="item" v-for="item in dataList" :key="item.id" @tap="goDetails(item)">
<view class="item-title"> <view class="item-title">
<view class="left"> <view class="left">
<custom-state :value="useGetDictByValue('md_state', item.state)"></custom-state> <custom-state :value="useGetDictByValue('wa_state', item.state)"></custom-state>
<text class="txt u-line-1" v-if="item.machineNumber">{{ item.machineNumber }}</text>
</view> </view>
<view class="right"> <view class="right">
<text class="txt u-line-1" v-if="item.machineNumber">{{ item.machineNumber }}</text> <global-tag :type="useGetDictByValue('wa_isSuccessType', item.isSuccess)">
<text class="txt u-line-1" v-if="item.aviation">{{ item.aviation }}</text> {{ useGetDictByValue('wa_isSuccess', item.isSuccess) }}
</global-tag>
</view> </view>
</view> </view>
<view class="item-content u-line-3"> <view class="item-content u-line-3">
{{ item.faultDescription || '无' }} {{ item.taskDescription || '无' }}
</view> </view>
<view class="item-footer"> <view class="item-footer">
<view class="label"> <view class="label">
<global-icon icon="calendar"></global-icon> <global-icon icon="calendar"></global-icon>
<text class="txt"> <text class="txt">
{{ timeStampFormat(item.filledTime, { format: 'YYYY/MM/DD HH:mm' }) }} {{ timeStampFormat(item.feedbackTime, { format: 'YYYY/MM/DD' }) }}
</text> </text>
</view> </view>
</view> </view>
...@@ -44,18 +46,18 @@ ...@@ -44,18 +46,18 @@
<script setup> <script setup>
import { ref } from 'vue' import { ref } from 'vue'
import { timeStampFormat } from 'mocp/utils/tool' import { timeStampFormat } from 'mocp/utils/tool'
import { getDecisionApi } from 'mocp/api/move-decision'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import useMoveDecisionStore from 'mocp/store/move-decision' import useWorkAssignmentStore from 'mocp/store/work-assignment'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { onUnload } from '@dcloudio/uni-app' import { onUnload } from '@dcloudio/uni-app'
import { getWorkTaskListApi } from 'mocp/api/work-assignment'
//跳转 //跳转
const moveDecisionStore = useMoveDecisionStore() const workAssignmentStore = useWorkAssignmentStore()
const { searchData } = storeToRefs(moveDecisionStore) const { searchData } = storeToRefs(workAssignmentStore)
const goDetails = (data) => { const goDetails = (data) => {
uni.$mocpJump.navigateTo('/panel/work-assignment/details', { id: data.id }).then(() => { uni.$mocpJump.navigateTo('/panel/work-assignment/details', { id: data.id }).then(() => {
moveDecisionStore.setState('details', data) workAssignmentStore.setState('details', data)
}) })
} }
//筛选 //筛选
......
...@@ -3,58 +3,37 @@ ...@@ -3,58 +3,37 @@
<view class="search-form"> <view class="search-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item label="状态" prop="state" :borderBottom="true"> <up-form-item label="状态" prop="state" :borderBottom="true">
<global-picker v-model="formData.state" pickAlign="right" clearable dictkey="md_state"></global-picker> <global-picker v-model="formData.state" pickAlign="right" clearable dictkey="wa_state"></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航站" prop="terminal" :borderBottom="true"> <up-form-item label="机号" prop="machineNumber" :borderBottom="true">
<global-picker <global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter></global-picker>
pickAlign="right"
v-model="formData.terminal"
clearable
:options="baseStore.getTerminalSelect"
filter
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="是否有效" prop="valid" :borderBottom="true"> <up-form-item label="机型" prop="model" :borderBottom="true">
<global-picker <global-picker v-model="formData.model" pickAlign="right" :options="baseStore.getTypeSelect" clearable filter></global-picker>
v-model="formData.valid"
pickAlign="right"
:options="[
{ label: '有效', value: '1' },
{ label: '无效', value: '0' }
]"
clearable
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="决策结果" prop="decisionState" :borderBottom="true"> <up-form-item label="航司" prop="aviation" :borderBottom="true">
<global-picker <global-picker
v-model="formData.decisionState" v-model="formData.aviation"
pickAlign="right" pickAlign="right"
:options="[ :options="baseStore.getAirlineSelect"
{ label: '同意', value: '1' },
{ label: '不同意', value: '0' }
]"
clearable clearable
filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="航司" prop="aviation" :borderBottom="true"> <up-form-item label="航站" prop="terminal" :borderBottom="true">
<global-picker <global-picker
v-model="formData.aviation"
pickAlign="right" pickAlign="right"
:options="baseStore.getAirlineSelect" v-model="formData.terminal"
clearable clearable
:options="baseStore.getTerminalSelect"
filter filter
></global-picker> ></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="机号" prop="machineNumber" :borderBottom="true"> <up-form-item label="发起人" prop="sponsor" :borderBottom="true">
<global-picker pickAlign="right" v-model="formData.machineNumber" :options="deviceNumList" clearable filter></global-picker> <up-input v-model="formData.sponsor" inputAlign="right" border="none" placeholder="请输入" clearable></up-input>
</up-form-item> </up-form-item>
<up-form-item label="日期" :borderBottom="true"> <up-form-item label="反馈时限" prop="feedbackTime" :borderBottom="true">
<global-calendar <global-date v-model="formData.feedbackTime" pickAlign="right" clearable></global-date>
pickAlign="right"
v-model:startTime="formData.startDateTime"
v-model:endTime="formData.endDateTime"
clearable
></global-calendar>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </view>
...@@ -62,7 +41,7 @@ ...@@ -62,7 +41,7 @@
<view class="footer-btn"> <view class="footer-btn">
<up-row gutter="10"> <up-row gutter="10">
<up-col span="6"> <up-col span="6">
<global-button type="light" size="large" :radius="5" @tap="handleReset">重置</global-button> <global-button type="primary" plain size="large" :radius="5" @tap="handleReset">重置</global-button>
</up-col> </up-col>
<up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col> <up-col span="6"><global-button type="primary" size="large" :radius="5" @tap="handleConfirm">确定</global-button></up-col>
</up-row> </up-row>
...@@ -73,27 +52,27 @@ ...@@ -73,27 +52,27 @@
<script setup> <script setup>
import useBaseStore from 'mocp/store/base' import useBaseStore from 'mocp/store/base'
import useMoveDecisionStore from 'mocp/store/move-decision'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import useWorkAssignmentStore from 'mocp/store/work-assignment'
//获取下拉框选项 //获取下拉框选项
const baseStore = useBaseStore() const baseStore = useBaseStore()
const { const {
selectList: { deviceNumList } selectList: { deviceNumList }
} = useBaseStore() } = useBaseStore()
const moveDecisionStore = useMoveDecisionStore() const workAssignmentStore = useWorkAssignmentStore()
//获取查询表单数据 //获取查询表单数据
const { searchData } = storeToRefs(moveDecisionStore) const { searchData } = storeToRefs(workAssignmentStore)
const formData = ref(cloneDeep(searchData.value)) const formData = ref(cloneDeep(searchData.value))
const handleReset = () => { const handleReset = () => {
moveDecisionStore.resetForm() workAssignmentStore.resetForm()
uni.$mocpJump.redirectTo('/panel/work-assignment/list') uni.$mocpJump.redirectTo('/panel/work-assignment/list')
uni.$emit('workAssignmentReload') uni.$emit('workAssignmentReload')
} }
const handleConfirm = () => { const handleConfirm = () => {
moveDecisionStore.setState('searchData', formData.value) workAssignmentStore.setState('searchData', formData.value)
uni.$mocpJump.redirectTo('/panel/work-assignment/list') uni.$mocpJump.redirectTo('/panel/work-assignment/list')
uni.$emit('workAssignmentReload') uni.$emit('workAssignmentReload')
} }
......
...@@ -55,6 +55,18 @@ ...@@ -55,6 +55,18 @@
<ul class="icon_lists dib-box"> <ul class="icon_lists dib-box">
<li class="dib"> <li class="dib">
<span class="icon iconfont">&#xe6e4;</span>
<div class="name">close-circle-filled</div>
<div class="code-name">&amp;#xe6e4;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6e5;</span>
<div class="name">check-circle-filled</div>
<div class="code-name">&amp;#xe6e5;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6e3;</span> <span class="icon iconfont">&#xe6e3;</span>
<div class="name">fly</div> <div class="name">fly</div>
<div class="code-name">&amp;#xe6e3;</div> <div class="code-name">&amp;#xe6e3;</div>
...@@ -168,9 +180,9 @@ ...@@ -168,9 +180,9 @@
<pre><code class="language-css" <pre><code class="language-css"
>@font-face { >@font-face {
font-family: 'iconfont'; font-family: 'iconfont';
src: url('iconfont.woff2?t=1720593389064') format('woff2'), src: url('iconfont.woff2?t=1721199173027') format('woff2'),
url('iconfont.woff?t=1720593389064') format('woff'), url('iconfont.woff?t=1721199173027') format('woff'),
url('iconfont.ttf?t=1720593389064') format('truetype'); url('iconfont.ttf?t=1721199173027') format('truetype');
} }
</code></pre> </code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3> <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
...@@ -197,6 +209,24 @@ ...@@ -197,6 +209,24 @@
<ul class="icon_lists dib-box"> <ul class="icon_lists dib-box">
<li class="dib"> <li class="dib">
<span class="icon iconfont icon-close-circle-filled"></span>
<div class="name">
close-circle-filled
</div>
<div class="code-name">.icon-close-circle-filled
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-check-circle-filled"></span>
<div class="name">
check-circle-filled
</div>
<div class="code-name">.icon-check-circle-filled
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-fly"></span> <span class="icon iconfont icon-fly"></span>
<div class="name"> <div class="name">
fly fly
...@@ -369,6 +399,22 @@ ...@@ -369,6 +399,22 @@
<li class="dib"> <li class="dib">
<svg class="icon svg-icon" aria-hidden="true"> <svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-close-circle-filled"></use>
</svg>
<div class="name">close-circle-filled</div>
<div class="code-name">#icon-close-circle-filled</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-check-circle-filled"></use>
</svg>
<div class="name">check-circle-filled</div>
<div class="code-name">#icon-check-circle-filled</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-fly"></use> <use xlink:href="#icon-fly"></use>
</svg> </svg>
<div class="name">fly</div> <div class="name">fly</div>
......
@font-face { @font-face {
font-family: "iconfont"; /* Project id 4550048 */ font-family: "iconfont"; /* Project id 4550048 */
src: url('iconfont.woff2?t=1720593389064') format('woff2'), src: url('iconfont.woff2?t=1721199173027') format('woff2'),
url('iconfont.woff?t=1720593389064') format('woff'), url('iconfont.woff?t=1721199173027') format('woff'),
url('iconfont.ttf?t=1720593389064') format('truetype'); url('iconfont.ttf?t=1721199173027') format('truetype');
} }
.iconfont { .iconfont {
...@@ -13,6 +13,14 @@ ...@@ -13,6 +13,14 @@
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
.icon-close-circle-filled:before {
content: "\e6e4";
}
.icon-check-circle-filled:before {
content: "\e6e5";
}
.icon-fly:before { .icon-fly:before {
content: "\e6e3"; content: "\e6e3";
} }
......
...@@ -6,6 +6,20 @@ ...@@ -6,6 +6,20 @@
"description": "", "description": "",
"glyphs": [ "glyphs": [
{ {
"icon_id": "41114520",
"name": "close-circle-filled",
"font_class": "close-circle-filled",
"unicode": "e6e4",
"unicode_decimal": 59108
},
{
"icon_id": "41114519",
"name": "check-circle-filled",
"font_class": "check-circle-filled",
"unicode": "e6e5",
"unicode_decimal": 59109
},
{
"icon_id": "41020181", "icon_id": "41020181",
"name": "fly", "name": "fly",
"font_class": "fly", "font_class": "fly",
......
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