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({
|
||||
url: '/system/user/profile/updatePwd',
|
||||
method: 'put',
|
||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1175,9 +1175,7 @@ h6 {
|
|||
.myInsertForm .el-tabs__item.is-active,
|
||||
.myDetailForm .el-tabs__item.is-active,
|
||||
.my_dialog .el-tabs__item.is-active,
|
||||
.myInsertForm .el-tabs__item:hover,
|
||||
.myDetailForm .el-tabs__item:hover,
|
||||
.my_dialog .el-tabs__item:hover {
|
||||
.el-tabs__item:hover {
|
||||
font-family: Microsoft YaHei;
|
||||
font-weight: 600;
|
||||
font-size: 22px;
|
||||
|
|
|
|||
|
|
@ -18,24 +18,8 @@
|
|||
<img :src="icon_feedback" class="custom-icon" @click="handleFeedBack" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
<!-- <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">
|
||||
<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>
|
||||
|
||||
<img :src="userStore.avatar ? userStore.avatar : avatar_icon" class="user-avatar" />
|
||||
<span class="user-nickname"> {{ userStore.name }} </span>
|
||||
<div class="logout_icon">
|
||||
<el-tooltip class="box-item" effect="dark" content="退出" placement="bottom-start">
|
||||
<img :src="logout_icon" class="custom-icon" @click="logout" />
|
||||
|
|
@ -86,10 +70,10 @@ import useSettingsStore from '@/store/modules/settings'
|
|||
import { addSysReaddBusProblemFeedbackgion } from "@/api/problemFeedback"
|
||||
|
||||
const appStore = useAppStore()
|
||||
const userStore = useUserStore()
|
||||
const userStore = useUserStore()
|
||||
const settingsStore = useSettingsStore()
|
||||
const { proxy } = getCurrentInstance()
|
||||
|
||||
|
||||
function toggleSideBar() {
|
||||
appStore.toggleSideBar()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ const useSettingsStore = defineStore(
|
|||
state: () => ({
|
||||
title: '',
|
||||
theme: storageSetting.theme || '#409EFF',
|
||||
sideTheme: 'theme-light', //storageSetting.sideTheme || sideTheme,
|
||||
showSettings: false, //showSettings,
|
||||
sideTheme: storageSetting.sideTheme || sideTheme,
|
||||
showSettings: showSettings,
|
||||
topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
|
||||
tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView,
|
||||
tagsIcon: storageSetting.tagsIcon === undefined ? tagsIcon : storageSetting.tagsIcon,
|
||||
|
|
@ -25,7 +25,7 @@ const useSettingsStore = defineStore(
|
|||
dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle,
|
||||
footerVisible: storageSetting.footerVisible === undefined ? footerVisible : storageSetting.footerVisible,
|
||||
footerContent: footerContent,
|
||||
isDark: false, // isDark.value
|
||||
isDark: isDark.value
|
||||
}),
|
||||
actions: {
|
||||
// 修改布局设置
|
||||
|
|
@ -42,8 +42,8 @@ const useSettingsStore = defineStore(
|
|||
},
|
||||
// 切换暗黑模式
|
||||
toggleTheme() {
|
||||
// this.isDark = !this.isDark
|
||||
// toggleDark()
|
||||
this.isDark = !this.isDark
|
||||
toggleDark()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
</el-checkbox-group>
|
||||
</el-tab-pane>
|
||||
<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"
|
||||
:type="activeIndex === index ? 'primary' : 'default'" @click="handleChangeType(index)">
|
||||
{{ item }}
|
||||
|
|
@ -81,170 +81,6 @@ const exportOpen = ref(false)
|
|||
const activeName = ref('first')
|
||||
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([
|
||||
{
|
||||
|
|
@ -1314,7 +1150,7 @@ const ckdxPriceFild = ref([
|
|||
const exportForm = ref({
|
||||
ids: undefined,
|
||||
exportBaseFields: undefined,
|
||||
mediaTypeExport: [],
|
||||
exportPriceFields: false,
|
||||
hasFiles: false
|
||||
})
|
||||
|
||||
|
|
@ -1323,7 +1159,7 @@ const baseFieldCheckAll = ref(false)
|
|||
const baseFieldIsIndeterminate = ref(false)
|
||||
// 基础字段
|
||||
const baseFields = ref([])
|
||||
// const _baseFields = ref(null)
|
||||
const _baseFields = ref(null)
|
||||
// 已选择的基础字段
|
||||
const checkedBaseFields = ref([])
|
||||
|
||||
|
|
@ -1359,88 +1195,20 @@ const handleCheckedBaseFieldChange = (value) => {
|
|||
baseFieldIsIndeterminate.value = checkedCount > 0 && checkedCount < baseFields.value.length
|
||||
}
|
||||
// 报价字段全选操作
|
||||
const handleCheckAllPriceFieldChange = (val) => {
|
||||
const handleCheckAllPriceFieldChange = (val) => {
|
||||
checkedPriceFields.value = []
|
||||
if (val) {
|
||||
priceFields.value.forEach(element => {
|
||||
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
|
||||
// 更新选择状态
|
||||
checkPriceFieldSelectStatus()
|
||||
}
|
||||
// 单个选择报价字段
|
||||
const handleCheckedPriceFieldChange = (value) => {
|
||||
const handleCheckedPriceFieldChange = (value) => {
|
||||
const checkedCount = value.length
|
||||
priceFieldCheckAll.value = 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 = () => {
|
||||
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 => {
|
||||
const downLoadName = '媒体信息_' + getCurrentTime() + '.xlsx'
|
||||
// 通过a标签打开新页面下载文件
|
||||
|
|
@ -1487,15 +1255,20 @@ const getCurrentTime = () => {
|
|||
|
||||
// 获取基础信息字段
|
||||
const getMediaExcelBaseField = () => {
|
||||
if (curDeptIds.value && curDeptIds.value.length == 2) baseFields.value = ysBaseFild.value
|
||||
else if (curDeptIds.value && curDeptIds.value.length == 1) {
|
||||
if (curDeptIds.value[0] == '219') {
|
||||
// 网络媒体
|
||||
baseFields.value = wlBaseFild.value
|
||||
} else {
|
||||
baseFields.value = ysBaseFild.value
|
||||
mediaExcelBaseField().then(res => {
|
||||
if (curDeptIds.value && curDeptIds.value.length == 2) baseFields.value = res.data
|
||||
else if (curDeptIds.value && curDeptIds.value.length == 1) {
|
||||
if (curDeptIds.value[0] == '219') {
|
||||
// 网络媒体
|
||||
_baseFields.value = "媒体名称,媒体类型,媒体大类,展示形式,省,市,区,镇,商圈,地址,经度,纬度,状态,废除原因, 部门"
|
||||
} else {
|
||||
_baseFields.value = "媒体名称,媒体类型,媒体大类,展示形式,是否照明,播放时间,媒体尺寸,mr,日均车流量,媒体朝向,省,市,区,镇,商圈,地址,经度,纬度,最小购买周期,首次制作安装费,换刊制作安装费,状态,废除原因, 部门"
|
||||
}
|
||||
baseFields.value = [...new Set( // 去重
|
||||
res.data.filter(item => _baseFields.value.includes(item.displayName))
|
||||
)];
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
// 获取报价信息字段
|
||||
const getMediaExcelPriceField = () => {
|
||||
|
|
@ -1503,148 +1276,93 @@ const getMediaExcelPriceField = () => {
|
|||
ToolOptions.value = ['优势报价', '门禁', '候车厅', '道闸', '地铁', '高铁', '写字楼', '车库灯箱']
|
||||
activeIndex.value = 0
|
||||
priceFields.value = ysPriceFild.value
|
||||
handleCheckPriceField(0)
|
||||
}
|
||||
else if (curDeptIds.value && curDeptIds.value.length == 1) {
|
||||
if (curDeptIds.value[0] == '219') {
|
||||
ToolOptions.value = ['门禁', '候车厅', '道闸', '地铁', '高铁', '写字楼', '车库灯箱']
|
||||
activeIndex.value = 0
|
||||
priceFields.value = mjPriceFild.value
|
||||
handleCheckPriceField(1)
|
||||
} else {
|
||||
ToolOptions.value = []
|
||||
activeIndex.value = 0
|
||||
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) => {
|
||||
activeIndex.value = _type
|
||||
priceFieldCheckAll.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) {
|
||||
switch (_type) {
|
||||
case 0:
|
||||
priceFields.value = ysPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
case 1:
|
||||
priceFields.value = mjPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
case 2:
|
||||
priceFields.value = hctPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
case 3:
|
||||
priceFields.value = dzPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
case 4:
|
||||
priceFields.value = dtPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
case 5:
|
||||
priceFields.value = gtPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
case 6:
|
||||
priceFields.value = xzlPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
case 7:
|
||||
priceFields.value = ckdxPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
}
|
||||
handleCheckPriceField(_type)
|
||||
}
|
||||
if (ToolOptions.value.length == 7) {
|
||||
switch (_type) {
|
||||
case 0:
|
||||
priceFields.value = mjPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
case 1:
|
||||
priceFields.value = hctPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
case 2:
|
||||
priceFields.value = dzPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
case 3:
|
||||
priceFields.value = dtPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
case 4:
|
||||
priceFields.value = gtPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
case 5:
|
||||
priceFields.value = xzlPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
break;
|
||||
case 6:
|
||||
priceFields.value = ckdxPriceFild.value
|
||||
checkedPriceFields.value = currentCheckedFields
|
||||
checkedPriceFields.value = []
|
||||
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) => {
|
||||
|
|
@ -1654,10 +1372,6 @@ const initExportExcel = (_mediaIds, _curDeptIds) => {
|
|||
exportOpen.value = true
|
||||
getMediaExcelBaseField()
|
||||
getMediaExcelPriceField()
|
||||
|
||||
// 初始化时检查选择状态
|
||||
checkBaseFieldSelectStatus()
|
||||
checkPriceFieldSelectStatus()
|
||||
}
|
||||
|
||||
// 暴露方法\属性给父组件
|
||||
|
|
@ -1667,24 +1381,24 @@ defineExpose({
|
|||
</script>
|
||||
|
||||
<style lang='scss'>
|
||||
.exportGroup>.el-button {
|
||||
.el-button-group>.el-button {
|
||||
float: left;
|
||||
position: relative;
|
||||
height: 30px;
|
||||
border: 1px solid #9C9C9C;
|
||||
background: #9c9c9c1a;
|
||||
height: 38px;
|
||||
border: 1px solid #DFDFDF;
|
||||
background: #ffffff;
|
||||
font-family: Microsoft YaHei;
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
text-align: center;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.exportGroup>.el-button--primary {
|
||||
background: #1a75e6;
|
||||
border: 1px solid #1A75E6;
|
||||
}
|
||||
|
||||
.exportGroup .el-button--primary:last-child {
|
||||
border-left-color: #1A75E6;
|
||||
}
|
||||
|
||||
.exportGroup .el-button--primary:first-child {
|
||||
border-right-color: #1A75E6;
|
||||
.el-button-group>.el-button--primary {
|
||||
background: #1f1f1f;
|
||||
font-family: Microsoft YaHei;
|
||||
font-weight: 600;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid #1f1f1f;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -13,8 +13,7 @@
|
|||
value-format="YYYY-MM-DD HH:mm:ss" type="date" placeholder="结束时间" @change="validateEndTime" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型:" v-if="!readonly">
|
||||
<el-select v-model="mediaType" placeholder="请选择" style="min-width: 120px;" clearable
|
||||
@change="handleChangeMediaType">
|
||||
<el-select v-model="mediaType" placeholder="请选择" style="min-width: 120px;" clearable @change="handleChangeMediaType" >
|
||||
<el-option v-for="item in mediaTypes" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
|
|
@ -217,14 +216,7 @@ const initHistoryCharLine = () => {
|
|||
_historyChar.value.setOption({
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
// formatter: "{b} : {c} 元/天" //鼠标放上去 展示内容
|
||||
formatter: function (params) {
|
||||
// 从原始数据中获取时间
|
||||
const originalData = historyList.value; // 你的原始数据
|
||||
const time = originalData[params.dataIndex].createTime;
|
||||
|
||||
return `${params.name}: ${params.value} 元/天<br/>时间: ${time}`;
|
||||
}
|
||||
formatter: "{b} : {c} 元/天" //鼠标放上去 展示内容
|
||||
},
|
||||
grid: {
|
||||
left: '3%',
|
||||
|
|
@ -312,14 +304,7 @@ const initHistoryCharBar = () => {
|
|||
_historyChar.value.setOption({
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
// formatter: "{b} : {c} 元/天" //鼠标放上去 展示内容
|
||||
formatter: function (params) {
|
||||
// 从原始数据中获取时间
|
||||
const originalData = historyList.value; // 你的原始数据
|
||||
const time = originalData[params.dataIndex].createTime;
|
||||
|
||||
return `${params.name}: ${params.value} 元/天<br/>时间: ${time}`;
|
||||
}
|
||||
formatter: "{b} : {c} 元/天" //鼠标放上去 展示内容
|
||||
},
|
||||
grid: {
|
||||
left: '3%',
|
||||
|
|
@ -403,7 +388,7 @@ const initHistoryCharBar = () => {
|
|||
// _historyChar.value.resize()
|
||||
// })
|
||||
}
|
||||
const handleChangeMediaType = (val) => {
|
||||
const handleChangeMediaType = (val) => {
|
||||
getMediaPriceList()
|
||||
}
|
||||
const handleChangeType = (val) => {
|
||||
|
|
@ -439,6 +424,8 @@ const getMediaPriceList = () => {
|
|||
itemYDate = (convertIntTotalRegularPrice / (item.buyCycle * 7)).toFixed(2)
|
||||
} else {
|
||||
const repliceValue = parseInt(item.buyCycle.replace('个月', '').replace('月', ''))
|
||||
console.log('会输入月份的原始值', item.buyCycle)
|
||||
console.log('替换会输入月份的结果', repliceValue)
|
||||
itemYDate = (convertIntTotalRegularPrice / (repliceValue * 31)).toFixed(2)
|
||||
}
|
||||
}
|
||||
|
|
@ -476,7 +463,7 @@ const validateEndTime = (val) => {
|
|||
}
|
||||
};
|
||||
// 对外暴漏方法
|
||||
const initHistoryData = (_mediaId, _readonly) => {
|
||||
const initHistoryData = (_mediaId, _readonly) => {
|
||||
historyDataOpen.value = true
|
||||
readonly.value = _readonly
|
||||
nextTick(() => {
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="供应商/媒体形式/名称" prop="business_department">
|
||||
<el-form-item label="媒体形式/名称" prop="business_department">
|
||||
{{ detailForm.mediaName }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
|
@ -113,7 +113,7 @@
|
|||
</el-row>
|
||||
<div class="splineBar" />
|
||||
<el-row :gutter="30" class="my_form_row">
|
||||
<el-col :span="12">
|
||||
<el-col :span="18">
|
||||
<el-form-item label="城市" prop="business_department">
|
||||
<span v-if="detailForm.provinceName">{{ detailForm.provinceName }}</span>
|
||||
<span v-if="detailForm.cityName">-{{ detailForm.cityName }}</span>
|
||||
|
|
@ -121,7 +121,7 @@
|
|||
<span v-if="detailForm.townName">-{{ detailForm.townName }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="商圈" prop="business_department">
|
||||
{{ detailForm.businessDistrictName }}
|
||||
</el-form-item>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
</el-icon>
|
||||
</div>
|
||||
</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-item title="业务部门" name="1">
|
||||
<el-row :gutter="30" class="my_form_row">
|
||||
|
|
@ -31,7 +31,7 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="供应商/媒体形式/名称" prop="mediaName" >
|
||||
<el-form-item label="媒体形式/名称" prop="mediaName">
|
||||
<el-input v-model="ruleForm.mediaName" placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
|
|
|||
|
|
@ -13,26 +13,7 @@
|
|||
<div class="tool-content">
|
||||
<el-row :gutter="20" style="margin: 0 -10px 30px -10px;">
|
||||
<el-col :span="24">
|
||||
<div class="toolItemTitle mb20">
|
||||
上传文件
|
||||
<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>
|
||||
<div class="toolItemTitle mb20">上传文件</div>
|
||||
<el-upload class="my-upload-demo" drag action="#" :http-request="requestDocUpload"
|
||||
:file-list="docUploadList" :before-upload="beforeDocUpload" :on-remove="removeDocUpload">
|
||||
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
||||
|
|
@ -66,7 +47,6 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<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">
|
||||
<template #default="scope">
|
||||
<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="center" prop="totalRegularPriceUnit" width="130" />
|
||||
<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="mediaFeeTotalPrice" width="130" />
|
||||
<el-table-column label="单日覆盖人流量" align="center" prop="dailyAvgPeopleFlow" width="150" />
|
||||
|
|
@ -367,41 +347,6 @@ const getTaskRecordPageList = () => {
|
|||
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) => {
|
||||
|
|
@ -482,7 +427,7 @@ const handleExportCalibraTionResult = () => {
|
|||
document.body.appendChild(a)
|
||||
a.click()
|
||||
document.body.removeChild(a)
|
||||
|
||||
|
||||
proxy.$modal.msgSuccess("导出成功")
|
||||
handleCloseModal()
|
||||
})
|
||||
|
|
@ -636,21 +581,4 @@ defineExpose({
|
|||
font-size: 16px;
|
||||
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>
|
||||
|
|
@ -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>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="异常信息" align="center" prop="errorMessage" width="210" />
|
||||
<el-table-column label="操作" :width="160" align="center">
|
||||
<template #default="scope">
|
||||
<el-button v-if="scope.row.progress == 100" link type="primary"
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@
|
|||
<div class="app-container">
|
||||
<el-row :gutter="20">
|
||||
<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>
|
||||
<div class="clearfix">
|
||||
<span>个人信息</span>
|
||||
</div>
|
||||
<div class="clearfix">
|
||||
<span>个人信息</span>
|
||||
</div>
|
||||
</template>
|
||||
<div>
|
||||
<div class="text-center">
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
</div>
|
||||
<ul class="list-group list-group-striped">
|
||||
<li class="list-group-item">
|
||||
<svg-icon icon-class="user" />用户账号
|
||||
<svg-icon icon-class="user" />用户名称
|
||||
<div class="pull-right">{{ state.user.userName }}</div>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
|
|
@ -27,8 +27,7 @@
|
|||
</li>
|
||||
<li class="list-group-item">
|
||||
<svg-icon icon-class="tree" />所属部门
|
||||
<div class="pull-right" v-if="state.user.dept">{{ state.user.dept.deptName }} / {{
|
||||
state.postGroup }}</div>
|
||||
<div class="pull-right" v-if="state.user.dept">{{ state.user.dept.deptName }} / {{ state.postGroup }}</div>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<svg-icon icon-class="peoples" />所属角色
|
||||
|
|
@ -43,13 +42,13 @@
|
|||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="18" :xs="24">
|
||||
<el-card style="min-height: calc(100vh - 100px);">
|
||||
<el-card>
|
||||
<template v-slot:header>
|
||||
<div class="clearfix">
|
||||
<span>基本资料</span>
|
||||
</div>
|
||||
<div class="clearfix">
|
||||
<span>基本资料</span>
|
||||
</div>
|
||||
</template>
|
||||
<el-tabs class="demo-tabs" v-model="selectedTab">
|
||||
<el-tabs v-model="selectedTab">
|
||||
<el-tab-pane label="基本资料" name="userinfo">
|
||||
<userInfo :user="state.user" />
|
||||
</el-tab-pane>
|
||||
|
|
@ -67,33 +66,29 @@
|
|||
import userAvatar from "./userAvatar"
|
||||
import userInfo from "./userInfo"
|
||||
import resetPwd from "./resetPwd"
|
||||
import otherbg from '@/assets/images/otherbg.png'
|
||||
import { getUserProfile } from "@/api/system/user"
|
||||
import { useBackgroundStore } from '@/store/modules/background'
|
||||
|
||||
const bgStore = useBackgroundStore()
|
||||
const route = useRoute()
|
||||
const selectedTab = ref("userinfo")
|
||||
const state = reactive({
|
||||
user: {},
|
||||
roleGroup: {},
|
||||
postGroup: {}
|
||||
user: {},
|
||||
roleGroup: {},
|
||||
postGroup: {}
|
||||
})
|
||||
|
||||
function getUser() {
|
||||
getUserProfile().then(response => {
|
||||
state.user = response.data
|
||||
state.roleGroup = response.roleGroup
|
||||
state.postGroup = response.postGroup
|
||||
})
|
||||
getUserProfile().then(response => {
|
||||
state.user = response.data
|
||||
state.roleGroup = response.roleGroup
|
||||
state.postGroup = response.postGroup
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
bgStore.setBgImage(otherbg)
|
||||
const activeTab = route.params && route.params.activeTab
|
||||
if (activeTab) {
|
||||
selectedTab.value = activeTab
|
||||
}
|
||||
getUser()
|
||||
const activeTab = route.params && route.params.activeTab
|
||||
if (activeTab) {
|
||||
selectedTab.value = activeTab
|
||||
}
|
||||
getUser()
|
||||
})
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<el-form ref="userRef" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="用户姓名" prop="realName">
|
||||
<el-input v-model="form.realName" maxlength="30" />
|
||||
<el-form-item label="用户昵称" prop="nickName">
|
||||
<el-input v-model="form.nickName" maxlength="30" />
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号码" prop="phonenumber">
|
||||
<el-input v-model="form.phonenumber" maxlength="11" />
|
||||
|
|
@ -35,7 +35,7 @@ const { proxy } = getCurrentInstance()
|
|||
|
||||
const form = 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"] }],
|
||||
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 => {
|
||||
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 })
|
||||
</script>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user