Commit 193082a1 by pangchong

feat: 我的待办

parent c9d7df8f
...@@ -165,8 +165,8 @@ const getStyle = computed(() => { ...@@ -165,8 +165,8 @@ const getStyle = computed(() => {
let padding = typeof ps.padding == 'number' ? ps.padding + 'rpx' : ps.padding let padding = typeof ps.padding == 'number' ? ps.padding + 'rpx' : ps.padding
let margin = typeof ps.margin == 'number' ? ps.margin + 'rpx' : ps.margin let margin = typeof ps.margin == 'number' ? ps.margin + 'rpx' : ps.margin
let style = { let style = {
margin: margin, margin,
padding: padding padding
} }
return style return style
}) })
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
ref="paging" ref="paging"
v-model="dataList" v-model="dataList"
:auto="auto" :auto="auto"
:fixed="fixed"
:height="height"
:refresher-enabled="refresherEnabled" :refresher-enabled="refresherEnabled"
:refresher-threshold="refresherThreshold" :refresher-threshold="refresherThreshold"
:auto-show-back-to-top="autoShowBackToTop" :auto-show-back-to-top="autoShowBackToTop"
...@@ -75,6 +77,16 @@ const ps = defineProps({ ...@@ -75,6 +77,16 @@ const ps = defineProps({
type: [String, Number], type: [String, Number],
default: 0 default: 0
}, },
//是页面滚动还是局部滚动(默认页面滚动)
fixed: {
type: Boolean,
default: true
},
//局部滚动的高度
height: {
type: String,
default: ''
},
//是否自动加载 //是否自动加载
auto: { auto: {
type: Boolean, type: Boolean,
...@@ -202,8 +214,8 @@ const getStyle = computed(() => { ...@@ -202,8 +214,8 @@ const getStyle = computed(() => {
let padding = typeof ps.padding == 'number' ? ps.padding + 'rpx' : ps.padding let padding = typeof ps.padding == 'number' ? ps.padding + 'rpx' : ps.padding
let margin = typeof ps.margin == 'number' ? ps.margin + 'rpx' : ps.margin let margin = typeof ps.margin == 'number' ? ps.margin + 'rpx' : ps.margin
let style = { let style = {
margin: margin, margin,
padding: padding padding
} }
return style return style
}) })
......
<template> <template>
<!-- 全局下拉框控件 --> <!-- 全局下拉框控件 -->
<view class="picker" :style="style"> <view class="picker" :style="style">
<global-popup v-model="show" @close="show = false" :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" :distance="distance">
<template #top> <template #top>
<view> <view>
<up-search :placeholder="placeholder" :showAction="false" v-model="searchKey"></up-search> <up-search :placeholder="placeholder" :showAction="false" v-model="searchKey"></up-search>
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<script setup> <script setup>
import { computed, nextTick, ref, watch } from 'vue' import { computed, nextTick, ref, watch } from 'vue'
const es = defineEmits(['close', 'open']) const es = defineEmits(['update:modelValue', 'close', 'open'])
const ps = defineProps({ const ps = defineProps({
modelValue: { modelValue: {
type: Boolean, type: Boolean,
...@@ -117,10 +117,11 @@ watch( ...@@ -117,10 +117,11 @@ watch(
} }
) )
const close = () => { const close = () => {
es('close', false) es('update:modelValue', false)
es('close')
} }
const open = () => { const open = () => {
es('open', true) es('open')
} }
</script> </script>
<style lang="scss"> <style lang="scss">
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
:itemStyle="getItemStyle" :itemStyle="getItemStyle"
:current="current" :current="current"
:keyName="keyName" :keyName="keyName"
:scrollable="scrollable"
@click="handleClick" @click="handleClick"
@change="handleChange" @change="handleChange"
> >
......
<template> <template>
<!-- 全局图片下载 --> <!-- 全局图片上传 -->
<up-upload <up-upload
:width="width + 'rpx'" :width="width + 'rpx'"
:height="height + 'rpx'" :height="height + 'rpx'"
......
<template> <template>
<!-- 全局文件下载 --> <!-- 全局文件上传 -->
<view class="upload" :style="style"> <view class="upload" :style="style">
<view class="upload-list"> <view class="upload-list">
<view class="upload-item" v-for="(item, index) in getFileList" :key="item.id"> <view class="upload-item" v-for="(item, index) in getFileList" :key="item.id">
......
import { nextTick, ref } from 'vue' import { ref } from 'vue'
// utils/message.js // 通用提示
export const showToast = (msg, options) => { export const showToast = (msg, options) => {
uni.showToast({ uni.showToast({
title: msg || '操作失败', title: msg || '操作失败',
...@@ -9,7 +9,6 @@ export const showToast = (msg, options) => { ...@@ -9,7 +9,6 @@ export const showToast = (msg, options) => {
...options ...options
}) })
} }
export const messageCount = ref(0)
// 消息提示 // 消息提示
export const toast = (message) => { export const toast = (message) => {
uni.$emit('useMessage', { type: 'default', message }) uni.$emit('useMessage', { type: 'default', message })
......
...@@ -3,7 +3,8 @@ import Day from './dayjs' ...@@ -3,7 +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
*/ */
export const timeStampFormat = (timeStamp, opt) => { export const timeStampFormat = (timeStamp, opt) => {
if (!timeStamp || timeStamp == -1 || timeStamp == '-1' || timeStamp == 0 || timeStamp == '0') { if (!timeStamp || timeStamp == -1 || timeStamp == '-1' || timeStamp == 0 || timeStamp == '0') {
......
<template> <template>
<global-popup v-model="showPopup" mode="right" :width="580" background="#F7F8FA" title="选择责任单位" :round="32" @close="showPopup = false"> <global-popup v-model="showPopup" mode="right" :width="580" background="#F7F8FA" title="选择责任单位" :round="32">
<view class="list"> <view class="list">
<view class="item" v-for="item in arrangeWorkExtendList" :key="item.id" @tap="handleClick(item)"> <view class="item" v-for="item in arrangeWorkExtendList" :key="item.id" @tap="handleClick(item)">
{{ item.companyFullName }} {{ item.companyFullName }}
......
<template> <template>
<view class="content" :style="{ height: `calc(100vh - 344rpx - ${safeAreaInsets?.top + 'px'} - ${safeAreaInsets?.bottom + 'px'} - 50px)` }"> <view class="content" :style="{ height: `calc(100vh - 344rpx - ${safeAreaInsets?.top + 'px'} - ${safeAreaInsets?.bottom + 'px'} - 50px)` }">
<view class="tab-nav"> <view class="tab-nav">
<global-tabs :list="tabNav" @handleClick="handleClick" :scrollable="false"></global-tabs> <global-tabs :list="tabNav" @handleClick="handleClick"></global-tabs>
</view> </view>
<scroll-view class="tab-content" scroll-y="true"> <scroll-view class="tab-content" scroll-y="true">
<view class="tab-content-item" v-if="activeIndex == 0"> <view class="tab-content-item" v-if="activeIndex == 0">
......
...@@ -2,7 +2,19 @@ ...@@ -2,7 +2,19 @@
<global-page title="我的待办"> <global-page title="我的待办">
<up-collapse :border="false" accordion> <up-collapse :border="false" accordion>
<up-collapse-item title="布置工作(2)"> <up-collapse-item title="布置工作(2)">
<view class="item" v-for="item in dataList" :key="item.id" @tap="goDetails(item)"> <global-page
:fixed="false"
height="800rpx"
:showNavbar="false"
:custom="false"
isDataList
refresherEnabled
loadingMoreEnabled
:api="getArrangeWorkListApi"
auto
>
<template #="{ dataList }">
<view class="item" v-for="item in dataList" :key="item.id">
<view class="item-title"> <view class="item-title">
<view class="left"> <view class="left">
<custom-state :value="item.state == 1 ? 'OPEN' : 'CLOSE'"></custom-state> <custom-state :value="item.state == 1 ? 'OPEN' : 'CLOSE'"></custom-state>
...@@ -28,230 +40,136 @@ ...@@ -28,230 +40,136 @@
</view> </view>
</view> </view>
</view> </view>
</template>
</global-page>
</up-collapse-item> </up-collapse-item>
<up-collapse-item title="考核记录(2)"> <up-collapse-item title="考核记录(2)">
<view class="item" v-for="item in dataList" :key="item.id" @tap="goDetails(item)"> <global-page
:fixed="false"
height="800rpx"
:showNavbar="false"
:custom="false"
isDataList
refresherEnabled
loadingMoreEnabled
:api="getRqmListApi"
auto
>
<template #="{ dataList }">
<view class="item" v-for="item in dataList" :key="item.id">
<view class="item-title">
<view class="desc">
<custom-state :value="item.status == 1 ? 'OPEN' : 'CLOSE'"></custom-state>
<view class="txt">{{ item.appraisee != '-1' ? item.appraisee : '' }}</view>
<view class="place">{{ item.department != '-1' ? item.department : '' }}</view>
</view>
<custom-score
v-if="item.score != -1"
:type="item.eventType == 1 ? 'success' : 'warning'"
:count="item.score"
></custom-score>
</view>
<view class="item-content u-line-3">
{{ item.eventMsg || '无' }}
</view>
</view>
</template>
</global-page>
</up-collapse-item>
<up-collapse-item title="运行决策(2)">
<global-page
:fixed="false"
height="800rpx"
:showNavbar="false"
:custom="false"
isDataList
refresherEnabled
loadingMoreEnabled
:api="getDecisionApi"
auto
>
<template #="{ dataList }">
<view class="item" v-for="item in dataList" :key="item.id">
<view class="item-title"> <view class="item-title">
<view class="left"> <view class="left">
<custom-state :value="item.state == 1 ? 'OPEN' : 'CLOSE'"></custom-state> <custom-state :value="useGetDictByValue('md_state', item.state)"></custom-state>
<view class="txt u-line-1">{{ item.seat }}</view> </view>
<view class="right">
<text class="txt u-line-1" v-if="item.machineNumber">{{ item.machineNumber }}</text>
<text class="txt u-line-1" v-if="item.aviation">{{ item.aviation }}</text>
</view> </view>
<view class="right u-line-1">{{ baseStore.getParamNameByValue('LayoutWorkType', item.workType) }}</view>
</view> </view>
<view class="item-content u-line-3"> <view class="item-content u-line-3">
{{ item.taskDescribe }} {{ item.faultDescription || '无' }}
</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.startTime, { format: 'YYYY/MM/DD' }) }} {{ timeStampFormat(item.filledTime, { format: 'YYYY/MM/DD HH:mm' }) }}
- </text>
{{ timeStampFormat(item.feedbackTime, { format: 'YYYY/MM/DD' }) }} </view>
</view>
</view>
</template>
</global-page>
</up-collapse-item>
<up-collapse-item title="技术评估(2)">
<global-page
:fixed="false"
height="800rpx"
:showNavbar="false"
:custom="false"
isDataList
refresherEnabled
loadingMoreEnabled
:api="getTechnicalEvaluationApi"
auto
>
<template #="{ dataList }">
<view class="item" v-for="item in dataList" :key="item.id">
<view class="item-title">
<view class="left">
<custom-state :value="useGetDictByValue('te_state', item.state)"></custom-state>
</view>
<view class="right">
<text class="txt u-line-1" v-if="item.ac">{{ item.ac }}</text>
<text class="txt u-line-1" v-if="item.model">{{ item.model }}</text>
<text class="txt u-line-1" v-if="item.aviation">
{{ useGetDictByValue('', item.aviation, { data: baseStore.getAirlineSelect }) }}
</text> </text>
</view> </view>
</view>
<view class="item-content u-line-3">
{{ item.description || '无' }}
</view>
<view class="item-footer">
<view class="label"> <view class="label">
<global-icon icon="idcard"></global-icon> <global-icon icon="calendar"></global-icon>
<text class="txt">提出人:{{ item.presenter || '-' }}</text> <text class="txt">
{{ Day(item.dateTime).format('YYYY/MM/DD') }}
</text>
</view> </view>
</view> </view>
</view> </view>
</template>
</global-page>
</up-collapse-item> </up-collapse-item>
<up-collapse-item title="运行决策(2)">运行决策</up-collapse-item>
<up-collapse-item title="技术评估(2)">技术评估</up-collapse-item>
</up-collapse> </up-collapse>
</global-page> </global-page>
</template> </template>
<script setup> <script setup>
import { ref } from 'vue'
import useBaseStore from 'mocp/store/base' import useBaseStore from 'mocp/store/base'
import { timeStampFormat } from 'mocp/utils/tool' import { timeStampFormat } from 'mocp/utils/tool'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import Day from 'mocp/utils/dayjs'
import { getRqmListApi } from 'mocp/api/appraisal-record'
import { getArrangeWorkListApi } from 'mocp/api/assign-work'
import { getTechnicalEvaluationApi } from 'mocp/api/technology-evaluation'
import { getDecisionApi } from 'mocp/api/move-decision'
const baseStore = useBaseStore() const baseStore = useBaseStore()
const dataList = ref([
{
addressee: '[""]',
appType: '',
arrangeWorkExtendList: [
{
appType: '',
approvalContent: '',
approvalFile: '',
approvalFileVoList: [],
approvalTime: 0.0,
approvalUser: '',
approvalUserId: null,
baseApprovalLeader: '',
company: '116133',
companyFullName: '海南海航迎宾馆有限公司',
createTime: 1720768765000,
current: '',
decompose: '',
eventType: '',
feedbackState: '1',
feedbackTime: 0.0,
feedbackUser: '',
file: '',
fileVoList: [],
followUpFeedback: '',
followUpFeedbackContent: '',
followUpFeedbackFile: '',
followUpFeedbackFileVoList: [],
followUpFeedbackTime: 0.0,
followUpFeedbackUser: '',
followUpFeedbackUserId: null,
gzApprovalComments: '',
gzApprovalContent: '',
gzApprovalTime: 0.0,
gzApprovalUser: '',
gzApprovalUserId: null,
gzFeedbackContent: '',
gzFeedbackTime: 0.0,
gzFeedbackUser: '',
gzFeedbackUserId: null,
id: '1811661626631987201',
leaderApprovalComments: '',
mcdApprovalLeader: '',
pcTime: 0.0,
problem: '',
tag: '0',
trackingPoints: '',
validateCloseTime: 0.0,
validateCloseUser: '',
validateCloseUserId: null,
validateFile: '',
validateFileVoList: [],
validateState: '1',
validateType: '',
workId: '1811661626093338624',
workTarget: ''
}
],
company: '116133',
createTime: 1720768765000,
createUser: '专家20',
createUserId: '32815',
del: '0',
emailTime: 0.0,
endTime: 0.0,
feedback: '1',
feedbackState: '',
feedbackTime: 1720768719000,
followUpFeedback: '',
id: '1811661626093338624',
leaderApprovalComments: '',
pcTime: 0.0,
presenter: '专家20',
presenterId: '32815',
reply: '[[]]',
seat: '测试席位1',
startTime: 1720768719000,
state: '1',
tag: '',
taskDescribe: '测试',
taskFile: '',
taskFileVoList: [],
updateTime: 1720768765000,
updateUser: '专家20',
updateUserId: '32815',
validateState: '',
validateType: '',
workType: '1',
workbench: ''
},
{
addressee: '[""]',
appType: '',
arrangeWorkExtendList: [
{
appType: '',
approvalContent: '',
approvalFile: '',
approvalFileVoList: [],
approvalTime: 0.0,
approvalUser: '',
approvalUserId: null,
baseApprovalLeader: '',
company: '116133',
companyFullName: '海南海航迎宾馆有限公司',
createTime: 1720768765000,
current: '',
decompose: '',
eventType: '',
feedbackState: '1',
feedbackTime: 0.0,
feedbackUser: '',
file: '',
fileVoList: [],
followUpFeedback: '',
followUpFeedbackContent: '',
followUpFeedbackFile: '',
followUpFeedbackFileVoList: [],
followUpFeedbackTime: 0.0,
followUpFeedbackUser: '',
followUpFeedbackUserId: null,
gzApprovalComments: '',
gzApprovalContent: '',
gzApprovalTime: 0.0,
gzApprovalUser: '',
gzApprovalUserId: null,
gzFeedbackContent: '',
gzFeedbackTime: 0.0,
gzFeedbackUser: '',
gzFeedbackUserId: null,
id: '1811661626631987201',
leaderApprovalComments: '',
mcdApprovalLeader: '',
pcTime: 0.0,
problem: '',
tag: '0',
trackingPoints: '',
validateCloseTime: 0.0,
validateCloseUser: '',
validateCloseUserId: null,
validateFile: '',
validateFileVoList: [],
validateState: '1',
validateType: '',
workId: '1811661626093338624',
workTarget: ''
}
],
company: '116133',
createTime: 1720768765000,
createUser: '专家20',
createUserId: '32815',
del: '0',
emailTime: 0.0,
endTime: 0.0,
feedback: '1',
feedbackState: '',
feedbackTime: 1720768719000,
followUpFeedback: '',
id: '1811661626093338624',
leaderApprovalComments: '',
pcTime: 0.0,
presenter: '专家20',
presenterId: '32815',
reply: '[[]]',
seat: '测试席位1',
startTime: 1720768719000,
state: '1',
tag: '',
taskDescribe: '测试',
taskFile: '',
taskFileVoList: [],
updateTime: 1720768765000,
updateUser: '专家20',
updateUserId: '32815',
validateState: '',
validateType: '',
workType: '1',
workbench: ''
}
])
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import 'mocpStatic/css/list.scss'; @import 'mocpStatic/css/list.scss';
......
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