Compare commits
4 Commits
c024fc8ca2
...
9f2acfee68
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f2acfee68 | ||
|
|
063ab62109 | ||
|
|
cc4bbc4dbe | ||
|
|
687b196fbe |
BIN
public/jzTemplate/候车厅校准平台模板.xlsx
Normal file
BIN
public/jzTemplate/候车厅校准平台模板.xlsx
Normal file
Binary file not shown.
BIN
public/jzTemplate/写字楼校准平台模板.xlsx
Normal file
BIN
public/jzTemplate/写字楼校准平台模板.xlsx
Normal file
Binary file not shown.
BIN
public/jzTemplate/地铁校准平台模板.xlsx
Normal file
BIN
public/jzTemplate/地铁校准平台模板.xlsx
Normal file
Binary file not shown.
BIN
public/jzTemplate/车库灯箱校准平台模板.xlsx
Normal file
BIN
public/jzTemplate/车库灯箱校准平台模板.xlsx
Normal file
Binary file not shown.
BIN
public/jzTemplate/道闸校准平台模板.xlsx
Normal file
BIN
public/jzTemplate/道闸校准平台模板.xlsx
Normal file
Binary file not shown.
BIN
public/jzTemplate/门禁校准平台模板.xlsx
Normal file
BIN
public/jzTemplate/门禁校准平台模板.xlsx
Normal file
Binary file not shown.
BIN
public/jzTemplate/高铁校准平台模板.xlsx
Normal file
BIN
public/jzTemplate/高铁校准平台模板.xlsx
Normal file
Binary file not shown.
|
|
@ -97,6 +97,7 @@ 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,7 +1175,9 @@ 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,
|
||||||
.el-tabs__item:hover {
|
.myInsertForm .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,8 +18,24 @@
|
||||||
<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" /> -->
|
||||||
|
<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" />
|
<img :src="userStore.avatar ? userStore.avatar : avatar_icon" class="user-avatar" />
|
||||||
<span class="user-nickname"> {{ userStore.name }} </span>
|
<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" />
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ const useSettingsStore = defineStore(
|
||||||
state: () => ({
|
state: () => ({
|
||||||
title: '',
|
title: '',
|
||||||
theme: storageSetting.theme || '#409EFF',
|
theme: storageSetting.theme || '#409EFF',
|
||||||
sideTheme: storageSetting.sideTheme || sideTheme,
|
sideTheme: 'theme-light', //storageSetting.sideTheme || sideTheme,
|
||||||
showSettings: showSettings,
|
showSettings: false, //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: isDark.value
|
isDark: false, // 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="mb10">
|
<el-button-group class="exportGroup 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,6 +81,170 @@ 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([
|
||||||
{
|
{
|
||||||
|
|
@ -1150,7 +1314,7 @@ const ckdxPriceFild = ref([
|
||||||
const exportForm = ref({
|
const exportForm = ref({
|
||||||
ids: undefined,
|
ids: undefined,
|
||||||
exportBaseFields: undefined,
|
exportBaseFields: undefined,
|
||||||
exportPriceFields: false,
|
mediaTypeExport: [],
|
||||||
hasFiles: false
|
hasFiles: false
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -1159,7 +1323,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([])
|
||||||
|
|
||||||
|
|
@ -1201,14 +1365,82 @@ const handleCheckAllPriceFieldChange = (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()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 选择是否包含附件
|
// 选择是否包含附件
|
||||||
|
|
@ -1224,7 +1456,7 @@ const handleClick = (tab, event) => {
|
||||||
// 执行导出
|
// 执行导出
|
||||||
const handleSubmitExport = () => {
|
const handleSubmitExport = () => {
|
||||||
exportForm.value.exportBaseFields = checkedBaseFields
|
exportForm.value.exportBaseFields = checkedBaseFields
|
||||||
exportForm.value.exportPriceFields = checkedPriceFields
|
exportForm.value.mediaTypeExport = exportForm.value.mediaTypeExport.filter(item => item.exportPriceFields.length > 0)
|
||||||
exportMediaExcel(exportForm.value).then(res => {
|
exportMediaExcel(exportForm.value).then(res => {
|
||||||
const downLoadName = '媒体信息_' + getCurrentTime() + '.xlsx'
|
const downLoadName = '媒体信息_' + getCurrentTime() + '.xlsx'
|
||||||
// 通过a标签打开新页面下载文件
|
// 通过a标签打开新页面下载文件
|
||||||
|
|
@ -1255,20 +1487,15 @@ const getCurrentTime = () => {
|
||||||
|
|
||||||
// 获取基础信息字段
|
// 获取基础信息字段
|
||||||
const getMediaExcelBaseField = () => {
|
const getMediaExcelBaseField = () => {
|
||||||
mediaExcelBaseField().then(res => {
|
if (curDeptIds.value && curDeptIds.value.length == 2) baseFields.value = ysBaseFild.value
|
||||||
if (curDeptIds.value && curDeptIds.value.length == 2) baseFields.value = res.data
|
|
||||||
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') {
|
||||||
// 网络媒体
|
// 网络媒体
|
||||||
_baseFields.value = "媒体名称,媒体类型,媒体大类,展示形式,省,市,区,镇,商圈,地址,经度,纬度,状态,废除原因, 部门"
|
baseFields.value = wlBaseFild.value
|
||||||
} else {
|
} else {
|
||||||
_baseFields.value = "媒体名称,媒体类型,媒体大类,展示形式,是否照明,播放时间,媒体尺寸,mr,日均车流量,媒体朝向,省,市,区,镇,商圈,地址,经度,纬度,最小购买周期,首次制作安装费,换刊制作安装费,状态,废除原因, 部门"
|
baseFields.value = ysBaseFild.value
|
||||||
}
|
}
|
||||||
baseFields.value = [...new Set( // 去重
|
|
||||||
res.data.filter(item => _baseFields.value.includes(item.displayName))
|
|
||||||
)];
|
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
// 获取报价信息字段
|
// 获取报价信息字段
|
||||||
const getMediaExcelPriceField = () => {
|
const getMediaExcelPriceField = () => {
|
||||||
|
|
@ -1276,93 +1503,148 @@ 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 = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
priceFields.value = mjPriceFild.value
|
priceFields.value = mjPriceFild.value
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
priceFields.value = hctPriceFild.value
|
priceFields.value = hctPriceFild.value
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
priceFields.value = dzPriceFild.value
|
priceFields.value = dzPriceFild.value
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
priceFields.value = dtPriceFild.value
|
priceFields.value = dtPriceFild.value
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
priceFields.value = gtPriceFild.value
|
priceFields.value = gtPriceFild.value
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
priceFields.value = xzlPriceFild.value
|
priceFields.value = xzlPriceFild.value
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
priceFields.value = ckdxPriceFild.value
|
priceFields.value = ckdxPriceFild.value
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
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 = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
priceFields.value = hctPriceFild.value
|
priceFields.value = hctPriceFild.value
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
priceFields.value = dzPriceFild.value
|
priceFields.value = dzPriceFild.value
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
priceFields.value = dtPriceFild.value
|
priceFields.value = dtPriceFild.value
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
priceFields.value = gtPriceFild.value
|
priceFields.value = gtPriceFild.value
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
priceFields.value = xzlPriceFild.value
|
priceFields.value = xzlPriceFild.value
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
priceFields.value = ckdxPriceFild.value
|
priceFields.value = ckdxPriceFild.value
|
||||||
checkedPriceFields.value = []
|
checkedPriceFields.value = currentCheckedFields
|
||||||
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) => {
|
||||||
|
|
@ -1372,6 +1654,10 @@ const initExportExcel = (_mediaIds, _curDeptIds) => {
|
||||||
exportOpen.value = true
|
exportOpen.value = true
|
||||||
getMediaExcelBaseField()
|
getMediaExcelBaseField()
|
||||||
getMediaExcelPriceField()
|
getMediaExcelPriceField()
|
||||||
|
|
||||||
|
// 初始化时检查选择状态
|
||||||
|
checkBaseFieldSelectStatus()
|
||||||
|
checkPriceFieldSelectStatus()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 暴露方法\属性给父组件
|
// 暴露方法\属性给父组件
|
||||||
|
|
@ -1381,24 +1667,24 @@ defineExpose({
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang='scss'>
|
<style lang='scss'>
|
||||||
.el-button-group>.el-button {
|
.exportGroup>.el-button {
|
||||||
float: left;
|
float: left;
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 38px;
|
height: 30px;
|
||||||
border: 1px solid #DFDFDF;
|
border: 1px solid #9C9C9C;
|
||||||
background: #ffffff;
|
background: #9c9c9c1a;
|
||||||
font-family: Microsoft YaHei;
|
|
||||||
font-weight: 400;
|
|
||||||
font-size: 18px;
|
|
||||||
text-align: center;
|
|
||||||
color: #000000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-button-group>.el-button--primary {
|
.exportGroup>.el-button--primary {
|
||||||
background: #1f1f1f;
|
background: #1a75e6;
|
||||||
font-family: Microsoft YaHei;
|
border: 1px solid #1A75E6;
|
||||||
font-weight: 600;
|
}
|
||||||
color: #FFFFFF;
|
|
||||||
border: 1px solid #1f1f1f;
|
.exportGroup .el-button--primary:last-child {
|
||||||
|
border-left-color: #1A75E6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.exportGroup .el-button--primary:first-child {
|
||||||
|
border-right-color: #1A75E6;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -13,7 +13,8 @@
|
||||||
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 @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"
|
<el-option v-for="item in mediaTypes" :key="item.value" :label="item.label"
|
||||||
:value="item.value" />
|
:value="item.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
|
|
@ -216,7 +217,14 @@ 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%',
|
||||||
|
|
@ -304,7 +312,14 @@ 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%',
|
||||||
|
|
@ -424,8 +439,6 @@ 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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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="18">
|
<el-col :span="12">
|
||||||
<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="6">
|
<el-col :span="12">
|
||||||
<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="160px" class="myInsertForm">
|
<el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="180px" 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,7 +13,26 @@
|
||||||
<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>
|
<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>
|
||||||
<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>
|
||||||
|
|
@ -47,6 +66,7 @@
|
||||||
</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"
|
||||||
|
|
@ -177,7 +197,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" />
|
||||||
|
|
@ -347,6 +367,41 @@ 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) => {
|
||||||
|
|
@ -581,4 +636,21 @@ 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,6 +77,7 @@
|
||||||
<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,7 +2,7 @@
|
||||||
<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">
|
<el-card class="box-card" style="min-height: calc(100vh - 100px);">
|
||||||
<template v-slot:header>
|
<template v-slot:header>
|
||||||
<div class="clearfix">
|
<div class="clearfix">
|
||||||
<span>个人信息</span>
|
<span>个人信息</span>
|
||||||
|
|
@ -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,7 +27,8 @@
|
||||||
</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 }} / {{ state.postGroup }}</div>
|
<div class="pull-right" v-if="state.user.dept">{{ state.user.dept.deptName }} / {{
|
||||||
|
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" />所属角色
|
||||||
|
|
@ -42,13 +43,13 @@
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="18" :xs="24">
|
<el-col :span="18" :xs="24">
|
||||||
<el-card>
|
<el-card style="min-height: calc(100vh - 100px);">
|
||||||
<template v-slot:header>
|
<template v-slot:header>
|
||||||
<div class="clearfix">
|
<div class="clearfix">
|
||||||
<span>基本资料</span>
|
<span>基本资料</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<el-tabs v-model="selectedTab">
|
<el-tabs class="demo-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>
|
||||||
|
|
@ -66,8 +67,11 @@
|
||||||
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({
|
||||||
|
|
@ -85,6 +89,7 @@ function getUser() {
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
||||||
|
|
|
||||||
|
|
@ -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="nickName">
|
<el-form-item label="用户姓名" prop="realName">
|
||||||
<el-input v-model="form.nickName" maxlength="30" />
|
<el-input v-model="form.realName" 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({
|
||||||
nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }],
|
realName: [{ 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 = { nickName: user.nickName, phonenumber: user.phonenumber, email: user.email, sex: user.sex }
|
form.value = { realName: user.realName, phonenumber: user.phonenumber, email: user.email, sex: user.sex }
|
||||||
}
|
}
|
||||||
},{ immediate: true })
|
},{ immediate: true })
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user