gaoluyang
2025-09-17 72bb57e08bb5ac3b7fd724bed3995a518d889221
Merge remote-tracking branch 'origin/dev' into dev
已添加2个文件
已修改3个文件
379 ■■■■ 文件已修改
src/api/procurementManagement/arrivalManagement.js 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/procurementManagement/returnManagement.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/arrivalManagement/index.vue 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/returnManagement/index.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/paymentShipping/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/procurementManagement/arrivalManagement.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
// é”€å”®å°è´¦é¡µé¢æŽ¥å£
import request from "@/utils/request";
// åˆ†é¡µæŸ¥è¯¢
export function listPage(query) {
    return request({
        url: "/inboundManagement/listPage",
        method: "get",
        params: query,
    });
}
export function listPageCopy(query) {
    return request({
        url: "/inboundManagement/listPage",
        method: "get",
        params: query,
    });
}
// æ–°å¢ž
export function add(data) {
    return request({
        url: "/inboundManagement/add",
        method: "post",
        data
    });
}
// ä¿®æ”¹
export function update(data) {
    return request({
        url: "/inboundManagement/update",
        method: "post",
        data
    });
}
// åˆ é™¤é”€å”®å°è´¦
export function del(data) {
    return request({
        url: "/inboundManagement/del",
        method: "delete",
        data
    });
}
src/api/procurementManagement/returnManagement.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
// é”€å”®å°è´¦é¡µé¢æŽ¥å£
import request from "@/utils/request";
// åˆ†é¡µæŸ¥è¯¢
export function listPage(query) {
    return request({
        url: "/returnManagement/listPage",
        method: "get",
        params: query,
    });
}
// æ–°å¢ž
export function add(data) {
    return request({
        url: "/returnManagement/add",
        method: "post",
        data
    });
}
// ä¿®æ”¹
export function update(data) {
    return request({
        url: "/returnManagement/update",
        method: "post",
        data
    });
}
// åˆ é™¤é”€å”®å°è´¦
export function del(data) {
    return request({
        url: "/returnManagement/del",
        method: "delete",
        data
    });
}
src/views/procurementManagement/arrivalManagement/index.vue
@@ -18,7 +18,6 @@
    <el-card class="table-card" shadow="never">
      <div class="table-header">
        <el-button type="primary" @click="openDialog('add')">新增到货</el-button>
        <el-button type="success" @click="handleBatchReceive">批量收货</el-button>
        <el-button type="danger" @click="handleBatchDelete">批量删除</el-button>
      </div>
@@ -37,23 +36,34 @@
        <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="handleReceive(row)">收货</el-button>
            <el-button type="success" v-if="row.status === 'pending'" link @click="handleReceive(row)">收货</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>
    <el-dialog v-model="dialogVisible" :title="dialogType === 'add' ? '新增到货' : '编辑到货'" width="600px">
      <el-form :model="formData" label-width="120px">
        <el-form-item label="到货单号">
          <el-input v-model="formData.arrivalNo" placeholder="到货单号" />
        </el-form-item>
        <el-form-item label="采购订单号">
          <el-select v-model="formData.orderNo" placeholder="请选择采购订单" style="width: 100%">
            <el-option label="PO20241201001" value="PO20241201001" />
            <el-option label="PO20241201002" value="PO20241201002" />
          </el-select>
          <el-input v-model="formData.orderNo" placeholder="采购订单号" />
        </el-form-item>
        <el-form-item label="供应商名称">
          <el-input v-model="formData.supplierName" placeholder="供应商名称" />
        </el-form-item>
        <el-form-item label="到货数量">
          <el-input-number  :min="0" v-model="formData.arrivalQuantity" placeholder="到货数量" />
        </el-form-item>
        <el-form-item label="备注">
          <el-input v-model="formData.remark" type="textarea" :rows="3" placeholder="请输入备注信息" />
