Compare commits
No commits in common. "9f2acfee68503178c2b8db1f77ca67d19c112fd8" and "c024fc8ca2ea06986215b3727ed3d190148f4a1c" have entirely different histories.
9f2acfee68
...
c024fc8ca2
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -97,7 +97,6 @@ export function updateUserPwd(oldPassword, newPassword) {
|
||||||
return request({
|
return request({
|
||||||
url: '/system/user/profile/updatePwd',
|
url: '/system/user/profile/updatePwd',
|
||||||
method: 'put',
|
method: 'put',
|
||||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1175,9 +1175,7 @@ h6 {
|
||||||
.myInsertForm .el-tabs__item.is-active,
|
.myInsertForm .el-tabs__item.is-active,
|
||||||
.myDetailForm .el-tabs__item.is-active,
|
.myDetailForm .el-tabs__item.is-active,
|
||||||
.my_dialog .el-tabs__item.is-active,
|
.my_dialog .el-tabs__item.is-active,
|
||||||
.myInsertForm .el-tabs__item:hover,
|
.el-tabs__item:hover {
|
||||||
.myDetailForm .el-tabs__item:hover,
|
|
||||||
.my_dialog .el-tabs__item:hover {
|
|
||||||
font-family: Microsoft YaHei;
|
font-family: Microsoft YaHei;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 22px;
|
font-size: 22px;
|
||||||
|
|
|
||||||
|
|
@ -18,24 +18,8 @@
|
||||||
<img :src="icon_feedback" class="custom-icon" @click="handleFeedBack" />
|
<img :src="icon_feedback" class="custom-icon" @click="handleFeedBack" />
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</div>
|
</div>
|
||||||
<!-- <img :src="userStore.avatar ? userStore.avatar : avatar_icon" class="user-avatar" /> -->
|
<img :src="userStore.avatar ? userStore.avatar : avatar_icon" class="user-avatar" />
|
||||||
<el-dropdown @command="handleCommand" class="avatar-container right-menu-item hover-effect" trigger="hover">
|
<span class="user-nickname"> {{ userStore.name }} </span>
|
||||||
<div class="avatar-wrapper">
|
|
||||||
<img :src="userStore.avatar ? userStore.avatar : avatar_icon" class="user-avatar" />
|
|
||||||
<span class="user-nickname"> {{ userStore.name }} </span>
|
|
||||||
</div>
|
|
||||||
<template #dropdown>
|
|
||||||
<el-dropdown-menu>
|
|
||||||
<router-link to="/user/profile">
|
|
||||||
<el-dropdown-item>个人中心</el-dropdown-item>
|
|
||||||
</router-link>
|
|
||||||
<!-- <el-dropdown-item divided command="logout">
|
|
||||||
<span>退出登录</span>
|
|
||||||
</el-dropdown-item> -->
|
|
||||||
</el-dropdown-menu>
|
|
||||||
</template>
|
|
||||||
</el-dropdown>
|
|
||||||
|
|
||||||
<div class="logout_icon">
|
<div class="logout_icon">
|
||||||
<el-tooltip class="box-item" effect="dark" content="退出" placement="bottom-start">
|
<el-tooltip class="box-item" effect="dark" content="退出" placement="bottom-start">
|
||||||
<img :src="logout_icon" class="custom-icon" @click="logout" />
|
<img :src="logout_icon" class="custom-icon" @click="logout" />
|
||||||
|
|
@ -86,10 +70,10 @@ import useSettingsStore from '@/store/modules/settings'
|
||||||
import { addSysReaddBusProblemFeedbackgion } from "@/api/problemFeedback"
|
import { addSysReaddBusProblemFeedbackgion } from "@/api/problemFeedback"
|
||||||
|
|
||||||
const appStore = useAppStore()
|
const appStore = useAppStore()
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const settingsStore = useSettingsStore()
|
const settingsStore = useSettingsStore()
|
||||||
const { proxy } = getCurrentInstance()
|
const { proxy } = getCurrentInstance()
|
||||||
|
|
||||||
function toggleSideBar() {
|
function toggleSideBar() {
|
||||||
appStore.toggleSideBar()
|
appStore.toggleSideBar()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ const useSettingsStore = defineStore(
|
||||||
state: () => ({
|
state: () => ({
|
||||||
title: '',
|
title: '',
|
||||||
theme: storageSetting.theme || '#409EFF',
|
theme: storageSetting.theme || '#409EFF',
|
||||||
sideTheme: 'theme-light', //storageSetting.sideTheme || sideTheme,
|
sideTheme: storageSetting.sideTheme || sideTheme,
|
||||||
showSettings: false, //showSettings,
|
showSettings: showSettings,
|
||||||
topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
|
topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
|
||||||
tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView,
|
tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView,
|
||||||
tagsIcon: storageSetting.tagsIcon === undefined ? tagsIcon : storageSetting.tagsIcon,
|
tagsIcon: storageSetting.tagsIcon === undefined ? tagsIcon : storageSetting.tagsIcon,
|
||||||
|
|
@ -25,7 +25,7 @@ const useSettingsStore = defineStore(
|
||||||
dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle,
|
dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle,
|
||||||
footerVisible: storageSetting.footerVisible === undefined ? footerVisible : storageSetting.footerVisible,
|
footerVisible: storageSetting.footerVisible === undefined ? footerVisible : storageSetting.footerVisible,
|
||||||
footerContent: footerContent,
|
footerContent: footerContent,
|
||||||
isDark: false, // isDark.value
|
isDark: isDark.value
|
||||||
}),
|
}),
|
||||||
actions: {
|
actions: {
|
||||||
// 修改布局设置
|
// 修改布局设置
|
||||||
|
|
@ -42,8 +42,8 @@ const useSettingsStore = defineStore(
|
||||||
},
|
},
|
||||||
// 切换暗黑模式
|
// 切换暗黑模式
|
||||||
toggleTheme() {
|
toggleTheme() {
|
||||||
// this.isDark = !this.isDark
|
this.isDark = !this.isDark
|
||||||
// toggleDark()
|
toggleDark()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
</el-checkbox-group>
|
</el-checkbox-group>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="媒体报价信息" name="second">
|
<el-tab-pane label="媒体报价信息" name="second">
|
||||||
<el-button-group class="exportGroup mb10">
|
<el-button-group class="mb10">
|
||||||
<el-button v-for="(item, index) in ToolOptions" :key="index"
|
<el-button v-for="(item, index) in ToolOptions" :key="index"
|
||||||
:type="activeIndex === index ? 'primary' : 'default'" @click="handleChangeType(index)">
|
:type="activeIndex === index ? 'primary' : 'default'" @click="handleChangeType(index)">
|
||||||
{{ item }}
|
{{ item }}
|
||||||
|
|
@ -81,170 +81,6 @@ const exportOpen = ref(false)
|
||||||
const activeName = ref('first')
|
const activeName = ref('first')
|
||||||
const curDeptIds = ref(null)
|
const curDeptIds = ref(null)
|
||||||
|
|
||||||
// 优势基础字段
|
|
||||||
const ysBaseFild = ref([
|
|
||||||
{
|
|
||||||
displayName: "媒体名称",
|
|
||||||
propertyPath: "mediaName"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "媒体类型",
|
|
||||||
propertyPath: "mediaTypeStr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "媒体大类",
|
|
||||||
propertyPath: "mediaCategoryStr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "展示形式",
|
|
||||||
propertyPath: "displayFormStr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "是否照明",
|
|
||||||
propertyPath: "hasLighting"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "播放时间",
|
|
||||||
propertyPath: "playbackTime"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "媒体尺寸",
|
|
||||||
propertyPath: "mediaSize"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "MR",
|
|
||||||
propertyPath: "mr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "日均车流量",
|
|
||||||
propertyPath: "dailyAvgVehicleFlow"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "媒体朝向",
|
|
||||||
propertyPath: "mediaOrientation"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "省",
|
|
||||||
propertyPath: "provinceName"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "市",
|
|
||||||
propertyPath: "cityName"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "区",
|
|
||||||
propertyPath: "areaName"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "镇",
|
|
||||||
propertyPath: "townName"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "商圈",
|
|
||||||
propertyPath: "businessDistrictName"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "地址",
|
|
||||||
propertyPath: "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "纬度",
|
|
||||||
propertyPath: "mapY"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "经度",
|
|
||||||
propertyPath: "mapX"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "最小购买周期",
|
|
||||||
propertyPath: "minPurchaseCycle"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "首次制作安装费",
|
|
||||||
propertyPath: "firstInstallFee"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "换刊制作安装费",
|
|
||||||
propertyPath: "changeInstallFee"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "状态",
|
|
||||||
propertyPath: "state"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "作废原因",
|
|
||||||
propertyPath: "invalidReason"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "业务部门",
|
|
||||||
propertyPath: "dataScopeDeptName"
|
|
||||||
}
|
|
||||||
])
|
|
||||||
|
|
||||||
// 网络基础字段
|
|
||||||
const wlBaseFild = ref([
|
|
||||||
{
|
|
||||||
displayName: "媒体名称",
|
|
||||||
propertyPath: "mediaName"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "媒体类型",
|
|
||||||
propertyPath: "mediaTypeStr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "媒体大类",
|
|
||||||
propertyPath: "mediaCategoryStr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "展示形式",
|
|
||||||
propertyPath: "displayFormStr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "省",
|
|
||||||
propertyPath: "provinceName"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "市",
|
|
||||||
propertyPath: "cityName"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "区",
|
|
||||||
propertyPath: "areaName"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "镇",
|
|
||||||
propertyPath: "townName"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "商圈",
|
|
||||||
propertyPath: "businessDistrictName"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "地址",
|
|
||||||
propertyPath: "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "纬度",
|
|
||||||
propertyPath: "mapY"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "经度",
|
|
||||||
propertyPath: "mapX"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "状态",
|
|
||||||
propertyPath: "state"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "作废原因",
|
|
||||||
propertyPath: "invalidReason"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: "业务部门",
|
|
||||||
propertyPath: "dataScopeDeptName"
|
|
||||||
}
|
|
||||||
])
|
|
||||||
|
|
||||||
// 优势报价字段
|
// 优势报价字段
|
||||||
const ysPriceFild = ref([
|
const ysPriceFild = ref([
|
||||||
{
|
{
|
||||||
|
|
@ -1314,7 +1150,7 @@ const ckdxPriceFild = ref([
|
||||||
const exportForm = ref({
|
const exportForm = ref({
|
||||||
ids: undefined,
|
ids: undefined,
|
||||||
exportBaseFields: undefined,
|
exportBaseFields: undefined,
|
||||||
mediaTypeExport: [],
|
exportPriceFields: false,
|
||||||
hasFiles: false
|
hasFiles: false
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -1323,7 +1159,7 @@ const baseFieldCheckAll = ref(false)
|
||||||
const baseFieldIsIndeterminate = ref(false)
|
const baseFieldIsIndeterminate = ref(false)
|
||||||
// 基础字段
|
// 基础字段
|
||||||
const baseFields = ref([])
|
const baseFields = ref([])
|
||||||
// const _baseFields = ref(null)
|
const _baseFields = ref(null)
|
||||||
// 已选择的基础字段
|
// 已选择的基础字段
|
||||||
const checkedBaseFields = ref([])
|
const checkedBaseFields = ref([])
|
||||||
|
|
||||||
|
|
@ -1359,88 +1195,20 @@ const handleCheckedBaseFieldChange = (value) => {
|
||||||
baseFieldIsIndeterminate.value = checkedCount > 0 && checkedCount < baseFields.value.length
|
baseFieldIsIndeterminate.value = checkedCount > 0 && checkedCount < baseFields.value.length
|
||||||
}
|
}
|
||||||
// 报价字段全选操作
|
// 报价字段全选操作
|
||||||
const handleCheckAllPriceFieldChange = (val) => {
|
const handleCheckAllPriceFieldChange = (val) => {
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = []
|
||||||
if (val) {
|
if (val) {
|
||||||
priceFields.value.forEach(element => {
|
priceFields.value.forEach(element => {
|
||||||
checkedPriceFields.value.push(element.propertyPath)
|
checkedPriceFields.value.push(element.propertyPath)
|
||||||
});
|
});
|
||||||
|
|
||||||
if (ToolOptions.value.length == 8) {
|
|
||||||
// 查找指定类型的报价字段
|
|
||||||
let curPriceFields = exportForm.value.mediaTypeExport.filter(item => item.type == activeIndex.value);
|
|
||||||
if (curPriceFields.length > 0) {
|
|
||||||
curPriceFields[0].exportPriceFields = [...checkedPriceFields.value] // 使用数组索引
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ToolOptions.value.length == 7) {
|
|
||||||
let jsType = activeIndex.value + 1
|
|
||||||
let curPriceFields = exportForm.value.mediaTypeExport.filter(item => item.type == jsType);
|
|
||||||
if (curPriceFields.length > 0) {
|
|
||||||
curPriceFields[0].exportPriceFields = [...checkedPriceFields.value] // 使用数组索引
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ToolOptions.value.length == 0) {
|
|
||||||
// 查找指定类型的报价字段
|
|
||||||
let curPriceFields = exportForm.value.mediaTypeExport.filter(item => item.type == 0);
|
|
||||||
if (curPriceFields.length > 0) {
|
|
||||||
curPriceFields[0].exportPriceFields = [...checkedPriceFields.value] // 使用数组索引
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (ToolOptions.value.length == 8) {
|
|
||||||
// 查找指定类型的报价字段
|
|
||||||
const curPriceFields = exportForm.value.mediaTypeExport.filter(item => item.type == activeIndex.value);
|
|
||||||
if (curPriceFields.length > 0) {
|
|
||||||
curPriceFields[0].exportPriceFields = []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ToolOptions.value.length == 7) {
|
|
||||||
let jsType = activeIndex.value + 1
|
|
||||||
const curPriceFields = exportForm.value.mediaTypeExport.filter(item => item.type == jsType);
|
|
||||||
if (curPriceFields.length > 0) {
|
|
||||||
curPriceFields[0].exportPriceFields = []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ToolOptions.value.length == 0) {
|
|
||||||
const curPriceFields = exportForm.value.mediaTypeExport.filter(item => item.type == 0);
|
|
||||||
if (curPriceFields.length > 0) {
|
|
||||||
curPriceFields[0].exportPriceFields = []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
priceFieldIsIndeterminate.value = false
|
priceFieldIsIndeterminate.value = false
|
||||||
// 更新选择状态
|
|
||||||
checkPriceFieldSelectStatus()
|
|
||||||
}
|
}
|
||||||
// 单个选择报价字段
|
// 单个选择报价字段
|
||||||
const handleCheckedPriceFieldChange = (value) => {
|
const handleCheckedPriceFieldChange = (value) => {
|
||||||
const checkedCount = value.length
|
const checkedCount = value.length
|
||||||
priceFieldCheckAll.value = checkedCount === priceFields.value.length
|
priceFieldCheckAll.value = checkedCount === priceFields.value.length
|
||||||
priceFieldIsIndeterminate.value = checkedCount > 0 && checkedCount < priceFields.value.length
|
priceFieldIsIndeterminate.value = checkedCount > 0 && checkedCount < priceFields.value.length
|
||||||
|
|
||||||
// 同步更新到 exportForm
|
|
||||||
if (ToolOptions.value.length == 8) {
|
|
||||||
let curPriceFields = exportForm.value.mediaTypeExport.filter(item => item.type == activeIndex.value);
|
|
||||||
if (curPriceFields.length > 0) {
|
|
||||||
curPriceFields[0].exportPriceFields = [...value]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ToolOptions.value.length == 7) {
|
|
||||||
let jsType = activeIndex.value + 1
|
|
||||||
let curPriceFields = exportForm.value.mediaTypeExport.filter(item => item.type == jsType);
|
|
||||||
if (curPriceFields.length > 0) {
|
|
||||||
curPriceFields[0].exportPriceFields = [...value]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ToolOptions.value.length == 0) {
|
|
||||||
let curPriceFields = exportForm.value.mediaTypeExport.filter(item => item.type == 0);
|
|
||||||
if (curPriceFields.length > 0) {
|
|
||||||
curPriceFields[0].exportPriceFields = [...value]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 更新选择状态
|
|
||||||
checkPriceFieldSelectStatus()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 选择是否包含附件
|
// 选择是否包含附件
|
||||||
|
|
@ -1456,7 +1224,7 @@ const handleClick = (tab, event) => {
|
||||||
// 执行导出
|
// 执行导出
|
||||||
const handleSubmitExport = () => {
|
const handleSubmitExport = () => {
|
||||||
exportForm.value.exportBaseFields = checkedBaseFields
|
exportForm.value.exportBaseFields = checkedBaseFields
|
||||||
exportForm.value.mediaTypeExport = exportForm.value.mediaTypeExport.filter(item => item.exportPriceFields.length > 0)
|
exportForm.value.exportPriceFields = checkedPriceFields
|
||||||
exportMediaExcel(exportForm.value).then(res => {
|
exportMediaExcel(exportForm.value).then(res => {
|
||||||
const downLoadName = '媒体信息_' + getCurrentTime() + '.xlsx'
|
const downLoadName = '媒体信息_' + getCurrentTime() + '.xlsx'
|
||||||
// 通过a标签打开新页面下载文件
|
// 通过a标签打开新页面下载文件
|
||||||
|
|
@ -1487,15 +1255,20 @@ const getCurrentTime = () => {
|
||||||
|
|
||||||
// 获取基础信息字段
|
// 获取基础信息字段
|
||||||
const getMediaExcelBaseField = () => {
|
const getMediaExcelBaseField = () => {
|
||||||
if (curDeptIds.value && curDeptIds.value.length == 2) baseFields.value = ysBaseFild.value
|
mediaExcelBaseField().then(res => {
|
||||||
else if (curDeptIds.value && curDeptIds.value.length == 1) {
|
if (curDeptIds.value && curDeptIds.value.length == 2) baseFields.value = res.data
|
||||||
if (curDeptIds.value[0] == '219') {
|
else if (curDeptIds.value && curDeptIds.value.length == 1) {
|
||||||
// 网络媒体
|
if (curDeptIds.value[0] == '219') {
|
||||||
baseFields.value = wlBaseFild.value
|
// 网络媒体
|
||||||
} else {
|
_baseFields.value = "媒体名称,媒体类型,媒体大类,展示形式,省,市,区,镇,商圈,地址,经度,纬度,状态,废除原因, 部门"
|
||||||
baseFields.value = ysBaseFild.value
|
} else {
|
||||||
|
_baseFields.value = "媒体名称,媒体类型,媒体大类,展示形式,是否照明,播放时间,媒体尺寸,mr,日均车流量,媒体朝向,省,市,区,镇,商圈,地址,经度,纬度,最小购买周期,首次制作安装费,换刊制作安装费,状态,废除原因, 部门"
|
||||||
|
}
|
||||||
|
baseFields.value = [...new Set( // 去重
|
||||||
|
res.data.filter(item => _baseFields.value.includes(item.displayName))
|
||||||
|
)];
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
// 获取报价信息字段
|
// 获取报价信息字段
|
||||||
const getMediaExcelPriceField = () => {
|
const getMediaExcelPriceField = () => {
|
||||||
|
|
@ -1503,148 +1276,93 @@ const getMediaExcelPriceField = () => {
|
||||||
ToolOptions.value = ['优势报价', '门禁', '候车厅', '道闸', '地铁', '高铁', '写字楼', '车库灯箱']
|
ToolOptions.value = ['优势报价', '门禁', '候车厅', '道闸', '地铁', '高铁', '写字楼', '车库灯箱']
|
||||||
activeIndex.value = 0
|
activeIndex.value = 0
|
||||||
priceFields.value = ysPriceFild.value
|
priceFields.value = ysPriceFild.value
|
||||||
handleCheckPriceField(0)
|
|
||||||
}
|
}
|
||||||
else if (curDeptIds.value && curDeptIds.value.length == 1) {
|
else if (curDeptIds.value && curDeptIds.value.length == 1) {
|
||||||
if (curDeptIds.value[0] == '219') {
|
if (curDeptIds.value[0] == '219') {
|
||||||
ToolOptions.value = ['门禁', '候车厅', '道闸', '地铁', '高铁', '写字楼', '车库灯箱']
|
ToolOptions.value = ['门禁', '候车厅', '道闸', '地铁', '高铁', '写字楼', '车库灯箱']
|
||||||
activeIndex.value = 0
|
activeIndex.value = 0
|
||||||
priceFields.value = mjPriceFild.value
|
priceFields.value = mjPriceFild.value
|
||||||
handleCheckPriceField(1)
|
|
||||||
} else {
|
} else {
|
||||||
ToolOptions.value = []
|
ToolOptions.value = []
|
||||||
activeIndex.value = 0
|
activeIndex.value = 0
|
||||||
priceFields.value = ysPriceFild.value
|
priceFields.value = ysPriceFild.value
|
||||||
handleCheckPriceField(0)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// 判断报价信息是否存在指定类型数据
|
|
||||||
const handleCheckPriceField = (_mediaType) => {
|
|
||||||
// 获取当前的所有要导出的报价字段
|
|
||||||
const currentMediaTypeExport = [...exportForm.value.mediaTypeExport]; // 创建副本以避免直接修改原数组
|
|
||||||
// 过滤掉指定类型的旧数据
|
|
||||||
const filteredFields = currentMediaTypeExport.filter(item => item.type !== _mediaType);
|
|
||||||
// 判断是否有指定类型数据
|
|
||||||
const _mediaTypeArr = currentMediaTypeExport.filter(item => item.type == _mediaType);
|
|
||||||
// 如果数据不存在
|
|
||||||
if (_mediaTypeArr.length == 0) {
|
|
||||||
filteredFields.push({ type: _mediaType, exportPriceFields: [] }); // 使用 push 追加新文件
|
|
||||||
exportForm.value.mediaTypeExport = [...filteredFields]; // 更新 ref
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 类型切换
|
// 类型切换
|
||||||
const handleChangeType = (_type) => {
|
const handleChangeType = (_type) => {
|
||||||
activeIndex.value = _type
|
activeIndex.value = _type
|
||||||
priceFieldCheckAll.value = false
|
priceFieldCheckAll.value = false
|
||||||
priceFieldIsIndeterminate.value = false
|
priceFieldIsIndeterminate.value = false
|
||||||
|
|
||||||
// 先获取当前类型的已选字段
|
|
||||||
let currentCheckedFields = []
|
|
||||||
if (ToolOptions.value.length == 8) {
|
|
||||||
let curPriceFields = exportForm.value.mediaTypeExport.filter(item => item.type == _type);
|
|
||||||
if (curPriceFields.length > 0) {
|
|
||||||
currentCheckedFields = [...curPriceFields[0].exportPriceFields]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ToolOptions.value.length == 7) {
|
|
||||||
let wlType = _type + 1
|
|
||||||
let curPriceFields = exportForm.value.mediaTypeExport.filter(item => item.type == wlType);
|
|
||||||
if (curPriceFields.length > 0) {
|
|
||||||
currentCheckedFields = [...curPriceFields[0].exportPriceFields]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ToolOptions.value.length == 8) {
|
if (ToolOptions.value.length == 8) {
|
||||||
switch (_type) {
|
switch (_type) {
|
||||||
case 0:
|
case 0:
|
||||||
priceFields.value = ysPriceFild.value
|
priceFields.value = ysPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
priceFields.value = mjPriceFild.value
|
priceFields.value = mjPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
priceFields.value = hctPriceFild.value
|
priceFields.value = hctPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
priceFields.value = dzPriceFild.value
|
priceFields.value = dzPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
priceFields.value = dtPriceFild.value
|
priceFields.value = dtPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
priceFields.value = gtPriceFild.value
|
priceFields.value = gtPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
priceFields.value = xzlPriceFild.value
|
priceFields.value = xzlPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
priceFields.value = ckdxPriceFild.value
|
priceFields.value = ckdxPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
handleCheckPriceField(_type)
|
|
||||||
}
|
}
|
||||||
if (ToolOptions.value.length == 7) {
|
if (ToolOptions.value.length == 7) {
|
||||||
switch (_type) {
|
switch (_type) {
|
||||||
case 0:
|
case 0:
|
||||||
priceFields.value = mjPriceFild.value
|
priceFields.value = mjPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
priceFields.value = hctPriceFild.value
|
priceFields.value = hctPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
priceFields.value = dzPriceFild.value
|
priceFields.value = dzPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
priceFields.value = dtPriceFild.value
|
priceFields.value = dtPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
priceFields.value = gtPriceFild.value
|
priceFields.value = gtPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
priceFields.value = xzlPriceFild.value
|
priceFields.value = xzlPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
priceFields.value = ckdxPriceFild.value
|
priceFields.value = ckdxPriceFild.value
|
||||||
checkedPriceFields.value = currentCheckedFields
|
checkedPriceFields.value = []
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
let wlType = _type + 1
|
|
||||||
handleCheckPriceField(wlType)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增:检查当前类型是否全选
|
|
||||||
checkPriceFieldSelectStatus()
|
|
||||||
}
|
|
||||||
// 新增方法:检查报价字段选择状态
|
|
||||||
const checkPriceFieldSelectStatus = () => {
|
|
||||||
const checkedCount = checkedPriceFields.value.length
|
|
||||||
const totalCount = priceFields.value.length
|
|
||||||
|
|
||||||
priceFieldCheckAll.value = checkedCount === totalCount
|
|
||||||
priceFieldIsIndeterminate.value = checkedCount > 0 && checkedCount < totalCount
|
|
||||||
}
|
|
||||||
// 新增方法:检查基础字段选择状态
|
|
||||||
const checkBaseFieldSelectStatus = () => {
|
|
||||||
const checkedCount = checkedBaseFields.value.length
|
|
||||||
const totalCount = baseFields.value.length
|
|
||||||
|
|
||||||
baseFieldCheckAll.value = checkedCount === totalCount
|
|
||||||
baseFieldIsIndeterminate.value = checkedCount > 0 && checkedCount < totalCount
|
|
||||||
}
|
}
|
||||||
// 初始化
|
// 初始化
|
||||||
const initExportExcel = (_mediaIds, _curDeptIds) => {
|
const initExportExcel = (_mediaIds, _curDeptIds) => {
|
||||||
|
|
@ -1654,10 +1372,6 @@ const initExportExcel = (_mediaIds, _curDeptIds) => {
|
||||||
exportOpen.value = true
|
exportOpen.value = true
|
||||||
getMediaExcelBaseField()
|
getMediaExcelBaseField()
|
||||||
getMediaExcelPriceField()
|
getMediaExcelPriceField()
|
||||||
|
|
||||||
// 初始化时检查选择状态
|
|
||||||
checkBaseFieldSelectStatus()
|
|
||||||
checkPriceFieldSelectStatus()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 暴露方法\属性给父组件
|
// 暴露方法\属性给父组件
|
||||||
|
|
@ -1667,24 +1381,24 @@ defineExpose({
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang='scss'>
|
<style lang='scss'>
|
||||||
.exportGroup>.el-button {
|
.el-button-group>.el-button {
|
||||||
float: left;
|
float: left;
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 30px;
|
height: 38px;
|
||||||
border: 1px solid #9C9C9C;
|
border: 1px solid #DFDFDF;
|
||||||
background: #9c9c9c1a;
|
background: #ffffff;
|
||||||
|
font-family: Microsoft YaHei;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 18px;
|
||||||
|
text-align: center;
|
||||||
|
color: #000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.exportGroup>.el-button--primary {
|
.el-button-group>.el-button--primary {
|
||||||
background: #1a75e6;
|
background: #1f1f1f;
|
||||||
border: 1px solid #1A75E6;
|
font-family: Microsoft YaHei;
|
||||||
}
|
font-weight: 600;
|
||||||
|
color: #FFFFFF;
|
||||||
.exportGroup .el-button--primary:last-child {
|
border: 1px solid #1f1f1f;
|
||||||
border-left-color: #1A75E6;
|
|
||||||
}
|
|
||||||
|
|
||||||
.exportGroup .el-button--primary:first-child {
|
|
||||||
border-right-color: #1A75E6;
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -13,8 +13,7 @@
|
||||||
value-format="YYYY-MM-DD HH:mm:ss" type="date" placeholder="结束时间" @change="validateEndTime" />
|
value-format="YYYY-MM-DD HH:mm:ss" type="date" placeholder="结束时间" @change="validateEndTime" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="类型:" v-if="!readonly">
|
<el-form-item label="类型:" v-if="!readonly">
|
||||||
<el-select v-model="mediaType" placeholder="请选择" style="min-width: 120px;" clearable
|
<el-select v-model="mediaType" placeholder="请选择" style="min-width: 120px;" clearable @change="handleChangeMediaType" >
|
||||||
@change="handleChangeMediaType">
|
|
||||||
<el-option v-for="item in mediaTypes" :key="item.value" :label="item.label"
|
<el-option v-for="item in mediaTypes" :key="item.value" :label="item.label"
|
||||||
:value="item.value" />
|
:value="item.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
|
|
@ -217,14 +216,7 @@ const initHistoryCharLine = () => {
|
||||||
_historyChar.value.setOption({
|
_historyChar.value.setOption({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'item',
|
trigger: 'item',
|
||||||
// formatter: "{b} : {c} 元/天" //鼠标放上去 展示内容
|
formatter: "{b} : {c} 元/天" //鼠标放上去 展示内容
|
||||||
formatter: function (params) {
|
|
||||||
// 从原始数据中获取时间
|
|
||||||
const originalData = historyList.value; // 你的原始数据
|
|
||||||
const time = originalData[params.dataIndex].createTime;
|
|
||||||
|
|
||||||
return `${params.name}: ${params.value} 元/天<br/>时间: ${time}`;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
grid: {
|
grid: {
|
||||||
left: '3%',
|
left: '3%',
|
||||||
|
|
@ -312,14 +304,7 @@ const initHistoryCharBar = () => {
|
||||||
_historyChar.value.setOption({
|
_historyChar.value.setOption({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'item',
|
trigger: 'item',
|
||||||
// formatter: "{b} : {c} 元/天" //鼠标放上去 展示内容
|
formatter: "{b} : {c} 元/天" //鼠标放上去 展示内容
|
||||||
formatter: function (params) {
|
|
||||||
// 从原始数据中获取时间
|
|
||||||
const originalData = historyList.value; // 你的原始数据
|
|
||||||
const time = originalData[params.dataIndex].createTime;
|
|
||||||
|
|
||||||
return `${params.name}: ${params.value} 元/天<br/>时间: ${time}`;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
grid: {
|
grid: {
|
||||||
left: '3%',
|
left: '3%',
|
||||||
|
|
@ -403,7 +388,7 @@ const initHistoryCharBar = () => {
|
||||||
// _historyChar.value.resize()
|
// _historyChar.value.resize()
|
||||||
// })
|
// })
|
||||||
}
|
}
|
||||||
const handleChangeMediaType = (val) => {
|
const handleChangeMediaType = (val) => {
|
||||||
getMediaPriceList()
|
getMediaPriceList()
|
||||||
}
|
}
|
||||||
const handleChangeType = (val) => {
|
const handleChangeType = (val) => {
|
||||||
|
|
@ -439,6 +424,8 @@ const getMediaPriceList = () => {
|
||||||
itemYDate = (convertIntTotalRegularPrice / (item.buyCycle * 7)).toFixed(2)
|
itemYDate = (convertIntTotalRegularPrice / (item.buyCycle * 7)).toFixed(2)
|
||||||
} else {
|
} else {
|
||||||
const repliceValue = parseInt(item.buyCycle.replace('个月', '').replace('月', ''))
|
const repliceValue = parseInt(item.buyCycle.replace('个月', '').replace('月', ''))
|
||||||
|
console.log('会输入月份的原始值', item.buyCycle)
|
||||||
|
console.log('替换会输入月份的结果', repliceValue)
|
||||||
itemYDate = (convertIntTotalRegularPrice / (repliceValue * 31)).toFixed(2)
|
itemYDate = (convertIntTotalRegularPrice / (repliceValue * 31)).toFixed(2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -476,7 +463,7 @@ const validateEndTime = (val) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// 对外暴漏方法
|
// 对外暴漏方法
|
||||||
const initHistoryData = (_mediaId, _readonly) => {
|
const initHistoryData = (_mediaId, _readonly) => {
|
||||||
historyDataOpen.value = true
|
historyDataOpen.value = true
|
||||||
readonly.value = _readonly
|
readonly.value = _readonly
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="供应商/媒体形式/名称" prop="business_department">
|
<el-form-item label="媒体形式/名称" prop="business_department">
|
||||||
{{ detailForm.mediaName }}
|
{{ detailForm.mediaName }}
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
@ -113,7 +113,7 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
<div class="splineBar" />
|
<div class="splineBar" />
|
||||||
<el-row :gutter="30" class="my_form_row">
|
<el-row :gutter="30" class="my_form_row">
|
||||||
<el-col :span="12">
|
<el-col :span="18">
|
||||||
<el-form-item label="城市" prop="business_department">
|
<el-form-item label="城市" prop="business_department">
|
||||||
<span v-if="detailForm.provinceName">{{ detailForm.provinceName }}</span>
|
<span v-if="detailForm.provinceName">{{ detailForm.provinceName }}</span>
|
||||||
<span v-if="detailForm.cityName">-{{ detailForm.cityName }}</span>
|
<span v-if="detailForm.cityName">-{{ detailForm.cityName }}</span>
|
||||||
|
|
@ -121,7 +121,7 @@
|
||||||
<span v-if="detailForm.townName">-{{ detailForm.townName }}</span>
|
<span v-if="detailForm.townName">-{{ detailForm.townName }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="6">
|
||||||
<el-form-item label="商圈" prop="business_department">
|
<el-form-item label="商圈" prop="business_department">
|
||||||
{{ detailForm.businessDistrictName }}
|
{{ detailForm.businessDistrictName }}
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
</el-icon>
|
</el-icon>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="180px" class="myInsertForm">
|
<el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="160px" class="myInsertForm">
|
||||||
<el-collapse class="my-collapse" v-model="activeNames" @change="handleChange">
|
<el-collapse class="my-collapse" v-model="activeNames" @change="handleChange">
|
||||||
<el-collapse-item title="业务部门" name="1">
|
<el-collapse-item title="业务部门" name="1">
|
||||||
<el-row :gutter="30" class="my_form_row">
|
<el-row :gutter="30" class="my_form_row">
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="供应商/媒体形式/名称" prop="mediaName" >
|
<el-form-item label="媒体形式/名称" prop="mediaName">
|
||||||
<el-input v-model="ruleForm.mediaName" placeholder="请输入" />
|
<el-input v-model="ruleForm.mediaName" placeholder="请输入" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
|
||||||
|
|
@ -13,26 +13,7 @@
|
||||||
<div class="tool-content">
|
<div class="tool-content">
|
||||||
<el-row :gutter="20" style="margin: 0 -10px 30px -10px;">
|
<el-row :gutter="20" style="margin: 0 -10px 30px -10px;">
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<div class="toolItemTitle mb20">
|
<div class="toolItemTitle mb20">上传文件</div>
|
||||||
上传文件
|
|
||||||
<el-dropdown placement="bottom">
|
|
||||||
<el-button class="downloadTemplateBtnDrow" text>下载模板</el-button>
|
|
||||||
<template #dropdown>
|
|
||||||
<el-dropdown-menu>
|
|
||||||
<el-dropdown-item @click="downloadExcelTemplate('mj')">门禁校准模板</el-dropdown-item>
|
|
||||||
<el-dropdown-item
|
|
||||||
@click="downloadExcelTemplate('hct')">候车厅校准模板</el-dropdown-item>
|
|
||||||
<el-dropdown-item @click="downloadExcelTemplate('dz')">道闸校准模板</el-dropdown-item>
|
|
||||||
<el-dropdown-item @click="downloadExcelTemplate('dt')">地铁校准模板</el-dropdown-item>
|
|
||||||
<el-dropdown-item @click="downloadExcelTemplate('gt')">高铁校准模板</el-dropdown-item>
|
|
||||||
<el-dropdown-item
|
|
||||||
@click="downloadExcelTemplate('xzl')">写字楼校准模板</el-dropdown-item>
|
|
||||||
<el-dropdown-item
|
|
||||||
@click="downloadExcelTemplate('ckdx')">车库灯箱校准模板</el-dropdown-item>
|
|
||||||
</el-dropdown-menu>
|
|
||||||
</template>
|
|
||||||
</el-dropdown>
|
|
||||||
</div>
|
|
||||||
<el-upload class="my-upload-demo" drag action="#" :http-request="requestDocUpload"
|
<el-upload class="my-upload-demo" drag action="#" :http-request="requestDocUpload"
|
||||||
:file-list="docUploadList" :before-upload="beforeDocUpload" :on-remove="removeDocUpload">
|
:file-list="docUploadList" :before-upload="beforeDocUpload" :on-remove="removeDocUpload">
|
||||||
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
||||||
|
|
@ -66,7 +47,6 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作时间" align="center" prop="createTime" width="210" />
|
<el-table-column label="操作时间" align="center" prop="createTime" width="210" />
|
||||||
<el-table-column label="异常信息" align="center" prop="errorMessage" width="210" />
|
|
||||||
<el-table-column label="操作" :width="160" align="center">
|
<el-table-column label="操作" :width="160" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button v-if="scope.row.progress == 100" link type="primary"
|
<el-button v-if="scope.row.progress == 100" link type="primary"
|
||||||
|
|
@ -197,7 +177,7 @@
|
||||||
<el-table-column label="总净价" align="right" prop="totalRegularPrice" width="120" />
|
<el-table-column label="总净价" align="right" prop="totalRegularPrice" width="120" />
|
||||||
<el-table-column label="总净价单位" align="center" prop="totalRegularPriceUnit" width="130" />
|
<el-table-column label="总净价单位" align="center" prop="totalRegularPriceUnit" width="130" />
|
||||||
<el-table-column label="底价" align="right" prop="floorPrice" width="120" />
|
<el-table-column label="底价" align="right" prop="floorPrice" width="120" />
|
||||||
<el-table-column label="底价总" align="right" prop="minPrice" width="120" />
|
<el-table-column label="低价总" align="right" prop="minPrice" width="120" />
|
||||||
<el-table-column label="制作费" align="right" prop="makeFee" width="130" />
|
<el-table-column label="制作费" align="right" prop="makeFee" width="130" />
|
||||||
<el-table-column label="媒体费总价" align="right" prop="mediaFeeTotalPrice" width="130" />
|
<el-table-column label="媒体费总价" align="right" prop="mediaFeeTotalPrice" width="130" />
|
||||||
<el-table-column label="单日覆盖人流量" align="center" prop="dailyAvgPeopleFlow" width="150" />
|
<el-table-column label="单日覆盖人流量" align="center" prop="dailyAvgPeopleFlow" width="150" />
|
||||||
|
|
@ -367,41 +347,6 @@ const getTaskRecordPageList = () => {
|
||||||
loading.value = false
|
loading.value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 模板下载
|
|
||||||
const downloadExcelTemplate = (tempLateType) => {
|
|
||||||
const link = document.createElement('a')
|
|
||||||
if (tempLateType == 'mj') {
|
|
||||||
link.href = '/jzTemplate/门禁校准平台模板.xlsx'
|
|
||||||
link.download = '门禁校准平台模板.xlsx' // 设置下载文件名
|
|
||||||
}
|
|
||||||
if (tempLateType == 'hct') {
|
|
||||||
link.href = '/jzTemplate/候车厅校准平台模板.xlsx'
|
|
||||||
link.download = '候车厅校准平台模板.xlsx' // 设置下载文件名
|
|
||||||
}
|
|
||||||
if (tempLateType == 'dz') {
|
|
||||||
link.href = '/jzTemplate/道闸校准平台模板.xlsx'
|
|
||||||
link.download = '道闸校准平台模板.xlsx' // 设置下载文件名
|
|
||||||
}
|
|
||||||
if (tempLateType == 'dt') {
|
|
||||||
link.href = '/jzTemplate/地铁校准平台模板.xlsx'
|
|
||||||
link.download = '地铁校准平台模板.xlsx' // 设置下载文件名
|
|
||||||
}
|
|
||||||
if (tempLateType == 'gt') {
|
|
||||||
link.href = '/jzTemplate/高铁校准平台模板.xlsx'
|
|
||||||
link.download = '高铁校准平台模板.xlsx' // 设置下载文件名
|
|
||||||
}
|
|
||||||
if (tempLateType == 'xzl') {
|
|
||||||
link.href = '/jzTemplate/写字楼校准平台模板.xlsx'
|
|
||||||
link.download = '写字楼校准平台模板.xlsx' // 设置下载文件名
|
|
||||||
}
|
|
||||||
if (tempLateType == 'ckdx') {
|
|
||||||
link.href = '/jzTemplate/车库灯箱校准平台模板.xlsx'
|
|
||||||
link.download = '车库灯箱校准平台模板.xlsx' // 设置下载文件名
|
|
||||||
}
|
|
||||||
document.body.appendChild(link)
|
|
||||||
link.click()
|
|
||||||
document.body.removeChild(link)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 自定义上传经纬度文件
|
// 自定义上传经纬度文件
|
||||||
const requestDocUpload = (options) => {
|
const requestDocUpload = (options) => {
|
||||||
|
|
@ -482,7 +427,7 @@ const handleExportCalibraTionResult = () => {
|
||||||
document.body.appendChild(a)
|
document.body.appendChild(a)
|
||||||
a.click()
|
a.click()
|
||||||
document.body.removeChild(a)
|
document.body.removeChild(a)
|
||||||
|
|
||||||
proxy.$modal.msgSuccess("导出成功")
|
proxy.$modal.msgSuccess("导出成功")
|
||||||
handleCloseModal()
|
handleCloseModal()
|
||||||
})
|
})
|
||||||
|
|
@ -636,21 +581,4 @@ defineExpose({
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: #67C23A;
|
color: #67C23A;
|
||||||
}
|
}
|
||||||
|
|
||||||
.downloadTemplateBtnDrow {
|
|
||||||
width: 100px;
|
|
||||||
height: 36px;
|
|
||||||
font-family: Microsoft YaHei;
|
|
||||||
font-weight: 700;
|
|
||||||
font-size: 16px;
|
|
||||||
text-align: center;
|
|
||||||
color: #409eff !important;
|
|
||||||
background: transparent !important;
|
|
||||||
margin-top: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.downloadTemplateBtnDrow:hover {
|
|
||||||
background: transparent !important;
|
|
||||||
color: #409eff !important;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -77,7 +77,6 @@
|
||||||
<span>{{ moment(scope.row.created_at, "ddd, DD MMM YYYY HH:mm:ss [GMT]").format('YYYY-MM-DD HH:mm:ss') }}</span>
|
<span>{{ moment(scope.row.created_at, "ddd, DD MMM YYYY HH:mm:ss [GMT]").format('YYYY-MM-DD HH:mm:ss') }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="异常信息" align="center" prop="errorMessage" width="210" />
|
|
||||||
<el-table-column label="操作" :width="160" align="center">
|
<el-table-column label="操作" :width="160" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button v-if="scope.row.progress == 100" link type="primary"
|
<el-button v-if="scope.row.progress == 100" link type="primary"
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="6" :xs="24">
|
<el-col :span="6" :xs="24">
|
||||||
<el-card class="box-card" style="min-height: calc(100vh - 100px);">
|
<el-card class="box-card">
|
||||||
<template v-slot:header>
|
<template v-slot:header>
|
||||||
<div class="clearfix">
|
<div class="clearfix">
|
||||||
<span>个人信息</span>
|
<span>个人信息</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
</div>
|
</div>
|
||||||
<ul class="list-group list-group-striped">
|
<ul class="list-group list-group-striped">
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<svg-icon icon-class="user" />用户账号
|
<svg-icon icon-class="user" />用户名称
|
||||||
<div class="pull-right">{{ state.user.userName }}</div>
|
<div class="pull-right">{{ state.user.userName }}</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
|
|
@ -27,8 +27,7 @@
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<svg-icon icon-class="tree" />所属部门
|
<svg-icon icon-class="tree" />所属部门
|
||||||
<div class="pull-right" v-if="state.user.dept">{{ state.user.dept.deptName }} / {{
|
<div class="pull-right" v-if="state.user.dept">{{ state.user.dept.deptName }} / {{ state.postGroup }}</div>
|
||||||
state.postGroup }}</div>
|
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<svg-icon icon-class="peoples" />所属角色
|
<svg-icon icon-class="peoples" />所属角色
|
||||||
|
|
@ -43,13 +42,13 @@
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="18" :xs="24">
|
<el-col :span="18" :xs="24">
|
||||||
<el-card style="min-height: calc(100vh - 100px);">
|
<el-card>
|
||||||
<template v-slot:header>
|
<template v-slot:header>
|
||||||
<div class="clearfix">
|
<div class="clearfix">
|
||||||
<span>基本资料</span>
|
<span>基本资料</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<el-tabs class="demo-tabs" v-model="selectedTab">
|
<el-tabs v-model="selectedTab">
|
||||||
<el-tab-pane label="基本资料" name="userinfo">
|
<el-tab-pane label="基本资料" name="userinfo">
|
||||||
<userInfo :user="state.user" />
|
<userInfo :user="state.user" />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
|
@ -67,33 +66,29 @@
|
||||||
import userAvatar from "./userAvatar"
|
import userAvatar from "./userAvatar"
|
||||||
import userInfo from "./userInfo"
|
import userInfo from "./userInfo"
|
||||||
import resetPwd from "./resetPwd"
|
import resetPwd from "./resetPwd"
|
||||||
import otherbg from '@/assets/images/otherbg.png'
|
|
||||||
import { getUserProfile } from "@/api/system/user"
|
import { getUserProfile } from "@/api/system/user"
|
||||||
import { useBackgroundStore } from '@/store/modules/background'
|
|
||||||
|
|
||||||
const bgStore = useBackgroundStore()
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const selectedTab = ref("userinfo")
|
const selectedTab = ref("userinfo")
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
user: {},
|
user: {},
|
||||||
roleGroup: {},
|
roleGroup: {},
|
||||||
postGroup: {}
|
postGroup: {}
|
||||||
})
|
})
|
||||||
|
|
||||||
function getUser() {
|
function getUser() {
|
||||||
getUserProfile().then(response => {
|
getUserProfile().then(response => {
|
||||||
state.user = response.data
|
state.user = response.data
|
||||||
state.roleGroup = response.roleGroup
|
state.roleGroup = response.roleGroup
|
||||||
state.postGroup = response.postGroup
|
state.postGroup = response.postGroup
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
bgStore.setBgImage(otherbg)
|
const activeTab = route.params && route.params.activeTab
|
||||||
const activeTab = route.params && route.params.activeTab
|
if (activeTab) {
|
||||||
if (activeTab) {
|
selectedTab.value = activeTab
|
||||||
selectedTab.value = activeTab
|
}
|
||||||
}
|
getUser()
|
||||||
getUser()
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<el-form ref="userRef" :model="form" :rules="rules" label-width="80px">
|
<el-form ref="userRef" :model="form" :rules="rules" label-width="80px">
|
||||||
<el-form-item label="用户姓名" prop="realName">
|
<el-form-item label="用户昵称" prop="nickName">
|
||||||
<el-input v-model="form.realName" maxlength="30" />
|
<el-input v-model="form.nickName" maxlength="30" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="手机号码" prop="phonenumber">
|
<el-form-item label="手机号码" prop="phonenumber">
|
||||||
<el-input v-model="form.phonenumber" maxlength="11" />
|
<el-input v-model="form.phonenumber" maxlength="11" />
|
||||||
|
|
@ -35,7 +35,7 @@ const { proxy } = getCurrentInstance()
|
||||||
|
|
||||||
const form = ref({})
|
const form = ref({})
|
||||||
const rules = ref({
|
const rules = ref({
|
||||||
realName: [{ required: true, message: "用户姓名不能为空", trigger: "blur" }],
|
nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }],
|
||||||
email: [{ required: true, message: "邮箱地址不能为空", trigger: "blur" }, { type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
|
email: [{ required: true, message: "邮箱地址不能为空", trigger: "blur" }, { type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
|
||||||
phonenumber: [{ required: true, message: "手机号码不能为空", trigger: "blur" }, { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }],
|
phonenumber: [{ required: true, message: "手机号码不能为空", trigger: "blur" }, { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }],
|
||||||
})
|
})
|
||||||
|
|
@ -61,7 +61,7 @@ function close() {
|
||||||
// 回显当前登录用户信息
|
// 回显当前登录用户信息
|
||||||
watch(() => props.user, user => {
|
watch(() => props.user, user => {
|
||||||
if (user) {
|
if (user) {
|
||||||
form.value = { realName: user.realName, phonenumber: user.phonenumber, email: user.email, sex: user.sex }
|
form.value = { nickName: user.nickName, phonenumber: user.phonenumber, email: user.email, sex: user.sex }
|
||||||
}
|
}
|
||||||
},{ immediate: true })
|
},{ immediate: true })
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user