Commit d95e4a8d by pangchong

feat: 布置工作--工作验证

parent f8eefbd7
...@@ -26,6 +26,7 @@ export const savaArrangeWorkFeedbackApi = (data, config) => { ...@@ -26,6 +26,7 @@ export const savaArrangeWorkFeedbackApi = (data, config) => {
config config
}) })
} }
export const savaLeaderApprovalApi = (data, config) => { export const savaLeaderApprovalApi = (data, config) => {
return http({ return http({
method: 'POST', method: 'POST',
...@@ -34,3 +35,12 @@ export const savaLeaderApprovalApi = (data, config) => { ...@@ -34,3 +35,12 @@ export const savaLeaderApprovalApi = (data, config) => {
config config
}) })
} }
export const savaWorkValidateApi = (data, config) => {
return http({
method: 'POST',
url: '/technical-support/savaWorkValidate',
data,
config
})
}
...@@ -23,7 +23,7 @@ import { computed, ref, watch } from 'vue' ...@@ -23,7 +23,7 @@ import { computed, ref, watch } from 'vue'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { upload } from 'mocp/utils/http' import { upload } from 'mocp/utils/http'
const es = defineEmits(['handleUpload']) const es = defineEmits(['update:modelValue', 'change'])
const ps = defineProps({ const ps = defineProps({
fileList: { fileList: {
type: Array, type: Array,
...@@ -44,6 +44,14 @@ const ps = defineProps({ ...@@ -44,6 +44,14 @@ const ps = defineProps({
uploadIcon: { uploadIcon: {
type: String, type: String,
default: 'plus' default: 'plus'
},
mapFieldName: {
type: String,
default: ''
},
mapFieldSplit: {
type: String,
default: ','
} }
}) })
const getUploadButtonSize = computed(() => { const getUploadButtonSize = computed(() => {
...@@ -99,9 +107,7 @@ const afterRead = async (event) => { ...@@ -99,9 +107,7 @@ const afterRead = async (event) => {
watch( watch(
fileList, fileList,
(value) => { (value) => {
es( let files = cloneDeep(value)
'handleUpload',
cloneDeep(value)
.filter((item) => { .filter((item) => {
return item.status != 'uploading' return item.status != 'uploading'
}) })
...@@ -111,9 +117,13 @@ watch( ...@@ -111,9 +117,13 @@ watch(
.filter((item) => { .filter((item) => {
return delete item.message return delete item.message
}) })
) if (ps.mapFieldName) {
files = files.map((v) => v[ps.mapFieldName]).join(ps.mapFieldSplit)
}
es('update:modelValue', files)
es('change', files)
}, },
{ deep: true } { deep: true, immediate: true }
) )
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
export const feedbackOpts = [ export const feedbackOpts = [
{ label: '是', value: 1 }, { label: '是', value: '1' },
{ label: '落实执行', value: 0 } { label: '落实执行', value: '0' }
] ]
export const feedbackState = [ export const feedbackState = [
{ label: 'OPEN', value: 1 }, { label: 'OPEN', value: '1' },
{ label: 'CLOSE', value: 2 } { label: 'CLOSE', value: '2' }
] ]
export const leaderState = [ export const leaderState = [
{ label: '同意', value: '1' }, { label: '同意', value: '1' },
{ label: '不同意', value: '0' }, { label: '不同意', value: '0' },
{ label: '部分同意', value: '2' } { label: '部分同意', value: '2' }
] ]
export const validateType = [
{ label: '重复事件', value: '1' },
{ label: '同类事件', value: '2' }
]
...@@ -45,8 +45,8 @@ const useBaseStore = defineStore('base', { ...@@ -45,8 +45,8 @@ const useBaseStore = defineStore('base', {
}, },
getParamsByType(paramType) { getParamsByType(paramType) {
return this.allBasicParams[paramType] return this.allBasicParams[paramType]
.filter((item) => item.isDel == 0) ?.filter((item) => item.isDel == 0)
.map((item) => { ?.map((item) => {
return { label: item.paramName, value: item.paramCode } return { label: item.paramName, value: item.paramCode }
}) })
}, },
......
...@@ -37,5 +37,6 @@ export const formData = reactive({ ...@@ -37,5 +37,6 @@ export const formData = reactive({
qualityOpinionMsg: '', qualityOpinionMsg: '',
qualityOpinionType: -1, qualityOpinionType: -1,
status: '', status: '',
emailSendTime: -1 emailSendTime: -1,
file: []
}) })
import { getAcReduceListApi } from 'mocp/api/base' import { getAcReduceListApi } from 'mocp/api/base'
import { fileList, formData } from './edit.compositions' import { formData } from './edit.compositions'
//切换机号 //切换机号
export const changeAc = async () => { export const changeAc = async () => {
...@@ -11,7 +11,3 @@ export const changeAc = async () => { ...@@ -11,7 +11,3 @@ export const changeAc = async () => {
uni.$mocpMessage.showToast(res.message) uni.$mocpMessage.showToast(res.message)
} }
} }
//获取文件内容
export const handleUpload = (data) => {
fileList.value = data
}
...@@ -119,7 +119,7 @@ ...@@ -119,7 +119,7 @@
<global-picker pickAlign="right" dictkey="appealInfo" v-model="formData.appealInfo" clearable></global-picker> <global-picker pickAlign="right" dictkey="appealInfo" v-model="formData.appealInfo" clearable></global-picker>
</view> </view>
<view class="appeal-content"> <view class="appeal-content">
<global-upload :fileList="getFileList" @handleUpload="handleUpload"></global-upload> <global-upload :fileList="getFileList" v-model="formData.file"></global-upload>
</view> </view>
</view> </view>
</view> </view>
...@@ -132,8 +132,8 @@ import CardDetailsItem from './components/card-details-item.vue' ...@@ -132,8 +132,8 @@ import CardDetailsItem from './components/card-details-item.vue'
import { onShow } from '@dcloudio/uni-app' import { onShow } from '@dcloudio/uni-app'
import useBaseStore from 'mocp/store/base' import useBaseStore from 'mocp/store/base'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict' import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { rules, formData, fileList, formRef } from './constants/edit.compositions' import { rules, formData, formRef } from './constants/edit.compositions'
import { changeAc, handleUpload } from './constants/edit.functionals' import { changeAc } from './constants/edit.functionals'
import useAppraisalRecordStore from 'mocp/store/appraisal-record' import useAppraisalRecordStore from 'mocp/store/appraisal-record'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { updateRqmDataApi } from 'mocp/api/appraisal-record' import { updateRqmDataApi } from 'mocp/api/appraisal-record'
...@@ -172,13 +172,11 @@ onShow(() => { ...@@ -172,13 +172,11 @@ onShow(() => {
formData.qualityOpinionType = details.value.qualityOpinionType formData.qualityOpinionType = details.value.qualityOpinionType
formData.status = details.value.status formData.status = details.value.status
formData.emailSendTime = details.value.emailSendTime formData.emailSendTime = details.value.emailSendTime
//初始化文件列表
fileList.value = getFileList.value
}) })
//提交表单 //提交表单
const handleSubmit = async () => { const handleSubmit = async () => {
await formRef.value?.validate() await formRef.value?.validate()
const params = { ...formData, file: JSON.stringify(fileList.value) } const params = { ...formData, file: JSON.stringify(formData.file) }
const res = await updateRqmDataApi(params, { loading: true }) const res = await updateRqmDataApi(params, { loading: true })
if (res.code == 200) { if (res.code == 200) {
uni.$mocpJump.navigateBack() uni.$mocpJump.navigateBack()
......
...@@ -11,7 +11,9 @@ export const formData = reactive({ ...@@ -11,7 +11,9 @@ export const formData = reactive({
pcTime: null, pcTime: null,
feedbackState: null, feedbackState: null,
feedbackUser: '', feedbackUser: '',
feedbackTime: '' feedbackTime: '',
approvalFile: '',
file: ''
}) })
export const rules = reactive({ export const rules = reactive({
feedbackState: [ feedbackState: [
......
import { approvalFileVoList, fileVoList } from './edit-work.compositions'
export const handleUploadFile = (data) => {
fileVoList.value = data
}
export const handleUploadApproval = (data) => {
approvalFileVoList.value = data
}
<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="trackingPoints" required>
<up-textarea <up-textarea
v-model="formData.trackingPoints"
placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容" placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容"
:height="40" :height="40"
border="none" border="none"
></up-textarea> ></up-textarea>
</up-form-item> </up-form-item>
<up-form-item label="事件类型" :borderBottom="true"> <up-form-item label="事件类型" :borderBottom="true" prop="eventType" required>
<global-picker pickAlign="right" clearable></global-picker> <global-picker
pickAlign="right"
v-model="formData.eventType"
clearable
:options="baseStore.getParamsByType('LayoutEventType')"
></global-picker>
</up-form-item> </up-form-item>
<up-form-item label="重复/同类事件" :borderBottom="true"> <up-form-item label="重复/同类事件" :borderBottom="true" prop="validateType" required>
<global-checkbox checkboxAlign="right" v-model="box"></global-checkbox> <global-checkbox checkboxAlign="right" v-model="formData.validateType" dictkey="validateType"></global-checkbox>
</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.validateFileVoList"
v-model="formData.validateFile"
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="validateState" required>
<global-picker pickAlign="right" clearable></global-picker> <global-picker pickAlign="right" clearable v-model="formData.validateState" dictkey="feedbackState"></global-picker>
</up-form-item> </up-form-item>
</up-form> </up-form>
</view> </view>
...@@ -29,12 +39,77 @@ ...@@ -29,12 +39,77 @@
</template> </template>
<script setup> <script setup>
import { ref, watch } from 'vue' 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 { savaWorkValidateApi } from 'mocp/api/assign-work'
const box = ref('') const baseStore = useBaseStore()
watch(box, (value) => { const assignWorkStore = useAssignWorkStore()
console.log(value) const { arrangeWorkExtend } = storeToRefs(assignWorkStore)
const formData = reactive({
trackingPoints: '',
eventType: '',
validateFile: [],
validateType: '',
validateState: '1'
}) })
const rules = reactive({
trackingPoints: [
{
required: true,
message: '请输入跟踪要点',
trigger: ['blur', 'change']
}
],
eventType: [
{
required: true,
message: '请选择事件类型',
trigger: ['blur', 'change']
}
],
validateType: [
{
required: true,
message: '请选择重复/同类事件',
trigger: ['blur', 'change']
}
],
validateState: [
{
required: true,
message: '请选择工作验证状态',
trigger: ['blur', 'change']
}
]
})
//页面初始化
onLoad(() => {
formData.id = arrangeWorkExtend.value.id
formData.workId = arrangeWorkExtend.value.workId
formData.company = arrangeWorkExtend.value.company
formData.trackingPoints = arrangeWorkExtend.value.trackingPoints
formData.eventType = arrangeWorkExtend.value.eventType
formData.validateType = arrangeWorkExtend.value.validateType
formData.validateState = arrangeWorkExtend.value.validateState
})
//保存
const formRef = ref()
const handleSave = async () => {
await formRef.value?.validate()
const res = await savaWorkValidateApi(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> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.mocp-form { .mocp-form {
......
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
></up-textarea> ></up-textarea>
</up-form-item> </up-form-item>
<up-form-item :borderBottom="true"> <up-form-item :borderBottom="true">
<global-upload :fileList="arrangeWorkExtend.fileVoList" @handleUpload="handleUploadFile"></global-upload> <global-upload :fileList="arrangeWorkExtend.fileVoList" v-model="formData.file" mapFieldName="id"></global-upload>
</up-form-item> </up-form-item>
</view> </view>
</view> </view>
...@@ -97,7 +97,11 @@ ...@@ -97,7 +97,11 @@
</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 :fileList="arrangeWorkExtend.approvalFileVoList" @handleUpload="handleUploadApproval"></global-upload> <global-upload
:fileList="arrangeWorkExtend.approvalFileVoList"
v-model="formData.approvalFile"
mapFieldName="id"
></global-upload>
</view> </view>
</up-form-item> </up-form-item>
<up-form-item label="后续措施反馈" :borderBottom="true" required> <up-form-item label="后续措施反馈" :borderBottom="true" required>
...@@ -120,7 +124,6 @@ import useAssignWorkStore from 'mocp/store/assign-work' ...@@ -120,7 +124,6 @@ import useAssignWorkStore from 'mocp/store/assign-work'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { formData, rules } from './constants/edit-work.compositions' import { formData, rules } from './constants/edit-work.compositions'
import { onLoad, onUnload } from '@dcloudio/uni-app' import { onLoad, onUnload } from '@dcloudio/uni-app'
import { handleUploadApproval, handleUploadFile } from './constants/edit-work.functionals'
import { approvalFileVoList, fileVoList } from './constants/edit-work.compositions' import { approvalFileVoList, fileVoList } from './constants/edit-work.compositions'
import { timeStampFormat } from 'mocp/utils/tool' import { timeStampFormat } from 'mocp/utils/tool'
import { ref } from 'vue' import { ref } from 'vue'
...@@ -165,9 +168,7 @@ const handleSave = async () => { ...@@ -165,9 +168,7 @@ const handleSave = async () => {
} }
const params = { const params = {
...formData, ...formData,
decompose: JSON.stringify(decompose.value), decompose: JSON.stringify(decompose.value)
approvalFile: approvalFileVoList.value.map((v) => v.id).join(),
file: fileVoList.value.map((v) => v.id).join()
} }
if (formData.followUpFeedback == '0') { if (formData.followUpFeedback == '0') {
params.pcTime = '' params.pcTime = ''
......
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