提交代码

This commit is contained in:
wangchengming 2025-09-09 14:52:18 +08:00
parent 07307b7391
commit 02f3e48a1f
23 changed files with 3333 additions and 1171 deletions

View File

@ -208,7 +208,8 @@
<div class="loader-section section-right"></div>
<div class="load_title">正在加载系统资源,请耐心等待</div>
</div>
</div>
</div>
<script src="/config.js"></script>
<script type="module" src="/src/main.js"></script>
</body>

6
public/config.js Normal file
View File

@ -0,0 +1,6 @@
window._CONFIG = {
// 高德api配置
apiKey: 'f5b170e2332903225896a7290b90793a',
// 密钥
secretKey: 'a157b9d8963b598f40023f5469d3e73c'
}

102
src/api/mediaLibrary.js Normal file
View File

@ -0,0 +1,102 @@
import request from '@/utils/request'
// 获取媒体分页列表
export function mediaPageList(query) {
return request({
url: '/media/pageList',
method: 'get',
params: query
})
}
// 保存媒体信息
export function addMedia(query) {
return request({
url: '/media/save',
method: 'post',
data: query
})
}
// 编辑媒体信息
export function updateMedia(query) {
return request({
url: '/media/update',
method: 'post',
data: query
})
}
// 查看单条媒体信息
export function mediaDetail(query) {
return request({
url: '/media/detail',
method: 'get',
params: query
})
}
// 删除单条媒体信息
export function deleteMedia(query) {
return request({
url: '/media/deleteMedia',
method: 'get',
params: query
})
}
// 废除媒体信息
export function mediaCancel(query) {
return request({
url: '/media/cancel',
method: 'post',
data: query
})
}
// 媒体日志信息
export function mediaOptionLog(query) {
return request({
url: '/media/getOperateLog',
method: 'get',
params: query
})
}
// 获取导出Excel字段
export function mediaExcelField(query) {
return request({
url: '/media/excel/field',
method: 'get',
params: query
})
}
// 动态导出Excel
export function exportMediaExcel(query) {
return request({
url: '/media/export/dynamic/excel',
method: 'post',
data: query,
responseType: 'blob'
})
}
// 获取导出PPT字段
export function mediaPPTField(query) {
return request({
url: '/media/ppt/field',
method: 'get',
params: query
})
}
// 动态导出PPT
export function exportMediaPPT(query) {
return request({
url: '/media/export/dynamic/ppt',
method: 'post',
data: query,
responseType: 'blob'
})
}
// 获取媒体历史报价
export function mediaPrice(query) {
return request({
url: '/media/getPrice',
method: 'get',
params: query
})
}

View File

@ -71,7 +71,8 @@ const emit = defineEmits(['setFormFile'])
//
const fileList = ref([])
const cardfileList = ref([])
// 1- 2- 9-
// 1- 2- 9-
// -1,-2,-3,-4,-5,-6,-7,-8, -9, -10, -11,MR-12
const _fileType = ref('1')
const _accept = ref('*/*')
const baseUrl = import.meta.env.VITE_APP_BASE_API

View File

@ -1,4 +1,4 @@
import { createApp } from 'vue'
import { createApp } from 'vue'
import Cookies from 'js-cookie'

View File

@ -0,0 +1,278 @@
<!-- 门禁报价 -->
<template>
<el-button type="primary" class="submitBtn" v-show="showOptionColumn" style="margin-bottom: 10px;" @click="handleAddPrice">添加报价信息</el-button>
<el-table v-loading="loading" :data="quotationList" height="362px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="cityName" width="150" />
<el-table-column label="媒体名称" align="left" prop="mediaName" width="200" />
<el-table-column label="频次" align="left" prop="frequency" width="150" />
<el-table-column label="刊例价" align="left" prop="listPrice" width="180" />
<el-table-column label="刊例价单位" align="left" prop="listPriceUnit" width="150" />
<el-table-column label="实际购买频次" align="left" prop="actualBuyFrequency" width="150" />
<el-table-column label="实际购买刊例价" align="left" prop="actualBuyListPrice" width="150" />
<el-table-column label="投放数量" align="left" prop="putTotal" width="150" />
<el-table-column label="起购周期" align="left" prop="buyCycle" width="150" />
<el-table-column label="折扣" align="left" prop="discount" width="150" />
<el-table-column label="媒体总净价" align="center" prop="mediaRegularPrice" width="230" />
<el-table-column label="首次制作安装费" align="center" prop="firstInstallFee" width="230" />
<el-table-column label="总制作费" align="center" prop="totalMakeFee" width="160" />
<el-table-column label="单价" align="center" prop="unitPrice" width="160" />
<el-table-column label="发布总净价" align="center" prop="totalRegularPrice" width="130" />
<el-table-column label="发布总净价单位" align="center" prop="totalRegularPriceUnit" width="130" />
<el-table-column label="媒体费总价" align="center" prop="mediaFeeTotalPrice" width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="dailyAvgPeopleFlow" width="150" />
<el-table-column label="总曝光/人次" align="center" prop="totalExposure" width="130" />
<el-table-column label="SOV" align="center" prop="sov" width="150" />
<el-table-column label="CPM" align="center" prop="cpm" width="150" />
<el-table-column label="备注" align="center" prop="remark" width="150" />
<el-table-column label="AB面划分" align="center" prop="ab" width="150" />
<!-- <el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" /> -->
<el-table-column label="操作" width="56" align="center" fixed="right" v-show="showOptionColumn">
<template #default="scope">
<el-popover popper-class="my_popover" placement="left-start">
<div class="popBtns" @click="handleUpdate(scope.$index, scope.row)">修改</div>
<div class="popBtns" @click="handleDelete(scope.$index)">删除</div>
<template #reference>
<img style="cursor: pointer;" :src="scope.row.currentImageSrc"
@mouseenter="scope.row.currentImageSrc = hoverImageSrc"
@mouseleave="scope.row.currentImageSrc = defaultImageSrc" />
</template>
</el-popover>
</template>
</el-table-column>
</el-table>
<!-- 报价表单 -->
<el-dialog :title="_title" v-model="open" width="1350px" class="my_dialog" align-center :destroy-on-close="true"
:close-on-click-modal="false">
<el-form ref="ruleFormRef" :model="form" :rules="rules" label-width="150px" label-position="top"
class="myInsertForm">
<el-row :gutter="30" class="my_form_row">
<el-col :span="6">
<el-form-item label="城市" prop="cityName">
<el-input v-model="form.cityName" placeholder="请输入城市" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体名称" prop="mediaName">
<el-input v-model="form.mediaName" placeholder="请输入媒体名称" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="频次" prop="frequency">
<el-input v-model="form.frequency" placeholder="请输入频次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价" prop="listPrice">
<el-input v-model="form.listPrice" placeholder="请输入刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价单位" prop="listPriceUnit">
<el-input v-model="form.listPriceUnit" placeholder="请输入刊例价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际购买频次" prop="actualBuyFrequency">
<el-input v-model="form.actualBuyFrequency" placeholder="请输入实际购买频次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际购买刊例价" prop="actualBuyListPrice">
<el-input v-model="form.actualBuyListPrice" placeholder="请输入实际购买刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="投放数量" prop="putTotal">
<el-input-number v-model="form.putTotal" placeholder="请输入投放数量" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="起购周期" prop="buyCycle">
<el-input-number v-model="form.buyCycle" placeholder="请输入起购周期" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="折扣" prop="discount">
<el-input v-model="form.discount" placeholder="请输入折扣" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体总净价" prop="mediaRegularPrice">
<el-input v-model="form.mediaRegularPrice" placeholder="请输入媒体总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="首次制作安装费" prop="firstInstallFee">
<el-input v-model="form.firstInstallFee" placeholder="请输入首次制作安装费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总制作费" prop="totalMakeFee">
<el-input v-model="form.totalMakeFee" placeholder="请输入总制作费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单价" prop="unitPrice">
<el-input v-model="form.unitPrice" placeholder="请输入单价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发布总净价" prop="totalRegularPrice">
<el-input v-model="form.totalRegularPrice" placeholder="请输入发布总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发布总净价单位" prop="totalRegularPriceUnit">
<el-input v-model="form.totalRegularPriceUnit" placeholder="请输入发布总净价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体费总价" prop="mediaFeeTotalPrice">
<el-input v-model="form.mediaFeeTotalPrice" placeholder="请输入媒体费总价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单日覆盖人流量" prop="dailyAvgPeopleFlow">
<el-input v-model="form.dailyAvgPeopleFlow" placeholder="请输入单日覆盖人流量" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总曝光/人次" prop="totalExposure">
<el-input v-model="form.totalExposure" placeholder="请输入总曝光/人次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="SOV" prop="sov">
<el-input v-model="form.sov" placeholder="请输入SOV" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="CPM" prop="cpm">
<el-input v-model="form.cpm" placeholder="请输入CPM" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="AB面划分" prop="ab">
<el-input v-model="form.ab" placeholder="请输入AB面划分" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" :rows="5" type="textarea" placeholder="请输入备注"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button class="my-cancel-btn" @click="open = false"> </el-button>
<el-button class="my-confirm-btn" type="primary" @click="handleSubmit"> </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { onMounted, nextTick, defineEmits, ref } from 'vue'
import optionIcon from '@/assets/images/optionIcon.png'
import optionIconHover from '@/assets/images/optionIconHover.png'
import { mediaPrice } from "@/api/mediaLibrary"
const emit = defineEmits(['setCompetOfferMediaPrice']);
const { proxy } = getCurrentInstance()
const editRowIndex = ref(null)
const showOptionColumn = ref(true)
//
const defaultImageSrc = ref(optionIcon);
const hoverImageSrc = ref(optionIconHover);
const _title = ref(null)
const open = ref(false)
const data = reactive({
form: {},
rules: {
cityName: [{ required: true, message: "请输入城市", trigger: "blur" }],
mediaName: [{ required: true, message: "请输入媒体名称", trigger: "blur" }],
frequency: [{ required: true, message: "请输入频次", trigger: "blur" }],
listPrice: [{ required: true, message: "请输入刊例价", trigger: "blur" }],
listPriceUnit: [{ required: true, message: "请输入刊例价单位", trigger: "blur" }],
actualBuyFrequency: [{ required: true, message: "请输入实际购买频次", trigger: "blur" }],
actualBuyListPrice: [{ required: true, message: "请输入实际购买刊例价", trigger: "blur" }],
putTotal: [{ required: true, message: "请输入投放数量", trigger: "change" }],
buyCycle: [{ required: true, message: "请输入起购周期", trigger: "change" }],
discount: [{ required: true, message: "请输入折扣", trigger: "blur" }],
mediaRegularPrice: [{ required: true, message: "请输入媒体总净价", trigger: "blur" }],
firstInstallFee: [{ required: true, message: "请输入首次制作安装费", trigger: "blur" }],
totalMakeFee: [{ required: true, message: "请输入总制作费", trigger: "blur" }],
unitPrice: [{ required: true, message: "请输入单价", trigger: "blur" }],
totalRegularPrice: [{ required: true, message: "请输入发布总净价", trigger: "blur" }],
totalRegularPriceUnit: [{ required: true, message: "请输入发布总净价单位", trigger: "blur" }],
mediaFeeTotalPrice: [{ required: true, message: "请输入媒体费总价", trigger: "blur" }],
dailyAvgPeopleFlow: [{ required: true, message: "请输入单日覆盖人流量", trigger: "blur" }],
totalExposure: [{ required: true, message: "请输入总曝光/人次", trigger: "blur" }],
sov: [{ required: true, message: "请输入SOV", trigger: "blur" }],
cpm: [{ required: true, message: "请输入CPM", trigger: "blur" }],
ab: [{ required: true, message: "请输入AB面划分", trigger: "blur" }],
remark: [{ required: true, message: "请输入备注", trigger: "blur" }]
}
})
const { form, rules } = toRefs(data)
//
const loading = ref(false)
const quotationList = ref([])
const handleAddPrice = () => {
_title.value = '添加报价信息'
form.value.mediaType = 1
open.value = true
}
const handleUpdate = (index, row) => {
_title.value = '编辑报价信息'
editRowIndex.value = index
form.value = row
open.value = true
}
const handleDelete = (index) => {
proxy.$modal.confirm('是否确认删除这条报价信息吗?').then(() => {
quotationList.value.splice(index, 1)
emit('setCompetOfferMediaPrice', 1, quotationList.value)
proxy.$modal.msgSuccess("删除成功")
}).catch(() => { })
}
const handleSubmit = () => {
proxy.$refs["ruleFormRef"].validate(valid => {
if (valid) {
form.value.currentImageSrc = defaultImageSrc.value
if (editRowIndex.value !== null && editRowIndex.value !== undefined) {
quotationList.value[editRowIndex.value] = form.value
} else {
quotationList.value.push(form.value)
}
form.value = {}
open.value = false
emit('setCompetOfferMediaPrice', 1, quotationList.value)
}
})
}
//
const getMediaPrice = (_mediaId, _showOptionColumn) => {
showOptionColumn.value = _showOptionColumn
if (_mediaId) {
mediaPrice({ mediaId: _mediaId }).then(res => {
console.log('历史报价', res)
quotationList.value = res.data.filter(item => item.fileType == 1)
})
}
}
// \
defineExpose({
getMediaPrice
});
</script>

View File

