Commit e4e4cc5e authored by xinzhedeai's avatar xinzhedeai

add:商户信息明文加密处理;特种工作也报备详情明文加密处理

parent bc731524
...@@ -67,7 +67,7 @@ if (window.env == 'dev') { ...@@ -67,7 +67,7 @@ if (window.env == 'dev') {
// 管理员 线上 // 管理员 线上
// 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiZGFiZWMwMTAtYzM1MS00NGUzLTk5OTAtZGJjMmRhMzgyNGU5In0.SgeTLyYLDbJyvPxvPSpX6rRg2anfR12_40x9cKcTFXOmPzyiLv5OHMdYufBlW5btrver7aBcCLm7QQEFYBTemA' // 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiZGFiZWMwMTAtYzM1MS00NGUzLTk5OTAtZGJjMmRhMzgyNGU5In0.SgeTLyYLDbJyvPxvPSpX6rRg2anfR12_40x9cKcTFXOmPzyiLv5OHMdYufBlW5btrver7aBcCLm7QQEFYBTemA'
// 管理员 本地 // 管理员 本地
'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiNGM3MDViODYtNjI1ZC00ZTM2LTk0MjktMGI0YzI3M2RmYzgzIn0.VBLduy3ERQ8wsNDiV8iuEHzisqWjrbocL2d4cOTCHkLax44iqA1q8vDNF7dlESIpSPU6Hk8BFkGKgfynyEguvw' 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiZjA5OWU0ZTAtNzMxMS00MDlkLTg3YTUtYjhkNDNjMWVjNjQ4In0.qrivFnf68QSQ9mG0tOg9jeSB7loDMnP4NlpNthEBywPLkIaGZoE74IrTGSzFvajyay2-gBJ8GCunVOTyvTEebw'
// 街道 // 街道
// 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJqaWVkYW8iLCJsb2dpbl91c2VyX2tleSI6ImNjNjRkMmZhLWQzNmItNGRkZi05MjcxLTliYTA0ZDJkYzM4NiJ9.G2BAs3XnlqR6QgDRWDfXkOpdLYhFdqEaTxvE8GxLAgU8vcsHPEKdhQ4VvOwsiNAtIaUpMDXirOb-FrHVNvZo4g' // 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJqaWVkYW8iLCJsb2dpbl91c2VyX2tleSI6ImNjNjRkMmZhLWQzNmItNGRkZi05MjcxLTliYTA0ZDJkYzM4NiJ9.G2BAs3XnlqR6QgDRWDfXkOpdLYhFdqEaTxvE8GxLAgU8vcsHPEKdhQ4VvOwsiNAtIaUpMDXirOb-FrHVNvZo4g'
......
...@@ -236,4 +236,11 @@ select:disabled { ...@@ -236,4 +236,11 @@ select:disabled {
padding: 0 0.3rem; padding: 0 0.3rem;
height: 0.88rem; height: 0.88rem;
line-height: 0.88rem; line-height: 0.88rem;
} */ } */
\ No newline at end of file
/* 图标样式优化 */
.van-icon-closed-eye, .van-icon-eye-o {
font-size: 16px;
transition: color 0.2s;
}
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh-CN"> <html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta
http-equiv="X-UA-Compatible"
content="IE=edge"
/>
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0, viewprot-fit:cover"
/>
<title>高区“码”上</title>
<script
type="text/javascript"
src="../sdk/includeHead.js"
></script>
<script
type="text/javascript"
src="../sdk/axios_http3.js"
></script>
<style></style>
<style>
/* 添加禁用状态文字颜色保持 */
input:disabled,
input[disabled] {
color: #333 !important; /* 保持与正常状态相同的颜色 */
-webkit-text-fill-color: #333 !important; /* 兼容iOS Safari */
}
.van-uploader__preview-delete{
cursor: pointer;
}
</style>
</head>
<body>
<div id="app">
<div
class="wrapper"
v-cloak
>
<van-tabs
v-model:active="activeTab"
@click="clickTab"
title-active-color="#1989fa"
line-height="2px"
style="margin-bottom: 15px"
>
<van-tab title="基础信息"></van-tab>
<van-tab title="经营信息"></van-tab>
<van-tab title="消费者安全建议"></van-tab>
<!-- <van-tab title="培训演练"></van-tab> -->
</van-tabs>
<!-- form开始 --> <head>
<div <meta charset="UTF-8" />
class="form-container" <meta http-equiv="X-UA-Compatible" content="IE=edge" />
v-if="activeTab==0" <meta name="viewport"
> content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0, viewprot-fit:cover" />
<div class="form-item"> <title>高区“码”上</title>
<span class="form-label">商家名称</span> <script type="text/javascript" src="../sdk/includeHead.js"></script>
<div class="form-input-wrap"> <script type="text/javascript" src="../sdk/axios_http3.js"></script>
<input <style></style>
maxlength="25" <style>
type="text" /* 添加禁用状态文字颜色保持 */
v-model="formData.unitName" input:disabled,
class="form-input" input[disabled] {
:disabled="flag=='XQ'" color: #333 !important;
placeholder="请输入商家名称" /* 保持与正常状态相同的颜色 */
/> -webkit-text-fill-color: #333 !important;
</div> /* 兼容iOS Safari */
}
.van-uploader__preview-delete {
cursor: pointer;
}
</style>
</head>
<body>
<div id="app">
<div class="wrapper" v-cloak>
<van-tabs v-model:active="activeTab" @click="clickTab" title-active-color="#1989fa" line-height="2px"
style="margin-bottom: 15px">
<van-tab title="基础信息"></van-tab>
<van-tab title="经营信息"></van-tab>
<van-tab title="消费者安全建议"></van-tab>
<!-- <van-tab title="培训演练"></van-tab> -->
</van-tabs>
<!-- form开始 -->
<div class="form-container" v-if="activeTab==0">
<div class="form-item">
<span class="form-label">商家名称</span>
<div class="form-input-wrap">
<input maxlength="25" type="text" v-model="formData.unitName" class="form-input" :disabled="flag=='XQ'"
placeholder="请输入商家名称" />
</div> </div>
</div>
<div class="form-item"> <div class="form-item">
<span class="form-label">负责人</span> <span class="form-label">负责人</span>
<div class="form-input-wrap"> <div class="form-input-wrap" style="display: flex; align-items: center;">
<input <template v-if="flag=='XQ'"><!-- 详情模式 -->
maxlength="4" <span :class="'form-input'" style="line-height: .7rem;">
type="text" {{ showOriginal.merchantName ? formData.merchantName : desensitize(formData.merchantName, 'name') }}
v-model="formData.merchantName" </span>
class="form-input" <van-icon
:disabled="flag=='XQ'" :name="showOriginal.merchantName ? 'eye-o' : 'closed-eye'"
placeholder="请输入负责人" @click="toggleShow('merchantName')"
style="margin-left: 8px; color: #1989fa; cursor: pointer;"
/> />
</div> </template>
<input v-else maxlength="4" type="text" v-model="formData.merchantName" class="form-input" :disabled="flag=='XQ'"
placeholder="请输入负责人" />
</div> </div>
</div>
<div class="form-item"> <div class="form-item">
<span class="form-label">电话</span> <span class="form-label">电话</span>
<div class="form-input-wrap"> <div class="form-input-wrap" style="display: flex; align-items: center;">
<input <template v-if="flag=='XQ'"><!-- 详情模式 -->
type="number" maxlength="11" <span class="form-input" style="line-height: .7rem;">
v-model="formData.merchantPhone" {{ showOriginal.merchantPhone ? formData.merchantPhone : desensitize(formData.merchantPhone, 'phone') }}
class="form-input" </span>
:disabled="flag=='XQ'" <van-icon
placeholder="请输入电话" :name="showOriginal.merchantPhone ? 'eye-o' : 'closed-eye'"
@click="toggleShow('merchantPhone')"
style="margin-left: 8px; color: #1989fa; cursor: pointer;"
/> />
</div> </template>
<input v-else
type="number"
maxlength="11"
v-model="formData.merchantPhone"
class="form-input"
placeholder="请输入电话"
/>
</div> </div>
</div>
<div class="form-item"> <div class="form-item">
<span class="form-label">地址</span> <span class="form-label">地址</span>
<div class="form-input-wrap"> <div class="form-input-wrap">
<input <input maxlength="100" type="text" v-model="formData.businessAddress" class="form-input"
maxlength="100" :disabled="flag=='XQ'" placeholder="请输入地址" />
type="text"
v-model="formData.businessAddress"
class="form-input"
:disabled="flag=='XQ'"
placeholder="请输入地址"
/>
</div>
</div> </div>
</div>
<!-- 新增字段 -->
<div class="form-item">
<span class="form-label">隶属网格</span>
<div class="form-input-wrap">
<!-- 新增字段 --> <!-- <select
<div class="form-item">
<span class="form-label">隶属网格</span>
<div class="form-input-wrap">
<!-- <select
class="selector" class="selector"
v-model="formData.community" v-model="formData.community"
:disabled="flag=='XQ'" :disabled="flag=='XQ'"
...@@ -128,14 +113,14 @@ ...@@ -128,14 +113,14 @@
:value="item.label" :value="item.label"
></option> ></option>
</select> --> </select> -->
<div style="font-size: 15px;color: #666;"> <div style="font-size: 15px;color: #666;">
{{formData.gridName}} {{formData.gridName}}
</div>
</div> </div>
</div> </div>
</div>
<!-- <van-popup v-model="showCommunityModal" round position="bottom"> <!-- <van-popup v-model="showCommunityModal" round position="bottom">
<van-cascader <van-cascader
v-model="formData.community" v-model="formData.community"
:options="dict4community" :options="dict4community"
...@@ -145,429 +130,379 @@ ...@@ -145,429 +130,379 @@
/> />
</van-popup> --> </van-popup> -->
<div class="form-item" v-if="flag=='XQ'">
<div
class="form-item"
v-if="flag=='XQ'"
>
<span class="form-label">网格员</span> <span class="form-label">网格员</span>
<div class="form-input-wrap"> <div class="form-input-wrap" style="display: flex; align-items: center;">
<input <template v-if="flag=='XQ'"><!-- 详情模式 -->
type="text" <span class="form-input" style="line-height: .7rem;">
v-model="formData.gridMemberName" {{ showOriginal.gridMemberName ? formData.gridMemberName : desensitize(formData.gridMemberName, 'name') }}
class="form-input" </span>
:disabled="flag=='XQ'" <van-icon
/> :name="showOriginal.gridMemberName ? 'eye-o' : 'closed-eye'"
@click="toggleShow('gridMemberName')"
style="margin-left: 8px; color: #1989fa; cursor: pointer;"
/>
</template>
<input v-else type="text" v-model="formData.gridMemberName" class="form-input" :disabled="flag=='XQ'" />
</div> </div>
</div> </div>
<div <div class="form-item" v-if="flag=='XQ'">
class="form-item"
v-if="flag=='XQ'"
>
<span class="form-label">网格员联系方式</span> <span class="form-label">网格员联系方式</span>
<div class="form-input-wrap"> <div class="form-input-wrap" style="display: flex; align-items: center;">
<input <template v-if="flag=='XQ'">
maxlength="11" <span class="form-input" style="line-height: .7rem;">
type="number" {{ showOriginal.gridMemberPhone ? formData.gridMemberPhone : desensitize(formData.gridMemberPhone, 'phone') }}
v-model="formData.gridMemberPhone" </span>
class="form-input" <van-icon
:disabled="flag=='XQ'" :name="showOriginal.gridMemberPhone ? 'eye-o' : 'closed-eye'"
placeholder="请输入网格员联系方式" @click="toggleShow('gridMemberPhone')"
/> style="margin-left: 8px; color: #1989fa; cursor: pointer;"
/>
</template>
<input v-else maxlength="11" type="number" v-model="formData.gridMemberPhone" class="form-input" placeholder="请输入网格员联系方式" />
</div> </div>
</div> </div>
<div class="form-item"> <div class="form-item">
<span class="form-label">生产经营类型</span> <span class="form-label">生产经营类型</span>
<div class="form-input-wrap"> <div class="form-input-wrap">
<select <select class="selector" v-model="formData.businessType" :disabled="flag=='XQ'">
class="selector" <option v-for="(item, i) in dict4businessType" :key="i" :label="item.dictLabel" :value="item.dictValue">
v-model="formData.businessType" </option>
:disabled="flag=='XQ'" </select>
>
<option
v-for="(item, i) in dict4businessType"
:key="i"
:label="item.dictLabel"
:value="item.dictValue"
></option>
</select>
</div>
</div> </div>
<div class="form-item"> </div>
<span class="form-label">行业类型</span> <div class="form-item">
<div class="form-input-wrap"> <span class="form-label">行业类型</span>
<select <div class="form-input-wrap">
class="selector" <select class="selector" v-model="formData.industryType" :disabled="flag=='XQ'">
v-model="formData.industryType" <option v-for="(item, i) in dict4industryType" :key="i" :label="item.industryName" :value="item.id">
:disabled="flag=='XQ'" </option>
> </select>
<option
v-for="(item, i) in dict4industryType"
:key="i"
:label="item.industryName"
:value="item.id"
></option>
</select>
</div>
</div> </div>
<!-- 特殊处理:编辑没有详情有 --> </div>
<div <!-- 特殊处理:编辑没有详情有 -->
class="form-item" <div class="form-item" style="max-height: 1.4rem; height:auto;" v-if="flag=='XQ'">
style="max-height: 1.4rem; height:auto;" <span class="form-label">行业主管</span>
v-if="flag=='XQ'" <div class="form-input-wrap" style="color: #333;font-size: .3rem;padding-top:.2rem;padding-bottom: .2rem;">
> {{ formData.industryDeptName }}
<span class="form-label">行业主管</span>
<div class="form-input-wrap" style="color: #333;font-size: .3rem;padding-top:.2rem;padding-bottom: .2rem;">
{{ formData.industryDeptName }}
</div>
</div> </div>
</div>
<div class="form-item"> <div class="form-item">
<span class="form-label">场所类型</span> <span class="form-label">场所类型</span>
<div class="form-input-wrap"> <div class="form-input-wrap">
<select <select class="selector" name="" v-model="formData.smallPlaceTypeId" :disabled="flag=='XQ'">
class="selector" <option v-for="(item, i) in dict4changhsuoType" :key="i" :label="item.categoryName" :value="item.id">
name="" </option>
v-model="formData.smallPlaceTypeId" </select>
:disabled="flag=='XQ'" </div>
> </div>
<option <div>
v-for="(item, i) in dict4changhsuoType" <h5 class="imager-item-title">
:key="i" <span class="form-label">商家平面图</span>
:label="item.categoryName" <span></span>
:value="item.id" </h5>
></option> <!-- 详情模式 -->
</select> <div class="img-wrapper" style="display: flex;gap:.16rem;">
<div style="position: relative;" v-for="(imgItem, index) in formData.floorPlanPhotos">
<img :src="previewUrl + imgItem" style="width: 1.6rem; height: 1.6rem;"
@click="showImage(formData.floorPlanPhotos, index)" />
<div v-if="flag=='XG'" class="van-uploader__preview-delete"
@click="handleDeleteFloorPlan(index, 'floorPlan')"><i
class="van-icon van-icon-cross van-uploader__preview-delete-icon"></i></div>
</div>
<div v-if="formData.floorPlanPhotos.length<4 && flag=='XG' ">
<van-uploader :before-read="beforeRead" :after-read="(file) => afterRead(file, 'floorPlan')"
class="uploader-wrapper" :deletable="false" :preview-image="false">
<img src="../image/code/upload.png" style="width:1.6rem;height: 1.6rem;" alt="" srcset="">
</van-uploader>
</div> </div>
</div> </div>
<div> </div>
<h5 class="imager-item-title"> <div>
<span class="form-label">商家平面图</span> <h5 class="imager-item-title">
<span></span> <span class="form-label">商家平面疏散图</span>
</h5> <span></span>
<!-- 详情模式 --> </h5>
<div class="img-wrapper" style="display: flex;gap:.16rem;"> <!-- 详情模式 -->
<div style="position: relative;" v-for="(imgItem, index) in formData.floorPlanPhotos"> <div class="img-wrapper" style="display: flex;gap:.16rem;">
<img <div style="position: relative;" v-for="(imgItem, index) in formData.floorEvacuationPlan">
:src="previewUrl + imgItem" <img :src="previewUrl + imgItem" style="width: 1.6rem; height: 1.6rem;"
style="width: 1.6rem; height: 1.6rem;" @click="showImage(formData.floorEvacuationPlan, index)" />
@click="showImage(formData.floorPlanPhotos, index)" <div v-if="flag=='XG'" class="van-uploader__preview-delete"
/> @click="handleDeleteFloorPlan(index, 'floorEvacuationPlan')"><i
<div v-if="flag=='XG'" class="van-uploader__preview-delete" @click="handleDeleteFloorPlan(index, 'floorPlan')"><i class="van-icon van-icon-cross van-uploader__preview-delete-icon"></i></div> class="van-icon van-icon-cross van-uploader__preview-delete-icon"></i></div>
</div> </div>
<div v-if="formData.floorPlanPhotos.length<4 && flag=='XG' "> <div v-if="formData.floorEvacuationPlan.length<4 && flag=='XG' ">
<van-uploader <van-uploader :before-read="beforeRead" :after-read="(file) => afterRead(file, 'floorEvacuationPlan')"
:before-read="beforeRead" class="uploader-wrapper" :deletable="false" :preview-image="false">
:after-read="(file) => afterRead(file, 'floorPlan')" <img src="../image/code/upload.png" style="width:1.6rem;height: 1.6rem;" alt="" srcset="">
class="uploader-wrapper"
:deletable="false"
:preview-image="false"
>
<img src="../image/code/upload.png" style="width:1.6rem;height: 1.6rem;" alt="" srcset="">
</van-uploader> </van-uploader>
</div>
</div> </div>
</div> </div>
<div> </div>
<h5 class="imager-item-title"> <div>
<span class="form-label">商家平面疏散图</span> <h5 class="imager-item-title">
<span></span> <span class="form-label">营业执照</span>
</h5> <span></span>
<!-- 详情模式 --> </h5>
<div class="img-wrapper" style="display: flex;gap:.16rem;"> <!-- 详情模式 -->
<div style="position: relative;" v-for="(imgItem, index) in formData.floorEvacuationPlan"> <div class="img-wrapper" style="display: flex;gap:.16rem;">
<img <div style="position: relative;" v-for="(imgItem, index) in formData.businessLicensePhotos">
:src="previewUrl + imgItem" <img :src="previewUrl + imgItem" style="width: 1.6rem; height: 1.6rem;"
style="width: 1.6rem; height: 1.6rem;" @click="showImage(formData.businessLicensePhotos, index)" />
@click="showImage(formData.floorEvacuationPlan, index)" <div v-if="flag=='XG'" class="van-uploader__preview-delete"
/> @click="handleDeleteFloorPlan(index, 'license')"><i
<div v-if="flag=='XG'" class="van-uploader__preview-delete" @click="handleDeleteFloorPlan(index, 'floorEvacuationPlan')"><i class="van-icon van-icon-cross van-uploader__preview-delete-icon"></i></div> class="van-icon van-icon-cross van-uploader__preview-delete-icon"></i></div>
</div> </div>
<div v-if="formData.floorEvacuationPlan.length<4 && flag=='XG' "> <div v-if="formData.businessLicensePhotos.length<1 && flag=='XG' ">
<van-uploader <van-uploader :before-read="beforeRead" :after-read="(file) => afterRead(file, 'license')"
:before-read="beforeRead" class="uploader-wrapper" :deletable="false" :preview-image="false">
:after-read="(file) => afterRead(file, 'floorEvacuationPlan')" <img src="../image/code/upload.png" style="width:1.6rem;height: 1.6rem;" alt="" srcset="">
class="uploader-wrapper"
:deletable="false"
:preview-image="false"
>
<img src="../image/code/upload.png" style="width:1.6rem;height: 1.6rem;" alt="" srcset="">
</van-uploader>
</div>
</div>
</div>
<div>
<h5 class="imager-item-title">
<span class="form-label">营业执照</span>
<span></span>
</h5>
<!-- 详情模式 -->
<div class="img-wrapper" style="display: flex;gap:.16rem;">
<div style="position: relative;" v-for="(imgItem, index) in formData.businessLicensePhotos">
<img
:src="previewUrl + imgItem"
style="width: 1.6rem; height: 1.6rem;"
@click="showImage(formData.businessLicensePhotos, index)"
/>
<div v-if="flag=='XG'" class="van-uploader__preview-delete" @click="handleDeleteFloorPlan(index, 'license')"><i class="van-icon van-icon-cross van-uploader__preview-delete-icon"></i></div>
</div>
<div v-if="formData.businessLicensePhotos.length<1 && flag=='XG' ">
<van-uploader
:before-read="beforeRead"
:after-read="(file) => afterRead(file, 'license')"
class="uploader-wrapper"
:deletable="false"
:preview-image="false"
>
<img src="../image/code/upload.png" style="width:1.6rem;height: 1.6rem;" alt="" srcset="">
</van-uploader> </van-uploader>
</div>
</div> </div>
</div> </div>
<div> </div>
<h5 class="imager-item-title"> <div>
<span class="form-label">门头图</span> <h5 class="imager-item-title">
<span></span> <span class="form-label">门头图</span>
</h5> <span></span>
<!-- 详情模式 --> </h5>
<div class="img-wrapper" style="display: flex;gap:.16rem;"> <!-- 详情模式 -->
<div style="position: relative;" v-for="(imgItem, index) in formData.storefrontPhotos"> <div class="img-wrapper" style="display: flex;gap:.16rem;">
<img <div style="position: relative;" v-for="(imgItem, index) in formData.storefrontPhotos">
:src="previewUrl + imgItem" <img :src="previewUrl + imgItem" style="width: 1.6rem; height: 1.6rem;"
style="width: 1.6rem; height: 1.6rem;" @click="showImage(formData.storefrontPhotos, index)" />
@click="showImage(formData.storefrontPhotos, index)" <div v-if="flag=='XG'" class="van-uploader__preview-delete"
/> @click="handleDeleteFloorPlan(index, 'storeFront')"><i
<div v-if="flag=='XG'" class="van-uploader__preview-delete" @click="handleDeleteFloorPlan(index, 'storeFront')"><i class="van-icon van-icon-cross van-uploader__preview-delete-icon"></i></div> class="van-icon van-icon-cross van-uploader__preview-delete-icon"></i></div>
</div> </div>
<div v-if="formData.storefrontPhotos.length<1 && flag=='XG' "> <div v-if="formData.storefrontPhotos.length<1 && flag=='XG' ">
<van-uploader <van-uploader :before-read="beforeRead" :after-read="(file) => afterRead(file, 'storeFront')"
:before-read="beforeRead" class="uploader-wrapper" :deletable="false" :preview-image="false">
:after-read="(file) => afterRead(file, 'storeFront')" <img src="../image/code/upload.png" style="width:1.6rem;height: 1.6rem;" alt="" srcset="">
class="uploader-wrapper"
:deletable="false"
:preview-image="false"
>
<img src="../image/code/upload.png" style="width:1.6rem;height: 1.6rem;" alt="" srcset="">
</van-uploader> </van-uploader>
</div>
</div> </div>
</div> </div>
</div>
<button <button v-if="flag=='XG'" class="save-btn" style="margin-left: 50%; transform: translateX(-50%)" @click="save">
v-if="flag=='XG'" 保存
class="save-btn" </button>
style="margin-left: 50%; transform: translateX(-50%)" <div>
@click="save" <h5 class="imager-item-title" style="border: none">
> <span class="form-label">安全二维码</span>
保存 <span></span>
</button> </h5>
<div> <div>
<h5 <img :src="formData.qrCodeUrl" style="margin-left: 50%; transform: translateX(-50%)"
class="imager-item-title" @click="showImage(formData.storefrontPhotos)" />
style="border: none"
>
<span class="form-label">安全二维码</span>
<span></span>
</h5>
<div>
<img
:src="formData.qrCodeUrl"
style="margin-left: 50%; transform: translateX(-50%)"
@click="showImage(formData.storefrontPhotos)"
/>
</div>
</div> </div>
<button
v-if="userType==='shop'"
class="save-btn"
style="margin-left: 50%; transform: translateX(-50%)"
@click="saveCanvas"
>
保存二维码
</button>
</div> </div>
<!-- form结束 --> <button v-if="userType==='shop'" class="save-btn" style="margin-left: 50%; transform: translateX(-50%)"
@click="saveCanvas">
保存二维码
</button>
</div>
<!-- form结束 -->
<!-- 经营信息开始 --> <!-- 经营信息开始 -->
<div <div class="form-container" v-if="activeTab==1">
class="form-container" <div class="form-item">
v-if="activeTab==1" <span class="form-label">建筑面积(㎡)</span>
> <div class="form-input-wrap">
<div class="form-item"> <input maxlength="4" type="number" v-model="formData.area" class="form-input" :disabled="flag=='XQ'"
<span class="form-label">建筑面积(㎡)</span> placeholder="请输入建筑面积(㎡)" />
<div class="form-input-wrap">
<input
maxlength="4"
type="number"
v-model="formData.area"
class="form-input"
:disabled="flag=='XQ'"
placeholder="请输入建筑面积(㎡)"
/>
</div>
</div> </div>
</div>
<div class="form-item"> <div class="form-item">
<span class="form-label">建筑结构</span> <span class="form-label">建筑结构</span>
<div class="form-input-wrap"> <div class="form-input-wrap">
<input <input maxlength="25" type="text" v-model="formData.buildingStructure" class="form-input"
maxlength="25" :disabled="flag=='XQ'" placeholder="请输入建筑结构" />
type="text"
v-model="formData.buildingStructure"
class="form-input"
:disabled="flag=='XQ'"
placeholder="请输入建筑结构"
/>
</div>
</div> </div>
</div>
<div class="form-item"> <div class="form-item">
<span class="form-label">产权人</span> <span class="form-label">产权人</span>
<div class="form-input-wrap"> <div class="form-input-wrap" style="display: flex; align-items: center;">
<input <template v-if="flag=='XQ'"><!-- 详情模式 -->
maxlength="4" <span class="form-input" style="line-height: .7rem;">
type="text" {{ showOriginal.owner ? formData.owner : desensitize(formData.owner, 'name') }}
v-model="formData.owner" </span>
class="form-input" <van-icon
:disabled="flag=='XQ'" :name="showOriginal.owner ? 'eye-o' : 'closed-eye'"
placeholder="请输入产权人" @click="toggleShow('owner')"
style="margin-left: 8px; color: #1989fa; cursor: pointer;"
/> />
</div> </template>
<input v-else
type="text"
maxlength="4"
v-model="formData.owner"
class="form-input"
placeholder="请输入产权人"
/>
</div> </div>
</div>
<div class="form-item"> <div class="form-item">
<span class="form-label">产权人联系方式</span> <span class="form-label">产权人联系方式</span>
<div class="form-input-wrap"> <div class="form-input-wrap" style="display: flex; align-items: center;">
<input <template v-if="flag=='XQ'"><!-- 详情模式 -->
maxlength="11" <span class="form-input" style="line-height: .7rem;">
type="number" {{ showOriginal.ownerPhone ? formData.ownerPhone : desensitize(formData.ownerPhone, 'phone') }}
v-model="formData.ownerPhone" </span>
class="form-input" <van-icon
:disabled="flag=='XQ'" :name="showOriginal.ownerPhone ? 'eye-o' : 'closed-eye'"
placeholder="请输入产权人联系方式" @click="toggleShow('ownerPhone')"
style="margin-left: 8px; color: #1989fa; cursor: pointer;"
/> />
</div> </template>
<input v-else
type="number"
maxlength="11"
v-model="formData.ownerPhone"
class="form-input"
placeholder="请输入产权人联系方式"
/>
</div> </div>
</div>
<div class="form-item"> <div class="form-item">
<span class="form-label">经营人</span> <span class="form-label">经营人</span>
<div class="form-input-wrap"> <div class="form-input-wrap" style="display: flex; align-items: center;">
<input <template v-if="flag=='XQ'"><!-- 详情模式 -->
maxlength="4" <span class="form-input" style="line-height: .7rem;">
type="text" {{ showOriginal.operator ? formData.operator : desensitize(formData.operator, 'name') }}
v-model="formData.operator" </span>
class="form-input" <van-icon
:disabled="flag=='XQ'" :name="showOriginal.operator ? 'eye-o' : 'closed-eye'"
placeholder="请输入经营人" @click="toggleShow('operator')"
style="margin-left: 8px; color: #1989fa; cursor: pointer;"
/> />
</div> </template>
<input v-else
type="text"
maxlength="4"
v-model="formData.operator"
class="form-input"
placeholder="请输入经营人"
/>
</div> </div>
<!-- 新增字段 --> </div>
<div class="form-item"> <!-- 新增字段 -->
<span class="form-label">经营人联系方式</span> <div class="form-item">
<div class="form-input-wrap"> <span class="form-label">经营人联系方式</span>
<input <div class="form-input-wrap" style="display: flex; align-items: center;">
maxlength="11" <template v-if="flag=='XQ'"><!-- 详情模式 -->
type="number" <span class="form-input" style="line-height: .7rem;">
v-model="formData.operatorPhone" {{ showOriginal.operatorPhone ? formData.operatorPhone : desensitize(formData.operatorPhone, 'phone') }}
class="form-input" </span>
:disabled="flag=='XQ'" <van-icon
placeholder="请输入经营人联系方式" :name="showOriginal.operatorPhone ? 'eye-o' : 'closed-eye'"
@click="toggleShow('operatorPhone')"
style="margin-left: 8px; color: #1989fa; cursor: pointer;"
/> />
</div> </template>
<input v-else
type="number"
maxlength="11"
v-model="formData.operatorPhone"
class="form-input"
placeholder="请输入经营人联系方式"
/>
</div> </div>
</div>
<div class="form-item"> <div class="form-item">
<span class="form-label">房屋类型</span> <span class="form-label">房屋类型</span>
<div class="form-input-wrap"> <div class="form-input-wrap">
<select <select class="selector" v-model="formData.houseType" :disabled="flag=='XQ'">
class="selector" <option v-for="(item, i) in dict4fangwuType" :key="i" :label="item.dictLabel" :value="item.dictValue">
v-model="formData.houseType" </option>
:disabled="flag=='XQ'" </select>
>
<option
v-for="(item, i) in dict4fangwuType"
:key="i"
:label="item.dictLabel"
:value="item.dictValue"
></option>
</select>
</div>
</div> </div>
<div class="form-item"> </div>
<span class="form-label">房屋用途</span> <div class="form-item">
<div class="form-input-wrap"> <span class="form-label">房屋用途</span>
<select <div class="form-input-wrap">
class="selector" <select class="selector" v-model="formData.houseUsage" :disabled="flag=='XQ'">
v-model="formData.houseUsage" <option v-for="(item, i) in dict4fangwuyongtuType" :key="i" :label="item.dictLabel"
:disabled="flag=='XQ'" :value="item.dictValue"></option>
> </select>
<option
v-for="(item, i) in dict4fangwuyongtuType"
:key="i"
:label="item.dictLabel"
:value="item.dictValue"
></option>
</select>
</div>
</div> </div>
<div class="form-item"> </div>
<span class="form-label">房东姓名</span> <div class="form-item">
<div class="form-input-wrap"> <span class="form-label">房东姓名</span>
<input <div class="form-input-wrap" style="display: flex; align-items: center;">
maxlength="4" <template v-if="flag=='XQ'"><!-- 详情模式 -->
type="text" <span class="form-input" style="line-height: .7rem;">
v-model="formData.landlordName" {{ showOriginal.landlordName ? formData.landlordName : desensitize(formData.landlordName, 'name') }}
class="form-input" </span>
:disabled="flag=='XQ'" <van-icon
placeholder="请输入房东姓名" :name="showOriginal.landlordName ? 'eye-o' : 'closed-eye'"
@click="toggleShow('landlordName')"
style="margin-left: 8px; color: #1989fa; cursor: pointer;"
/> />
</div> </template>
<input v-else
type="text"
maxlength="4"
v-model="formData.landlordName"
class="form-input"
placeholder="请输入房东姓名"
/>
</div> </div>
<div class="form-item"> </div>
<span class="form-label">房东联系方式</span> <div class="form-item">
<div class="form-input-wrap"> <span class="form-label">房东联系方式</span>
<input <div class="form-input-wrap" style="display: flex; align-items: center;">
maxlength="11" <template v-if="flag=='XQ'"><!-- 详情模式 -->
type="number" <span class="form-input" style="line-height: .7rem;">
v-model="formData.landlordContact" {{ showOriginal.landlordContact ? formData.landlordContact : desensitize(formData.landlordContact, 'phone') }}
class="form-input" </span>
:disabled="flag=='XQ'" <van-icon
placeholder="请输入房东联系方式" :name="showOriginal.landlordContact ? 'eye-o' : 'closed-eye'"
@click="toggleShow('landlordContact')"
style="margin-left: 8px; color: #1989fa; cursor: pointer;"
/> />
</div> </template>
<input v-else
type="number"
maxlength="11"
v-model="formData.landlordContact"
class="form-input"
placeholder="请输入房东联系方式"
/>
</div> </div>
<button
v-if="flag=='XG'"
class="save-btn"
style="margin-left: 50%; transform: translateX(-50%)"
@click="save"
>
保存
</button>
</div> </div>
<!-- form结束 --> <button v-if="flag=='XG'" class="save-btn" style="margin-left: 50%; transform: translateX(-50%)" @click="save">
保存
</button>
</div>
<!-- form结束 -->
<!-- 消费者安全建议列表 --> <!-- 消费者安全建议列表 -->
<div v-if="activeTab==2"> <div v-if="activeTab==2">
<van-list v-model:loading="loading" :offset="10" :finished="finished" finished-text="没有更多了" @load="getConsumerSuggestList" :immediate-check="false"> <van-list v-model:loading="loading" :offset="10" :finished="finished" finished-text="没有更多了"
<van-cell @load="getConsumerSuggestList" :immediate-check="false">
v-for="(item, index) in consumerSuggestList" <van-cell v-for="(item, index) in consumerSuggestList" :key="item.id" @click="viewDetail(item)">
:key="item.id" <div style="width: 100%">
@click="viewDetail(item)" <div style="display: flex; justify-content: space-between; margin: 8px 0">
> <span style="color: #737373; font-size: 0.28rem">日期:{{ item.submitDate }}</span>
<div style="width: 100%">
<div style="display: flex; justify-content: space-between; margin: 8px 0">
<span style="color: #737373; font-size: 0.28rem">日期:{{ item.submitDate }}</span>
</div>
<div style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: #333; font-size: 0.3rem; font-weight: bold; font-family: PingFang SC">{{item.content}}</div>
</div> </div>
</van-cell> <div
</van-list> style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: #333; font-size: 0.3rem; font-weight: bold; font-family: PingFang SC">
</div> {{item.content}}</div>
<!-- 消费者安全建议列表结束 --> </div>
</van-cell>
</van-list>
</div> </div>
<!-- 消费者安全建议列表结束 -->
</div> </div>
</body> </div>
</html> </body>
</html>
\ No newline at end of file
...@@ -57,6 +57,19 @@ window.addEventListener('load', function () { ...@@ -57,6 +57,19 @@ window.addEventListener('load', function () {
dict4community: [], dict4community: [],
dict4industryType: [], dict4industryType: [],
consumerSuggestList: [], consumerSuggestList: [],
// 添加显示状态管理对象
showOriginal: {
merchantName: false,
merchantPhone: false,
businessAddress: false,
owner: false,
ownerPhone: false,
operator: false,
operatorPhone: false,
landlordName: false,
landlordContact: false
}
} }
}, },
computed: { computed: {
...@@ -93,6 +106,26 @@ window.addEventListener('load', function () { ...@@ -93,6 +106,26 @@ window.addEventListener('load', function () {
} }
}, },
methods: { methods: {
// 添加脱敏处理函数
desensitize(value, type) {
if (!value) return '';
switch(type) {
case 'name': // 姓名脱敏:保留姓氏
return value.length > 1 ? value.charAt(0) + '*'.repeat(value.length - 1) : value;
case 'phone': // 手机号脱敏:保留前3后4
return value.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2');
case 'address': // 地址脱敏:保留前5后5
if (value.length <= 10) return value;
return value.substring(0, 5) + '*****' + value.substring(value.length - 5);
default: // 默认脱敏:保留前3后3
if (value.length <= 6) return value;
return value.substring(0, 3) + '*****' + value.substring(value.length - 3);
}
},
// 切换显示状态方法
toggleShow(field) {
this.$set(this.showOriginal, field, !this.showOriginal[field]);
},
reset(){ reset(){
this.page = 1 this.page = 1
this.size = 9999 this.size = 9999
......
...@@ -396,4 +396,11 @@ iframe{ ...@@ -396,4 +396,11 @@ iframe{
font-size: 0.28rem; /* 文字大小 */ font-size: 0.28rem; /* 文字大小 */
color: #FFFFFF; /* 文字颜色 */ color: #FFFFFF; /* 文字颜色 */
line-height: 1.2; /* 行高 */ line-height: 1.2; /* 行高 */
} }
\ No newline at end of file
/* 图标样式优化 */
.van-icon-closed-eye, .van-icon-eye-o {
font-size: 16px;
transition: color 0.2s;
}
\ No newline at end of file
...@@ -30,14 +30,32 @@ ...@@ -30,14 +30,32 @@
<div class="form-item"> <div class="form-item">
<span class="form-label title_require">联系人</span> <span class="form-label title_require">联系人</span>
<div class="form-input-wrap" style="font-size: 15px;color: #737373;"> <div class="form-input-wrap" style="font-size: 15px;color: #737373;">
{{ formData.merchantName }} <template>
<span :class="'form-input'" style="line-height: .7rem;">
{{ showOriginal.merchantName ? formData.merchantName : desensitize(formData.merchantName, 'name') }}
</span>
<van-icon
:name="showOriginal.merchantName ? 'eye-o' : 'closed-eye'"
@click="toggleShow('merchantName')"
style="margin-left: 8px; color: #1989fa; cursor: pointer;"
/>
</template>
</div> </div>
</div> </div>
<div class="form-item"> <div class="form-item">
<span class="form-label title_require">电话</span> <span class="form-label title_require">电话</span>
<div class="form-input-wrap" style="font-size: 15px;color: #737373;"> <div class="form-input-wrap" style="font-size: 15px;color: #737373;">
{{ formData.merchantPhone }} <template><!-- 详情模式 -->
<span class="form-input" style="line-height: .7rem;">
{{ showOriginal.merchantPhone ? formData.merchantPhone : desensitize(formData.merchantPhone, 'phone') }}
</span>
<van-icon
:name="showOriginal.merchantPhone ? 'eye-o' : 'closed-eye'"
@click="toggleShow('merchantPhone')"
style="margin-left: 8px; color: #1989fa; cursor: pointer;"
/>
</template>
</div> </div>
</div> </div>
<div class="form-item"> <div class="form-item">
......
...@@ -38,7 +38,12 @@ window.addEventListener("load", function () { ...@@ -38,7 +38,12 @@ window.addEventListener("load", function () {
}, },
id: '', id: '',
errorReqCount: 0, errorReqCount: 0,
iosFlag: gemhoUtil.isIOSStrict() iosFlag: gemhoUtil.isIOSStrict(),
// 添加显示状态管理对象
showOriginal: {
merchantName: false,
merchantPhone: false,
}
} }
}, },
created() { created() {
...@@ -56,6 +61,26 @@ window.addEventListener("load", function () { ...@@ -56,6 +61,26 @@ window.addEventListener("load", function () {
this.getDict4tab1() this.getDict4tab1()
}, },
methods: { methods: {
// 添加脱敏处理函数
desensitize(value, type) {
if (!value) return '';
switch(type) {
case 'name': // 姓名脱敏:保留姓氏
return value.length > 1 ? value.charAt(0) + '*'.repeat(value.length - 1) : value;
case 'phone': // 手机号脱敏:保留前3后4
return value.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2');
case 'address': // 地址脱敏:保留前5后5
if (value.length <= 10) return value;
return value.substring(0, 5) + '*****' + value.substring(value.length - 5);
default: // 默认脱敏:保留前3后3
if (value.length <= 6) return value;
return value.substring(0, 3) + '*****' + value.substring(value.length - 3);
}
},
// 切换显示状态方法
toggleShow(field) {
this.$set(this.showOriginal, field, !this.showOriginal[field]);
},
goback4ios() { // 全部标记为已读 goback4ios() { // 全部标记为已读
let params = { let params = {
merId: gemhoUtil.getCookie('merId') || '', merId: gemhoUtil.getCookie('merId') || '',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment