123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- <template>
- <Dialog v-model="visible" type="sm" title="任务反馈" class="box1" height="1500px" hide-footer>
- <div class="dialog-content">
- <div class="dialog-body">
- <el-form ref="taskFormRef" :model="newTask" :rules="rules">
- <el-row :gutter="20">
- <el-col :span="24">
- <el-form-item label="任务描述:" label-width="300px" >
- <div class="display-field">{{ newTask.task_description }}</div>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="任务类型:" label-width="300px" >
- <div class="display-field">{{ get_task_type_text(newTask.task_type) }}</div>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="登记人:" label-width="300px" >
- <div class="display-field">{{ newTask.registrar }}</div>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="执行人:" label-width="300px" >
- <div class="display-field">{{ newTask.executor }}</div>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="执行单位:" label-width="300px" >
- <div class="display-field">{{ newTask.unit_name }}</div>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="联系电话:" label-width="300px" >
- <div class="display-field">{{ newTask.contact_phone }}</div>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="完成时限:" label-width="300px" >
- <div class="display-field">{{ newTask.expire_time }}</div>
- </el-form-item>
- </el-col>
- <!--
- <el-col :span="24">
- <el-form-item label="图片:">
- <div class="display-field">{{ newTask.complete_time }}</div>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="文件:">
- <div class="display-field">{{ newTask.complete_time }}</div>
- </el-form-item>
- </el-col>
- -->
- <el-col :span="24">
- <el-form-item label="反馈人:" label-width="300px" >
- <div class="display-field">{{ newTask.registrar }}</div>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="反馈内容:" label-width="300px" prop="feedback_content">
- <el-input v-model="newTask.feedback_content" class="custom-input2" clearable placeholder="请输入反馈内容"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="完成进度:" label-width="300px" prop="processing_status">
- <el-select
- v-model="newTask.processing_status"
- class="custom-select"
- size="large"
- :teleported="false"
- popper-class="custom-select-popper"
- >
- <el-option v-for="unit in units" :key="unit" :label="unit" :value="unit"></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="上传图片:" label-width="300px" prop="attachList">
- <FileUpload v-model="newTask.attachList" :file-type="['jpg', 'jpeg', 'png']" :limit="9" :file-size="5" class="upload-box" />
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- </div>
- <div class="footer">
- <div class="flex">
- <div class="common-btn" @click="closeDialog">取消</div>
- <div class="common-btn-primary" :disabled="!isFormValid" @click="confirmRegister">确定</div>
- </div>
- </div>
- </div>
- </Dialog>
- </template>
- <script lang="ts" setup>
- import { ref, reactive, defineEmits, computed, watch } from 'vue';
- import { updateTaskRegistration } from '@/api/emergencyCommandMap/JointDuty';
- const proxy = getCurrentInstance()?.proxy;
- const props = defineProps({
- modelValue: { type: Boolean, required: true },
- task: { type: Object, default: () => (
- { task_id: '', task_description: '', unit_name: '', registrar: '', processing_status: '', feedback_content: '', attachList: [] })
- },
- eventId: { type: String, required: true }
- });
- const taskFormRef = ref();
- const emit = defineEmits(['update:modelValue', 'update-success']);
- const newTask = reactive({ ...props.task });
- const units = ref(['待处理', '已完成']);
- const opt_task_type = [
- { text: "全部", value: "" },
- { text: "事件处置", value: "0" },
- { text: "防范措施", value: "1" },
- { text: "险情处理", value: "2" },
- { text: "督办任务", value: "3" }
- ];
- const rules = ref({
- processing_status: [{ required: true, message: '完成进度不能为空', trigger: 'blur' }],
- feedback_content: [{ required: true, message: '反馈内容不能为空', trigger: 'blur' }]
- });
- const get_task_type_text = (val) => {
- return opt_task_type.find(item => item.value == val).text
- }
- const visible = computed({
- get: () => props.modelValue,
- set: (val) => {
- emit('update:modelValue', val);
- if (!val) resetForm();
- }
- });
- const isFormValid = computed(() => newTask.registrar !== '');
- const resetForm = () => {
- newTask.task_description = '';
- newTask.unit_name = '';
- newTask.registrar = '';
- newTask.processing_status = '';
- newTask.attachList = [];
- };
- // 任务进度更新
- const confirmRegister = () => {
- console.log('任务进度更新:', newTask);
- taskFormRef.value?.validate((valid) => {
- if (valid) {
- updateTaskRegistration({
- task_id: newTask.task_id,
- processing_status: newTask.processing_status,
- feedback_content: newTask.feedback_content,
- attachList: newTask.attachList,
- event_code: props.eventId
- }).then((response)=>{
- if (response.code === 200) {
- proxy?.$modal.msgSuccess('任务进度更新成功');
- emit('update-success', newTask);
- closeDialog();
- } else {
- console.error('任务进度更新失败:', response.msg);
- }
- })
- }
- });
- };
- const closeDialog = () => {
- visible.value = false;
- };
- watch(
- () => props.task,
- (newTaskData) => {
- Object.assign(newTask, newTaskData);
- },
- { immediate: true }
- );
- </script>
- <style lang="scss" scoped>
- .custom-select {
- //width: 500px !important; // 使用 !important 强制覆盖默认样式
- }
- .dialog-body {
- padding: 20px;
- }
- /* 新增样式,用于显示字段 */
- .display-field {
- padding: 6px 12px;
- //border: 1px solid #dcdfe6; /* 确保边框颜色与输入框一致 */
- border-radius: 4px;
- //background-color: #f5f7fa;
- // 背景颜色透明
- background-color: transparent;
- min-height: 32px;
- line-height: 32px;
- font-size: 40px; /* 确保字体大小与输入框一致 */
- color: #ffffff; /* 确保字体颜色与输入框一致 */
- //字体加粗
- //font-weight: bold;
- }
- .footer {
- display: flex;
- justify-content: flex-end;
- margin-top: 20px;
- .flex {
- display: flex;
- align-items: center;
- .common-btn-primary,
- .common-btn {
- margin-left: 10px;
- cursor: pointer;
- }
- }
- }
- </style>
|