@ -0,0 +1,257 @@
<!-- 道闸报价 -->
<template>
<el-button type="primary" class="submitBtn" v-show="showOptionColumn" style="margin-bottom: 10px;" @click="handleAddPrice">添加报价信息</el-button>
<el-table v-loading="loading" :data="quotationList" height="362px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="cityName" width="150" />
<el-table-column label="媒体名称" align="left" prop="mediaName" width="200" />
<el-table-column label="频次" align="left" prop="frequency" width="150" />
<el-table-column label="发布总量" align="left" prop="releaseTotal" width="150" />
<el-table-column label="刊例价" align="left" prop="listPrice" width="180" />
<el-table-column label="刊例价单位" align="left" prop="listPriceUnit" width="150" />
<el-table-column label="最短购买周期" align="left" prop="buyCycle" width="150" />
<el-table-column label="折扣" align="left" prop="discount" width="150" />
<el-table-column label="媒体总净价" align="center" prop="mediaRegularPrice" width="230" />
<el-table-column label="首次制作安装费" align="center" prop="firstInstallFee" width="230" />
<el-table-column label="总制作费" align="center" prop="totalMakeFee" width="160" />
<el-table-column label="总净价" align="center" prop="totalRegularPrice" width="130" />
<el-table-column label="总净价单位" align="center" prop="totalRegularPriceUnit" width="130" />
<el-table-column label="4周/面" align="center" prop="allAroundFace" width="130" />
<el-table-column label="媒体费总价" align="center" prop="mediaFeeTotalPrice" width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="dailyAvgPeopleFlow" width="150" />
<el-table-column label="总曝光/人次" align="center" prop="totalExposure" width="130" />
<el-table-column label="SOV" align="center" prop="sov" width="150" />
<el-table-column label="CPM" align="center" prop="cpm" width="150" />
<el-table-column label="备注" align="center" prop="remark" width="150" />
<!-- <el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" /> -->
<el-table-column label="操作" width="56" align="center" fixed="right" v-show="showOptionColumn">
<template #default="scope">
<el-popover popper-class="my_popover" placement="left-start">
<div class="popBtns" @click="handleUpdate(scope.$index, scope.row)">修改</div>
<div class="popBtns" @click="handleDelete(scope.$index)">删除</div>
<template #reference>
<img style="cursor: pointer;" :src="scope.row.currentImageSrc"
@mouseenter="scope.row.currentImageSrc = hoverImageSrc"
@mouseleave="scope.row.currentImageSrc = defaultImageSrc" />
</template>
</el-popover>
</template>
</el-table-column>
</el-table>
<!-- 报价表单 -->
<el-dialog :title="_title" v-model="open" width="1350px" class="my_dialog" align-center :destroy-on-close="true"
:close-on-click-modal="false">
<el-form ref="ruleFormRef" :model="form" :rules="rules" label-width="150px" label-position="top"
class="myInsertForm">
<el-row :gutter="30" class="my_form_row">
<el-col :span="6">
<el-form-item label="城市" prop="cityName">
<el-input v-model="form.cityName" placeholder="请输入城市" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体名称" prop="mediaName">
<el-input v-model="form.mediaName" placeholder="请输入媒体名称" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="频次" prop="frequency">
<el-input v-model="form.frequency" placeholder="请输入频次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发布总量" prop="releaseTotal">
<el-input v-model="form.releaseTotal" placeholder="请输入发布总量" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价" prop="listPrice">
<el-input v-model="form.listPrice" placeholder="请输入刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价单位" prop="listPriceUnit">
<el-input v-model="form.listPriceUnit" placeholder="请输入刊例价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="最短购买周期" prop="buyCycle">
<el-input-number v-model="form.buyCycle" placeholder="请输入最短购买周期" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="折扣" prop="discount">
<el-input v-model="form.discount" placeholder="请输入折扣" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体总净价" prop="mediaRegularPrice">
<el-input v-model="form.mediaRegularPrice" placeholder="请输入媒体总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="首次制作安装费" prop="firstInstallFee">
<el-input v-model="form.firstInstallFee" placeholder="请输入首次制作安装费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总制作费" prop="totalMakeFee">
<el-input v-model="form.totalMakeFee" placeholder="请输入总制作费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总净价" prop="totalRegularPrice">
<el-input v-model="form.totalRegularPrice" placeholder="请输入总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总净价单位" prop="totalRegularPriceUnit">
<el-input v-model="form.totalRegularPriceUnit" placeholder="请输入总净价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="4周/面" prop="allAroundFace">
<el-input v-model="form.allAroundFace" placeholder="请输入4周/面" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体费总价" prop="mediaFeeTotalPrice">
<el-input v-model="form.mediaFeeTotalPrice" placeholder="请输入媒体费总价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单日覆盖人流量" prop="dailyAvgPeopleFlow">
<el-input v-model="form.dailyAvgPeopleFlow" placeholder="请输入单日覆盖人流量" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总曝光/人次" prop="totalExposure">
<el-input v-model="form.totalExposure" placeholder="请输入总曝光/人次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="SOV" prop="sov">
<el-input v-model="form.sov" placeholder="请输入SOV" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="CPM" prop="cpm">
<el-input v-model="form.cpm" placeholder="请输入CPM" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" :rows="5" type="textarea" placeholder="请输入备注"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button class="my-cancel-btn" @click="open = false"> </el-button>
<el-button class="my-confirm-btn" type="primary" @click="handleSubmit"> </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { onMounted, nextTick, defineEmits, ref } from 'vue'
import optionIcon from '@/assets/images/optionIcon.png'
import optionIconHover from '@/assets/images/optionIconHover.png'
import { mediaPrice } from "@/api/mediaLibrary"
const emit = defineEmits(['setCompetOfferMediaPrice']);
const { proxy } = getCurrentInstance()
const editRowIndex = ref(null)
const showOptionColumn = ref(true)
//
const defaultImageSrc = ref(optionIcon);
const hoverImageSrc = ref(optionIconHover);
const _title = ref(null)
const open = ref(false)
const data = reactive({
form: {},
rules: {
cityName: [{ required: true, message: "请输入城市", trigger: "blur" }],
mediaName: [{ required: true, message: "请输入媒体名称", trigger: "blur" }],
frequency: [{ required: true, message: "请输入频次", trigger: "blur" }],
releaseTotal: [{ required: true, message: "请输入发布总量", trigger: "blur" }],
listPrice: [{ required: true, message: "请输入刊例价", trigger: "blur" }],
listPriceUnit: [{ required: true, message: "请输入刊例价单位", trigger: "blur" }],
buyCycle: [{ required: true, message: "请输入最短购买周期", trigger: "change" }],
discount: [{ required: true, message: "请输入折扣", trigger: "blur" }],
mediaRegularPrice: [{ required: true, message: "请输入媒体总净价", trigger: "blur" }],
firstInstallFee: [{ required: true, message: "请输入首次制作安装费", trigger: "blur" }],
totalMakeFee: [{ required: true, message: "请输入总制作费", trigger: "blur" }],
unitPrice: [{ required: true, message: "请输入单价", trigger: "blur" }],
totalRegularPrice: [{ required: true, message: "请输入总净价", trigger: "blur" }],
totalRegularPriceUnit: [{ required: true, message: "请输入总净价单位", trigger: "blur" }],
allAroundFace: [{ required: true, message: "请输入4周/面", trigger: "blur" }],
mediaFeeTotalPrice: [{ required: true, message: "请输入媒体费总价", trigger: "blur" }],
dailyAvgPeopleFlow: [{ required: true, message: "请输入单日覆盖人流量", trigger: "blur" }],
totalExposure: [{ required: true, message: "请输入总曝光/人次", trigger: "blur" }],
sov: [{ required: true, message: "请输入SOV", trigger: "blur" }],
cpm: [{ required: true, message: "请输入CPM", trigger: "blur" }],
remark: [{ required: true, message: "请输入备注", trigger: "blur" }]
}
})
const { form, rules } = toRefs(data)
//
const loading = ref(false)
const quotationList = ref([])
const handleAddPrice = () => {
_title.value = '添加报价信息'
form.value.mediaType = 3
open.value = true
}
const handleUpdate = (index, row) => {
_title.value = '编辑报价信息'
editRowIndex.value = index
form.value = row
open.value = true
}
const handleDelete = (index) => {
proxy.$modal.confirm('是否确认删除这条报价信息吗?').then(() => {
quotationList.value.splice(index, 1)
emit('setCompetOfferMediaPrice', 3, quotationList.value)
proxy.$modal.msgSuccess("删除成功")
}).catch(() => { })
}
const handleSubmit = () => {
proxy.$refs["ruleFormRef"].validate(valid => {
if (valid) {
form.value.currentImageSrc = defaultImageSrc.value
if (editRowIndex.value !== null && editRowIndex.value !== undefined) {
quotationList.value[editRowIndex.value] = form.value
} else {
quotationList.value.push(form.value)
}
form.value = {}
open.value = false
emit('setCompetOfferMediaPrice', 3, quotationList.value)
}
})
}
//
const getMediaPrice = (_mediaId, _showOptionColumn) => {
showOptionColumn.value = _showOptionColumn
if (_mediaId) {
mediaPrice({ mediaId: _mediaId }).then(res => {
console.log('历史报价', res)
quotationList.value = res.data.filter(item => item.fileType == 3)
})
}
}
// \
defineExpose({
getMediaPrice
});
</script>

View File

@ -0,0 +1,291 @@
<!-- 优势媒体报价 -->
<template>
<el-button type="primary" class="submitBtn" v-show="showOptionColumn" style="margin-bottom: 10px;" @click="handleAddPrice">添加报价信息</el-button>
<el-table v-loading="loading" :data="quotationList" height="362px">
<el-table-column label="序号" align="center" width="60">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="年度" align="left" prop="mediaYear" width="100" />
<el-table-column label="城市/市场" align="left" prop="cityName" width="150" />
<el-table-column label="媒体大类" align="left" prop="mediaCategory" width="150" />
<el-table-column label="媒体形式/名称" align="left" prop="mediaName" width="200" />
<el-table-column label="频次" align="left" prop="frequency" width="150" />
<el-table-column label="统一对外刊例价" align="left" prop="listPrice" width="160" />
<el-table-column label="单位" align="left" prop="listPriceUnit" width="150" />
<el-table-column label="实际购买频次" align="left" prop="actualBuyFrequency" width="150" />
<el-table-column label="实际购买刊例价" align="left" prop="actualBuyListPrice" width="150" />
<el-table-column label="购买周期" align="left" prop="buyCycle" width="150" />
<el-table-column label="折扣" align="left" prop="discount" width="150" />
<el-table-column label="媒体总净价" align="center" prop="mediaRegularPrice" width="230" />
<el-table-column label="总制作费" align="center" prop="totalMakeFee" width="160" />
<el-table-column label="总净价" align="center" prop="totalRegularPrice" width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="dailyAvgPeopleFlow" width="150" />
<el-table-column label="SOV" align="center" prop="sov" width="150" />
<el-table-column label="CPM" align="center" prop="cpm" width="150" />
<el-table-column label="备注" align="center" prop="remark" width="150" />
<el-table-column label="是否框内" align="center" prop="hasInBox" width="150">
<template #default="scope">
<span v-if="scope.row.hasInBox == 0"></span>
<span v-if="scope.row.hasInBox == 1"></span>
</template>
</el-table-column>
<el-table-column label="成本" align="center" prop="cost" width="150" />
<el-table-column label="制作成本" align="center" prop="makeCost" width="150" />
<el-table-column label="供应商" align="center" prop="supplier" width="150" />
<el-table-column label="项目名称" align="left" prop="projectName" width="150" />
<!-- <el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" /> -->
<el-table-column label="操作" width="56" align="center" fixed="right" v-show="showOptionColumn">
<template #default="scope">
<el-popover popper-class="my_popover" placement="left-start">
<div class="popBtns" @click="handleUpdate(scope.$index, scope.row)">修改</div>
<div class="popBtns" @click="handleDelete(scope.$index)">删除</div>
<template #reference>
<img style="cursor: pointer;" :src="scope.row.currentImageSrc"
@mouseenter="scope.row.currentImageSrc = hoverImageSrc"
@mouseleave="scope.row.currentImageSrc = defaultImageSrc" />
</template>
</el-popover>
</template>
</el-table-column>
</el-table>
<!-- 报价表单 -->
<el-dialog :title="_title" v-model="open" width="1350px" class="my_dialog" align-center :destroy-on-close="true"
:close-on-click-modal="false">
<el-form ref="ruleFormRef" :model="form" :rules="rules" label-width="150px" label-position="top"
class="myInsertForm">
<el-row :gutter="30" class="my_form_row">
<el-col :span="6">
<el-form-item label="年度" prop="mediaYear">
<el-date-picker v-model="form.mediaYear" type="year" format="YYYY" value-format="YYYY"
placeholder="请选择年度" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="城市/市场" prop="cityName">
<el-input v-model="form.cityName" placeholder="请输入城市/市场" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体大类" prop="mediaCategory">
<el-input v-model="form.mediaCategory" placeholder="请输入媒体大类" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体形式/名称" prop="mediaName">
<el-input v-model="form.mediaName" placeholder="请输入媒体形式/名称" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="频次" prop="frequency">
<el-input v-model="form.frequency" placeholder="请输入频次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="统一对外刊例价" prop="listPrice">
<el-input v-model="form.listPrice" placeholder="请输入统一对外刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单位" prop="listPriceUnit">
<el-input v-model="form.listPriceUnit" placeholder="请输入单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际购买频次" prop="actualBuyFrequency">
<el-input v-model="form.actualBuyFrequency" placeholder="请输入实际购买频次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际购买刊例价" prop="actualBuyListPrice">
<el-input v-model="form.actualBuyListPrice" placeholder="请输入实际购买刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="购买周期(天)" prop="buyCycle">
<el-input-number v-model="form.buyCycle" placeholder="请输入购买周期(天)" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="折扣" prop="discount">
<el-input v-model="form.discount" placeholder="请输入折扣" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体总净价(元/购买周期)" prop="mediaRegularPrice">
<el-input v-model="form.mediaRegularPrice" placeholder="请输入媒体总净价(元/购买周期)" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总制作费(元/次)" prop="totalMakeFee">
<el-input v-model="form.totalMakeFee" placeholder="请输入总制作费(元/次)" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总净价" prop="totalRegularPrice">
<el-input v-model="form.totalRegularPrice" placeholder="请输入总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单日覆盖人流量" prop="dailyAvgPeopleFlow">
<el-input v-model="form.dailyAvgPeopleFlow" placeholder="请输入单日覆盖人流量" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="SOV" prop="sov">
<el-input v-model="form.sov" placeholder="请输入SOV" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="CPM" prop="cpm">
<el-input v-model="form.cpm" placeholder="请输入CPM" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否框内" prop="hasInBox">
<el-select v-model="form.hasInBox" placeholder="请选择是否框内" clearable>
<el-option v-for="item in hasInBoxList" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="成本" prop="cost">
<el-input v-model="form.cost" placeholder="请输入成本" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="制作成本" prop="makeCost">
<el-input v-model="form.makeCost" placeholder="请输入制作成本" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商" prop="supplier">
<el-input v-model="form.supplier" placeholder="请输入供应商" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目名称" prop="projectName">
<el-input v-model="form.projectName" placeholder="请输入项目名称" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" :rows="5" type="textarea" placeholder="请输入备注"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button class="my-cancel-btn" @click="open = false"> </el-button>
<el-button class="my-confirm-btn" type="primary" @click="handleSubmit"> </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { onMounted, nextTick, defineEmits, ref } from 'vue'
import optionIcon from '@/assets/images/optionIcon.png'
import optionIconHover from '@/assets/images/optionIconHover.png'
import { mediaPrice } from "@/api/mediaLibrary"
const emit = defineEmits(['setCompetOfferMediaPrice']);
const { proxy } = getCurrentInstance()
const editRowIndex = ref(null)
const showOptionColumn = ref(true)
//
const defaultImageSrc = ref(optionIcon);
const hoverImageSrc = ref(optionIconHover);
const _title = ref(null)
const open = ref(false)
const hasInBoxList = ref([
{ value: 0, label: '否' },
{ value: 1, label: '是' },
])
const data = reactive({
form: {},
rules: {
mediaYear: [{ required: true, message: "请输入年度", trigger: "change" }],
cityName: [{ required: true, message: "请输入城市/市场", trigger: "blur" }],
mediaCategory: [{ required: true, message: "请输入媒体大类", trigger: "blur" }],
mediaName: [{ required: true, message: "请输入媒体形式/名称", trigger: "blur" }],
frequency: [{ required: true, message: "请输入频次", trigger: "blur" }],
listPrice: [{ required: true, message: "请输入统一对外刊例价", trigger: "blur" }],
listPriceUnit: [{ required: true, message: "请输入单位", trigger: "blur" }],
actualBuyFrequency: [{ required: true, message: "请输入实际购买频次", trigger: "blur" }],
actualBuyListPrice: [{ required: true, message: "请输入实际购买刊例价", trigger: "blur" }],
buyCycle: [{ required: true, message: "请输入购买周期(天)", trigger: "change" }],
discount: [{ required: true, message: "请输入折扣", trigger: "blur" }],
mediaRegularPrice: [{ required: true, message: "请输入媒体总净价(元/购买周期)", trigger: "blur" }],
totalMakeFee: [{ required: true, message: "请输入总制作费(元/次)", trigger: "blur" }],
totalRegularPrice: [{ required: true, message: "请输入总净价", trigger: "blur" }],
dailyAvgPeopleFlow: [{ required: true, message: "请输入单日覆盖人流量", trigger: "blur" }],
sov: [{ required: true, message: "请输入SOV", trigger: "blur" }],
cpm: [{ required: true, message: "请输入CPM", trigger: "blur" }],
hasInBox: [{ required: true, message: "请输入是否框内", trigger: "change" }],
cost: [{ required: true, message: "请输入成本", trigger: "blur" }],
makeCost: [{ required: true, message: "请输入制作成本", trigger: "blur" }],
supplier: [{ required: true, message: "请输入供应商", trigger: "blur" }],
projectName: [{ required: true, message: "请输入项目名称", trigger: "blur" }],
remark: [{ required: true, message: "请输入备注", trigger: "blur" }]
}
})
const { form, rules } = toRefs(data)
//
const loading = ref(false)
const quotationList = ref([])
const handleAddPrice = () => {
_title.value = '添加报价信息'
form.value.mediaType = 0
open.value = true
}
const handleUpdate = (index, row) => {
_title.value = '编辑报价信息'
editRowIndex.value = index
form.value = row
open.value = true
}
const handleDelete = (index) => {
proxy.$modal.confirm('是否确认删除这条报价信息吗?').then(() => {
quotationList.value.splice(index, 1)
emit('setCompetOfferMediaPrice', 0, quotationList.value)
proxy.$modal.msgSuccess("删除成功")
}).catch(() => { })
}
const handleSubmit = () => {
proxy.$refs["ruleFormRef"].validate(valid => {
if (valid) {
form.value.currentImageSrc = defaultImageSrc.value
if (editRowIndex.value !== null && editRowIndex.value !== undefined) {
quotationList.value[editRowIndex.value] = form.value
} else {
quotationList.value.push(form.value)
}
form.value = {}
open.value = false
emit('setCompetOfferMediaPrice', 0, quotationList.value)
}
})
}
//
const getMediaPrice = (_mediaId, _showOptionColumn) => {
showOptionColumn.value = _showOptionColumn
if (_mediaId) {
mediaPrice({ mediaId: _mediaId }).then(res => {
console.log('历史报价', res)
quotationList.value = res.data.filter(item => item.fileType == 0)
})
}
}
// \
defineExpose({
getMediaPrice
});
</script>

View File

