From 4cc27f93a1901e12eb12a198029911c483dd991f Mon Sep 17 00:00:00 2001 From: maven <2163098428@qq.com> Date: 星期三, 27 八月 2025 14:30:57 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev_JLMY' into dev_JLMY --- src/views/payable/components/PayableDialog.vue | 279 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 279 insertions(+), 0 deletions(-) diff --git a/src/views/payable/components/PayableDialog.vue b/src/views/payable/components/PayableDialog.vue new file mode 100644 index 0000000..f78af79 --- /dev/null +++ b/src/views/payable/components/PayableDialog.vue @@ -0,0 +1,279 @@ +<template> + <div> + <el-dialog + v-model="dialogPayableFormVisible" + :title="title" + width="600" + :close-on-click-modal="false" + @close="handleClose" + > + <el-form + ref="formRef" + :model="form" + :rules="rules" + label-width="auto" + class="production-form" + label-position="right" + style="max-width: 400px; margin: 0 auto" + > + <el-form-item label="鍙戠エ鍙�" prop="ticketNo"> + <el-input + v-model.number="form.ticketNo" + placeholder="璇疯緭鍏ュ彂绁ㄥ彿" + :disabled="isViewMode" + > + </el-input> + </el-form-item> + <el-form-item label="浠樻閲戦" prop="paymentAmount"> + <el-input + v-model.number="form.paymentAmount" + placeholder="璇疯緭鍏ヤ粯娆鹃噾棰�" + :disabled="isViewMode" + > + <template v-slot:suffix> + <i style="font-style: normal">鍏�</i> + </template> + </el-input> + </el-form-item> + <el-form-item label="浠樻绫诲瀷" prop="payableType"> + <el-select + v-model="form.payableType" + placeholder="璇烽�夋嫨绫诲瀷" + :disabled="isViewMode" + > + <el-option + v-for="item in payableTypeList" + :key="item.value" + :label="item.label" + :value="Number(item.value)" + /> + </el-select> + </el-form-item> + <el-form-item label="涓婁紶闄勪欢" prop="attachUpload"> + <el-upload + class="upload-demo" + drag + :fileList="form.fileList" + :action="uploadFileUrl" + :headers="headers" + :http-request="UploadImage" + :on-success="handleUploadSuccess" + :on-remove="handleUploadRemove" + :on-preview="handleUploadPreview" + multiple> + <i class="el-icon-upload"></i> + <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div> + </el-upload> + </el-form-item> + <el-form-item label="鐧昏浜�" prop="registrantId"> + <el-input + :value="match(form.registrantId)" + v-model.number="form.registrantId" + disabled + placeholder="璇疯緭鍏�" + /> + </el-form-item> + <el-form-item label="鐧昏鏃ユ湡" prop="registrationDate"> + <el-date-picker + disabled + v-model="form.registrationDate" + type="date" + placeholder="YYYY-MM-DD" + style="width: 100%" + value-format="YYYY-MM-DD" + /> + </el-form-item> + + </el-form> + <template #footer> + <div class="dialog-footer"> + <!-- 閲嶇疆鍜屽彇娑� --> + <el-button + @click="handleClose" + v-if="title.includes('鏂板') || title.includes('鏌ョ湅')" + >鍙栨秷 + </el-button> + <el-button @click="handleReset" v-if="title.includes('缂栬緫')" + >閲嶇疆 + </el-button> + <el-button type="primary" v-if="!isViewMode" @click="handleSubmit" + >纭</el-button + > + </div> + </template> + </el-dialog> + </div> +</template> + +<script setup name="ProductionDialog"> +import {ref, defineProps, watch, onMounted, nextTick, computed,reactive,defineEmits} from "vue"; +import axios from "axios"; +import {addDuePayable} from "@/api/payable/index.js" +import {ElMessage} from "element-plus"; + +import useUserStore from "@/store/modules/user.js"; +import useDictStore from "@/store/modules/dict.js" +import {getToken} from "@/utils/auth.js"; +const uploadFileUrl = computed(() => import.meta.env.VITE_APP_BASE_API + "/common/minioUploads"); +const headers = computed(() => ({ Authorization: "Bearer " + getToken() })); + + + +const props = defineProps({ + title: { + type: String, + default: "", + }, + statusType: { type: Number, default: 0 }, + dialogPayableFormVisible: { + type: Boolean, + required: true + }, +}); + +const handleUploadRemove = (it)=>{ + form.value.fileList = form.value.fileList.filter(f => f.uid !== it.uid); + +} +const handleUploadPreview = (it)=>{ + const link = document.createElement("a"); + if(it.url){ + link.href = it.url + }else { + link.href = form.value.fileList.value.find(fl=>fl.uid === it.uid).url; + } + link.download = it.name; + link.click(); +} + +const handleUploadSuccess = (res,file)=>{ + form.value.fileList.push(...res.data.map((it,index)=>{ + return { + id:it.id, + url:it.downloadUrl, + name:it.originalFilename, + status:"success", + uid:file.uid + } + })) +} + +// 鏂囦欢涓婁紶澶勭悊 +const UploadImage = (param) => { + const formData = new FormData(); + formData.append("files", param.file); + formData.append("type", props.statusType); + axios.post(uploadFileUrl.value, formData, { + headers: { + "Content-Type": "multipart/form-data", + ...headers.value, + }, + onUploadProgress: (progressEvent) => { + const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total); + param.onProgress({ percent }); + }, + }) + .then((response) => { + if (response.data.code === 200) { + handleUploadSuccess(response.data, param.file); + ElMessage.success("涓婁紶鎴愬姛"); + } else { + param.onError(new Error(response.data.msg)); + ElMessage.error(response.data.msg); + } + }) + .catch((error) => { + param.onError(error); + }); +}; +const emit = defineEmits(["update:dialogPayableFormVisible", "success"]); +const dialogPayableFormVisible = defineModel("dialogPayableFormVisible", { + required: true, + type: Boolean, +}); +const form = defineModel("form", { + required: true, + type: Object, +}); + + +const payableTypeList = ref([]) +const isViewMode = computed(() => props.title.includes("鏌ョ湅")); + +const userStore = useUserStore(); +const userInfo = ref({}); +const match = () => { + return userInfo.value.nickName || "鏈煡鐢ㄦ埛"; +}; + + + + +//### + +onMounted(async () => { + + payableTypeList.value = useDictStore().getDictTypeList("payable_type").map((item) => ({ + value: item.value, + label: item.label, + })) + + let res = await userStore.getInfo(); + userInfo.value = res.user; + +}); +const rules = { + + payableType: [ + {required: true, message: "璇烽�夋嫨绫诲瀷", trigger: "change"} + ], + paymentAmount: [ + {required: true, message: "璇疯緭鍏ラ噾棰�", trigger: "blur"} + ], + ticketNo: [ + {required: true, message: "璇疯緭鍏ュ彂绁ㄥ彿", trigger: "blur"} + ] + +}; +// 鍏抽棴寮圭獥 +const handleClose = () => { + dialogPayableFormVisible.value = false; + form.value.fileList.value = [] +}; + +const handleReset = async ()=>{ + +} + +const formRef = ref(null); +// 鎻愪氦琛ㄥ崟 +const handleSubmit = async () => { + // 鏂囦欢澶勭悊鍙幏鍙杋d 杩涜鎷兼帴 + if (!formRef.value) return; + formRef.value.validate((valid) => { + if (valid) { + const obj = ref({}); + form.value.attachUpload = "" + if (form.value.fileList.length > 0){ + form.value.attachUpload = form.value.fileList.map(it => it.id).join(",") + } + + let result = addDuePayable({ + ...form.value + }) + + obj.value = { + ...form.value, + result + } + emit("success", obj.value); + } + }) +}; + +</script> + +<style lang="scss" scoped> + + +</style> -- Gitblit v1.9.3