|
|
@@ -61,7 +61,7 @@
|
|
|
class="rule-block"
|
|
|
>
|
|
|
<div class="config-field">
|
|
|
- <div class="config-field-label">账户月内日均余额名称</div>
|
|
|
+ <div class="config-field-label">账户月内日均余额名称 <span class="required-star">*</span></div>
|
|
|
<el-input
|
|
|
v-model="configData.identityModule[m.key].avgBalanceName"
|
|
|
maxlength="20"
|
|
|
@@ -70,17 +70,26 @@
|
|
|
@input="markModified"
|
|
|
/>
|
|
|
</div>
|
|
|
- <div class="config-field">
|
|
|
- <div class="config-field-label">余额说明</div>
|
|
|
- <quill-editor
|
|
|
- v-model:content="configData.identityModule[m.key].avgBalanceRule"
|
|
|
- content-type="html"
|
|
|
- :options="quillOptions"
|
|
|
- @change="markModified"
|
|
|
- />
|
|
|
- <div class="config-tip">
|
|
|
- <el-icon><InfoFilled /></el-icon>
|
|
|
- <span>移动端对应:用于配置【账户月内日均余额】旁边的“?”提示弹窗内容。</span>
|
|
|
+ <div class="config-field balance-popup-config">
|
|
|
+ <div class="config-field-label">账户余额弹窗提示</div>
|
|
|
+ <div class="balance-popup-field">
|
|
|
+ <div class="balance-popup-label">弹窗顶部名称 <span class="required-star">*</span></div>
|
|
|
+ <el-input
|
|
|
+ v-model="configData.identityModule[m.key].avgBalancePopupTitle"
|
|
|
+ maxlength="20"
|
|
|
+ placeholder="请输入弹窗顶部标题名称"
|
|
|
+ class="balance-popup-title-input"
|
|
|
+ @input="markModified"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div class="balance-popup-field">
|
|
|
+ <div class="balance-popup-label">账户余额说明 <span class="required-star">*</span></div>
|
|
|
+ <quill-editor
|
|
|
+ v-model:content="configData.identityModule[m.key].avgBalanceRule"
|
|
|
+ content-type="html"
|
|
|
+ :options="quillOptions"
|
|
|
+ @change="markModified"
|
|
|
+ />
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -140,7 +149,8 @@
|
|
|
|
|
|
<!-- 标题 -->
|
|
|
<el-form label-width="80px" style="margin-top:12px">
|
|
|
- <el-form-item label="主标题">
|
|
|
+ <el-form-item>
|
|
|
+ <template #label>主标题 <span class="required-star">*</span></template>
|
|
|
<el-input v-model="item.title" @input="markModified" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="副标题">
|
|
|
@@ -169,17 +179,20 @@
|
|
|
<el-radio label="dragon">龙腾</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
- <el-form-item v-if="item.jumpType === 'h5'" label="配置链接">
|
|
|
+ <el-form-item v-if="item.jumpType === 'h5'">
|
|
|
+ <template #label>配置链接 <span class="required-star">*</span></template>
|
|
|
<el-input v-model="item.linkH5" placeholder="例如:https://hsbc.com" @input="markModified" />
|
|
|
</el-form-item>
|
|
|
<el-row v-if="item.jumpType === 'miniProgram'" :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="AppID">
|
|
|
+ <el-form-item>
|
|
|
+ <template #label>AppID <span class="required-star">*</span></template>
|
|
|
<el-input v-model="item.wechatAppId" placeholder="例如:wx1234567890abcdef" @input="markModified" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="页面路径">
|
|
|
+ <el-form-item>
|
|
|
+ <template #label>页面路径 <span class="required-star">*</span></template>
|
|
|
<el-input v-model="item.wechatPath" placeholder="例如:pages/index/index" @input="markModified" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
@@ -232,10 +245,12 @@
|
|
|
<input :ref="'exchangeUpload' + index" type="file" accept="image/*" style="display:none" @change="onImageUpload($event, 'exchange', index)" />
|
|
|
</div>
|
|
|
<el-form label-width="80px" inline class="exchange-fields">
|
|
|
- <el-form-item label="展示文字">
|
|
|
+ <el-form-item>
|
|
|
+ <template #label>展示文字 <span class="required-star">*</span></template>
|
|
|
<el-input v-model="item.title" style="width:200px" @input="markModified" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="跳转链接">
|
|
|
+ <el-form-item>
|
|
|
+ <template #label>跳转链接 <span class="required-star">*</span></template>
|
|
|
<el-input v-model="item.link" style="width:280px" placeholder="例如:https://test.hsbc.com" @input="markModified" />
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
@@ -251,10 +266,12 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
<el-form label-width="120px">
|
|
|
- <el-form-item label="弹窗顶部名称">
|
|
|
+ <el-form-item>
|
|
|
+ <template #label>弹窗顶部名称 <span class="required-star">*</span></template>
|
|
|
<el-input v-model="configData.ruleModal.title" style="width:50%" @input="markModified" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="规则内容">
|
|
|
+ <el-form-item>
|
|
|
+ <template #label>规则内容 <span class="required-star">*</span></template>
|
|
|
<quill-editor
|
|
|
v-model:content="configData.ruleModal.content"
|
|
|
content-type="html"
|
|
|
@@ -377,6 +394,7 @@ export default {
|
|
|
bgImage: '',
|
|
|
showAvgBalance: true,
|
|
|
avgBalanceName: '账户月内日均余额',
|
|
|
+ avgBalancePopupTitle: '',
|
|
|
avgBalanceRule: '<p></p>'
|
|
|
}
|
|
|
return {
|
|
|
@@ -468,6 +486,29 @@ export default {
|
|
|
}
|
|
|
return false
|
|
|
},
|
|
|
+ isRichTextEmpty(value) {
|
|
|
+ const text = String(value || '')
|
|
|
+ .replace(/<[^>]*>/g, '')
|
|
|
+ .replace(/ /g, '')
|
|
|
+ .trim()
|
|
|
+ return !text
|
|
|
+ },
|
|
|
+ validateIdentityBalancePopup() {
|
|
|
+ const list = this.identityMscList || []
|
|
|
+ for (const item of list) {
|
|
|
+ const data = this.configData.identityModule?.[item.key]
|
|
|
+ if (!data || item.key === 'privateBank' || !data.showAvgBalance) continue
|
|
|
+ if (!(data.avgBalancePopupTitle || '').trim()) {
|
|
|
+ ElMessage.error(`${item.label} 的账户余额弹窗提示-弹窗顶部名称未填写!`)
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ if (this.isRichTextEmpty(data.avgBalanceRule)) {
|
|
|
+ ElMessage.error(`${item.label} 的账户余额弹窗提示-账户余额说明未填写!`)
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true
|
|
|
+ },
|
|
|
async fetchData() {
|
|
|
const res = await request.get('/api/page-config/zone')
|
|
|
const cfg = res.data.config || {}
|
|
|
@@ -553,6 +594,7 @@ export default {
|
|
|
this.markModified()
|
|
|
},
|
|
|
async handleSave(type) {
|
|
|
+ if (!this.validateIdentityBalancePopup()) return
|
|
|
this.normalizeCarouselItems(this.configData.adCarousel || [])
|
|
|
const invalidCarouselIndex = (this.configData.adCarousel || []).findIndex(item => !this.validateJumpConfig(item))
|
|
|
if (invalidCarouselIndex > -1) {
|
|
|
@@ -592,6 +634,7 @@ export default {
|
|
|
.toolbar-left { display: flex; align-items: center; gap: 12px; }
|
|
|
.toolbar-title { margin: 0; font-size: 18px; font-weight: 600; }
|
|
|
.toolbar-right { display: flex; gap: 8px; }
|
|
|
+.required-star { color: #F56C6C; }
|
|
|
|
|
|
.section-card { margin-bottom: 16px; }
|
|
|
.section-header { font-weight: 600; }
|
|
|
@@ -747,10 +790,29 @@ export default {
|
|
|
margin-bottom: 10px;
|
|
|
line-height: 20px;
|
|
|
}
|
|
|
-.balance-name-input {
|
|
|
+.balance-name-input,
|
|
|
+.balance-popup-title-input {
|
|
|
width: 420px;
|
|
|
max-width: 100%;
|
|
|
}
|
|
|
+.balance-popup-config {
|
|
|
+ padding: 16px 18px;
|
|
|
+ border: 1px solid #ebeef5;
|
|
|
+ border-radius: 4px;
|
|
|
+ background: #fafafa;
|
|
|
+}
|
|
|
+.balance-popup-field {
|
|
|
+ margin-bottom: 18px;
|
|
|
+}
|
|
|
+.balance-popup-field:last-child {
|
|
|
+ margin-bottom: 0;
|
|
|
+}
|
|
|
+.balance-popup-label {
|
|
|
+ margin-bottom: 8px;
|
|
|
+ color: #303133;
|
|
|
+ font-size: 13px;
|
|
|
+ line-height: 18px;
|
|
|
+}
|
|
|
.config-tip {
|
|
|
display: flex;
|
|
|
align-items: center;
|