@ -0,0 +1,270 @@
<!-- 车库灯箱 -->
<template>
<el-button type="primary" class="submitBtn" v-show="showOptionColumn" style="margin-bottom: 10px;" @click="handleAddPrice">添加报价信息</el-button>
<el-table v-loading="loading" :data="quotationList" height="362px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="cityName" width="150" />
<el-table-column label="媒体名称" align="left" prop="mediaName" width="200" />
<el-table-column label="频次" align="left" prop="frequency" width="150" />
<el-table-column label="发布总量" align="left" prop="releaseTotal" width="150" />
<el-table-column label="刊例价" align="left" prop="listPrice" width="180" />
<el-table-column label="刊例价单位" align="left" prop="listPriceUnit" width="150" />
<el-table-column label="实际购买刊例价" align="left" prop="actualBuyListPrice" width="150" />
<el-table-column label="实际购买刊例价单位" align="left" prop="actualBuyListPriceUnit" width="150" />
<el-table-column label="购买周期" align="left" prop="buyCycle" width="150" />
<el-table-column label="折扣" align="left" prop="discount" width="150" />
<el-table-column label="媒体总净价" align="center" prop="mediaRegularPrice" width="230" />
<el-table-column label="首次制作安装费" align="center" prop="firstInstallFee" width="230" />
<el-table-column label="总制作费" align="center" prop="totalMakeFee" width="160" />
<el-table-column label="总净价" align="center" prop="totalRegularPrice" width="130" />
<el-table-column label="总净价单位" align="center" prop="totalRegularPriceUnit" width="130" />
<el-table-column label="媒体费总价" align="center" prop="mediaFeeTotalPrice" width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="dailyAvgPeopleFlow" width="150" />
<el-table-column label="总曝光/人次" align="center" prop="totalExposure" width="130" />
<el-table-column label="SOV" align="center" prop="sov" width="150" />
<el-table-column label="CPM" align="center" prop="cpm" width="150" />
<el-table-column label="成本折扣" align="center" prop="costDiscount" width="150" />
<el-table-column label="备注" align="center" prop="remark" width="150" />
<!-- <el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" /> -->
<el-table-column label="操作" width="56" align="center" fixed="right" v-show="showOptionColumn">
<template #default="scope">
<el-popover popper-class="my_popover" placement="left-start">
<div class="popBtns" @click="handleUpdate(scope.$index, scope.row)">修改</div>
<div class="popBtns" @click="handleDelete(scope.$index)">删除</div>
<template #reference>
<img style="cursor: pointer;" :src="scope.row.currentImageSrc"
@mouseenter="scope.row.currentImageSrc = hoverImageSrc"
@mouseleave="scope.row.currentImageSrc = defaultImageSrc" />
</template>
</el-popover>
</template>
</el-table-column>
</el-table>
<!-- 报价表单 -->
<el-dialog :title="_title" v-model="open" width="1350px" class="my_dialog" align-center :destroy-on-close="true"
:close-on-click-modal="false">
<el-form ref="ruleFormRef" :model="form" :rules="rules" label-width="150px" label-position="top"
class="myInsertForm">
<el-row :gutter="30" class="my_form_row">
<el-col :span="6">
<el-form-item label="城市" prop="cityName">
<el-input v-model="form.cityName" placeholder="请输入城市" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体名称" prop="mediaName">
<el-input v-model="form.mediaName" placeholder="请输入媒体名称" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="频次" prop="frequency">
<el-input v-model="form.frequency" placeholder="请输入频次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发布总量" prop="releaseTotal">
<el-input v-model="form.releaseTotal" placeholder="请输入发布总量" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价" prop="listPrice">
<el-input v-model="form.listPrice" placeholder="请输入刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价单位" prop="listPriceUnit">
<el-input v-model="form.listPriceUnit" placeholder="请输入刊例价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际购买刊例价" prop="actualBuyListPrice">
<el-input v-model="form.actualBuyListPrice" placeholder="请输入实际购买刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际购买刊例价单位" prop="actualBuyListPriceUnit">
<el-input v-model="form.actualBuyListPriceUnit" placeholder="请输入实际购买刊例价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="购买周期" prop="buyCycle">
<el-input-number v-model="form.buyCycle" placeholder="请输入购买周期" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="折扣" prop="discount">
<el-input v-model="form.discount" placeholder="请输入折扣" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体总净价" prop="mediaRegularPrice">
<el-input v-model="form.mediaRegularPrice" placeholder="请输入媒体总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="首次制作安装费" prop="firstInstallFee">
<el-input v-model="form.firstInstallFee" placeholder="请输入首次制作安装费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总制作费" prop="totalMakeFee">
<el-input v-model="form.totalMakeFee" placeholder="请输入总制作费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总净价" prop="totalRegularPrice">
<el-input v-model="form.totalRegularPrice" placeholder="请输入总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总净价单位" prop="totalRegularPriceUnit">
<el-input v-model="form.totalRegularPriceUnit" placeholder="请输入总净价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体费总价" prop="mediaFeeTotalPrice">
<el-input v-model="form.mediaFeeTotalPrice" placeholder="请输入媒体费总价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单日覆盖人流量" prop="dailyAvgPeopleFlow">
<el-input v-model="form.dailyAvgPeopleFlow" placeholder="请输入单日覆盖人流量" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总曝光/人次" prop="totalExposure">
<el-input v-model="form.totalExposure" placeholder="请输入总曝光/人次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="SOV" prop="sov">
<el-input v-model="form.sov" placeholder="请输入SOV" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="CPM" prop="cpm">
<el-input v-model="form.cpm" placeholder="请输入CPM" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="成本折扣" prop="costDiscount">
<el-input v-model="form.costDiscount" placeholder="请输入成本折扣" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" :rows="5" type="textarea" placeholder="请输入备注"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button class="my-cancel-btn" @click="open = false"> </el-button>
<el-button class="my-confirm-btn" type="primary" @click="handleSubmit"> </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { onMounted, nextTick, defineEmits, ref } from 'vue'
import optionIcon from '@/assets/images/optionIcon.png'
import optionIconHover from '@/assets/images/optionIconHover.png'
import { mediaPrice } from "@/api/mediaLibrary"
const emit = defineEmits(['setCompetOfferMediaPrice']);
const { proxy } = getCurrentInstance()
const editRowIndex = ref(null)
const showOptionColumn = ref(true)
//
const defaultImageSrc = ref(optionIcon);
const hoverImageSrc = ref(optionIconHover);
const _title = ref(null)
const open = ref(false)
const data = reactive({
form: {},
rules: {
cityName: [{ required: true, message: "请输入城市", trigger: "blur" }],
mediaName: [{ required: true, message: "请输入媒体名称", trigger: "blur" }],
frequency: [{ required: true, message: "请输入频次", trigger: "blur" }],
releaseTotal: [{ required: true, message: "请输入发布总量", trigger: "blur" }],
listPrice: [{ required: true, message: "请输入刊例价", trigger: "blur" }],
listPriceUnit: [{ required: true, message: "请输入刊例价单位", trigger: "blur" }],
actualBuyListPrice: [{ required: true, message: "请输入实际购买刊例价", trigger: "blur" }],
actualBuyListPriceUnit: [{ required: true, message: "请输入实际购买刊例价单位", trigger: "blur" }],
buyCycle: [{ required: true, message: "请输入购买周期", trigger: "change" }],
discount: [{ required: true, message: "请输入折扣", trigger: "blur" }],
mediaRegularPrice: [{ required: true, message: "请输入媒体总净价", trigger: "blur" }],
firstInstallFee: [{ required: true, message: "请输入首次制作安装费", trigger: "blur" }],
totalMakeFee: [{ required: true, message: "请输入总制作费", trigger: "blur" }],
totalRegularPrice: [{ required: true, message: "请输入总净价", trigger: "blur" }],
totalRegularPriceUnit: [{ required: true, message: "请输入总净价单位", trigger: "blur" }],
mediaFeeTotalPrice: [{ required: true, message: "请输入媒体费总价", trigger: "blur" }],
dailyAvgPeopleFlow: [{ required: true, message: "请输入单日覆盖人流量", trigger: "blur" }],
totalExposure: [{ required: true, message: "请输入总曝光/人次", trigger: "blur" }],
sov: [{ required: true, message: "请输入SOV", trigger: "blur" }],
cpm: [{ required: true, message: "请输入CPM", trigger: "blur" }],
costDiscount: [{ required: true, message: "请输入成本折扣", trigger: "blur" }],
remark: [{ required: true, message: "请输入备注", trigger: "blur" }]
}
})
const { form, rules } = toRefs(data)
//
const loading = ref(false)
const quotationList = ref([])
const handleAddPrice = () => {
_title.value = '添加报价信息'
form.value.mediaType = 7
open.value = true
}
const handleUpdate = (index, row) => {
_title.value = '编辑报价信息'
editRowIndex.value = index
form.value = row
open.value = true
}
const handleDelete = (index) => {
proxy.$modal.confirm('是否确认删除这条报价信息吗?').then(() => {
quotationList.value.splice(index, 1)
emit('setCompetOfferMediaPrice', 7, quotationList.value)
proxy.$modal.msgSuccess("删除成功")
}).catch(() => { })
}
const handleSubmit = () => {
proxy.$refs["ruleFormRef"].validate(valid => {
if (valid) {
form.value.currentImageSrc = defaultImageSrc.value
if (editRowIndex.value !== null && editRowIndex.value !== undefined) {
quotationList.value[editRowIndex.value] = form.value
} else {
quotationList.value.push(form.value)
}
form.value = {}
open.value = false
emit('setCompetOfferMediaPrice', 7, quotationList.value)
}
})
}
//
const getMediaPrice = (_mediaId, _showOptionColumn) => {
showOptionColumn.value = _showOptionColumn
if (_mediaId) {
mediaPrice({ mediaId: _mediaId }).then(res => {
console.log('历史报价', res)
quotationList.value = res.data.filter(item => item.fileType == 7)
})
}
}
// \
defineExpose({
getMediaPrice
});
</script>

View File

@ -0,0 +1,264 @@
<!-- 高铁 -->
<template>
<el-button type="primary" class="submitBtn" v-show="showOptionColumn" style="margin-bottom: 10px;" @click="handleAddPrice">添加报价信息</el-button>
<el-table v-loading="loading" :data="quotationList" height="362px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="cityName" width="150" />
<el-table-column label="场站" align="left" prop="station" width="150" />
<el-table-column label="媒体位置" align="left" prop="mediaName" width="200" />
<el-table-column label="频次" align="left" prop="frequency" width="150" />
<el-table-column label="发布总量" align="left" prop="releaseTotal" width="150" />
<el-table-column label="刊例价" align="left" prop="listPrice" width="180" />
<el-table-column label="刊例价单位" align="left" prop="listPriceUnit" width="150" />
<el-table-column label="购买周期" align="left" prop="buyCycle" width="150" />
<el-table-column label="折扣" align="left" prop="discount" width="150" />
<el-table-column label="媒体总净价" align="center" prop="mediaRegularPrice" width="230" />
<el-table-column label="首次制作安装费" align="center" prop="firstInstallFee" width="230" />
<el-table-column label="总制作费" align="center" prop="totalMakeFee" width="160" />
<el-table-column label="总净价" align="center" prop="totalRegularPrice" width="130" />
<el-table-column label="总净价单位" align="center" prop="totalRegularPriceUnit" width="130" />
<el-table-column label="客流量/人次" align="center" prop="dailyAvgPeopleFlow" width="150" />
<el-table-column label="总曝光/人次" align="center" prop="totalExposure" width="130" />
<el-table-column label="SOV" align="center" prop="sov" width="150" />
<el-table-column label="CPM" align="center" prop="cpm" width="150" />
<el-table-column label="成本折扣" align="center" prop="costDiscount" width="150" />
<el-table-column label="成本" align="center" prop="cost" width="150" />
<el-table-column label="备注" align="center" prop="remark" width="150" />
<!-- <el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" /> -->
<el-table-column label="操作" width="56" align="center" fixed="right" v-show="showOptionColumn">
<template #default="scope">
<el-popover popper-class="my_popover" placement="left-start">
<div class="popBtns" @click="handleUpdate(scope.$index, scope.row)">修改</div>
<div class="popBtns" @click="handleDelete(scope.$index)">删除</div>
<template #reference>
<img style="cursor: pointer;" :src="scope.row.currentImageSrc"
@mouseenter="scope.row.currentImageSrc = hoverImageSrc"
@mouseleave="scope.row.currentImageSrc = defaultImageSrc" />
</template>
</el-popover>
</template>
</el-table-column>
</el-table>
<!-- 报价表单 -->
<el-dialog :title="_title" v-model="open" width="1350px" class="my_dialog" align-center :destroy-on-close="true"
:close-on-click-modal="false">
<el-form ref="ruleFormRef" :model="form" :rules="rules" label-width="150px" label-position="top"
class="myInsertForm">
<el-row :gutter="30" class="my_form_row">
<el-col :span="6">
<el-form-item label="城市" prop="cityName">
<el-input v-model="form.cityName" placeholder="请输入城市" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="场站" prop="station">
<el-input v-model="form.station" placeholder="请输入场站" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体位置" prop="mediaName">
<el-input v-model="form.mediaName" placeholder="请输入媒体位置" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="频次" prop="frequency">
<el-input v-model="form.frequency" placeholder="请输入频次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发布总量" prop="releaseTotal">
<el-input v-model="form.releaseTotal" placeholder="请输入发布总量" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价" prop="listPrice">
<el-input v-model="form.listPrice" placeholder="请输入刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价单位" prop="listPriceUnit">
<el-input v-model="form.listPriceUnit" placeholder="请输入刊例价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="购买周期" prop="buyCycle">
<el-input-number v-model="form.buyCycle" placeholder="请输入购买周期" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="折扣" prop="discount">
<el-input v-model="form.discount" placeholder="请输入折扣" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体总净价" prop="mediaRegularPrice">
<el-input v-model="form.mediaRegularPrice" placeholder="请输入媒体总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="首次制作安装费" prop="firstInstallFee">
<el-input v-model="form.firstInstallFee" placeholder="请输入首次制作安装费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总制作费" prop="totalMakeFee">
<el-input v-model="form.totalMakeFee" placeholder="请输入总制作费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总净价" prop="totalRegularPrice">
<el-input v-model="form.totalRegularPrice" placeholder="请输入总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总净价单位" prop="totalRegularPriceUnit">
<el-input v-model="form.totalRegularPriceUnit" placeholder="请输入总净价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="客流量/人次" prop="dailyAvgPeopleFlow">
<el-input v-model="form.dailyAvgPeopleFlow" placeholder="请输入客流量/人次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总曝光/人次" prop="totalExposure">
<el-input v-model="form.totalExposure" placeholder="请输入总曝光/人次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="SOV" prop="sov">
<el-input v-model="form.sov" placeholder="请输入SOV" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="CPM" prop="cpm">
<el-input v-model="form.cpm" placeholder="请输入CPM" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="成本折扣" prop="costDiscount">
<el-input v-model="form.costDiscount" placeholder="请输入成本折扣" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="成本" prop="cost">
<el-input v-model="form.cost" placeholder="请输入成本" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" :rows="5" type="textarea" placeholder="请输入备注"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button class="my-cancel-btn" @click="open = false"> </el-button>
<el-button class="my-confirm-btn" type="primary" @click="handleSubmit"> </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { onMounted, nextTick, defineEmits, ref } from 'vue'
import optionIcon from '@/assets/images/optionIcon.png'
import optionIconHover from '@/assets/images/optionIconHover.png'
import { mediaPrice } from "@/api/mediaLibrary"
const emit = defineEmits(['setCompetOfferMediaPrice']);
const { proxy } = getCurrentInstance()
const editRowIndex = ref(null)
const showOptionColumn = ref(true)
//
const defaultImageSrc = ref(optionIcon);
const hoverImageSrc = ref(optionIconHover);
const _title = ref(null)
const open = ref(false)
const data = reactive({
form: {},
rules: {
cityName: [{ required: true, message: "请输入城市", trigger: "blur" }],
station: [{ required: true, message: "请输入场站", trigger: "blur" }],
mediaName: [{ required: true, message: "请输入媒体位置", trigger: "blur" }],
frequency: [{ required: true, message: "请输入频次", trigger: "blur" }],
releaseTotal: [{ required: true, message: "请输入发布总量", trigger: "blur" }],
listPrice: [{ required: true, message: "请输入刊例价", trigger: "blur" }],
listPriceUnit: [{ required: true, message: "请输入刊例价单位", trigger: "blur" }],
buyCycle: [{ required: true, message: "请输入购买周期", trigger: "change" }],
discount: [{ required: true, message: "请输入折扣", trigger: "blur" }],
mediaRegularPrice: [{ required: true, message: "请输入媒体总净价", trigger: "blur" }],
firstInstallFee: [{ required: true, message: "请输入首次制作安装费", trigger: "blur" }],
totalMakeFee: [{ required: true, message: "请输入总制作费", trigger: "blur" }],
totalRegularPrice: [{ required: true, message: "请输入总净价", trigger: "blur" }],
totalRegularPriceUnit: [{ required: true, message: "请输入总净价单位", trigger: "blur" }],
dailyAvgPeopleFlow: [{ required: true, message: "请输入客流量/人次", trigger: "blur" }],
totalExposure: [{ required: true, message: "请输入总曝光/人次", trigger: "blur" }],
sameSiteMediaNum: [{ required: true, message: "请输入同站内同类媒体数量或列车总量", trigger: "blur" }],
sov: [{ required: true, message: "请输入SOV", trigger: "blur" }],
cpm: [{ required: true, message: "请输入CPM", trigger: "blur" }],
costDiscount: [{ required: true, message: "请输入成本折扣", trigger: "blur" }],
cost: [{ required: true, message: "请输入成本", trigger: "blur" }],
remark: [{ required: true, message: "请输入备注", trigger: "blur" }]
}
})
const { form, rules } = toRefs(data)
//
const loading = ref(false)
const quotationList = ref([])
const handleAddPrice = () => {
_title.value = '添加报价信息'
form.value.mediaType = 5
open.value = true
}
const handleUpdate = (index, row) => {
_title.value = '编辑报价信息'
editRowIndex.value = index
form.value = row
open.value = true
}
const handleDelete = (index) => {
proxy.$modal.confirm('是否确认删除这条报价信息吗?').then(() => {
quotationList.value.splice(index, 1)
emit('setCompetOfferMediaPrice', 5, quotationList.value)
proxy.$modal.msgSuccess("删除成功")
}).catch(() => { })
}
const handleSubmit = () => {
proxy.$refs["ruleFormRef"].validate(valid => {
if (valid) {
form.value.currentImageSrc = defaultImageSrc.value
if (editRowIndex.value !== null && editRowIndex.value !== undefined) {
quotationList.value[editRowIndex.value] = form.value
} else {
quotationList.value.push(form.value)
}
form.value = {}
open.value = false
emit('setCompetOfferMediaPrice', 5, quotationList.value)
}
})
}
//
const getMediaPrice = (_mediaId, _showOptionColumn) => {
showOptionColumn.value = _showOptionColumn
if (_mediaId) {
mediaPrice({ mediaId: _mediaId }).then(res => {
console.log('历史报价', res)
quotationList.value = res.data.filter(item => item.fileType == 5)
})
}
}
// \
defineExpose({
getMediaPrice
});
</script>

View File