@@ -68,8 +78,40 @@
</template>
<script setup>
import { ref, reactive } from 'vue'
import { ref, reactive,onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import {listPage,add,update,del} from "@/api/procurementManagement/arrivalManagement.js"
import Pagination from '@/components/PIMTable/Pagination.vue'
onMounted(() => {
    getList()
})
const tableData = ref([])
const getList = () => {
  loading.value = true
  listPage({...searchForm,...pagination}).then(res =>{
    if(res.code === 200){
      tableData.value = res.data.records
      total.value = res.data.total
      loading.value = false
    }
  })
}
const pagination = reactive({
  current: 1,
  size: 10
})
const total = ref(0)
const handleCurrentChange = (val) => {
  pagination.current = val.page
  pagination.size = val.limit
  getList()
}
const loading = ref(false)
const dialogVisible = ref(false)
@@ -82,25 +124,13 @@
})
const formData = reactive({
  arrivalNo: '',
  arrivalQuantity: 0,
  orderNo: '',
  supplierName: '',
  remark: ''
  remark: '',
  status: 'pending'
})
const mockData = [
  {
    id: 1,
    arrivalNo: 'AR20241201001',
    orderNo: 'PO20241201001',
    supplierName: '供应商A',
    status: 'received',
    arrivalQuantity: 250,
    arrivalTime: '2025-12-01 15:30:00',
    remark: '正常到货'
  }
]
const tableData = ref([...mockData])
const getStatusType = (status) => {
  const statusMap = { pending: 'warning', received: 'success', stored: 'info' }
@@ -114,7 +144,7 @@
const handleSearch = () => {
  loading.value = true
  setTimeout(() => { loading.value = false }, 500)
  getList()
}
const resetSearch = () => {
@@ -124,34 +154,45 @@
const openDialog = (type, row = {}) => {
  dialogType.value = type
  if (type === 'edit' && row.id) {
    Object.assign(formData, { orderNo: row.orderNo, supplierName: row.supplierName, remark: row.remark })
    obj.id = row.id
    Object.assign(formData, { orderNo: row.orderNo, supplierName: row.supplierName, remark: row.remark, arrivalQuantity: row.arrivalQuantity,arrivalNo: row.arrivalNo })
  } else {
    Object.assign(formData, { orderNo: '', supplierName: '', remark: '' })
    Object.assign(formData, { orderNo: '', supplierName: '', remark: '',arrivalQuantity: 0,arrivalNo: '' })
  }
  dialogVisible.value = true
}
const obj = reactive({
  id:''
})
const handleSubmit = () => {
  if (dialogType.value === 'add') {
    const newArrival = {
      id: Date.now(),
      arrivalNo: `AR${Date.now()}`,
      orderNo: formData.orderNo,
      supplierName: formData.supplierName,
      status: 'pending',
      arrivalQuantity: 0,
      arrivalTime: new Date().toLocaleString(),
      remark: formData.remark
    }
    tableData.value.unshift(newArrival)
    ElMessage.success('新增成功')
    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 handleReceive = (row) => {
  row.status = 'received'
  ElMessage.success('收货成功')
  update(row).then(res => {
    if(res.code === 200){
      ElMessage.success('收货成功')
      getList()
    }
  })
}
const handleDelete = (row) => {
@@ -160,20 +201,30 @@
    cancelButtonText: '取消',
    type: 'warning'
  }).then(() => {
    const index = tableData.value.findIndex(item => item.id === row.id)
    if (index !== -1) {
      tableData.value.splice(index, 1)
      ElMessage.success('删除成功')
    }
    let ids = [row.id]
    del(ids).then(res => {
      if(res.code === 200){
        ElMessage.success('删除成功')
        getList()
      }
    })
  })
}
const handleBatchReceive = () => {
  ElMessage.success('批量收货成功')
}
const handleBatchDelete = () => {
  ElMessage.success('批量删除成功')
  ElMessageBox.confirm('确定要删除选中的记录吗?', '提示', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
    type: 'warning'
  }).then(() => {
    let ids = selectedRows.value.map(item => item.id)
    del(ids).then(res => {
      if(res.code === 200){
        ElMessage.success('删除成功')
        getList()
      }
    })
  })
}
const handleSelectionChange = (rows) => {
src/views/procurementManagement/returnManagement/index.vue
@@ -21,7 +21,6 @@
    <el-card class="table-card" shadow="never">
      <div class="table-header">
        <el-button type="primary" @click="openDialog('add')">新增退货单</el-button>
        <el-button type="success" @click="handleBatchApprove">批量审核</el-button>
        <el-button type="danger" @click="handleBatchDelete">批量删除</el-button>
      </div>
@@ -42,9 +41,6 @@
            <el-tag :type="getStatusType(row.status)">{{ getStatusText(row.status) }}</el-tag>
          </template>
        </el-table-column>
        <el-table-column label="退货金额" prop="returnAmount" width="120">
          <template #default="{ row }">Â¥{{ row.returnAmount.toFixed(2) }}</template>
        </el-table-column>
        <el-table-column label="创建时间" prop="createTime" width="180" />
        <el-table-column label="操作" width="200" align="center">
          <template #default="{ row }">
@@ -54,6 +50,14 @@
          </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>
    <el-dialog v-model="dialogVisible" :title="dialogType === 'add' ? '新增退货单' : '编辑退货单'" width="600px">
@@ -65,7 +69,9 @@
          </el-select>
        </el-form-item>
        <el-form-item label="关联单号">
          <el-input v-model="formData.relatedNo" placeholder="请输入关联单号" />
          <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="请输入供应商名称" />
@@ -90,13 +96,49 @@
</template>
<script setup>
import { ref, reactive } from '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: '',
@@ -108,25 +150,9 @@
  relatedNo: '',
  supplierName: '',
  returnReason: '',
  remark: ''
  remark: '',
  status: ''
})
const mockData = [
  {
    id: 1,
    returnNo: 'RT20241201001',
    relatedNo: 'PO20241201001',
    returnType: 'purchase',
    supplierName: '供应商A',
    status: 'approved',
    returnAmount: 500.00,
    createTime: '2025-12-01 17:30:00',
    returnReason: '质量问题',
    remark: '商品存在质量问题'
  }
]
const tableData = ref([...mockData])
const getReturnTypeText = (type) => {
  const typeMap = { purchase: '采购退货', quality: '质检退货' }
@@ -145,7 +171,7 @@
const handleSearch = () => {
  loading.value = true
  setTimeout(() => { loading.value = false }, 500)
  getList()
}
const resetSearch = () => {
@@ -154,13 +180,15 @@
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
      remark: row.remark,
      status: row.status
    })
  } else {
    Object.assign(formData, {
@@ -168,35 +196,43 @@
      relatedNo: '',
      supplierName: '',
      returnReason: '',
      remark: ''
      remark: '',
      status: 'pending'
    })
  }
  dialogVisible.value = true
}
const obj = reactive({
  id: ''
})
const handleSubmit = () => {
  if (dialogType.value === 'add') {
    const newReturn = {
      id: Date.now(),
      returnNo: `RT${Date.now()}`,
      relatedNo: formData.relatedNo,
      returnType: formData.returnType,
      supplierName: formData.supplierName,
      status: 'pending',
      returnAmount: 0,
      createTime: new Date().toLocaleString(),
      returnReason: formData.returnReason,
      remark: formData.remark
    formData.status = 'pending'
   add(formData).then(res => {
    if(res.code === 200){
      ElMessage.success('新增成功')
      getList()
    }
    tableData.value.unshift(newReturn)
    ElMessage.success('新增成功')
  })
  }else{
    update({...formData,...obj}).then(res => {
      if(res.code === 200){
        ElMessage.success('修改成功')
        getList()
      }
    })
  }
  dialogVisible.value = false
}
const handleApprove = (row) => {
  row.status = 'approved'
  ElMessage.success('审核通过')
  update(row).then(res => {
    if(res.code === 200){
      ElMessage.success('审核成功')
      getList()
    }
  })
}
const handleDelete = (row) => {
@@ -205,20 +241,24 @@
    cancelButtonText: '取消',
    type: 'warning'
  }).then(() => {
    const index = tableData.value.findIndex(item => item.id === row.id)
    if (index !== -1) {
      tableData.value.splice(index, 1)
      ElMessage.success('删除成功')
    }
    let ids = [row.id]
    del(ids).then(res => {
      if(res.code === 200){
        ElMessage.success('删除成功')
        getList()
      }
    })
  })
}
const handleBatchApprove = () => {
  ElMessage.success('批量审核成功')
}
const handleBatchDelete = () => {
  ElMessage.success('批量删除成功')
  let ids = selectedRows.value.map(item => item.id)
  del(ids).then(res => {
    if(res.code === 200){
      ElMessage.success('批量删除成功')
      getList()
    }
  })
}
const handleSelectionChange = (rows) => {
src/views/salesManagement/paymentShipping/index.vue
@@ -91,8 +91,8 @@
      <pagination
        :total="total"
        layout="total, sizes, prev, pager, next, jumper"
        :page="pagination.currentPage"
        :limit="pagination.pageSize"
        :page="pagination.current"
        :limit="pagination.size"
        @pagination="handleCurrentChange"
      />
    </el-card>
@@ -496,8 +496,8 @@
}
const handleCurrentChange = (val) => {
  pagination.currentPage = val.page
  pagination.pageSize = val.limit
  pagination.current = val.page
  pagination.size = val.limit
}
</script>