123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- <template>
- <el-dialog
- v-model="state.dialogVisible"
- draggable
- title="发起督办"
- @mouseup="mouseup"
- :style="'transform: ' + state.transform + ';'"
- ref="dialogRef"
- width="50%"
- append-to-body
- destroy-on-close
- @close="close"
- >
- <div class="collapse-container">
- <el-form label-width="110px" ref="ruleFormRef" :model="state.ruleForm">
- <el-row :gutter="35">
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
- <el-form-item label="工单编码"> {{ state.orderDetail.no }} </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
- <el-form-item label="工单标题"> {{ state.orderDetail.title }} </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
- <el-form-item label="督办人"> {{ userInfos.name }} </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
- <el-form-item label="督办部门"> {{ userInfos.orgName }} </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
- <el-form-item label="督办时间"> {{ formatDate(Date(), 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
- <el-form-item label="督办回复时限" prop="replyLimitTime" :rules="[{ required: true, message: '请选择督办回复时限', trigger: 'change' }]">
- <el-date-picker
- v-model="state.ruleForm.replyLimitTime"
- type="datetime"
- placeholder="请选择督办回复时限"
- value-format="YYYY-MM-DD[T]HH:mm:ss"
- class="w100"
- />
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
- <el-form-item label="被督办部门" prop="org" :rules="[{ required: true, message: '请选择被督办部门', trigger: 'change' }]">
- <el-select
- v-model="state.ruleForm.org"
- placeholder="请选择被督办部门"
- class="w100"
- value-key="key"
- multiple
- collapse-tags
- collapse-tags-tooltip
- >
- <el-option v-for="item in state.orgData" :value="item" :key="item.key" :label="item.value" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
- <el-form-item label="" prop="acceptSms" :rules="[{ required: false, message: '请选择发送督办短信', trigger: 'change' }]">
- <el-checkbox v-model="state.ruleForm.acceptSms" label="发送督办短信" />
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
- <el-form-item label="督办内容" prop="applyContent" :rules="[{ required: true, message: '请填写督办内容', trigger: 'blur' }]">
- <common-advice
- @chooseAdvice="chooseAdvice"
- v-model="state.ruleForm.applyContent"
- placeholder="请填写督办内容"
- :loading="state.loading"
- :commonEnum="commonEnum.Supervise"
- />
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
- <el-form-item label="附件" prop="handleResult" :rules="[{ required: false, message: '请选择附件', trigger: 'change' }]">
- <annex-list name="督办申请附件" v-model="state.ruleForm.files" v-model:format="filesFormat" businessId="" classify="督办申请" />
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- </div>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="closeDialog" class="default-button">取 消</el-button>
- <el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="state.loading">确 定</el-button>
- </span>
- </template>
- </el-dialog>
- </template>
- <script setup lang="ts" name="businessSuperviseDialog">
- import { defineAsyncComponent, reactive, ref } from 'vue';
- import { ElMessage, FormInstance } from 'element-plus';
- import { storeToRefs } from 'pinia';
- import { useUserInfo } from '@/stores/userInfo';
- import { formatDate } from '@/utils/formatTime';
- import { commonEnum } from '@/utils/constants';
- import { superviseApply, urgeOrgList } from '@/api/business/supervise';
- // 引入组件
- const AnnexList = defineAsyncComponent(() => import('@/components/AnnexList/index.vue'));
- const CommonAdvice = defineAsyncComponent(() => import('@/components/CommonAdvice/index.vue')); // 常用意见
- // 定义子组件向父组件传值/事件
- const emit = defineEmits(['updateList']);
- // 定义变量内容
- const state = reactive<any>({
- dialogVisible: false, // 是否显示弹窗
- loading: false, // 是否显示加载
- ruleForm: {
- acceptSms: false, // 发送督办短信
- applyContent: '', // 督办内容
- org: [],
- },
- orderDetail: {}, // 工单详情
- transform: 'translate(0px, 0px)', // 滚动条位置
- orgData: [], // 被督办部门
- });
- const ruleFormRef = ref<RefType>();
- const storesUserInfo = useUserInfo();
- const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
- const getOrgList = async (workflowId: string) => {
- try {
- const { result } = await urgeOrgList(workflowId);
- state.orgData = result ?? [];
- } catch (e) {
- console.log(e);
- }
- };
- // 打开弹窗
- const openDialog = (val: any) => {
- if (!val.workflow) {
- ElMessage.warning('该工单未开启流程');
- return;
- }
- state.dialogVisible = true;
- state.orderDetail = val;
- getOrgList(val.workflow.id);
- };
- // 关闭弹窗
- const closeDialog = () => {
- state.dialogVisible = false;
- };
- const close = () => {
- ruleFormRef.value?.clearValidate();
- ruleFormRef.value?.resetFields();
- };
- // 选中常用意见
- const chooseAdvice = (item: any) => {
- state.ruleForm.content += item.content;
- };
- // 设置抽屉
- const dialogRef = ref<RefType>();
- const mouseup = () => {
- state.transform = dialogRef.value.dialogContentRef.$el.style.transform;
- };
- // 提交
- const filesFormat = ref<EmptyArrayType>([]); // 附件列表
- const onSubmit = (formEl: FormInstance | undefined) => {
- if (!formEl) return;
- formEl.validate((valid: boolean) => {
- if (!valid) return;
- state.loading = true;
- const request = {
- files: filesFormat.value,
- orderId: state.orderDetail.id,
- applyContent: state.ruleForm.applyContent,
- acceptSms: state.ruleForm.acceptSms,
- replyLimitTime: state.ruleForm.replyLimitTime,
- superviseOrgDtos: state.ruleForm.org.map((item: any) => {
- return {
- orgId: item.key,
- orgName: item.value,
- };
- }),
- };
- superviseApply(request)
- .then((res: any) => {
- state.loading = false;
- closeDialog();
- emit('updateList');
- ElMessage.success('操作成功');
- })
- .catch(() => {
- state.loading = false;
- });
- });
- };
- defineExpose({
- openDialog,
- closeDialog,
- });
- </script>
|