@ -0,0 +1,270 @@
<!-- 写字楼 -->
<template>
<el-button type="primary" class="submitBtn" v-show="showOptionColumn" style="margin-bottom: 10px;" @click="handleAddPrice">添加报价信息</el-button>
<el-table v-loading="loading" :data="quotationList" height="362px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="cityName" width="150" />
<el-table-column label="媒体名称" align="left" prop="mediaName" width="200" />
<el-table-column label="频次" align="left" prop="frequency" width="150" />
<el-table-column label="发布总量" align="left" prop="releaseTotal" width="150" />
<el-table-column label="刊例价" align="left" prop="listPrice" width="180" />
<el-table-column label="刊例价单位" align="left" prop="listPriceUnit" width="150" />
<el-table-column label="实际购买刊例价" align="left" prop="actualBuyListPrice" width="150" />
<el-table-column label="实际购买刊例价单位" align="left" prop="actualBuyListPriceUnit" width="150" />
<el-table-column label="购买周期" align="left" prop="buyCycle" width="150" />
<el-table-column label="折扣" align="left" prop="discount" width="150" />
<el-table-column label="媒体总净价" align="center" prop="mediaRegularPrice" width="230" />
<el-table-column label="首次制作安装费" align="center" prop="firstInstallFee" width="230" />
<el-table-column label="总制作费" align="center" prop="totalMakeFee" width="160" />
<el-table-column label="总净价" align="center" prop="totalRegularPrice" width="130" />
<el-table-column label="总净价单位" align="center" prop="totalRegularPriceUnit" width="130" />
<el-table-column label="媒体费总价" align="center" prop="mediaFeeTotalPrice" width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="dailyAvgPeopleFlow" width="150" />
<el-table-column label="总曝光/人次" align="center" prop="totalExposure" width="130" />
<el-table-column label="SOV" align="center" prop="sov" width="150" />
<el-table-column label="CPM" align="center" prop="cpm" width="150" />
<el-table-column label="成本折扣" align="center" prop="costDiscount" width="150" />
<el-table-column label="备注" align="center" prop="remark" width="150" />
<!-- <el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" /> -->
<el-table-column label="操作" width="56" align="center" fixed="right" v-show="showOptionColumn">
<template #default="scope">
<el-popover popper-class="my_popover" placement="left-start">
<div class="popBtns" @click="handleUpdate(scope.$index, scope.row)">修改</div>
<div class="popBtns" @click="handleDelete(scope.$index)">删除</div>
<template #reference>
<img style="cursor: pointer;" :src="scope.row.currentImageSrc"
@mouseenter="scope.row.currentImageSrc = hoverImageSrc"
@mouseleave="scope.row.currentImageSrc = defaultImageSrc" />
</template>
</el-popover>
</template>
</el-table-column>
</el-table>
<!-- 报价表单 -->
<el-dialog :title="_title" v-model="open" width="1350px" class="my_dialog" align-center :destroy-on-close="true"
:close-on-click-modal="false">
<el-form ref="ruleFormRef" :model="form" :rules="rules" label-width="150px" label-position="top"
class="myInsertForm">
<el-row :gutter="30" class="my_form_row">
<el-col :span="6">
<el-form-item label="城市" prop="cityName">
<el-input v-model="form.cityName" placeholder="请输入城市" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体名称" prop="mediaName">
<el-input v-model="form.mediaName" placeholder="请输入媒体名称" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="频次" prop="frequency">
<el-input v-model="form.frequency" placeholder="请输入频次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发布总量" prop="releaseTotal">
<el-input v-model="form.releaseTotal" placeholder="请输入发布总量" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价" prop="listPrice">
<el-input v-model="form.listPrice" placeholder="请输入刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价单位" prop="listPriceUnit">
<el-input v-model="form.listPriceUnit" placeholder="请输入刊例价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际购买刊例价" prop="actualBuyListPrice">
<el-input v-model="form.actualBuyListPrice" placeholder="请输入实际购买刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际购买刊例价单位" prop="actualBuyListPriceUnit">
<el-input v-model="form.actualBuyListPriceUnit" placeholder="请输入实际购买刊例价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="购买周期" prop="buyCycle">
<el-input-number v-model="form.buyCycle" placeholder="请输入购买周期" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="折扣" prop="discount">
<el-input v-model="form.discount" placeholder="请输入折扣" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体总净价" prop="mediaRegularPrice">
<el-input v-model="form.mediaRegularPrice" placeholder="请输入媒体总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="首次制作安装费" prop="firstInstallFee">
<el-input v-model="form.firstInstallFee" placeholder="请输入首次制作安装费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总制作费" prop="totalMakeFee">
<el-input v-model="form.totalMakeFee" placeholder="请输入总制作费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总净价" prop="totalRegularPrice">
<el-input v-model="form.totalRegularPrice" placeholder="请输入总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总净价单位" prop="totalRegularPriceUnit">
<el-input v-model="form.totalRegularPriceUnit" placeholder="请输入总净价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体费总价" prop="mediaFeeTotalPrice">
<el-input v-model="form.mediaFeeTotalPrice" placeholder="请输入媒体费总价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单日覆盖人流量" prop="dailyAvgPeopleFlow">
<el-input v-model="form.dailyAvgPeopleFlow" placeholder="请输入单日覆盖人流量" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总曝光/人次" prop="totalExposure">
<el-input v-model="form.totalExposure" placeholder="请输入总曝光/人次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="SOV" prop="sov">
<el-input v-model="form.sov" placeholder="请输入SOV" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="CPM" prop="cpm">
<el-input v-model="form.cpm" placeholder="请输入CPM" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="成本折扣" prop="costDiscount">
<el-input v-model="form.costDiscount" placeholder="请输入成本折扣" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" :rows="5" type="textarea" placeholder="请输入备注"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button class="my-cancel-btn" @click="open = false"> </el-button>
<el-button class="my-confirm-btn" type="primary" @click="handleSubmit"> </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { onMounted, nextTick, defineEmits, ref } from 'vue'
import optionIcon from '@/assets/images/optionIcon.png'
import optionIconHover from '@/assets/images/optionIconHover.png'
import { mediaPrice } from "@/api/mediaLibrary"
const emit = defineEmits(['setCompetOfferMediaPrice']);
const { proxy } = getCurrentInstance()
const editRowIndex = ref(null)
const showOptionColumn = ref(true)
//
const defaultImageSrc = ref(optionIcon);
const hoverImageSrc = ref(optionIconHover);
const _title = ref(null)
const open = ref(false)
const data = reactive({
form: {},
rules: {
cityName: [{ required: true, message: "请输入城市", trigger: "blur" }],
mediaName: [{ required: true, message: "请输入媒体名称", trigger: "blur" }],
frequency: [{ required: true, message: "请输入频次", trigger: "blur" }],
releaseTotal: [{ required: true, message: "请输入发布总量", trigger: "blur" }],
listPrice: [{ required: true, message: "请输入刊例价", trigger: "blur" }],
listPriceUnit: [{ required: true, message: "请输入刊例价单位", trigger: "blur" }],
actualBuyListPrice: [{ required: true, message: "请输入实际购买刊例价", trigger: "blur" }],
actualBuyListPriceUnit: [{ required: true, message: "请输入实际购买刊例价单位", trigger: "blur" }],
buyCycle: [{ required: true, message: "请输入购买周期", trigger: "change" }],
discount: [{ required: true, message: "请输入折扣", trigger: "blur" }],
mediaRegularPrice: [{ required: true, message: "请输入媒体总净价", trigger: "blur" }],
firstInstallFee: [{ required: true, message: "请输入首次制作安装费", trigger: "blur" }],
totalMakeFee: [{ required: true, message: "请输入总制作费", trigger: "blur" }],
totalRegularPrice: [{ required: true, message: "请输入总净价", trigger: "blur" }],
totalRegularPriceUnit: [{ required: true, message: "请输入总净价单位", trigger: "blur" }],
mediaFeeTotalPrice: [{ required: true, message: "请输入媒体费总价", trigger: "blur" }],
dailyAvgPeopleFlow: [{ required: true, message: "请输入单日覆盖人流量", trigger: "blur" }],
totalExposure: [{ required: true, message: "请输入总曝光/人次", trigger: "blur" }],
sov: [{ required: true, message: "请输入SOV", trigger: "blur" }],
cpm: [{ required: true, message: "请输入CPM", trigger: "blur" }],
costDiscount: [{ required: true, message: "请输入成本折扣", trigger: "blur" }],
remark: [{ required: true, message: "请输入备注", trigger: "blur" }]
}
})
const { form, rules } = toRefs(data)
//
const loading = ref(false)
const quotationList = ref([])
const handleAddPrice = () => {
_title.value = '添加报价信息'
form.value.mediaType = 6
open.value = true
}
const handleUpdate = (index, row) => {
_title.value = '编辑报价信息'
editRowIndex.value = index
form.value = row
open.value = true
}
const handleDelete = (index) => {
proxy.$modal.confirm('是否确认删除这条报价信息吗?').then(() => {
quotationList.value.splice(index, 1)
emit('setCompetOfferMediaPrice', 6, quotationList.value)
proxy.$modal.msgSuccess("删除成功")
}).catch(() => { })
}
const handleSubmit = () => {
proxy.$refs["ruleFormRef"].validate(valid => {
if (valid) {
form.value.currentImageSrc = defaultImageSrc.value
if (editRowIndex.value !== null && editRowIndex.value !== undefined) {
quotationList.value[editRowIndex.value] = form.value
} else {
quotationList.value.push(form.value)
}
form.value = {}
open.value = false
emit('setCompetOfferMediaPrice', 6, quotationList.value)
}
})
}
//
const getMediaPrice = (_mediaId, _showOptionColumn) => {
showOptionColumn.value = _showOptionColumn
if (_mediaId) {
mediaPrice({ mediaId: _mediaId }).then(res => {
console.log('历史报价', res)
quotationList.value = res.data.filter(item => item.fileType == 6)
})
}
}
// \
defineExpose({
getMediaPrice
});
</script>

View File

@ -0,0 +1,369 @@
<!-- 地铁报价 -->
<template>
<el-button type="primary" class="submitBtn" v-show="showOptionColumn" style="margin-bottom: 10px;" @click="handleAddPrice">添加报价信息</el-button>
<el-table v-loading="loading" :data="quotationList" height="362px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="cityName" width="150" />
<el-table-column label="线路" align="left" prop="subwayLine" width="150" />
<el-table-column label="站点" align="left" prop="station" width="150" />
<el-table-column label="级别" align="left" prop="level" width="150" />
<el-table-column label="媒体形式" align="left" prop="mediaFormat" width="150" />
<el-table-column label="媒体名称" align="left" prop="mediaName" width="200" />
<el-table-column label="频次" align="left" prop="frequency" width="150" />
<el-table-column label="刊例价" align="left" prop="listPrice" width="180" />
<el-table-column label="刊例价单位" align="left" prop="listPriceUnit" width="150" />
<el-table-column label="实际购买刊例价" align="left" prop="actualBuyListPrice" width="150" />
<el-table-column label="实际购买刊例价单位" align="left" prop="actualBuyListPriceUnit" width="150" />
<el-table-column label="短期附加费" align="left" prop="shortTermExtraCharge" width="150" />
<el-table-column label="创意附加费" align="left" prop="ideaExtraCharge" width="150" />
<el-table-column label="起投周期" align="left" prop="buyCycle" width="150" />
<el-table-column label="投放周期" align="left" prop="deliverCycle" width="150" />
<el-table-column label="购买数量" align="left" prop="buyTotal" width="150" />
<el-table-column label="购买数量单位" align="left" prop="postCode" width="150" />
<el-table-column label="折扣" align="left" prop="discount" width="150" />
<el-table-column label="媒体总净价" align="center" prop="mediaRegularPrice" width="230" />
<el-table-column label="媒体总净价单位" align="center" prop="mediaRegularPriceUnit" width="230" />
<el-table-column label="常规制作费" align="center" prop="commonMakeFee" width="230" />
<el-table-column label="创意制作费" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="总制作费" align="center" prop="totalMakeFee" width="160" />
<el-table-column label="总净价" align="center" prop="totalRegularPrice" width="130" />
<el-table-column label="总净价单位" align="center" prop="totalRegularPriceUnit" width="130" />
<el-table-column label="底价" align="center" prop="floorPrice" width="130" />
<el-table-column label="低价总" align="center" prop="minPrice" width="130" />
<el-table-column label="制作费" align="center" prop="makeFee" width="130" />
<el-table-column label="媒体费总价" align="center" prop="mediaFeeTotalPrice" width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="dailyAvgPeopleFlow" width="150" />
<el-table-column label="发布期内总曝光人次" align="center" prop="totalExposure" width="130" />
<el-table-column label="同站内同类媒体数量或列车总量" align="center" prop="sameSiteMediaNum" width="230" />
<el-table-column label="SOV" align="center" prop="sov" width="150" />
<el-table-column label="CPM" align="center" prop="cpm" width="150" />
<el-table-column label="覆盖热区" align="center" prop="coverHotZone" width="150" />
<el-table-column label="备注" align="center" prop="remark" width="150" />
<!-- <el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" /> -->
<el-table-column label="操作" width="56" align="center" fixed="right" v-show="showOptionColumn">
<template #default="scope">
<el-popover popper-class="my_popover" placement="left-start">
<div class="popBtns" @click="handleUpdate(scope.$index, scope.row)">修改</div>
<div class="popBtns" @click="handleDelete(scope.$index)">删除</div>
<template #reference>
<img style="cursor: pointer;" :src="scope.row.currentImageSrc"
@mouseenter="scope.row.currentImageSrc = hoverImageSrc"
@mouseleave="scope.row.currentImageSrc = defaultImageSrc" />
</template>
</el-popover>
</template>
</el-table-column>
</el-table>
<!-- 报价表单 -->
<el-dialog :title="_title" v-model="open" width="1350px" class="my_dialog" align-center :destroy-on-close="true"
:close-on-click-modal="false">
<el-form ref="ruleFormRef" :model="form" :rules="rules" label-width="150px" label-position="top"
class="myInsertForm">
<el-row :gutter="30" class="my_form_row">
<el-col :span="6">
<el-form-item label="城市" prop="cityName">
<el-input v-model="form.cityName" placeholder="请输入城市" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="线路" prop="subwayLine">
<el-input v-model="form.subwayLine" placeholder="请输入线路" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="站点" prop="station">
<el-input v-model="form.station" placeholder="请输入站点" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="级别" prop="level">
<el-input v-model="form.level" placeholder="请输入级别" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体形式" prop="mediaFormat">
<el-input v-model="form.mediaFormat" placeholder="请输入媒体形式" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体名称" prop="mediaName">
<el-input v-model="form.mediaName" placeholder="请输入媒体名称" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="频次" prop="frequency">
<el-input v-model="form.frequency" placeholder="请输入频次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价" prop="listPrice">
<el-input v-model="form.listPrice" placeholder="请输入刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价单位" prop="listPriceUnit">
<el-input v-model="form.listPriceUnit" placeholder="请输入刊例价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际购买刊例价" prop="actualBuyListPrice">
<el-input v-model="form.actualBuyListPrice" placeholder="请输入实际购买刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际购买刊例价单位" prop="actualBuyListPriceUnit">
<el-input v-model="form.actualBuyListPriceUnit" placeholder="请输入实际购买刊例价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="短期附加费" prop="shortTermExtraCharge">
<el-input v-model="form.shortTermExtraCharge" placeholder="请输入短期附加费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="创意附加费" prop="ideaExtraCharge">
<el-input v-model="form.ideaExtraCharge" placeholder="请输入创意附加费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="起投周期" prop="buyCycle">
<el-input-number v-model="form.buyCycle" placeholder="请输入起投周期" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="投放周期" prop="deliverCycle">
<el-input-number v-model="form.deliverCycle" placeholder="请输入投放周期" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="购买数量" prop="buyTotal">
<el-input-number v-model="form.buyTotal" placeholder="请输入购买数量" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="购买数量单位" prop="buyTotalUnit">
<el-input v-model="form.buyTotalUnit" placeholder="请输入购买数量单位" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="折扣" prop="discount">
<el-input v-model="form.discount" placeholder="请输入折扣" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体总净价" prop="mediaRegularPrice">
<el-input v-model="form.mediaRegularPrice" placeholder="请输入媒体总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体总净价单位" prop="mediaRegularPriceUnit">
<el-input v-model="form.mediaRegularPriceUnit" placeholder="请输入媒体总净价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="常规制作费" prop="commonMakeFee">
<el-input v-model="form.commonMakeFee" placeholder="请输入常规制作费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="创意制作费" prop="ideaMakeFee">
<el-input v-model="form.ideaMakeFee" placeholder="请输入创意制作费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总制作费" prop="totalMakeFee">
<el-input v-model="form.totalMakeFee" placeholder="请输入总制作费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总净价" prop="totalRegularPrice">
<el-input v-model="form.totalRegularPrice" placeholder="请输入总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总净价单位" prop="totalRegularPriceUnit">
<el-input v-model="form.totalRegularPriceUnit" placeholder="请输入总净价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="底价" prop="floorPrice">
<el-input v-model="form.floorPrice" placeholder="请输入底价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="低价总" prop="minPrice">
<el-input v-model="form.minPrice" placeholder="请输入低价总" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="制作费" prop="makeFee">
<el-input v-model="form.makeFee" placeholder="请输入制作费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体费总价" prop="mediaFeeTotalPrice">
<el-input v-model="form.mediaFeeTotalPrice" placeholder="请输入媒体费总价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单日覆盖人流量" prop="dailyAvgPeopleFlow">
<el-input v-model="form.dailyAvgPeopleFlow" placeholder="请输入单日覆盖人流量" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发布期内总曝光人次" prop="totalExposure">
<el-input v-model="form.totalExposure" placeholder="请输入发布期内总曝光人次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="同站内同类媒体数量或列车总量" prop="sameSiteMediaNum">
<el-input v-model="form.sameSiteMediaNum" placeholder="请输入同站内同类媒体数量或列车总量" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="SOV" prop="sov">
<el-input v-model="form.sov" placeholder="请输入SOV" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="CPM" prop="cpm">
<el-input v-model="form.cpm" placeholder="请输入CPM" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="覆盖热区" prop="coverHotZone">
<el-input v-model="form.coverHotZone" placeholder="请输入覆盖热区" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" :rows="5" type="textarea" placeholder="请输入备注"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button class="my-cancel-btn" @click="open = false"> </el-button>
<el-button class="my-confirm-btn" type="primary" @click="handleSubmit"> </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { onMounted, nextTick, defineEmits, ref } from 'vue'
import optionIcon from '@/assets/images/optionIcon.png'
import optionIconHover from '@/assets/images/optionIconHover.png'
import { mediaPrice } from "@/api/mediaLibrary"
const emit = defineEmits(['setCompetOfferMediaPrice']);
const { proxy } = getCurrentInstance()
const editRowIndex = ref(null)
const showOptionColumn = ref(true)
//
const defaultImageSrc = ref(optionIcon);
const hoverImageSrc = ref(optionIconHover);
const _title = ref(null)
const open = ref(false)
const data = reactive({
form: {},
rules: {
cityName: [{ required: true, message: "请输入城市", trigger: "blur" }],
subwayLine: [{ required: true, message: "请输入线路", trigger: "blur" }],
station: [{ required: true, message: "请输入站点", trigger: "blur" }],
level: [{ required: true, message: "请输入级别", trigger: "blur" }],
mediaFormat: [{ required: true, message: "请输入媒体形式", trigger: "blur" }],
mediaName: [{ required: true, message: "请输入媒体名称", trigger: "blur" }],
frequency: [{ required: true, message: "请输入频次", trigger: "blur" }],
listPrice: [{ required: true, message: "请输入刊例价", trigger: "blur" }],
listPriceUnit: [{ required: true, message: "请输入刊例价单位", trigger: "blur" }],
actualBuyListPrice: [{ required: true, message: "请输入实际购买刊例价", trigger: "blur" }],
actualBuyListPriceUnit: [{ required: true, message: "请输入实际购买刊例价单位", trigger: "blur" }],
shortTermExtraCharge: [{ required: true, message: "请输入短期附加费", trigger: "blur" }],
ideaExtraCharge: [{ required: true, message: "请输入创意附加费", trigger: "blur" }],
buyCycle: [{ required: true, message: "请输入起投周期", trigger: "change" }],
deliverCycle: [{ required: true, message: "请输入投放周期", trigger: "change" }],
buyTotal: [{ required: true, message: "请输入购买数量", trigger: "change" }],
buyTotalUnit: [{ required: true, message: "请输入购买数量单位", trigger: "blur" }],
discount: [{ required: true, message: "请输入折扣", trigger: "blur" }],
mediaRegularPrice: [{ required: true, message: "请输入媒体总净价", trigger: "blur" }],
mediaRegularPriceUnit: [{ required: true, message: "请输入媒体总净价单位", trigger: "blur" }],
commonMakeFee: [{ required: true, message: "请输入常规制作费", trigger: "blur" }],
ideaMakeFee: [{ required: true, message: "请输入创意制作费", trigger: "blur" }],
totalMakeFee: [{ required: true, message: "请输入总制作费", trigger: "blur" }],
totalRegularPrice: [{ required: true, message: "请输入总净价", trigger: "blur" }],
totalRegularPriceUnit: [{ required: true, message: "请输入总净价单位", trigger: "blur" }],
floorPrice: [{ required: true, message: "请输入底价", trigger: "blur" }],
minPrice: [{ required: true, message: "请输入低价总", trigger: "blur" }],
makeFee: [{ required: true, message: "请输入制作费", trigger: "blur" }],
mediaFeeTotalPrice: [{ required: true, message: "请输入媒体费总价", trigger: "blur" }],
dailyAvgPeopleFlow: [{ required: true, message: "请输入单日覆盖人流量", trigger: "blur" }],
totalExposure: [{ required: true, message: "请输入发布期内总曝光人次", trigger: "blur" }],
sameSiteMediaNum: [{ required: true, message: "请输入同站内同类媒体数量或列车总量", trigger: "blur" }],
sov: [{ required: true, message: "请输入SOV", trigger: "blur" }],
cpm: [{ required: true, message: "请输入CPM", trigger: "blur" }],
coverHotZone: [{ required: true, message: "请输入覆盖热区", trigger: "blur" }],
remark: [{ required: true, message: "请输入备注", trigger: "blur" }]
}
})
const { form, rules } = toRefs(data)
//
const loading = ref(false)
const quotationList = ref([])
const handleAddPrice = () => {
_title.value = '添加报价信息'
form.value.mediaType = 4
open.value = true
}
const handleUpdate = (index, row) => {
_title.value = '编辑报价信息'
editRowIndex.value = index
form.value = row
open.value = true
}
const handleDelete = (index) => {
proxy.$modal.confirm('是否确认删除这条报价信息吗?').then(() => {
quotationList.value.splice(index, 1)
emit('setCompetOfferMediaPrice', 4, quotationList.value)
proxy.$modal.msgSuccess("删除成功")
}).catch(() => { })
}
const handleSubmit = () => {
proxy.$refs["ruleFormRef"].validate(valid => {
if (valid) {
form.value.currentImageSrc = defaultImageSrc.value
if (editRowIndex.value !== null && editRowIndex.value !== undefined) {
quotationList.value[editRowIndex.value] = form.value
} else {
quotationList.value.push(form.value)
}
form.value = {}
open.value = false
emit('setCompetOfferMediaPrice', 4, quotationList.value)
}
})
}
//
const getMediaPrice = (_mediaId, _showOptionColumn) => {
showOptionColumn.value = _showOptionColumn
if (_mediaId) {
mediaPrice({ mediaId: _mediaId }).then(res => {
console.log('历史报价', res)
quotationList.value = res.data.filter(item => item.fileType == 4)
})
}
}
// \
defineExpose({
getMediaPrice
});
</script>

