From 60b5992752011494493d776b2fe6f2006e02a49d Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期三, 27 八月 2025 14:24:11 +0800
Subject: [PATCH] Merge branch 'feature/0826' 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