Commit d95e4a8d by pangchong

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

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