From 1c0863efe062af3ebcdecb8c10568d779f5c8295 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期一, 26 一月 2026 15:10:55 +0800
Subject: [PATCH] Merge remote-tracking branch 'refs/remotes/origin/dev_New' into dev_tide_mis_xindao
---
src/views/procurementManagement/returnManagement/index.vue | 271 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 271 insertions(+), 0 deletions(-)
diff --git a/src/views/procurementManagement/returnManagement/index.vue b/src/views/procurementManagement/returnManagement/index.vue
new file mode 100644
index 0000000..d44b588
--- /dev/null
+++ b/src/views/procurementManagement/returnManagement/index.vue
@@ -0,0 +1,271 @@
+<template>
+ <div class="app-container">
+ <el-card class="search-card" shadow="never">
+ <el-form :model="searchForm" :inline="true">
+ <el-form-item label="閫�璐у崟鍙凤細" style="width: 300px;">
+ <el-input v-model="searchForm.returnNo" placeholder="璇疯緭鍏ラ��璐у崟鍙�" clearable />
+ </el-form-item>
+ <el-form-item label="閫�璐х被鍨嬶細" style="width: 300px;">
+ <el-select v-model="searchForm.returnType" placeholder="璇烽�夋嫨绫诲瀷" clearable>
+ <el-option label="閲囪喘閫�璐�" value="purchase" />
+ <el-option label="璐ㄦ閫�璐�" value="quality" />
+ </el-select>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" @click="handleSearch">鎼滅储</el-button>
+ <el-button @click="resetSearch">閲嶇疆</el-button>
+ </el-form-item>
+ </el-form>
+ </el-card>
+
+ <el-card class="table-card" shadow="never">
+ <div class="table-header">
+ <el-button type="primary" @click="openDialog('add')">鏂板閫�璐у崟</el-button>
+ <el-button type="danger" @click="handleBatchDelete">鎵归噺鍒犻櫎</el-button>
+ </div>
+
+ <el-table :data="tableData" border v-loading="loading" @selection-change="handleSelectionChange">
+ <el-table-column type="selection" width="55" align="center" />
+ <el-table-column label="閫�璐у崟鍙�" prop="returnNo" width="180" />
+ <el-table-column label="鍏宠仈鍗曞彿" prop="relatedNo" width="180" />
+ <el-table-column label="閫�璐х被鍨�" prop="returnType" width="100">
+ <template #default="{ row }">
+ <el-tag :type="row.returnType === 'purchase' ? 'danger' : 'warning'">
+ {{ getReturnTypeText(row.returnType) }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" />
+ <el-table-column label="閫�璐х姸鎬�" prop="status" width="100">
+ <template #default="{ row }">
+ <el-tag :type="getStatusType(row.status)">{{ getStatusText(row.status) }}</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="鍒涘缓鏃堕棿" prop="createTime" width="180" />
+ <el-table-column label="鎿嶄綔" width="200" align="center">
+ <template #default="{ row }">
+ <el-button type="primary" link @click="openDialog('edit', row)">缂栬緫</el-button>
+ <el-button type="success" link @click="handleApprove(row)" v-if="row.status === 'pending'">瀹℃牳</el-button>
+ <el-button type="danger" link @click="handleDelete(row)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <!-- 鍒嗛〉 -->
+ <pagination
+ :total="total"
+ layout="total, sizes, prev, pager, next, jumper"
+ :page="pagination.current"
+ :limit="pagination.size"
+ @pagination="handleCurrentChange"
+ />
+ </el-card>
+
+ <FormDialog v-model="dialogVisible" :title="dialogType === 'add' ? '鏂板閫�璐у崟' : '缂栬緫閫�璐у崟'" :width="'600px'" :operation-type="dialogType" @close="dialogVisible = false" @confirm="handleSubmit" @cancel="dialogVisible = false">
+ <el-form :model="formData" label-width="120px">
+ <el-form-item label="閫�璐х被鍨�">
+ <el-select v-model="formData.returnType" placeholder="璇烽�夋嫨閫�璐х被鍨�" style="width: 100%">
+ <el-option label="閲囪喘閫�璐�" value="purchase" />
+ <el-option label="璐ㄦ閫�璐�" value="quality" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍏宠仈鍗曞彿">
+ <el-select v-model="formData.relatedNo" placeholder="璇烽�夋嫨鍏宠仈鍗曞彿" style="width: 100%">
+ <el-option v-for="item in onList" :key="item.arrivalNo" :label="item.arrivalNo" :value="item.arrivalNo" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="渚涘簲鍟嗗悕绉�">
+ <el-input v-model="formData.supplierName" placeholder="璇疯緭鍏ヤ緵搴斿晢鍚嶇О" />
+ </el-form-item>
+ <el-form-item label="閫�璐у師鍥�">
+ <el-select v-model="formData.returnReason" placeholder="璇烽�夋嫨閫�璐у師鍥�" style="width: 100%">
+ <el-option label="璐ㄩ噺闂" value="quality" />
+ <el-option label="瑙勬牸涓嶇" value="specification" />
+ <el-option label="鏁伴噺閿欒" value="quantity" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="澶囨敞">
+ <el-input v-model="formData.remark" type="textarea" :rows="3" placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�" />
+ </el-form-item>
+ </el-form>
+ </FormDialog>
+ </div>
+</template>
+
+<script setup>
+import FormDialog from '@/components/Dialog/FormDialog.vue';
+import { ref, reactive,onMounted } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import Pagination from '@/components/PIMTable/Pagination.vue'
+import {listPage,add,update,del} from "@/api/procurementManagement/returnManagement.js"
+import {listPageCopy} from "@/api/procurementManagement/arrivalManagement.js"
+
+onMounted(() => {
+ getList()
+ list()
+})
+const onList = ref([])
+const list = () =>{
+ listPageCopy({current:-1}).then(res=>{
+ if(res.code === 200){
+ onList.value = res.data.records
+ }
+ })
+}
+const tableData = ref([])
+const getList = () => {
+ loading.value = true
+ listPage({...searchForm,...pagination}).then(res =>{
+ if(res.code === 200){
+ tableData.value = res.data.records
+ console.log(tableData.value)
+ total.value = res.data.total
+ loading.value = false
+ }
+ })
+}
+
+const loading = ref(false)
+const dialogVisible = ref(false)
+const dialogType = ref('add')
+const selectedRows = ref([])
+
+
+const pagination = reactive({
+ current: 1,
+ size: 10
+})
+
+const total = ref(0)
+
+const searchForm = reactive({
+ returnNo: '',
+ returnType: ''
+})
+
+const formData = reactive({
+ returnType: '',
+ relatedNo: '',
+ supplierName: '',
+ returnReason: '',
+ remark: '',
+ status: ''
+})
+
+const getReturnTypeText = (type) => {
+ const typeMap = { purchase: '閲囪喘閫�璐�', quality: '璐ㄦ閫�璐�' }
+ return typeMap[type] || '鏈煡'
+}
+
+const getStatusType = (status) => {
+ const statusMap = { pending: 'warning', approved: 'success', returned: 'info' }
+ return statusMap[status] || 'info'
+}
+
+const getStatusText = (status) => {
+ const statusMap = { pending: '寰呭鏍�', approved: '宸插鏍�', returned: '宸查��璐�' }
+ return statusMap[status] || '鏈煡'
+}
+
+const handleSearch = () => {
+ loading.value = true
+ getList()
+}
+
+const resetSearch = () => {
+ Object.assign(searchForm, { returnNo: '', returnType: '' })
+}
+
+const openDialog = (type, row = {}) => {
+ dialogType.value = type
+ obj.id = row.id
+ if (type === 'edit' && row.id) {
+ Object.assign(formData, {
+ returnType: row.returnType,
+ relatedNo: row.relatedNo,
+ supplierName: row.supplierName,
+ returnReason: row.returnReason,
+ remark: row.remark,
+ status: row.status
+ })
+ } else {
+ Object.assign(formData, {
+ returnType: '',
+ relatedNo: '',
+ supplierName: '',
+ returnReason: '',
+ remark: '',
+ status: 'pending'
+ })
+ }
+ dialogVisible.value = true
+}
+const obj = reactive({
+ id: ''
+})
+const handleSubmit = () => {
+ if (dialogType.value === 'add') {
+ formData.status = 'pending'
+ add(formData).then(res => {
+ if(res.code === 200){
+ ElMessage.success('鏂板鎴愬姛')
+ getList()
+ }
+ })
+ }else{
+ update({...formData,...obj}).then(res => {
+ if(res.code === 200){
+ ElMessage.success('淇敼鎴愬姛')
+ getList()
+ }
+ })
+ }
+ dialogVisible.value = false
+}
+
+const handleApprove = (row) => {
+ row.status = 'approved'
+ update(row).then(res => {
+ if(res.code === 200){
+ ElMessage.success('瀹℃牳鎴愬姛')
+ getList()
+ }
+ })
+}
+
+const handleDelete = (row) => {
+ ElMessageBox.confirm('纭畾瑕佸垹闄よ繖鏉¤褰曞悧锛�', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ let ids = [row.id]
+ del(ids).then(res => {
+ if(res.code === 200){
+ ElMessage.success('鍒犻櫎鎴愬姛')
+ getList()
+ }
+ })
+ })
+}
+
+const handleBatchDelete = () => {
+ let ids = selectedRows.value.map(item => item.id)
+ del(ids).then(res => {
+ if(res.code === 200){
+ ElMessage.success('鎵归噺鍒犻櫎鎴愬姛')
+ getList()
+ }
+ })
+}
+
+const handleSelectionChange = (rows) => {
+ selectedRows.value = rows
+}
+</script>
+
+<style scoped>
+.app-container { padding: 20px; }
+.search-card { margin-bottom: 20px; }
+.table-card { margin-bottom: 20px; }
+.table-header { margin-bottom: 20px; }
+</style>
--
Gitblit v1.9.3