View File

@ -0,0 +1,330 @@
<!-- 候车厅报价 -->
<template>
<el-button type="primary" class="submitBtn" v-show="showOptionColumn" style="margin-bottom: 10px;" @click="handleAddPrice">添加报价信息</el-button>
<el-table v-loading="loading" :data="quotationList" height="362px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="cityName" width="150" />
<el-table-column label="资源描述" align="left" prop="resourceRemark" width="150" />
<el-table-column label="媒体名称" align="left" prop="mediaName" width="200" />
<el-table-column label="频次" align="left" prop="frequency" width="150" />
<el-table-column label="发布总量" align="left" prop="releaseTotal" width="150" />
<el-table-column label="刊例价" align="left" prop="listPrice" width="180" />
<el-table-column label="刊例价单位" align="left" prop="listPriceUnit" width="150" />
<el-table-column label="实际购买刊例价" align="left" prop="actualBuyListPrice" width="150" />
<el-table-column label="实际购买刊例价单位" align="left" prop="actualBuyListPriceUnit" width="150" />
<el-table-column label="购买周期" align="left" prop="buyCycle" width="150" />
<el-table-column label="折扣" align="left" prop="discount" width="150" />
<el-table-column label="媒体总净价" align="center" prop="mediaRegularPrice" width="230" />
<el-table-column label="首次制作安装费" align="center" prop="firstInstallFee" width="230" />
<el-table-column label="总制作费" align="center" prop="totalMakeFee" width="160" />
<el-table-column label="总净价" align="center" prop="totalRegularPrice" width="130" />
<el-table-column label="总净价单位" align="center" prop="totalRegularPriceUnit" width="130" />
<el-table-column label="媒体费单价" align="center" prop="mediaFeeUnitPrice" width="130" />
<el-table-column label="制作费" align="center" prop="makeFee" width="160" />
<el-table-column label="媒体费总价" align="center" prop="mediaFeeTotalPrice" width="130" />
<el-table-column label="最终媒体费优惠价" align="center" prop="finalMediaFeeDiscountPrice" width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="dailyAvgPeopleFlow" width="150" />
<el-table-column label="总曝光/人次" align="center" prop="totalExposure" width="130" />
<el-table-column label="SOV" align="center" prop="sov" width="150" />
<el-table-column label="CPM" align="center" prop="cpm" width="150" />
<el-table-column label="是否亮灯" align="center" prop="hasLighting" width="150">
<template #default="scope">
<span v-if="scope.row.hasLighting == 0"></span>
<span v-if="scope.row.hasLighting == 1"></span>
</template>
</el-table-column>
<el-table-column label="单面/双面" align="center" prop="oddEven" width="150" />
<el-table-column label="中途换画制作费" align="center" prop="changeDrawMakeFee" width="150" />
<el-table-column label="备注" align="center" prop="remark" width="150" />
<!-- <el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" /> -->
<el-table-column label="操作" width="56" align="center" fixed="right" v-show="showOptionColumn">
<template #default="scope">
<el-popover popper-class="my_popover" placement="left-start">
<div class="popBtns" @click="handleUpdate(scope.$index, scope.row)">修改</div>
<div class="popBtns" @click="handleDelete(scope.$index)">删除</div>
<template #reference>
<img style="cursor: pointer;" :src="scope.row.currentImageSrc"
@mouseenter="scope.row.currentImageSrc = hoverImageSrc"
@mouseleave="scope.row.currentImageSrc = defaultImageSrc" />
</template>
</el-popover>
</template>
</el-table-column>
</el-table>
<!-- 报价表单 -->
<el-dialog :title="_title" v-model="open" width="1350px" class="my_dialog" align-center :destroy-on-close="true"
:close-on-click-modal="false">
<el-form ref="ruleFormRef" :model="form" :rules="rules" label-width="150px" label-position="top"
class="myInsertForm">
<el-row :gutter="30" class="my_form_row">
<el-col :span="6">
<el-form-item label="城市" prop="cityName">
<el-input v-model="form.cityName" placeholder="请输入城市" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="资源描述" prop="resourceRemark">
<el-input v-model="form.resourceRemark" placeholder="请输入资源描述" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体名称" prop="mediaName">
<el-input v-model="form.mediaName" placeholder="请输入媒体名称" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="频次" prop="frequency">
<el-input v-model="form.frequency" placeholder="请输入频次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发布总量" prop="releaseTotal">
<el-input v-model="form.releaseTotal" placeholder="请输入发布总量" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价" prop="listPrice">
<el-input v-model="form.listPrice" placeholder="请输入刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="刊例价单位" prop="listPriceUnit">
<el-input v-model="form.listPriceUnit" placeholder="请输入刊例价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际购买刊例价" prop="actualBuyListPrice">
<el-input v-model="form.actualBuyListPrice" placeholder="请输入实际购买刊例价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际购买刊例价单位" prop="actualBuyListPriceUnit">
<el-input v-model="form.actualBuyListPriceUnit" placeholder="请输入实际购买刊例价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="购买周期" prop="buyCycle">
<el-input-number v-model="form.buyCycle" placeholder="请输入购买周期" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="折扣" prop="discount">
<el-input v-model="form.discount" placeholder="请输入折扣" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体总净价" prop="mediaRegularPrice">
<el-input v-model="form.mediaRegularPrice" placeholder="请输入媒体总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="首次制作安装费" prop="firstInstallFee">
<el-input v-model="form.firstInstallFee" placeholder="请输入首次制作安装费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总制作费" prop="totalMakeFee">
<el-input v-model="form.totalMakeFee" placeholder="请输入总制作费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单价" prop="unitPrice">
<el-input v-model="form.unitPrice" placeholder="请输入单价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总净价" prop="totalRegularPrice">
<el-input v-model="form.totalRegularPrice" placeholder="请输入总净价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总净价单位" prop="totalRegularPriceUnit">
<el-input v-model="form.totalRegularPriceUnit" placeholder="请输入总净价单位" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体费单价" prop="mediaFeeUnitPrice">
<el-input v-model="form.mediaFeeUnitPrice" placeholder="请输入媒体费单价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="制作费" prop="makeFee">
<el-input v-model="form.makeFee" placeholder="请输入制作费" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体费总价" prop="mediaFeeTotalPrice">
<el-input v-model="form.mediaFeeTotalPrice" placeholder="请输入媒体费总价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="最终媒体费优惠价" prop="finalMediaFeeDiscountPrice">
<el-input v-model="form.finalMediaFeeDiscountPrice" placeholder="请输入最终媒体费优惠价" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单日覆盖人流量" prop="dailyAvgPeopleFlow">
<el-input v-model="form.dailyAvgPeopleFlow" placeholder="请输入单日覆盖人流量" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总曝光/人次" prop="totalExposure">
<el-input v-model="form.totalExposure" placeholder="请输入总曝光/人次" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="SOV" prop="sov">
<el-input v-model="form.sov" placeholder="请输入SOV" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="CPM" prop="cpm">
<el-input v-model="form.cpm" placeholder="请输入CPM" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否亮灯" prop="hasLighting">
<el-select v-model="form.hasLighting" placeholder="请选择是否亮灯" clearable>
<el-option v-for="item in hasLightingList" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单面/双面" prop="oddEven">
<el-input v-model="form.oddEven" placeholder="请输入单面/双面" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="中途换画制作费" prop="changeDrawMakeFee">
<el-input v-model="form.changeDrawMakeFee" placeholder="请输入中途换画制作费" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" :rows="5" type="textarea" placeholder="请输入备注"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button class="my-cancel-btn" @click="open = false"> </el-button>
<el-button class="my-confirm-btn" type="primary" @click="handleSubmit"> </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { onMounted, nextTick, defineEmits, ref } from 'vue'
import optionIcon from '@/assets/images/optionIcon.png'
import optionIconHover from '@/assets/images/optionIconHover.png'
import { mediaPrice } from "@/api/mediaLibrary"
const emit = defineEmits(['setCompetOfferMediaPrice']);
const { proxy } = getCurrentInstance()
const hasLightingList = ref([
{ value: 0, label: '否' },
{ value: 1, label: '是' },
])
const editRowIndex = ref(null)
const showOptionColumn = ref(true)
//
const defaultImageSrc = ref(optionIcon);
const hoverImageSrc = ref(optionIconHover);
const _title = ref(null)
const open = ref(false)
const data = reactive({
form: {},
rules: {
cityName: [{ required: true, message: "请输入城市", trigger: "blur" }],
resourceRemark: [{ required: true, message: "请输入资源描述", trigger: "blur" }],
mediaName: [{ required: true, message: "请输入媒体名称", trigger: "blur" }],
frequency: [{ required: true, message: "请输入频次", trigger: "blur" }],
releaseTotal: [{ required: true, message: "请输入发布总量", trigger: "blur" }],
listPrice: [{ required: true, message: "请输入刊例价", trigger: "blur" }],
listPriceUnit: [{ required: true, message: "请输入刊例价单位", trigger: "blur" }],
actualBuyListPrice: [{ required: true, message: "请输入实际购买刊例价", trigger: "blur" }],
actualBuyListPriceUnit: [{ required: true, message: "请输入实际购买刊例价单位", trigger: "blur" }],
buyCycle: [{ required: true, message: "请输入购买周期", trigger: "change" }],
discount: [{ required: true, message: "请输入折扣", trigger: "blur" }],
mediaRegularPrice: [{ required: true, message: "请输入媒体总净价", trigger: "blur" }],
firstInstallFee: [{ required: true, message: "请输入首次制作安装费", trigger: "blur" }],
totalMakeFee: [{ required: true, message: "请输入总制作费", trigger: "blur" }],
unitPrice: [{ required: true, message: "请输入单价", trigger: "blur" }],
totalRegularPrice: [{ required: true, message: "请输入总净价", trigger: "blur" }],
totalRegularPriceUnit: [{ required: true, message: "请输入总净价单位", trigger: "blur" }],
mediaFeeUnitPrice: [{ required: true, message: "请输入媒体费单价", trigger: "blur" }],
makeFee: [{ required: true, message: "请输入制作费", trigger: "blur" }],
mediaFeeTotalPrice: [{ required: true, message: "请输入媒体费总价", trigger: "blur" }],
finalMediaFeeDiscountPrice: [{ required: true, message: "请输入最终媒体费优惠价", trigger: "blur" }],
dailyAvgPeopleFlow: [{ required: true, message: "请输入单日覆盖人流量", trigger: "blur" }],
totalExposure: [{ required: true, message: "请输入总曝光/人次", trigger: "blur" }],
sov: [{ required: true, message: "请输入SOV", trigger: "blur" }],
cpm: [{ required: true, message: "请输入CPM", trigger: "blur" }],
hasLighting: [{ required: true, message: "请选择是否亮灯", trigger: "change" }],
oddEven: [{ required: true, message: "请输入单面/双面", trigger: "blur" }],
changeDrawMakeFee: [{ required: true, message: "请输入中途换画制作费", trigger: "blur" }],
remark: [{ required: true, message: "请输入备注", trigger: "blur" }]
}
})
const { form, rules } = toRefs(data)
//
const loading = ref(false)
const quotationList = ref([])
const handleAddPrice = () => {
_title.value = '添加报价信息'
form.value.mediaType = 2
open.value = true
}
const handleUpdate = (index, row) => {
_title.value = '编辑报价信息'
editRowIndex.value = index
form.value = row
open.value = true
}
const handleDelete = (index) => {
proxy.$modal.confirm('是否确认删除这条报价信息吗?').then(() => {
quotationList.value.splice(index, 1)
emit('setCompetOfferMediaPrice', 2, quotationList.value)
proxy.$modal.msgSuccess("删除成功")
}).catch(() => { })
}
const handleSubmit = () => {
proxy.$refs["ruleFormRef"].validate(valid => {
if (valid) {
form.value.currentImageSrc = defaultImageSrc.value
if (editRowIndex.value !== null && editRowIndex.value !== undefined) {
quotationList.value[editRowIndex.value] = form.value
} else {
quotationList.value.push(form.value)
}
form.value = {}
open.value = false
emit('setCompetOfferMediaPrice', 2, quotationList.value)
}
})
}
//
const getMediaPrice = (_mediaId, _showOptionColumn) => {
showOptionColumn.value = _showOptionColumn
if (_mediaId) {
mediaPrice({ mediaId: _mediaId }).then(res => {
console.log('历史报价', res)
quotationList.value = res.data.filter(item => item.fileType == 2)
})
}
}
// \
defineExpose({
getMediaPrice
});
</script>

View File

