YouKeChuanMei_VUE/src/views/pitchPrice/index.vue

360 lines
18 KiB
Vue
Raw Normal View History

2025-08-18 20:00:18 +08:00
<template>
<div class="app-container">
<div class="searchPanel">
2025-08-28 21:14:00 +08:00
<el-form :inline="true" class="searchPanelForm">
2025-08-18 20:00:18 +08:00
<el-form-item label="供应商:">
2025-08-28 21:14:00 +08:00
<el-select class="filterSelect" v-model="queryParams.busSupplierId" filterable remote
reserve-keyword :remote-method="getSupplierList" :loading="selectLoading" placeholder="请输入"
remote-show-suffix clearable style="min-width: 70px;">
2025-08-18 20:00:18 +08:00
<el-option v-for="item in supplierList" :key="item.supplierId" :label="item.supplierName"
:value="item.supplierId" />
</el-select>
</el-form-item>
<el-form-item label="类型:">
2025-08-28 21:14:00 +08:00
<el-select v-model="queryParams.type" placeholder="请选择" style="min-width: 30px;"
@change="handleChangeType" clearable>
2025-08-18 20:00:18 +08:00
<el-option v-for="item in types" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-form>
</div>
<el-card class="mt20">
<el-row :gutter="10" class="my_row">
<el-col :span="24">
<el-button type="primary" class="primaryBtn" @click="handleQuery">查询</el-button>
<el-button type="primary" class="primaryBtn" @click="resetQuery">重置</el-button>
2025-08-28 21:14:00 +08:00
<el-button type="primary" class="primaryBtn" @click="handleAdd">新建</el-button>
2025-08-18 20:02:21 +08:00
<el-button type="primary" class="primaryBtn" @click="handleImport">导入</el-button>
2025-08-18 20:00:18 +08:00
</el-col>
</el-row>
2025-08-28 21:14:00 +08:00
<el-table v-if="queryParams.type == 1" v-loading="loading" :data="pitchPriceList"
2025-08-18 20:00:18 +08:00
height="calc(100vh - 308px)">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
2025-08-28 21:14:00 +08:00
<el-table-column label="供应商" align="left" prop="supplierName" width="180" />
<el-table-column label="城市" align="center" prop="city" width="130" />
<el-table-column label="场站" align="center" prop="station" width="100" />
<el-table-column label="媒体位置" align="center" prop="mediaPlacement" min-width="260" />
<el-table-column label="频次" align="center" prop="frequency" width="120" />
<el-table-column label="刊例价" align="center" prop="subscriptionPrice" width="120" />
<el-table-column label="单位" align="center" prop="unit" width="100" />
<el-table-column label="折扣" align="center" prop="discount" width="100" />
<el-table-column label="首次制作安装费(元/次)" align="center" prop="firstMakeFee" min-width="230" />
<el-table-column label="换画费(RMB)" align="center" prop="frameChangeFee" width="150" />
2025-08-18 20:00:18 +08:00
<el-table-column label="操作" width="130" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)"
v-hasPermi="['problemFeedback:edit']">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)"
v-hasPermi="['problemFeedback:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
2025-08-28 21:14:00 +08:00
<el-table v-if="queryParams.type == 2" v-loading="loading" :data="pitchPriceList"
2025-08-18 20:00:18 +08:00
height="calc(100vh - 308px)">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
2025-08-28 21:14:00 +08:00
<el-table-column label="供应商" align="left" prop="supplierName" width="180" />
<el-table-column label="城市" align="center" prop="city" width="130" />
<el-table-column label="资源描述" align="center" prop="resourceDesc" min-width="160" />
<el-table-column label="刊例价" align="center" prop="subscriptionPrice" width="130" />
<el-table-column label="单位" align="center" prop="unit" width="100" />
<el-table-column label="折扣" align="center" prop="discount" width="100" />
<el-table-column label="首次制作安装费(元/次)" align="center" prop="firstMakeFee" min-width="230" />
<el-table-column label="换画费(RMB)" align="center" prop="frameChangeFee" width="150" />
<el-table-column label="备注" align="center" prop="remark" min-width="230" />
2025-08-18 20:00:18 +08:00
<el-table-column label="操作" width="130" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)"
v-hasPermi="['problemFeedback:edit']">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)"
v-hasPermi="['problemFeedback:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
2025-08-28 21:14:00 +08:00
<el-table v-if="queryParams.type == 3" v-loading="loading" :data="pitchPriceList"
2025-08-18 20:00:18 +08:00
height="calc(100vh - 308px)">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
2025-08-28 21:14:00 +08:00
<el-table-column label="供应商" align="left" prop="supplierName" width="180" />
<el-table-column label="城市" align="center" prop="city" width="130" />
<el-table-column label="媒体名称" align="center" prop="mediaPlacement" min-width="260" />
<el-table-column label="频次" align="center" prop="frequency" width="120" />
<el-table-column label="刊例价" align="center" prop="subscriptionPrice" width="120" />
<el-table-column label="单位" align="center" prop="unit" width="100" />
<el-table-column label="折扣" align="center" prop="discount" width="100" />
<el-table-column label="首次制作安装费(元/次)" align="center" prop="firstMakeFee" min-width="230" />
<el-table-column label="换画费(RMB)" align="center" prop="frameChangeFee" width="150" />
2025-08-18 20:00:18 +08:00
<el-table-column label="操作" width="130" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)"
v-hasPermi="['problemFeedback:edit']">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)"
v-hasPermi="['problemFeedback:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination :total="total" v-model:page="queryParams.pageIndex" v-model:limit="queryParams.pageSize"
2025-08-28 21:14:00 +08:00
@pagination="getPitchPricePage" />
2025-08-18 20:00:18 +08:00
</el-card>
2025-08-28 21:14:00 +08:00
<!-- 添加或修改对话框 -->
<el-dialog :title="title" v-model="open" width="850px" class="my_dialog" align-center :destroy-on-close="true"
:close-on-click-modal="false">
<el-form ref="pitchPriceRef" :model="form" :rules="rules" label-width="140px" class="myInsertForm">
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="类型" prop="type">
<el-select v-model="form.type" placeholder="请选择类型" style="min-width: 30px;" clearable>
<el-option v-for="item in types" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="供应商" prop="busSupplierId">
<el-select class="filterSelect" v-model="form.busSupplierId" filterable remote
reserve-keyword :remote-method="getSupplierList" :loading="selectLoading"
placeholder="请输入" remote-show-suffix clearable>
<el-option v-for="item in supplierList" :key="item.supplierId"
:label="item.supplierName" :value="item.supplierId" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="城市" prop="city">
<el-input v-model="form.city" placeholder="请输入城市" clearable />
</el-form-item>
</el-col>
<el-col :span="24" v-if="form.type == 1">
<el-form-item label="场站" prop="station">
<el-input v-model="form.station" placeholder="请输入场站" clearable />
</el-form-item>
</el-col>
<el-col :span="24" v-if="form.type == 1 || form.type == 3">
<el-form-item label="媒体位置/名称" prop="mediaPlacement">
<el-input v-model="form.mediaPlacement" placeholder="请输入媒体位置/名称" clearable />
</el-form-item>
</el-col>
<el-col :span="24" v-if="form.type == 2">
<el-form-item label="资源描述" prop="resourceDesc">
<el-input v-model="form.resourceDesc" placeholder="请输入资源描述" clearable />
</el-form-item>
</el-col>
<el-col :span="24" v-if="form.type == 1 || form.type == 3">
<el-form-item label="频次" prop="frequency">
<el-input v-model="form.frequency" placeholder="请输入频次" clearable />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="单位" prop="unit">
<el-input v-model="form.unit" placeholder="请输入单位" clearable />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="刊例价" prop="subscriptionPrice">
<el-input v-model="form.subscriptionPrice" placeholder="请输入刊例价" clearable />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="折扣" prop="discount">
<el-input v-model="form.discount" placeholder="请输入折扣" clearable />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="首次制作安装费" prop="firstMakeFee">
<el-input v-model="form.firstMakeFee" placeholder="请输入首次制作安装费" clearable />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="换画费" prop="frameChangeFee">
<el-input v-model="form.frameChangeFee" placeholder="请输入换画费" clearable />
</el-form-item>
</el-col>
<el-col :span="24" v-if="form.type == 2">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" :rows="5" type="textarea" placeholder="请输入备注" clearable />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button class="my-cancel-btn" @click="cancel"> </el-button>
<el-button class="my-confirm-btn" type="primary" @click="submitForm"> </el-button>
</div>
</template>
</el-dialog>
2025-08-18 20:00:18 +08:00
</div>
</template>
<script setup name="Post">
import { onMounted, ref } from 'vue';
import { listBusSupplier } from "@/api/supplier"
2025-08-28 21:14:00 +08:00
import { busSupplierComparePricePage, addBusSupplierComparePrice, updateBusSupplierComparePrice, deleteBusSupplierComparePrice, getBusSupplierComparePrice } from "@/api/pitchPrice"
2025-08-18 20:00:18 +08:00
import { useBackgroundStore } from '@/store/modules/background'
import otherbg from '@/assets/images/otherbg.png'
const bgStore = useBackgroundStore()
const { proxy } = getCurrentInstance()
2025-08-28 21:14:00 +08:00
// 供应商数据
2025-08-18 20:00:18 +08:00
const supplierList = ref([])
2025-08-28 21:14:00 +08:00
// 1-高铁 2-候车亭 3-门禁道闸
2025-08-18 20:00:18 +08:00
const types = ref([
2025-08-28 21:14:00 +08:00
{ value: 1, label: '高铁' },
{ value: 2, label: '候车厅' },
{ value: 3, label: '门禁道闸' },
2025-08-18 20:00:18 +08:00
])
2025-08-28 21:14:00 +08:00
const title = ref('新建')
2025-08-18 20:00:18 +08:00
const open = ref(false)
const loading = ref(true)
2025-08-20 21:02:02 +08:00
const selectLoading = ref(false)
2025-08-18 20:00:18 +08:00
const total = ref(0)
2025-08-28 21:14:00 +08:00
const pitchPriceList = ref([])
2025-08-18 20:00:18 +08:00
const data = reactive({
form: {},
queryParams: {
pageIndex: 1,
pageSize: 10,
2025-08-28 21:14:00 +08:00
busSupplierId: undefined,
type: 1 //1-高铁 2-候车亭 3-门禁道闸
2025-08-18 20:00:18 +08:00
},
rules: {
2025-08-28 21:14:00 +08:00
type: [{ required: true, message: "类型不能为空", trigger: "change" }],
busSupplierId: [{ required: true, message: "供应商不能为空", trigger: "change" }],
city: [{ required: true, message: "城市不能为空", trigger: "blur" }],
station: [{ required: true, message: "场站不能为空", trigger: "blur" }],
mediaPlacement: [{ required: true, message: "媒体位置不能为空", trigger: "blur" }],
frequency: [{ required: true, message: "频次不能为空", trigger: "blur" }],
resourceDesc: [{ required: true, message: "资源描述不能为空", trigger: "blur" }],
subscriptionPrice: [{ required: true, message: "刊例价不能为空", trigger: "blur" }],
discount: [{ required: true, message: "折扣不能为空", trigger: "blur" }],
unit: [{ required: true, message: "单位不能为空", trigger: "blur" }],
firstMakeFee: [{ required: true, message: "首次制作安装费不能为空", trigger: "blur" }],
frameChangeFee: [{ required: true, message: "换画费不能为空", trigger: "blur" }]
2025-08-18 20:00:18 +08:00
}
})
const { queryParams, form, rules } = toRefs(data)
2025-08-28 21:14:00 +08:00
// 查询条件获取供应商
2025-08-20 21:02:02 +08:00
const getSupplierList = (queryText) => {
if (queryText) {
selectLoading.value = true
listBusSupplier({ keyword: queryText }).then(res => {
supplierList.value = res.data
selectLoading.value = false
})
} else {
selectLoading.value = false
supplierList.value = []
}
2025-08-18 20:00:18 +08:00
}
2025-08-28 21:14:00 +08:00
// 获取比稿价分页列表
const getPitchPricePage = () => {
loading.value = true
busSupplierComparePricePage(queryParams.value).then(res => {
pitchPriceList.value = res.data.list
total.value = res.data.total
loading.value = false
})
}
// 类型切换
const handleChangeType = (val) => {
queryParams.value.type = val
pitchPriceList.value = []
2025-08-18 20:00:18 +08:00
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageIndex = 1
2025-08-28 21:14:00 +08:00
getPitchPricePage()
2025-08-18 20:00:18 +08:00
}
/** 重置按钮操作 */
const resetQuery = () => {
2025-08-28 21:14:00 +08:00
queryParams.value.pageIndex = 1
2025-08-18 20:00:18 +08:00
handleQuery()
}
2025-08-28 21:14:00 +08:00
// 新建
const handleAdd = () => {
title.value = '新建'
form.value.type = 1
open.value = true
2025-08-18 20:02:21 +08:00
}
2025-08-28 21:14:00 +08:00
2025-08-18 20:00:18 +08:00
// 修改问题
const handleUpdate = (row) => {
2025-08-28 21:14:00 +08:00
getBusSupplierComparePrice(row.id).then(res => {
2025-08-18 20:00:18 +08:00
form.value = res.data
2025-08-28 21:14:00 +08:00
if (form.value.busSupplierId) {
listBusSupplier({}).then(res => {
supplierList.value = res.data
})
}
2025-08-18 20:00:18 +08:00
open.value = true
})
}
2025-08-28 21:14:00 +08:00
// 导入
const handleImport = () => {
}
2025-08-18 20:00:18 +08:00
const cancel = () => {
open.value = false
form.value = {}
}
2025-08-28 21:14:00 +08:00
2025-08-18 20:00:18 +08:00
const submitForm = () => {
2025-08-28 21:14:00 +08:00
proxy.$refs["pitchPriceRef"].validate(valid => {
2025-08-18 20:00:18 +08:00
if (valid) {
2025-08-28 21:14:00 +08:00
if (form.value.id != undefined) {
updateBusSupplierComparePrice(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功")
cancel()
getPitchPricePage()
})
} else {
addBusSupplierComparePrice(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功")
cancel()
getPitchPricePage()
})
}
2025-08-18 20:00:18 +08:00
}
})
}
/** 删除按钮操作 */
const handleDelete = (row) => {
2025-08-28 21:14:00 +08:00
proxy.$modal.confirm('是否确认删除该比稿价格吗?').then(function () {
return deleteBusSupplierComparePrice(row.id)
2025-08-18 20:00:18 +08:00
}).then(() => {
2025-08-28 21:14:00 +08:00
getPitchPricePage()
2025-08-18 20:00:18 +08:00
proxy.$modal.msgSuccess("删除成功")
}).catch(() => { })
}
// 初始化
onMounted(() => {
bgStore.setBgImage(otherbg)
2025-08-28 21:14:00 +08:00
getPitchPricePage()
2025-08-18 20:00:18 +08:00
});
</script>