Commit 8ee315d4 by pangchong

feat: 布置工作编辑

parent b109d222
...@@ -44,3 +44,30 @@ export const savaWorkValidateApi = (data, config) => { ...@@ -44,3 +44,30 @@ export const savaWorkValidateApi = (data, config) => {
config config
}) })
} }
export const savaGzFeedbackApi = (data, config) => {
return http({
method: 'POST',
url: '/technical-support/savaGzFeedback',
data,
config
})
}
export const savaGzApprovalApi = (data, config) => {
return http({
method: 'POST',
url: '/technical-support/savaGzApproval',
data,
config
})
}
export const savaFollowUpFeedbackApi = (data, config) => {
return http({
method: 'POST',
url: '/technical-support/savaFollowUpFeedback',
data,
config
})
}
...@@ -10,6 +10,6 @@ export const timeStampFormat = (timeStamp, opt) => { ...@@ -10,6 +10,6 @@ export const timeStampFormat = (timeStamp, opt) => {
return '' return ''
} }
timeStamp = parseInt(String(timeStamp)) timeStamp = parseInt(String(timeStamp))
const format = opt?.format || 'YYYY/MM/DD' const format = opt?.format || 'YYYY/MM/DD HH:mm:ss'
return Day(timeStamp).format(format) return Day(timeStamp).format(format)
} }
...@@ -124,6 +124,12 @@ ...@@ -124,6 +124,12 @@
"style": { "style": {
"navigationBarTitleText": "工作验证" "navigationBarTitleText": "工作验证"
} }
},
{
"path": "pages/modules/mocp/panel/assign-work/edit-gzApproval",
"style": {
"navigationBarTitleText": "跟踪批示"
}
} }
], ],
"globalStyle": { "globalStyle": {
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
</view> </view>
<view class="label"> <view class="label">
<global-icon icon="calendar" color="#1D2129"></global-icon> <global-icon icon="calendar" color="#1D2129"></global-icon>
<text class="txt">{{ calendar != -1 ? timeStampFormat(calendar, { format: 'YYYY/MM/DD HH:mm:ss' }) : '-' }}</text> <text class="txt">{{ calendar != -1 ? timeStampFormat(calendar) : '-' }}</text>
</view> </view>
</view> </view>
</slot> </slot>
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<global-icon class="left-icon" icon="Vector" size="24" color="#DD4012"></global-icon> <global-icon class="left-icon" icon="Vector" size="24" color="#DD4012"></global-icon>
<view class="txt">{{ details.ac }} {{ details.acType }}</view> <view class="txt">{{ details.ac }} {{ details.acType }}</view>
</view> </view>
<view class="right">{{ timeStampFormat(details.eventTime) }}</view> <view class="right">{{ timeStampFormat(details.eventTime, { format: 'YYYY/MM/DD' }) }}</view>
</view> </view>
</view> </view>
<view class="details-body"> <view class="details-body">
......
...@@ -34,6 +34,7 @@ const ps = defineProps({ ...@@ -34,6 +34,7 @@ const ps = defineProps({
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
flex-wrap: wrap;
margin-top: 16rpx; margin-top: 16rpx;
} }
</style> </style>
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<global-page <global-page
:padding="24" :padding="24"
:title="arrangeWorkExtend?.companyFullName" :title="arrangeWorkExtend?.companyFullName"
:showNavRight="arrangeWorkExtendList.length" :showNavRight="arrangeWorkExtendList.length > 1"
navRightType="icon" navRightType="icon"
showFooterBtn showFooterBtn
footerBtnText="领导批示" footerBtnText="领导批示"
...@@ -45,8 +45,8 @@ ...@@ -45,8 +45,8 @@
</view> </view>
</view> </view>
<view class="details-footer"> <view class="details-footer">
<global-field label="开始日期:" :value="timeStampFormat(details.startTime)"></global-field> <global-field label="开始日期:" :value="timeStampFormat(details.startTime, { format: 'YYYY/MM/DD' })"></global-field>
<global-field label="完成日期:" :value="timeStampFormat(details.feedbackTime)"></global-field> <global-field label="完成日期:" :value="timeStampFormat(details.feedbackTime, { format: 'YYYY/MM/DD' })"></global-field>
</view> </view>
</view> </view>
<template v-if="arrangeWorkExtend"> <template v-if="arrangeWorkExtend">
...@@ -55,7 +55,10 @@ ...@@ -55,7 +55,10 @@
<card-details-item title="解决措施" label="工作目标" :content="arrangeWorkExtend.workTarget"></card-details-item> <card-details-item title="解决措施" label="工作目标" :content="arrangeWorkExtend.workTarget"></card-details-item>
<template v-for="(item, index) in assignWorkStore.getDecompose" :key="index"> <template v-for="(item, index) in assignWorkStore.getDecompose" :key="index">
<card-details-item :label="assignWorkStore.getDecompose.length > 1 ? '分解计划' + (index + 1) : '分解计划'" :content="item.plan"> <card-details-item :label="assignWorkStore.getDecompose.length > 1 ? '分解计划' + (index + 1) : '分解计划'" :content="item.plan">
<card-details-footer rightLabel="完成时限:" :rightValue="timeStampFormat(item.time) || '-'"></card-details-footer> <card-details-footer
rightLabel="完成时限:"
:rightValue="timeStampFormat(item.time, { format: 'YYYY/MM/DD' }) || '-'"
></card-details-footer>
</card-details-item> </card-details-item>
</template> </template>
<card-details-item label="当前进展" :content="arrangeWorkExtend.current"> <card-details-item label="当前进展" :content="arrangeWorkExtend.current">
...@@ -71,7 +74,9 @@ ...@@ -71,7 +74,9 @@
leftLabel="后续措施反馈:" leftLabel="后续措施反馈:"
:leftValue="arrangeWorkExtend.followUpFeedback == '1' ? '是' : '否'" :leftValue="arrangeWorkExtend.followUpFeedback == '1' ? '是' : '否'"
rightLabel="计划完成时间:" rightLabel="计划完成时间:"
:rightValue="arrangeWorkExtend.followUpFeedback == '1' ? timeStampFormat(arrangeWorkExtend.pcTime) : '-'" :rightValue="
arrangeWorkExtend.followUpFeedback == '1' ? timeStampFormat(arrangeWorkExtend.pcTime, { format: 'YYYY/MM/DD' }) : '-'
"
></card-details-footer> ></card-details-footer>
<card-details-footer <card-details-footer
leftLabel="工作反馈状态:" leftLabel="工作反馈状态:"
...@@ -98,6 +103,45 @@ ...@@ -98,6 +103,45 @@
:rightValue="timeStampFormat(arrangeWorkExtend.approvalTime) || '-'" :rightValue="timeStampFormat(arrangeWorkExtend.approvalTime) || '-'"
></card-details-footer> ></card-details-footer>
</card-details> </card-details>
<card-details title="跟踪反馈" :showEmpty="arrangeWorkExtend.gzFeedbackTime == '0'">
<card-details-item title="跟踪反馈" :content="arrangeWorkExtend.gzFeedbackContent"></card-details-item>
<card-details-footer
leftLabel="反馈人:"
:leftValue="arrangeWorkExtend.gzFeedbackUser"
rightLabel="反馈时间:"
:rightValue="timeStampFormat(arrangeWorkExtend.gzFeedbackTime)"
></card-details-footer>
</card-details>
<card-details title="跟踪批示" :showEmpty="arrangeWorkExtend.gzApprovalTime == '0'">
<card-details-item
title="领导批示意见"
:content="useGetDictByValue('leaderState', arrangeWorkExtend.gzApprovalComments)"
></card-details-item>
<card-details-item title="批示要点" :content="arrangeWorkExtend.gzApprovalContent"></card-details-item>
<card-details-footer
leftLabel="批示人:"
:leftValue="arrangeWorkExtend.gzApprovalUser || '-'"
rightLabel="批示时间:"
:rightValue="timeStampFormat(arrangeWorkExtend.gzApprovalTime) || '-'"
></card-details-footer>
</card-details>
<card-details title="后续措施反馈" :showEmpty="arrangeWorkExtend.followUpFeedbackTime == '0'">
<card-details-item :borderBottom="false" title="反馈内容" :content="arrangeWorkExtend.followUpFeedbackContent"></card-details-item>
<card-details-item
:borderBottom="false"
title="应用分类"
:content="baseStore.getParamNameByValue('ApplicationType', arrangeWorkExtend.appType)"
></card-details-item>
<card-details-item label="验证材料">
<global-album :fileList="arrangeWorkExtend.followUpFeedbackFileVoList"></global-album>
<card-details-footer
leftLabel="反馈人:"
:leftValue="arrangeWorkExtend.followUpFeedbackUser || '-'"
rightLabel="反馈时间:"
:rightValue="timeStampFormat(arrangeWorkExtend.followUpFeedbackTime) || '-'"
></card-details-footer>
</card-details-item>
</card-details>
<card-details title="工作验证" :showEmpty="arrangeWorkExtend.eventType == ''"> <card-details title="工作验证" :showEmpty="arrangeWorkExtend.eventType == ''">
<card-details-item title="跟踪要点" :content="arrangeWorkExtend.trackingPoints"></card-details-item> <card-details-item title="跟踪要点" :content="arrangeWorkExtend.trackingPoints"></card-details-item>
<card-details-item label="批复附件"> <card-details-item label="批复附件">
......
<template> <template>
<global-page title="后续措施反馈" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存"> <global-page
title="后续措施反馈"
navLeftType="text"
:showNavRight="true"
navRightType="button"
navRightText="保存"
@handleRightClick="handleSave"
>
<view class="mocp-form"> <view class="mocp-form">
<up-form labelPosition="left" labelWidth="auto" ref="formRef"> <up-form labelPosition="left" labelWidth="auto" :model="formData" :rules="rules" ref="formRef">
<up-form-item label="反馈内容" :borderBottom="true" labelPosition="top"> <up-form-item label="反馈内容" :borderBottom="true" labelPosition="top" prop="followUpFeedbackContent" required>
<up-textarea <up-textarea
v-model="formData.followUpFeedbackContent"
placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容" placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容"
:height="40" :height="40"
border="none" border="none"
...@@ -11,22 +19,85 @@ ...@@ -11,22 +19,85 @@
</up-form-item> </up-form-item>
<up-form-item label="验证材料" labelPosition="top" :borderBottom="true"> <up-form-item label="验证材料" labelPosition="top" :borderBottom="true">
<view style="margin-top: 24rpx"> <view style="margin-top: 24rpx">
<global-upload></global-upload> <global-upload
:fileList="arrangeWorkExtend.followUpFeedbackFileVoList"
v-model="formData.followUpFeedbackFile"
mapFieldName="id"
></global-upload>
</view> </view>
</up-form-item> </up-form-item>
<up-form-item label="应用分类" :borderBottom="true"> <up-form-item label="应用分类" :borderBottom="true" prop="appType" required>
<global-picker pickAlign="right" clearable></global-picker> <global-picker
pickAlign="right"
v-model="formData.appType"
clearable
:options="baseStore.getParamsByType('ApplicationType')"
></global-picker>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </view>
</global-page> </global-page>
</template> </template>
<script setup></script> <script setup>
import { reactive, ref } from 'vue'
import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia'
import { onLoad } from '@dcloudio/uni-app'
import useBaseStore from 'mocp/store/base'
import { savaFollowUpFeedbackApi } from 'mocp/api/assign-work'
const baseStore = useBaseStore()
const assignWorkStore = useAssignWorkStore()
const { arrangeWorkExtend } = storeToRefs(assignWorkStore)
const formData = reactive({
followUpFeedbackContent: '',
followUpFeedbackFile: '',
appType: ''
})
const rules = reactive({
followUpFeedbackContent: [
{
required: true,
message: '请输入反馈内容',
trigger: ['blur', 'change']
}
],
appType: [
{
required: true,
message: '请选择应用分类',
trigger: ['blur', 'change']
}
]
})
//页面初始化
onLoad(() => {
formData.id = arrangeWorkExtend.value.id
formData.workId = arrangeWorkExtend.value.workId
formData.company = arrangeWorkExtend.value.company
formData.followUpFeedbackContent = arrangeWorkExtend.value.followUpFeedbackContent
formData.followUpFeedbackFile = arrangeWorkExtend.value.followUpFeedbackFile
formData.appType = arrangeWorkExtend.value.appType
})
//保存
const formRef = ref()
const handleSave = async () => {
await formRef.value?.validate()
const res = await savaFollowUpFeedbackApi(formData, { loading: true })
if (res.code == 200) {
uni.$mocpJump.navigateBack()
uni.$mocpMessage.showToast(res.message)
//更新当前责任单位详情
assignWorkStore.setState('arrangeWorkExtend', res.data)
} else {
uni.$mocpMessage.showToast(res.message)
}
}
</script>
<style lang="scss" scoped> <style lang="scss" scoped>
.mocp-form { .mocp-form {
background: #fff; background: #fff;
margin-bottom: 24rpx;
padding: 0 32rpx; padding: 0 32rpx;
} }
</style> </style>
<template>
<global-page title="跟踪批示" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存" @handleRightClick="handleSave">
<view class="mocp-form">
<up-form labelPosition="left" labelWidth="auto" :model="formData" :rules="rules" ref="formRef">
<up-form-item label="领导批示意见" :borderBottom="true" prop="gzApprovalComments" required>
<global-picker pickAlign="right" v-model="formData.gzApprovalComments" clearable dictkey="leaderState"></global-picker>
</up-form-item>
<up-form-item label="批示要点" :borderBottom="true" labelPosition="top" prop="gzApprovalContent" required>
<up-textarea
v-model.trim="formData.gzApprovalContent"
placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容"
:height="40"
border="none"
></up-textarea>
</up-form-item>
</up-form>
</view>
</global-page>
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app'
import { savaGzApprovalApi } from 'mocp/api/assign-work'
import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia'
import { reactive, ref } from 'vue'
const assignWorkStore = useAssignWorkStore()
const { arrangeWorkExtend } = storeToRefs(assignWorkStore)
const formData = reactive({
gzApprovalComments: '',
gzApprovalContent: ''
})
const rules = reactive({
gzApprovalComments: [
{
type: 'number',
required: true,
message: '请选择领导批示意见',
trigger: ['blur', 'change']
}
],
gzApprovalContent: [
{
required: true,
message: '请输入批示要点',
trigger: ['blur', 'change']
}
]
})
//页面初始化
onLoad(() => {
formData.id = arrangeWorkExtend.value.id
formData.workId = arrangeWorkExtend.value.workId
formData.company = arrangeWorkExtend.value.company
formData.gzApprovalComments = arrangeWorkExtend.value.gzApprovalComments
formData.gzApprovalContent = arrangeWorkExtend.value.gzApprovalContent
})
//保存
const formRef = ref()
const handleSave = async () => {
await formRef.value?.validate()
const res = await savaGzApprovalApi(formData, { loading: true })
if (res.code == 200) {
uni.$mocpJump.navigateBack()
uni.$mocpMessage.showToast(res.message)
//更新当前责任单位详情
assignWorkStore.setState('arrangeWorkExtend', res.data)
} else {
uni.$mocpMessage.showToast(res.message)
}
}
</script>
<style lang="scss" scoped>
.mocp-form {
background: #fff;
margin-bottom: 24rpx;
padding: 0 32rpx;
}
</style>
<template> <template>
<global-page title="跟踪反馈" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存"> <global-page title="跟踪反馈" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存" @handleRightClick="handleSave">
<up-form labelPosition="left" labelWidth="auto" ref="formRef"> <view class="mocp-form">
<up-form-item label="跟踪反馈" :borderBottom="true" labelPosition="top"> <up-form labelPosition="left" labelWidth="auto" :model="formData" :rules="rules" ref="formRef">
<up-textarea <up-form-item label="跟踪反馈" :borderBottom="true" labelPosition="top" prop="gzFeedbackContent" required>
placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容" <up-textarea
:height="40" v-model="formData.gzFeedbackContent"
border="none" placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容"
></up-textarea> :height="40"
</up-form-item> border="none"
</up-form> ></up-textarea>
</up-form-item>
</up-form>
</view>
</global-page> </global-page>
</template> </template>
<script setup></script> <script setup>
<style lang="scss" scoped></style> import { reactive, ref } from 'vue'
import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia'
import { onLoad } from '@dcloudio/uni-app'
import { savaGzFeedbackApi } from 'mocp/api/assign-work'
const assignWorkStore = useAssignWorkStore()
const { arrangeWorkExtend } = storeToRefs(assignWorkStore)
const formData = reactive({
gzFeedbackContent: ''
})
const rules = reactive({
gzFeedbackContent: [
{
required: true,
message: '请输入跟踪反馈',
trigger: ['blur', 'change']
}
]
})
//页面初始化
onLoad(() => {
formData.id = arrangeWorkExtend.value.id
formData.workId = arrangeWorkExtend.value.workId
formData.company = arrangeWorkExtend.value.company
formData.gzFeedbackContent = arrangeWorkExtend.value.gzFeedbackContent
})
//保存
const formRef = ref()
const handleSave = async () => {
await formRef.value?.validate()
const res = await savaGzFeedbackApi(formData, { loading: true })
if (res.code == 200) {
uni.$mocpJump.navigateBack()
uni.$mocpMessage.showToast(res.message)
//更新当前责任单位详情
assignWorkStore.setState('arrangeWorkExtend', res.data)
} else {
uni.$mocpMessage.showToast(res.message)
}
}
</script>
<style lang="scss" scoped>
.mocp-form {
background: #fff;
padding: 0 32rpx;
}
</style>
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
<view class="left"> <view class="left">
{{ decompose.length > 1 ? '分解计划' + (index + 1) : '分解计划' }} {{ decompose.length > 1 ? '分解计划' + (index + 1) : '分解计划' }}
</view> </view>
<view class="right">{{ timeStampFormat(item.time) }}</view> <view class="right">{{ timeStampFormat(item.time, { format: 'YYYY/MM/DD' }) }}</view>
</view> </view>
<view class="plan-body-text">{{ item.plan }}</view> <view class="plan-body-text">{{ item.plan }}</view>
</view> </view>
......
...@@ -24,9 +24,9 @@ ...@@ -24,9 +24,9 @@
<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) }} {{ timeStampFormat(item.startTime, { format: 'YYYY/MM/DD' }) }}
- -
{{ timeStampFormat(item.feedbackTime) }} {{ timeStampFormat(item.feedbackTime, { format: 'YYYY/MM/DD' }) }}
</text> </text>
</view> </view>
<view class="label"> <view class="label">
......
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