@ -4,44 +4,45 @@
<div class="searchPanel">
<div class="more-search-pane">
<div class="search-where-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" class="searchPanelForm">
<el-form :model="queryParams" :inline="true" class="searchPanelForm">
<el-form-item label="媒体类型:">
<el-select v-model="queryParams.mediaTypeOne" placeholder="请选择"
@change="getMediaTypeTwo" clearable style="min-width: 30px">
<el-select v-model="queryParams.mediaType" placeholder="请选择" @change="getMediaTypeTwo"
clearable style="min-width: 30px">
<el-option v-for="item in mediaTypeOne" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="媒体大类:">
<el-select v-model="queryParams.mediaTypeTwo" placeholder="请选择"
<el-select v-model="queryParams.mediaCategory" placeholder="请选择"
@change="getMediaTypeThree" clearable style="min-width: 30px">
<el-option v-for="item in mediaTypeTwo" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="展示形式:">
<el-select v-model="queryParams.mediaTypeThree" placeholder="请选择" clearable
<el-select v-model="queryParams.displayForm" placeholder="请选择" clearable
style="min-width: 30px">
<el-option v-for="item in mediaTypeThree" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="归属:">
<el-select v-model="queryParams.supplier" placeholder="请选择" style="min-width: 30px;"
clearable>
<el-option v-for="dict in supplierList" :key="dict.value" :label="dict.label"
:value="dict.value" />
<el-select class="filterSelect" v-model="queryParams.belongSupplierId" filterable remote
reserve-keyword :remote-method="getSupplierList" :loading="selectLoading"
placeholder="请输入" remote-show-suffix clearable style="min-width: 70px;">
<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="业务:">
<el-select v-model="queryParams.business" placeholder="请选择" clearable
<el-form-item label="业务部门:">
<el-select v-model="queryParams.businessType" placeholder="请选择" clearable
style="min-width: 30px;">
<el-option v-for="dict in business" :key="dict.value" :label="dict.label"
:value="dict.value" />
<el-option v-for="item in deptList" :key="item.deptId" :label="item.deptName"
:value="item.deptName" />
</el-select>
</el-form-item>
<el-form-item label="状态:">
<el-select v-model="queryParams.media_status" placeholder="请选择" style="min-width: 30px;"
<el-select v-model="queryParams.state" placeholder="请选择" style="min-width: 30px;"
clearable>
<el-option v-for="dict in media_status" :key="dict.value" :label="dict.label"
:value="dict.value" />
@ -60,35 +61,36 @@
</div>
</div>
<div class="searchSmallPanel" v-show="unfoldFlag">
<el-form :model="queryParams" ref="queryRef" :inline="true" class="searchSmallPanelForm">
<el-form :model="queryParams" :inline="true" class="searchSmallPanelForm">
<el-form-item label="城市:">
<el-select v-model="queryParams.provinceId" placeholder="请选择" @change="getCityList" clearable
<el-select v-model="queryParams.provinceCode" placeholder="请选择" @change="getCityList" clearable
style="min-width: 30px">
<el-option v-for="item in province" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="">
<el-select v-model="queryParams.cityId" placeholder="请选择" @change="getCountyList" clearable
<el-select v-model="queryParams.cityCode" placeholder="请选择" @change="getCountyList" clearable
style="min-width: 30px">
<el-option v-for="item in city" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="">
<el-select v-model="queryParams.countyId" placeholder="请选择" @change="getTownList" clearable
<el-select v-model="queryParams.areaCode" placeholder="请选择" @change="getTownList" clearable
style="min-width: 30px">
<el-option v-for="item in county" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="">
<el-select v-model="queryParams.townId" placeholder="请选择" clearable style="min-width: 30px">
<el-select v-model="queryParams.townCode" placeholder="请选择" @change="getbusinessAreaList"
clearable style="min-width: 30px">
<el-option v-for="item in town" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="商圈:">
<el-select v-model="queryParams.approval_document_status" placeholder="请选择" clearable
<el-select v-model="queryParams.businessDistrictId" placeholder="请选择" clearable
style="min-width: 30px;">
<el-option v-for="dict in approval_document_status" :key="dict.value" :label="dict.label"
:value="dict.value" />
<el-option v-for="item in businessAreaList" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
</el-form>
@ -109,10 +111,10 @@
<el-card class="mt10">
<el-row :gutter="10" class="my_row"><el-col :span="8">
<el-form :model="queryParams" ref="queryRef" :inline="true" class="searchInputForm">
<el-form :model="queryParams" :inline="true" class="searchInputForm">
<el-form-item label="">
<el-input v-model="form.postCode" placeholder="请输入媒体名称/媒体编号" :prefix-icon="Search"
style="width: 400px;" />
<el-input v-model="queryParams.mediaName" placeholder="请输入媒体名称/媒体编号"
:prefix-icon="Search" style="width: 400px;" />
</el-form-item>
</el-form>
</el-col>
@ -148,7 +150,6 @@
</el-dropdown>
<el-button type="primary" class="primaryBtn" @click="handleExportExcel">导出excel</el-button>
<el-button type="primary" class="primaryBtn" @click="handleGoMediaMap">媒体可视化地图</el-button>
</el-col>
</el-row>
@ -160,7 +161,7 @@
<el-popover popper-class="myImg_popover" placement="right-start">
<img :src="otherbg" />
<template #reference>
<span class="mediaNameLabel" @click="handleOpenDetail">{{ scope.row.mediaName
<span class="mediaNameLabel" @click="handleOpenDetail(scope.row.id)">{{ scope.row.mediaName
}}</span>
</template>
</el-popover>
@ -231,7 +232,7 @@
</el-table>
<pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
@pagination="getList" />
@pagination="getMediaPageList" />
</el-card>
</div>
<media-form ref="mediaFormRef" v-if="showForm" @handleShowList="handleShowList" />
@ -325,15 +326,18 @@
import { onMounted, ref } from 'vue';
import { useRouter } from 'vue-router'
import { Search } from '@element-plus/icons-vue'
import { sysRegionListByPid } from "@/api/system/administrativeRegion"
import { sysMediaTypeListByPid } from "@/api/system/mediaType"
import optionIcon from '@/assets/images/optionIcon.png'
import optionIconHover from '@/assets/images/optionIconHover.png'
import viewFile from '@/assets/images/viewFile.png'
import viewFileHover from '@/assets/images/viewFileHover.png'
import { useBackgroundStore } from '@/store/modules/background'
import otherbg from '@/assets/images/otherbg.png'
import { listBusSupplier } from "@/api/supplier"
import { sysRegionListByPid } from "@/api/system/administrativeRegion"
import { sysMediaTypeListByPid } from "@/api/system/mediaType"
import { busTradingAreaPage } from "@/api/system/businessArea"
import { mediaPageList, mediaCancel } from "@/api/mediaLibrary"
import { listDept } from "@/api/system/dept"
//
import mediaForm from "./mediaForm.vue";
import mediaDetail from "./mediaDetail.vue";
import mediaLogs from "./mediaLogs.vue";
@ -341,28 +345,79 @@ import historyData from "./historyData.vue"
import downFiles from './downFiles.vue';
import viewFileDialog from '@/components/ViewFile/index.vue'
import exportDialog from './exportDialog.vue';
import { useBackgroundStore } from '@/store/modules/background'
const router = useRouter()
const bgStore = useBackgroundStore()
const { proxy } = getCurrentInstance()
const { media_form, display_form, key_words, media_schedule, media_format, sales_method, business, media_status, approval_document_status } = proxy.useDict("media_form", "display_form", "key_words", "media_schedule", "media_format", "sales_method", "business", "media_status", "approval_document_status")
const { media_status } = proxy.useDict("media_status")
//
const province = ref([])
const city = ref([])
const county = ref([])
const town = ref([])
//
const businessAreaList = ref([])
//
const mediaTypeOne = ref([])
const mediaTypeTwo = ref([])
const mediaTypeThree = ref([])
const uploadOpen = ref(false)
const docUploadList = ref([])
//
const supplierList = ref([])
const selectLoading = ref(false)
//
const deptList = ref([])
//
const defaultImageSrc = ref(optionIcon);
const hoverImageSrc = ref(optionIconHover);
//
const defaultViewFileSrc = ref(viewFile);
const hoverViewFileSrc = ref(viewFileHover);
//
const mediaList = ref([])
//
const loading = ref(true)
const total = ref(0)
const data = reactive({
abolishForm: {},
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
mediaType: undefined,
mediaCategory: undefined,
displayForm: undefined,
belongSupplierId: undefined,
businessType: undefined,
state: undefined,
mediaType: undefined,
mediaCategory: undefined,
provinceCode: undefined,
cityCode: undefined,
areaCode: undefined,
townCode: undefined,
businessDistrictId: undefined
},
abolishRules: {
content: [{ required: true, message: "请输入废除原因", trigger: "blur" }],
}
})
const { queryParams, form, abolishForm, abolishRules } = toRefs(data)
//
const showForm = ref(false)
const mediaFormRef = ref(null)
//
const showDetail = ref(false)
const mediaDetailRef = ref(null)
//
const showLogs = ref(false)
const mediaLogsRef = ref(null)
const uploadOpen = ref(false)
const docUploadList = ref([])
const abolishOpen = ref(false)
const historyDataRef = ref(null)
const downFileRef = ref(null)
@ -392,58 +447,15 @@ const cities = [
]
//
const supplierList = ref([])
//
const multipleChoseArr = ref([])
//
const defaultImageSrc = ref(optionIcon);
const hoverImageSrc = ref(optionIconHover);
//
const defaultViewFileSrc = ref(viewFile);
const hoverViewFileSrc = ref(viewFileHover);
const mediaList = ref([
{ id: 1, mediaName: '遵义市海风井铁路桥', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 2, mediaName: '遵义市海风井铁路桥跨街大牌', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 3, mediaName: '遵义市海风井铁路桥跨街大牌2', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 4, mediaName: '遵义市海风井铁路桥跨街大牌3', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 5, mediaName: '遵义市海风井铁路桥(华南大酒店旁)跨街大牌', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 6, mediaName: '遵义市海风井铁路桥', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 7, mediaName: '遵义市海风井铁路桥跨街大牌', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 8, mediaName: '遵义市海风井铁路桥跨街大牌2', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 9, mediaName: '遵义市海风井铁路桥跨街大牌3', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 10, mediaName: '遵义市海风井铁路桥(华南大酒店旁)跨街大牌', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 11, mediaName: '遵义市海风井铁路桥', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 12, mediaName: '遵义市海风井铁路桥跨街大牌', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 13, mediaName: '遵义市海风井铁路桥跨街大牌2', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 14, mediaName: '遵义市海风井铁路桥跨街大牌3', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 15, mediaName: '遵义市海风井铁路桥(华南大酒店旁)跨街大牌', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 16, mediaName: '遵义市海风井铁路桥', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 17, mediaName: '遵义市海风井铁路桥跨街大牌', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 18, mediaName: '遵义市海风井铁路桥跨街大牌2', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 19, mediaName: '遵义市海风井铁路桥跨街大牌3', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value },
{ id: 20, mediaName: '遵义市海风井铁路桥(华南大酒店旁)跨街大牌', currentImageSrc: defaultImageSrc.value, currentCataloguePhotoSrc: defaultViewFileSrc.value, currentMediaChainSrc: defaultViewFileSrc.value, currentQualificationFileSrc: defaultViewFileSrc.value, currentStampedPublicationSrc: defaultViewFileSrc.value }
])
// PPT
const exportPPT = reactive({
open: false,
title: "",
})
const loading = ref(true)
const total = ref(0)
const data = reactive({
abolishForm: {},
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
},
abolishRules: {
content: [{ required: true, message: "请输入废除原因", trigger: "blur" }],
}
})
const { queryParams, form, abolishForm, abolishRules } = toRefs(data)
//
const getMediaTypeOne = () => {
@ -466,6 +478,25 @@ const getMediaTypeThree = (value) => {
mediaTypeThree.value = res.data
})
}
//
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 = []
}
}
//
const getDepList = () => {
listDept({ businessFlag: 1 }).then(response => {
deptList.value = response.data
})
}
// /
const getProvinceList = () => {
sysRegionListByPid({ parentId: '0' }).then(res => {
@ -480,6 +511,7 @@ const getCityList = (value) => {
queryParams.value.townId = undefined
city.value = res.data
})
getbusinessAreaList()
}
// /
const getCountyList = (value) => {
@ -488,6 +520,7 @@ const getCountyList = (value) => {
queryParams.value.townId = undefined
county.value = res.data
})
getbusinessAreaList()
}
//
const getTownList = (value) => {
@ -495,13 +528,59 @@ const getTownList = (value) => {
queryParams.value.townId = undefined
town.value = res.data
})
getbusinessAreaList()
}
//
const getbusinessAreaList = (val) => {
const _params = {
pageIndex: 1,
pageSize: 200,
provinceId: queryParams.value.provinceCode,
cityId: queryParams.value.cityCode,
countyId: queryParams.value.areaCode,
townId: queryParams.value.townCode,
}
busTradingAreaPage(_params).then(res => {
if (res.code == 200) {
businessAreaList.value = res.data.list
}
})
}
//
const unfoldFlag = ref(false)
const handleFlod = () => {
unfoldFlag.value = !unfoldFlag.value
}
/** 查询媒体信息列表 */
const getMediaPageList = () => {
loading.value = false
mediaPageList(queryParams.value).then(res => {
res.data.rows.forEach(element => {
element.currentImageSrc = defaultImageSrc.value;
element.currentCataloguePhotoSrc = defaultViewFileSrc.value;
element.currentMediaChainSrc = defaultViewFileSrc.value;
element.currentQualificationFileSrc = defaultViewFileSrc.value;
element.currentStampedPublicationSrc = defaultViewFileSrc.value;
});
mediaList.value = res.data.rows
total.value = res.data.total
loading.value = false
})
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1
getMediaPageList()
}
/** 重置按钮操作 */
const resetQuery = () => {
handleQuery()
}
//
const handleSelectionChange = (selection) => {
multipleChoseArr.value = selection
@ -509,32 +588,12 @@ const handleSelectionChange = (selection) => {
//
const handleCloseTag = (tag) => {
}
/** 查询岗位列表 */
const getList = () => {
loading.value = false
// listPost(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => {
// postList.value = response.rows
// total.value = response.total
// loading.value = false
// })
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
proxy.resetForm("queryRef")
handleQuery()
}
//
const handleOpenAddForm = () => {
showForm.value = true
nextTick(() => {
mediaFormRef.value.initForm('新建媒体信息', { supplierId: null })
mediaFormRef.value.initForm('新建媒体信息', { id: null })
})
}
//
@ -545,16 +604,17 @@ const handleUpdate = (row) => {
})
}
//
const handleOpenDetail = () => {
const handleOpenDetail = (_mediaId) => {
showDetail.value = true
nextTick(() => {
// mediaDetailRef.value.formTitle = ''
mediaDetailRef.value.getMediaInfo(_mediaId)
})
}
//
const handleShowList = () => {
console.log('触发')
showForm.value = false
getMediaPageList()
}
//
const handleCloseDetail = () => {
@ -710,7 +770,8 @@ const handleGoMediaMap = () => {
//
onMounted(() => {
bgStore.setBgImage(otherbg)
getList()
getMediaPageList()
getDepList()
getMediaTypeOne()
getProvinceList()
});

View File

@ -12,14 +12,14 @@
<el-form ref="ruleFormRef" :model="detailForm" label-width="200px" class="myDetailForm">
<div class="supplierTitleContainer">
<div class="supplierNameIcon" />
<div class="supplierNameTitle">银川金凤区新华联广场门口上方LED</div>
<div class="supplierNameTitle">{{ detailForm.mediaName }}</div>
</div>
<el-collapse class="my-collapse" v-model="activeNames" @change="handleChange">
<el-collapse-item title="业务部门" name="1">
<el-row :gutter="30" class="my_form_row">
<el-col :span="6">
<el-form-item label="业务部门" prop="business">
优势媒体部门
{{ detailForm.businessType }}
</el-form-item>
</el-col>
</el-row>
@ -28,17 +28,17 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="6">
<el-form-item label="状态" prop="business_department">
生效中
{{ detailForm.state }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体编号" prop="business_department">
MT2023101100009
{{ detailForm.mediaCode }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="媒体形式/名称" prop="business_department">
银川金凤区新华联广场门口上方LED
{{ detailForm.mediaName }}
</el-form-item>
</el-col>
</el-row>
@ -46,22 +46,22 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="6">
<el-form-item label="媒体类型" prop="business_department">
待定
{{ detailForm.mediaType }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体大类" prop="business_department">
待定
{{ detailForm.mediaCategory }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="展示形式" prop="business_department">
待定
{{ detailForm.displayForm }}
</el-form-item>
</el-col>
<el-col :span="6" v-if="detailForm.business == '优势媒体部门'">
<el-form-item label="是否有照明" prop="business_department">
待定
{{ detailForm.hasLighting }}
</el-form-item>
</el-col>
</el-row>
@ -69,22 +69,22 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="6">
<el-form-item label="播放时间" prop="business_department">
待定
{{ detailForm.playbackTime }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体尺寸" prop="business_department">
待定
{{ detailForm.mediaSize }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="MR" prop="business_department">
待定
{{ detailForm.mr }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="日均车流量" prop="business_department">
待定
{{ detailForm.dailyAvgVehicleFlow }}
</el-form-item>
</el-col>
</el-row>
@ -92,7 +92,7 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="24">
<el-form-item label="媒体朝向" prop="business_department">
待定
{{ detailForm.mediaOrientation }}
</el-form-item>
</el-col>
</el-row>
@ -100,12 +100,12 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="18">
<el-form-item label="城市" prop="business_department">
待定
{{ detailForm.provinceName }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="商圈" prop="business_department">
待定
{{ detailForm.businessDistrictName }}
</el-form-item>
</el-col>
</el-row>
@ -113,7 +113,7 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="24">
<el-form-item label="地址" prop="business_department">
待定
{{ detailForm.address }}
</el-form-item>
</el-col>
</el-row>
@ -121,7 +121,7 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="24">
<el-form-item label="地理位置">
待定
{{ detailForm.mapX }},{{ detailForm.mapY }}
</el-form-item>
</el-col>
</el-row>
@ -129,369 +129,47 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="6">
<el-form-item label="最小购买周期">
待定
{{ detailForm.minPurchaseCycle }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="首次制作安装费">
待定
{{ detailForm.firstInstallFee }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="换刊制作安装费">
待定
{{ detailForm.changeInstallFee }}
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="媒体报价信息" name="3">
<div v-if="detailForm.business == '优势媒体部门'">
<el-table v-loading="loading" :data="quotationList" height="382px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="年度" align="left" prop="year" width="100" />
<el-table-column label="城市/市场" align="left" prop="postCode" width="150" />
<el-table-column label="媒体大类" align="left" prop="postCode" width="150" />
<el-table-column label="媒体形式/名称" align="left" prop="mediaName" width="200">
<template #default="scope">
<span class="mediaNameLabel">{{ scope.row.mediaName }}</span>
</template>
</el-table-column>
<el-table-column label="频次" align="left" prop="postCode" width="150" />
<el-table-column label="统一对外刊例价" align="left" prop="postCode" width="180" />
<el-table-column label="单位" align="left" prop="postCode" width="150" />
<el-table-column label="实际购买频次" align="left" prop="postCode" width="150" />
<el-table-column label="实际购买刊例价" align="left" prop="postCode" width="150" />
<el-table-column label="购买周期" align="left" prop="postCode" width="150" />
<el-table-column label="折扣" align="left" prop="postCode" width="150" />
<el-table-column label="媒体总净价" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="总制作费" align="center" prop="mediaChain" width="160" />
<el-table-column label="总净价" align="center" prop="qualificationFile" width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="stampedPublication" width="150" />
<el-table-column label="SOV" align="center" prop="postCode" width="150" />
<el-table-column label="CPM" align="center" prop="postCode" width="150" />
<el-table-column label="备注" align="center" prop="postCode" width="150" />
<el-table-column label="是否框内" align="center" prop="postCode" width="150" />
<el-table-column label="成本" align="center" prop="postCode" width="150" />
<el-table-column label="制作成本" align="center" prop="postCode" width="150" />
<el-table-column label="供应商" align="center" prop="postCode" width="150" />
<el-table-column label="项目名称" align="left" prop="postCode" width="150" />
<el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" />
</el-table>
<div v-if="detailForm.business == '优势媒体部门'">
<competitiveOffer ref="competitiveOfferRef" />
</div>
<div v-if="detailForm.business == '网络媒体部门'">
<el-tabs v-model="activePriceType" @tab-click="handlePriceTypeClick">
<el-tab-pane label="门禁" name="门禁">
<el-table v-loading="loading" :data="quotationList" height="382px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="postCode" width="150" />
<el-table-column label="媒体名称" align="left" prop="mediaName" width="200">
<template #default="scope">
<span class="mediaNameLabel">{{ scope.row.mediaName }}</span>
</template>
</el-table-column>
<el-table-column label="频次" align="left" prop="postCode" width="150" />
<el-table-column label="刊例价" align="left" prop="postCode" width="180" />
<el-table-column label="刊例价单位" align="left" prop="postCode" width="150" />
<el-table-column label="实际购买刊例价" align="left" prop="postCode" width="150" />
<el-table-column label="实际购买刊例价单位" align="left" prop="postCode" width="150" />
<el-table-column label="投放数量" align="left" prop="postCode" width="150" />
<el-table-column label="起购周期" align="left" prop="postCode" width="150" />
<el-table-column label="折扣" align="left" prop="postCode" width="150" />
<el-table-column label="媒体总净价" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="首次制作安装费" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="总制作费" align="center" prop="mediaChain" width="160" />
<el-table-column label="单价" align="center" prop="mediaChain" width="160" />
<el-table-column label="发布总净价" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="发布总净价单位" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="媒体费总价" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="stampedPublication"
width="150" />
<el-table-column label="总曝光/人次" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="SOV" align="center" prop="postCode" width="150" />
<el-table-column label="CPM" align="center" prop="postCode" width="150" />
<el-table-column label="备注" align="center" prop="postCode" width="150" />
<el-table-column label="AB面划分" align="center" prop="postCode" width="150" />
<el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" />
</el-table>
<el-tab-pane label="门禁" name="门禁">
<accessControlPrice ref="accessControlPriceRef" />
</el-tab-pane>
<el-tab-pane label="候车厅" name="候车厅">
<el-table v-loading="loading" :data="quotationList" height="382px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="postCode" width="150" />
<el-table-column label="资源描述" align="left" prop="postCode" width="150" />
<el-table-column label="媒体名称" align="left" prop="mediaName" width="200">
<template #default="scope">
<span class="mediaNameLabel">{{ scope.row.mediaName }}</span>
</template>
</el-table-column>
<el-table-column label="频次" align="left" prop="postCode" width="150" />
<el-table-column label="发布总量" align="left" prop="postCode" width="150" />
<el-table-column label="刊例价" align="left" prop="postCode" width="180" />
<el-table-column label="刊例价单位" align="left" prop="postCode" width="150" />
<el-table-column label="实际购买刊例价" align="left" prop="postCode" width="150" />
<el-table-column label="实际购买刊例价单位" align="left" prop="postCode" width="150" />
<el-table-column label="购买周期" align="left" prop="postCode" width="150" />
<el-table-column label="折扣" align="left" prop="postCode" width="150" />
<el-table-column label="媒体总净价" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="首次制作安装费" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="总制作费" align="center" prop="mediaChain" width="160" />
<el-table-column label="总净价" align="center" prop="qualificationFile" width="130" />
<el-table-column label="总净价单位" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="媒体费单价" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="制作费" align="center" prop="qualificationFile" width="130" />
<el-table-column label="媒体费总价" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="最终媒体费优惠价" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="stampedPublication"
width="150" />
<el-table-column label="总曝光/人次" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="SOV" align="center" prop="postCode" width="150" />
<el-table-column label="CPM" align="center" prop="postCode" width="150" />
<el-table-column label="是否亮灯" align="center" prop="postCode" width="150" />
<el-table-column label="单面/双面" align="center" prop="postCode" width="150" />
<el-table-column label="中途换画制作费" align="center" prop="postCode" width="150" />
<el-table-column label="备注" align="center" prop="postCode" width="150" />
<el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" />
</el-table>
<el-tab-pane label="候车厅" name="候车厅">
<waitingHallPrice ref="waitingHallPriceRef" />
</el-tab-pane>
<el-tab-pane label="道闸" name="道闸">
<el-table v-loading="loading" :data="quotationList" height="382px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="postCode" width="150" />
<el-table-column label="媒体名称" align="left" prop="mediaName" width="200">
<template #default="scope">
<span class="mediaNameLabel">{{ scope.row.mediaName }}</span>
</template>
</el-table-column>
<el-table-column label="频次" align="left" prop="postCode" width="150" />
<el-table-column label="发布总量" align="left" prop="postCode" width="150" />
<el-table-column label="刊例价" align="left" prop="postCode" width="180" />
<el-table-column label="刊例价单位" align="left" prop="postCode" width="150" />
<el-table-column label="最短购买周期" align="left" prop="postCode" width="150" />
<el-table-column label="折扣" align="left" prop="postCode" width="150" />
<el-table-column label="媒体总净价" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="首次制作安装费" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="总制作费" align="center" prop="mediaChain" width="160" />
<el-table-column label="总净价" align="center" prop="qualificationFile" width="130" />
<el-table-column label="总净价单位" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="4周/面" align="center" prop="qualificationFile" width="130" />
<el-table-column label="媒体费总价" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="stampedPublication"
width="150" />
<el-table-column label="总曝光/人次" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="SOV" align="center" prop="postCode" width="150" />
<el-table-column label="CPM" align="center" prop="postCode" width="150" />
<el-table-column label="备注" align="center" prop="postCode" width="150" />
<el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" />
</el-table>
<el-tab-pane label="道闸" name="道闸">
<barrierGatePrice ref="barrierGatePriceRef" />
</el-tab-pane>
<el-tab-pane label="地铁" name="地铁">
<el-table v-loading="loading" :data="quotationList" height="382px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="postCode" width="150" />
<el-table-column label="线路" align="left" prop="postCode" width="150" />
<el-table-column label="站点" align="left" prop="postCode" width="150" />
<el-table-column label="级别" align="left" prop="postCode" width="150" />
<el-table-column label="媒体形式" align="left" prop="postCode" width="150" />
<el-table-column label="媒体名称" align="left" prop="mediaName" width="200">
<template #default="scope">
<span class="mediaNameLabel">{{ scope.row.mediaName }}</span>
</template>
</el-table-column>
<el-table-column label="频次" align="left" prop="postCode" width="150" />
<el-table-column label="刊例价" align="left" prop="postCode" width="180" />
<el-table-column label="刊例价单位" align="left" prop="postCode" width="150" />
<el-table-column label="实际购买刊例价" align="left" prop="postCode" width="150" />
<el-table-column label="实际购买刊例价单位" align="left" prop="postCode" width="150" />
<el-table-column label="短期附加费" align="left" prop="postCode" width="150" />
<el-table-column label="创意附加费" align="left" prop="postCode" width="150" />
<el-table-column label="起投周期" align="left" prop="postCode" width="150" />
<el-table-column label="投放周期" align="left" prop="postCode" width="150" />
<el-table-column label="购买数量" align="left" prop="postCode" width="150" />
<el-table-column label="购买数量单位" align="left" prop="postCode" width="150" />
<el-table-column label="折扣" align="left" prop="postCode" width="150" />
<el-table-column label="媒体总净价" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="媒体总净价单位" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="常规制作费" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="创意制作费" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="总制作费" align="center" prop="mediaChain" width="160" />
<el-table-column label="总净价" align="center" prop="qualificationFile" width="130" />
<el-table-column label="总净价单位" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="底价" align="center" prop="qualificationFile" width="130" />
<el-table-column label="低价总" align="center" prop="qualificationFile" width="130" />
<el-table-column label="制作费" align="center" prop="qualificationFile" width="130" />
<el-table-column label="媒体费总价" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="stampedPublication"
width="150" />
<el-table-column label="发布期内总曝光人次" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="同站内同类媒体数量或列车总量" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="SOV" align="center" prop="postCode" width="150" />
<el-table-column label="CPM" align="center" prop="postCode" width="150" />
<el-table-column label="覆盖热区" align="center" prop="postCode" width="150" />
<el-table-column label="备注" align="center" prop="postCode" width="150" />
<el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" />
</el-table>
<el-tab-pane label="地铁" name="地铁">
<subwayPrice ref="subwayPriceRef" />
</el-tab-pane>
<el-tab-pane label="高铁" name="高铁">
<el-table v-loading="loading" :data="quotationList" height="382px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="postCode" width="150" />
<el-table-column label="场站" align="left" prop="postCode" width="150" />
<el-table-column label="媒体位置" align="left" prop="mediaName" width="200">
<template #default="scope">
<span class="mediaNameLabel">{{ scope.row.mediaName }}</span>
</template>
</el-table-column>
<el-table-column label="频次" align="left" prop="postCode" width="150" />
<el-table-column label="发布总量" align="left" prop="postCode" width="150" />
<el-table-column label="刊例价" align="left" prop="postCode" width="180" />
<el-table-column label="刊例价单位" align="left" prop="postCode" width="150" />
<el-table-column label="购买周期" align="left" prop="postCode" width="150" />
<el-table-column label="折扣" align="left" prop="postCode" width="150" />
<el-table-column label="媒体总净价" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="首次制作安装费" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="总制作费" align="center" prop="mediaChain" width="160" />
<el-table-column label="总净价" align="center" prop="qualificationFile" width="130" />
<el-table-column label="总净价单位" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="客流量/人次" align="center" prop="stampedPublication"
width="150" />
<el-table-column label="总曝光/人次" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="SOV" align="center" prop="postCode" width="150" />
<el-table-column label="CPM" align="center" prop="postCode" width="150" />
<el-table-column label="成本折扣" align="center" prop="postCode" width="150" />
<el-table-column label="成本" align="center" prop="postCode" width="150" />
<el-table-column label="备注" align="center" prop="postCode" width="150" />
<el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" />
</el-table>
<el-tab-pane label="高铁" name="高铁">
<highSpeedRailway ref="highSpeedRailwayRef" />
</el-tab-pane>
<el-tab-pane label="写字楼" name="写字楼">
<el-table v-loading="loading" :data="quotationList" height="382px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="postCode" width="150" />
<el-table-column label="媒体名称" align="left" prop="mediaName" width="200">
<template #default="scope">
<span class="mediaNameLabel">{{ scope.row.mediaName }}</span>
</template>
</el-table-column>
<el-table-column label="频次" align="left" prop="postCode" width="150" />
<el-table-column label="发布总量" align="left" prop="postCode" width="150" />
<el-table-column label="刊例价" align="left" prop="postCode" width="180" />
<el-table-column label="刊例价单位" align="left" prop="postCode" width="150" />
<el-table-column label="实际购买刊例价" align="left" prop="postCode" width="180" />
<el-table-column label="实际购买刊例价单位" align="left" prop="postCode" width="150" />
<el-table-column label="购买周期" align="left" prop="postCode" width="150" />
<el-table-column label="折扣" align="left" prop="postCode" width="150" />
<el-table-column label="媒体总净价" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="首次制作安装费" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="总制作费" align="center" prop="mediaChain" width="160" />
<el-table-column label="总净价" align="center" prop="qualificationFile" width="130" />
<el-table-column label="总净价单位" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="媒体费总价" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="stampedPublication"
width="150" />
<el-table-column label="总曝光/人次" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="SOV" align="center" prop="postCode" width="150" />
<el-table-column label="CPM" align="center" prop="postCode" width="150" />
<el-table-column label="成本折扣" align="center" prop="postCode" width="150" />
<el-table-column label="备注" align="center" prop="postCode" width="150" />
<el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" />
</el-table>
<el-tab-pane label="写字楼" name="写字楼">
<officeBuilding ref="officeBuildingRef" />
</el-tab-pane>
<el-tab-pane label="车库灯箱" name="车库灯箱">
<el-table v-loading="loading" :data="quotationList" height="382px">
<el-table-column label="序号" align="center" width="80">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="城市" align="left" prop="postCode" width="150" />
<el-table-column label="媒体名称" align="left" prop="mediaName" width="200">
<template #default="scope">
<span class="mediaNameLabel">{{ scope.row.mediaName }}</span>
</template>
</el-table-column>
<el-table-column label="频次" align="left" prop="postCode" width="150" />
<el-table-column label="发布总量" align="left" prop="postCode" width="150" />
<el-table-column label="刊例价" align="left" prop="postCode" width="180" />
<el-table-column label="刊例价单位" align="left" prop="postCode" width="150" />
<el-table-column label="实际购买刊例价" align="left" prop="postCode" width="180" />
<el-table-column label="实际购买刊例价单位" align="left" prop="postCode" width="150" />
<el-table-column label="购买周期" align="left" prop="postCode" width="150" />
<el-table-column label="折扣" align="left" prop="postCode" width="150" />
<el-table-column label="媒体总净价" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="首次制作安装费" align="center" prop="cataloguePhoto" width="230" />
<el-table-column label="总制作费" align="center" prop="mediaChain" width="160" />
<el-table-column label="总净价" align="center" prop="qualificationFile" width="130" />
<el-table-column label="总净价单位" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="媒体费总价" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="单日覆盖人流量" align="center" prop="stampedPublication"
width="150" />
<el-table-column label="总曝光/人次" align="center" prop="qualificationFile"
width="130" />
<el-table-column label="SOV" align="center" prop="postCode" width="150" />
<el-table-column label="CPM" align="center" prop="postCode" width="150" />
<el-table-column label="成本折扣" align="center" prop="postCode" width="150" />
<el-table-column label="备注" align="center" prop="postCode" width="150" />
<el-table-column label="录入人员" align="center" prop="postCode" width="150" />
<el-table-column label="录入时间" align="center" prop="postCode" width="150" />
</el-table>
<el-tab-pane label="车库灯箱" name="车库灯箱">
<garageLightBox ref="garageLightBoxRef" />
</el-tab-pane>
</el-tabs>
</div>
@ -500,22 +178,22 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="6">
<el-form-item label="媒体归属名称">
待定
{{ detailForm.belongSupplierName }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="联系人">
待定
{{ detailForm.contactUserName }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="联系电话" prop="business">
13746577654
{{ detailForm.contactUserPhone }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体是否有改造" prop="business">
{{ detailForm.hasReform }}
</el-form-item>
</el-col>
</el-row>
@ -523,22 +201,22 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="6">
<el-form-item label="发票类型">
待定
{{ detailForm.invoiceType }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="税点">
待定
{{ detailForm.taxRate }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="付款要求">
待定
{{ detailForm.paymentRequirements }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体公司名称" prop="business">
待定
{{ detailForm.mediaCompanyName }}
</el-form-item>
</el-col>
</el-row>
@ -546,22 +224,22 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="6">
<el-form-item label="物业公司名称" prop="business">
待定
{{ detailForm.propertyCompanyName }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="审批部门" prop="business">
待定
{{ detailForm.approvalDept }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="批文情况">
待定
{{ detailForm.approvalSituation }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="批文发布时间">
待定
{{ detailForm.approvalReleaseTime }}
</el-form-item>
</el-col>
</el-row>
@ -569,22 +247,22 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="6">
<el-form-item label="媒体独家授权" prop="business">
待定
{{ detailForm.soleAgentAuth }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="独家授权时间">
待定
{{ detailForm.soleAgentAuthTime }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体行业授权" prop="business">
待定
{{ detailForm.industryAuth }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="媒体行业授权时间">
待定
{{ detailForm.industryAuthTime }}
</el-form-item>
</el-col>
</el-row>
@ -592,7 +270,7 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="24">
<el-form-item label="行业限制" prop="business">
待定
{{ detailForm.industryLimit }}
</el-form-item>
</el-col>
</el-row>
@ -600,7 +278,7 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="24">
<el-form-item label="媒体曾经经营公司" prop="business">
待定
{{ detailForm.everManagerCompany }}
</el-form-item>
</el-col>
</el-row>
@ -608,7 +286,7 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="24">
<el-form-item label="媒体时间线" prop="business">
待定
{{ detailForm.mediaTimeline }}
</el-form-item>
</el-col>
</el-row>
@ -616,7 +294,7 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="24">
<el-form-item label="曾经媒体情况" prop="business">
待定
{{ detailForm.everMediaSituation }}
</el-form-item>
</el-col>
</el-row>
@ -624,7 +302,7 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="24">
<el-form-item label="媒体历史事件" prop="business">
待定
{{ detailForm.mediaHistory }}
</el-form-item>
</el-col>
</el-row>
@ -632,7 +310,7 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '网络媒体部门'">
<el-col :span="24">
<el-form-item label="同类媒体公司" prop="business">
待定
{{ detailForm.equalsMediaCompany }}
</el-form-item>
</el-col>
</el-row>
@ -640,7 +318,7 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="24">
<el-form-item label="其他" prop="business">
待定
{{ detailForm.other }}
</el-form-item>
</el-col>
</el-row>
@ -648,7 +326,7 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="24">
<el-form-item label="批文文件" class="filesItemContent">
<supplierDetailFile ref="approvalDocumentRef" />
</el-form-item>
</el-col>
</el-row>
@ -656,7 +334,7 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="24">
<el-form-item label="独家授权文件" class="filesItemContent">
<supplierDetailFile ref="exclusiveLicenseFileRef" />
</el-form-item>
</el-col>
</el-row>
@ -664,7 +342,7 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="24">
<el-form-item label="媒体行业授权文件" class="filesItemContent">
<supplierDetailFile ref="mediaLicenseFileRef" />
</el-form-item>
</el-col>
</el-row>
@ -672,7 +350,7 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '网络媒体部门'">
<el-col :span="24">
<el-form-item label="媒体归属附件" class="filesItemContent">
<supplierDetailFile ref="mediaOwnershipRef" />
</el-form-item>
</el-col>
</el-row>
@ -680,7 +358,7 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="24">
<el-form-item label="曾经媒体照片" prop="business" class="filesItemContent">
<supplierDetailFile ref="onceMediaPhotoRef" />
</el-form-item>
</el-col>
</el-row>
@ -689,7 +367,7 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="24">
<el-form-item label="优势" prop="business">
{{ detailForm.advantages }}
</el-form-item>
</el-col>
</el-row>
@ -697,7 +375,7 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="24">
<el-form-item label="备注" prop="business">
{{ detailForm.remark }}
</el-form-item>
</el-col>
</el-row>
@ -705,7 +383,7 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="24">
<el-form-item label="图片上传" class="filesItemContent" prop="business_department">
<supplierDetailFile ref="mediaPicRef" />
</el-form-item>
</el-col>
</el-row>
@ -713,7 +391,7 @@
<el-row :gutter="30" class="my_form_row">
<el-col :span="24">
<el-form-item label="视频上传" class="filesItemContent" prop="business_department">
<supplierDetailFile ref="mediaVideoRef" />
</el-form-item>
</el-col>
</el-row>
@ -721,7 +399,7 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="24">
<el-form-item label="盖章刊例" class="filesItemContent" prop="business">
<supplierDetailFile ref="stampedPublicationRef" />
</el-form-item>
</el-col>
</el-row>
@ -729,7 +407,7 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="24">
<el-form-item label="资质文件" class="filesItemContent" prop="business">
<supplierDetailFile ref="qualificationFileRef" />
</el-form-item>
</el-col>
</el-row>
@ -737,7 +415,7 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="24">
<el-form-item label="媒体链条" class="filesItemContent" prop="business">
<supplierDetailFile ref="mediaChainRef" />
</el-form-item>
</el-col>
</el-row>
@ -745,7 +423,7 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '优势媒体部门'">
<el-col :span="24">
<el-form-item label="刊例照片" class="filesItemContent" prop="business">
<supplierDetailFile ref="journalCataloguePhotoRef" />
</el-form-item>
</el-col>
</el-row>
@ -753,7 +431,7 @@
<el-row :gutter="30" class="my_form_row" v-if="detailForm.business == '网络媒体部门'">
<el-col :span="24">
<el-form-item label="MR和制作要求" class="filesItemContent" prop="business">
<supplierDetailFile ref="mRProductionRequirementsRef" />
</el-form-item>
</el-col>
</el-row>
@ -765,34 +443,150 @@
<script setup>
import { onMounted, defineEmits, ref } from 'vue'
import { Close } from '@element-plus/icons-vue'
import { mediaDetail } from "@/api/mediaLibrary"
import competitiveOffer from './components/competitiveOffer.vue'
import accessControlPrice from './components/accessControlPrice.vue'
import waitingHallPrice from './components/waitingHallPrice.vue'
import barrierGatePrice from './components/barrierGatePrice.vue'
import subwayPrice from './components/subwayPrice.vue'
import highSpeedRailway from './components/highSpeedRailway.vue'
import officeBuilding from './components/officeBuilding.vue'
import garageLightBox from './components/garageLightBox.vue'
import supplierDetailFile from '../../components/FileUpload/supplierDetailFile.vue';
import { useBackgroundStore } from '@/store/modules/background'
import otherbg from '@/assets/images/otherbg.png'
const bgStore = useBackgroundStore()
const { proxy } = getCurrentInstance()
const emit = defineEmits(['handleShowList']);
const detailForm = ref({
business: '优势媒体部门',
supplierList: [
{ medioName: '银川金凤区新华联广场门口上方LED', medioCode: 'MT2023101100009', medioType: 'LED', medioClass: '电子广告', medioStatus: 1 },
{ medioName: '银川金凤区新华联广场门口上方LED', medioCode: 'MT2023101100009', medioType: 'LED', medioClass: '电子广告', medioStatus: 1 }
]
})
//
const detailForm = ref({})
const activePriceType = ref('门禁')
const quotationList = ref([
{ year: 2025 }
])
const activeNames = ref(['1', '2', '3', '4'])
//
const competitiveOfferRef = ref(null)
//
const accessControlPriceRef = ref(null)
//
const waitingHallPriceRef = ref(null)
//
const barrierGatePriceRef = ref(null)
//
const subwayPriceRef = ref(null)
//
const highSpeedRailwayRef = ref(null)
//
const officeBuildingRef = ref(null)
//
const garageLightBoxRef = ref(null)
//
const approvalDocumentRef = ref(null)
//
const exclusiveLicenseFileRef = ref(null)
//
const mediaLicenseFileRef = ref(null)
//
const mediaOwnershipRef = ref(null)
//
const onceMediaPhotoRef = ref(null)
//
const mediaPicRef = ref(null)
//
const mediaVideoRef = ref(null)
//
const stampedPublicationRef = ref(null)
//
const qualificationFileRef = ref(null)
//
const mediaChainRef = ref(null)
//
const journalCataloguePhotoRef = ref(null)
// MR
const mRProductionRequirementsRef = ref(null)
//
const handleClose = () => {
emit('handleShowList')
}
//
const handleChange = (val) => {
console.log(val)
activeNames.value = val
}
const handleOpenMedio = () => {
//
const businessTypeName = ref('优势媒体部')
const handleChangeDept = (val) => {
const choseDep = deptList.value.filter(item => item.deptId == val)[0]
businessTypeName.value = choseDep?.deptName
nextTick(() => {
if (businessTypeName.value == '优势媒体部' && competitiveOfferRef.value) competitiveOfferRef.value.getMediaPrice(detailForm.value.id, false)
if (businessTypeName.value == '网络媒体部' && activePriceType.value == '门禁') accessControlPriceRef.value.getMediaPrice(detailForm.value.id, false)
if (businessTypeName.value == '网络媒体部' && activePriceType.value == '候车厅') waitingHallPriceRef.value.getMediaPrice(detailForm.value.id, false)
if (businessTypeName.value == '网络媒体部' && activePriceType.value == '道闸') barrierGatePriceRef.value.getMediaPrice(detailForm.value.id, false)
if (businessTypeName.value == '网络媒体部' && activePriceType.value == '地铁') subwayPriceRef.value.getMediaPrice(detailForm.value.id, false)
if (businessTypeName.value == '网络媒体部' && activePriceType.value == '高铁') highSpeedRailwayRef.value.getMediaPrice(detailForm.value.id, false)
if (businessTypeName.value == '网络媒体部' && activePriceType.value == '写字楼') officeBuildingRef.value.getMediaPrice(detailForm.value.id, false)
if (businessTypeName.value == '网络媒体部' && activePriceType.value == '车库灯箱') garageLightBoxRef.value.getMediaPrice(detailForm.value.id, false)
})
}
const getMediaInfo = (mediaId) => {
mediaDetail(mediaId).then(res => {
detailForm.value = res.data
handleChangeDept(res.data.businessType)
if (detailForm.value.mediaFile && detailForm.value.mediaFile.length > 0) {
if (approvalDocumentRef.value) {
const fileList = ruleForm.value.mediaFile.filter(item => item.fileType == 1)
approvalDocumentRef.value.setFileInfo(fileList)
}
if (exclusiveLicenseFileRef.value) {
const fileList = ruleForm.value.mediaFile.filter(item => item.fileType == 2)
exclusiveLicenseFileRef.value.setFileInfo(fileList)
}
if (mediaLicenseFileRef.value) {
const fileList = ruleForm.value.mediaFile.filter(item => item.fileType == 3)
mediaLicenseFileRef.value.setFileInfo(fileList)
}
if (mediaOwnershipRef.value) {
const fileList = ruleForm.value.mediaFile.filter(item => item.fileType == 4)
mediaOwnershipRef.value.setFileInfo(fileList)
}
if (onceMediaPhotoRef.value) {
const fileList = ruleForm.value.mediaFile.filter(item => item.fileType == 5)
onceMediaPhotoRef.value.setFileInfo(fileList)
}
if (mediaPicRef.value) {
const fileList = ruleForm.value.mediaFile.filter(item => item.fileType == 6)
mediaPicRef.value.setFileInfo(fileList)
}
if (mediaVideoRef.value) {
const fileList = ruleForm.value.mediaFile.filter(item => item.fileType == 7)
mediaVideoRef.value.setFileInfo(fileList)
}
if (stampedPublicationRef.value) {
const fileList = ruleForm.value.mediaFile.filter(item => item.fileType == 8)
stampedPublicationRef.value.setFileInfo(fileList)
}
if (qualificationFileRef.value) {
const fileList = ruleForm.value.mediaFile.filter(item => item.fileType == 9)
qualificationFileRef.value.setFileInfo(fileList)
}
if (mediaChainRef.value) {
const fileList = ruleForm.value.mediaFile.filter(item => item.fileType == 10)
mediaChainRef.value.setFileInfo(fileList)
}
if (journalCataloguePhotoRef.value) {
const fileList = ruleForm.value.mediaFile.filter(item => item.fileType == 11)
journalCataloguePhotoRef.value.setFileInfo(fileList)
}
if (mRProductionRequirementsRef.value) {
const fileList = ruleForm.value.mediaFile.filter(item => item.fileType == 12)
mRProductionRequirementsRef.value.setFileInfo(fileList)
}
}
})
}
//
onMounted(() => {
@ -800,7 +594,7 @@ onMounted(() => {
});
// \
defineExpose({
getMediaInfo
});
</script>
<style lang='scss'>

File diff suppressed because it is too large Load Diff

View File

@ -12,7 +12,7 @@
}}</span>
</el-option>
</el-select>
<div v-if="pickLatLableValue" class="pickLatLabel">拾取的经纬度{{ pickLatLableValue.lng }}, {{ pickLatLableValue.lat }}</div>
<div v-if="pickLatLableValue" class="pickLatLabel">拾取的经纬度{{ pickLatLableValue.lat }}, {{ pickLatLableValue.lng }}</div>
<div id="mapContainer" class="pickMapContainer"></div>
<!-- <template #footer>
<div class="dialog-footer">
@ -29,7 +29,7 @@ import AMapLoader from "@amap/amap-jsapi-loader"; // 引入地图服务
const { proxy } = getCurrentInstance()
const emit = defineEmits(['closePickLat']);
const { apiKey, secretKey } = window._CONFIG
//
const pickLatLableValue = ref(null)
const pickLatOpen = ref(false)
@ -83,11 +83,11 @@ const loadMap = () => {
return new Promise((resolve, reject) => {
//
window._AMapSecurityConfig = {
securityJsCode: 'a157b9d8963b598f40023f5469d3e73c'
securityJsCode: secretKey
};
AMapLoader.load({
key: "f5b170e2332903225896a7290b90793a",
key: apiKey,
plugins: ["AMap.PlaceSearch"],
AMapUI: {
plugins: []

View File

@ -5,8 +5,8 @@
<el-col :span="12">
<el-form :model="queryParams" ref="queryRef" :inline="true" class="searchInputForm">
<el-form-item label="" prop="templateName">
<el-input v-model="queryParams.keyword" placeholder="请输入媒体名称/媒体编号/关键字"
:prefix-icon="Search" style="width: 400px;" />
<el-input v-model="queryParams.keyword" placeholder="请输入媒体名称/媒体编号/关键字" :prefix-icon="Search"
style="width: 400px;" />
</el-form-item>
</el-form>
</el-col>
@ -43,6 +43,8 @@ import otherbg from '@/assets/images/otherbg.png'
const bgStore = useBackgroundStore()
const { proxy } = getCurrentInstance()
const { apiKey, secretKey } = window._CONFIG
//
const distanceLable = ref('请选择')
const distanceLableArray = ref([
@ -90,13 +92,13 @@ const loadMap = () => {
return new Promise((resolve, reject) => {
//
window._AMapSecurityConfig = {
securityJsCode: 'a157b9d8963b598f40023f5469d3e73c'
securityJsCode: secretKey
};
AMapLoader.load({
key: "f5b170e2332903225896a7290b90793a",
key: apiKey,
plugins: [],
AMapUI: {
AMapUI: {
plugins: []
}
}).then(AMap => {
@ -368,7 +370,7 @@ const hideAmapLogo = () => {
}
onUnmounted(() => {
mapInstance.value?.destroy()
mapInstance.value?.destroy()
})
//
onMounted(() => {
@ -457,13 +459,14 @@ onMounted(() => {
color: #87898E;
cursor: pointer;
}
.clearBtn::before {
content: "";
position: absolute;
left: 0px;
top: 10px;
width: 14px;
height: 14px;
height: 14px;
background-image: url('../../assets/images/iconClearWhere.png');
background-repeat: no-repeat;
}

View File

@ -169,7 +169,7 @@ import otherbg from '@/assets/images/otherbg.png'
const bgStore = useBackgroundStore()
const { proxy } = getCurrentInstance()
const { approval_document_status } = proxy.useDict("approval_document_status")
const { apiKey, secretKey } = window._CONFIG
//
const province = ref([])
const city = ref([])
@ -310,11 +310,11 @@ const loadMap = () => {
return new Promise((resolve, reject) => {
//
window._AMapSecurityConfig = {
securityJsCode: 'a157b9d8963b598f40023f5469d3e73c'
securityJsCode: secretKey
};
AMapLoader.load({
key: "f5b170e2332903225896a7290b90793a",
key: apiKey,
plugins: [],
AMapUI: {
plugins: []

View File

@ -249,7 +249,7 @@ import supplierLogs from "./supplierLogs.vue";
const bgStore = useBackgroundStore()
const { proxy } = getCurrentInstance()
const { invoice_type, media_ownership, personnel_size, main_media_types, media_quality, history_cooperation, supplier_level, supplier_cooperation_degree, main_business, business_department } = proxy.useDict("invoice_type", "media_ownership", "personnel_size", "main_media_types", "media_quality", "history_cooperation", "supplier_level", "supplier_cooperation_degree", "main_business", "business_department")
const { invoice_type, media_ownership, personnel_size, main_media_types, media_quality, history_cooperation, supplier_level, supplier_cooperation_degree, main_business } = proxy.useDict("invoice_type", "media_ownership", "personnel_size", "main_media_types", "media_quality", "history_cooperation", "supplier_level", "supplier_cooperation_degree", "main_business")
const router = useRouter()
const showForm = ref(false)
const supplierFormRef = ref(null)

View File

@ -399,6 +399,7 @@ const getProvinceList = () => {
const getCityList = (value) => {
var choseProvince = province.value.filter(item => item.id == value)[0]
if (choseProvince) ruleForm.value.supplierCity = choseProvince.name
else ruleForm.value.supplierCity = undefined
sysRegionListByPid({ parentId: value }).then(res => {
ruleForm.value.cityId = undefined
ruleForm.value.countyId = undefined

View File

@ -167,7 +167,7 @@ const data = reactive({
const { queryParams, form, rules } = toRefs(data)
/** 查询PPT模板列表 */
/** 查询商圈列表 */
const getbusinessAreaList = () => {
loading.value = true
busTradingAreaPage(queryParams.value).then(res => {

View File

@ -13,7 +13,7 @@ export default defineConfig(({ mode, command }) => {
// 默认情况下vite 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
base: VITE_APP_ENV === 'production' ? '/' : '/',
plugins: createVitePlugins(env, command === 'build'),
plugins: createVitePlugins(env, command === 'build'),
resolve: {
// https://cn.vitejs.dev/config/#resolve-alias
alias: {
@ -52,8 +52,8 @@ export default defineConfig(({ mode, command }) => {
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api/, '')
},
// springdoc proxy
'^/v3/api-docs/(.*)': {
// springdoc proxy
'^/v3/api-docs/(.*)': {
target: baseUrl,
changeOrigin: true,
}