master
lion 2 years ago
parent a01e54eb73
commit 18824a66c8

@ -1,6 +1,7 @@
<template>
<view class="container safe-area-inset-bottom">
<image class="bkg" src="~@/static/me/wave.png" mode="widthFix"></image>
<zmm-watermark :column="2" :margin="30" :watermark="watermark"></zmm-watermark>
<u-notice-bar class="notice-bar" v-if="aspiration && aspiration.tip" :list="[aspiration.tip]"></u-notice-bar>
<view class="wrap" v-if="step === 1">
@ -242,13 +243,20 @@
<!-- <u-select v-model="isShowSchoolSelect" mode="mutil-column-auto" :list="schoolList" @confirm="schoolListConfirm" @cancel="schoolListCancel"></u-select>-->
<u-select v-model="isShowSchoolSelect" :list="schoolList" @confirm="schoolListConfirm" @cancel="schoolListCancel"></u-select>
<u-select v-model="isShowSpecSelect" :list="specList" @confirm="specListConfirm" @cancel="specListCancel"></u-select>
<watermark></watermark>
</view>
</template>
<script>
import zmmWatermark from '@/uni_modules/zmm-watermark/components/zmm-watermark/zmm-watermark.vue';
import imglogo from '@/static/logo.png';
export default {
components:{
zmmWatermark
},
data() {
return {
watermark:`<img style="width:60px" src="${imglogo}" />`,
isShowWhite: false,
isShowModal: false,
step: 1,

@ -28,10 +28,10 @@
<view class="info-row__title">考生类别</view>
<view class="info-row__value">{{ detail.type || ' ' }}</view>
</view>
<view class="info-row">
<!-- <view class="info-row">
<view class="info-row__title">民族</view>
<view class="info-row__value">{{ detail.nationality || ' ' }}</view>
</view>
</view> -->
<view class="info-row">
<view class="info-row__title">户籍地址</view>
<view class="info-row__value">{{ detail.address || ' ' }}</view>
@ -53,10 +53,10 @@
</view>
<view class="card__body">
<view class="info-row">
<!-- <view class="info-row">
<view class="info-row__title">其他专业是否服从</view>
<view class="info-row__value">{{ detail.is_independent ? '是' : '否' }}</view>
</view>
</view> -->
<view class="sub-form2">
<view class="sub-form2__row sub-form2-title">

@ -63,9 +63,9 @@
<u-form-item label="考生类型" required prop="type">
<u-input v-model="form.type" placeholder="请输入" input-align="right" />
</u-form-item>
<u-form-item label="民族" prop="nationality">
<!-- <u-form-item label="民族" prop="nationality">
<u-input v-model="form.nationality" placeholder="请输入" input-align="right" />
</u-form-item>
</u-form-item> -->
<u-form-item label="户籍地址" required prop="address">
<u-input v-model="form.address" placeholder="请输入" input-align="right" />
</u-form-item>
@ -116,7 +116,7 @@
<view class="step3-panel">
<view class="step3-panel__title">自主招生(含课程基地实验项目)</view>
<view class="step3-panel__content">
<view class="step3-panel__content--independent">
<!-- <view class="step3-panel__content--independent">
<view>
其他专业是否服从
</view>
@ -132,7 +132,7 @@
否
</u-radio>
</u-radio-group>
</view>
</view> -->
<view class="step3-panel__content--school">
<view>
@ -345,7 +345,8 @@ export default {
const { list } = await this.$u.api.schoolList({
page: 1,
page_size: 9999,
area_id: this.form.area_id
area_id: this.form.area_id,
from:2
})
this.schoolList = list.data.map(school => ({
value: school.code,
@ -417,7 +418,23 @@ export default {
watch: {
step(newVal) {
this.setTitle()
}
},
vuex_user: {
handler: function (newVal) {
const keys = new Map([
["middle_exam_year", "year"],
["name", "name"],
["sex", "sex"],
["nationality", "nationality"],
]);
Array.from(keys.keys()).forEach((key) => {
if (newVal[key]) {
this.form[keys.get(key)] = newVal[key];
}
});
},
immediate: true,
},
},
onShow() {
this.setTitle()

@ -33,13 +33,13 @@
@click="isShowYear = true"
/>
</u-form-item>
<u-form-item label="民族" prop="nationality">
<!-- <u-form-item label="民族" prop="nationality">
<u-input
v-model="form.nationality"
placeholder="请输入"
input-align="right"
/>
</u-form-item>
</u-form-item> -->
<!-- <u-form-item label="所在城市" required prop="city">-->
<!-- <u-input type="select" v-model="form.city" placeholder="请选择" input-align="right" @click="regionType = 'city',isShowRegion = true" />-->
<!-- </u-form-item>-->

@ -37,9 +37,9 @@
<u-form-item label="中考年份" required prop="middle_exam_year">
<u-input type="select" v-model="form.middle_exam_year" placeholder="请选择" input-align="right" @click="isShowYear = true" />
</u-form-item>
<u-form-item label="民族" prop="nationality">
<!-- <u-form-item label="民族" prop="nationality">
<u-input v-model="form.nationality" placeholder="请输入" input-align="right" />
</u-form-item>
</u-form-item> -->
<u-form-item label="所在城市" required prop="city">
<u-input type="select" v-model="form.city" placeholder="请选择" input-align="right" @click="regionType = 'city',isShowRegion = true" />
</u-form-item>

@ -22,6 +22,14 @@
"enablePullDownRefresh": true
}
},
{
"path": "pages/chat/chat",
"style": {
// "navigationBarTitleText": "在线咨询",
"enablePullDownRefresh": true,
"navigationStyle": "custom"
}
},
{
"path": "pages/me/me",
"style": {
@ -164,6 +172,12 @@
"selectedIconPath": "static/tabbar/list-active.png",
"text": "模拟填报"
},
{
"pagePath": "pages/chat/chat",
"iconPath": "static/tabbar/chat.png",
"selectedIconPath": "static/tabbar/chat-active.png",
"text": "在线咨询"
},
{
"pagePath": "pages/me/me",
"iconPath": "static/tabbar/me.png",

@ -0,0 +1,107 @@
<template>
<view class="customer-service">
<image class="bkg" src="~@/static/index/bkg.png" mode="aspectFill"></image>
<!-- <view class="customer-service__title"> 系统提示 </view> -->
<view class="customer-service__body">
<view class="customer-service__body--text1"> 您需要联系我们的客服,获取授权 </view>
<image
mode="widthFix"
show-menu-by-longpress
:src="qrcode"
></image>
<view class="customer-service__body--text2">{{ name }}:<text style="font-size: 28rpx;">{{ phone }}</text></view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
info: {}
};
},
methods: {
async getData() {
try {
const res = await this.$u.api.parameterShow({
number: 'customer_service'
})
this.info = res
} catch (err) {
console.error(err)
}
}
},
computed: {
name() {
return this.info.detail?.find(i => i.value === 'name')?.remark || ' '
},
phone() {
return this.info.detail?.find(i => i.value === 'phone')?.remark || ' '
},
qrcode() {
return this.info.detail?.find(i => i.value === 'qrcode')?.remark || ' '
}
},
created() {
this.getData()
},
}
</script>
<style lang="scss">
.customer-service {
width: 100%;
border-radius: 20rpx;
overflow: hidden;
.bkg {
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
}
&__title {
font-size: 32rpx;
color: #ffffff;
text-align: center;
text-transform: uppercase;
font-weight: bold;
background-image: linear-gradient(263deg, #da521c 0%, #eb9b35 100%);
padding: 40rpx 0;
line-height: 1;
}
&__body {
color: #333;
// background: #fff;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
position: relative;
z-index:2;
margin-top:150rpx;
&--text1 {
font-size: 32rpx;
text-align: center;
padding-top: 50rpx;
}
& > image {
width: 600rpx;
height: 540rpx;
margin-top: 34rpx;
}
&--text2 {
font-size: 28rpx;
color: #333333;
text-align: center;
padding-top: 58rpx;
padding-bottom: 70rpx;
}
}
}
</style>

@ -93,12 +93,14 @@
</view>
</view>
<image
class="online-service"
src="~@/static/index/online-service.png"
mode="aspectFit"
@click="isShowQrcode = true"
></image>
<button style="margin-left: auto;width: 120rpx;height: 120rpx;" class="btn-normal" open-type="contact">
<image
class="online-service"
src="~@/static/index/online-service.png"
mode="aspectFit"
@click="isShowQrcode = true"
></image>
</button>
<u-mask :show="isShowQrcode" border-radius="14" @click="isShowQrcode = false">
<view class="qrcode-wrap">
@ -323,9 +325,7 @@ export default {
}
.online-service {
position: fixed;
bottom: 56rpx;
right: 2rpx;
width: 142rpx;
height: 140rpx;
z-index: 10;
@ -337,4 +337,33 @@ export default {
justify-content: center;
height: 100%;
}
.btn-normal {
display: block;
margin: 0;
padding: 0;
line-height: normal;
background: none;
border-radius: 0;
box-shadow: none;
border: none;
font-size: unset;
text-align: unset;
overflow: visible;
color: inherit;
position: fixed;
bottom: 56rpx;
right: 2rpx;
z-index: 10;
margin-right:30rpx;
image {
width: 142rpx;
height: 140rpx;
z-index: 10;
}
}
.btn-normal::after {
border: none
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,17 @@
## 1.1.5(2024-06-16)
修改兼容性,去除show字段,控制显示用v-if操作
## 1.1.4(2024-06-15)
column属性修复
## 1.1.3(2024-06-02)
新特征:
支持nvue
改动:
移除maxWidth属性(单条水印最大宽度)
新增column属性可设置水印列数
新增fontSize属性可设置水印文字默认大小
修改margin属性为20(水印之间上下间距)
nvue下支持覆盖video等元素
## 1.1.2(2022-01-12)
调整为uni_modules目录规范
## 1.0(2021-03-31)
发布1.0版本

@ -0,0 +1,152 @@
<template>
<view class="zmm-watermark">
<!-- 单个用于计算 -->
<view class="zmm-watermark-mold" ref="mold" id="mold">
<rich-text :style="moldStyle" :nodes="watermark"></rich-text>
</view>
<!-- 循环 -->
<view class="zmm-watermark-content" :style="{opacity:opacity}">
<rich-text :nodes="watermark" :style="itemStyle" v-for="(item,index) in forLength" :key="index"></rich-text>
</view>
</view>
</template>
<script>
// #ifdef APP-NVUE
const dom = weex.requireModule("dom");
// #endif
export default {
data() {
return {
forLength: 0, //水印数量
watermarkArea: 0 //水印大小(像素)
};
},
props: {
watermark: { //水印文字(支持html富文本)
type: String,
default: '水印文字'
},
color: { //水印文字默认颜色
type: String,
default: '#666'
},
fontSize: { //水印文字大小
type: Number,
default: 16
},
opacity: { //水印透明度
type: Number,
default: 0.15
},
margin: { //水印之间上下间距
type: Number,
default: 10
},
rotate: { //水印旋转角度
type: Number,
default: -21
},
column: { //水印列数
type: Number,
default: 3
}
},
computed: {
// 单个水印
moldStyle() {
return `width:${this.itemWidth}px;text-align: center;font-size:${this.fontSize}px;`
},
// 循环水印
itemStyle() {
return `color:${this.color};font-size:${this.fontSize}px;margin:${this.margin}px;width:${this.itemWidth}px;transform:rotate(${this.rotate}deg);text-align: center;`
},
// 屏幕像素
screenArea() {
let height = uni.getSystemInfoSync().windowHeight + uni.getSystemInfoSync().windowTop
let width = uni.getSystemInfoSync().windowWidth
return Math.floor(height * width * 1.2)
},
// 单个水印最大长度
itemWidth() {
let windowWidth = uni.getSystemInfoSync().windowWidth
return Math.floor(windowWidth / this.column - this.margin * 2)
}
},
watch: {
watermark: {
handler(v) {
if (v) {
this.countForLength();
}
},
deep: true
}
},
mounted() {
if (this.watermark) {
this.countForLength();
}
},
methods: {
countForLength() { //计算水印数量
// #ifndef APP-NVUE
const query = uni.createSelectorQuery().in(this);
query.select('#mold').boundingClientRect(data => {
let width = data.width ? data.width : this.itemWidth
let height = data.height ? data.height : 30
let itemWidth = width + this.margin * 2
let itemHeight = height + this.margin * 2
this.watermarkArea = Math.floor(itemWidth * itemHeight)
this.forLength = Math.floor(this.screenArea / this.watermarkArea)
}).exec();
// #endif
// #ifdef APP-NVUE
setTimeout(() => {
const result = dom.getComponentRect(this.$refs.mold, (option) => {
let size = option.size;
let itemWidth = size.width + this.margin * 2
let itemHeight = size.height + this.margin * 2
this.watermarkArea = Math.floor(itemWidth * itemHeight)
this.forLength = Math.floor(this.screenArea / this.watermarkArea)
});
}, 50);
// #endif
},
}
}
</script>
<style lang="scss" scoped>
.zmm-watermark {
position: fixed;
overflow: hidden;
z-index: 999;
left: 0;
top: 0;
right: 0;
bottom: 0;
/* #ifndef APP-NVUE */
pointer-events: none;
/* #endif */
}
.zmm-watermark-content {
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
overflow: hidden;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-around;
}
.zmm-watermark-mold {
position: fixed;
left: 0;
top: 0;
opacity: 0;
}
</style>

@ -0,0 +1,81 @@
{
"id": "zmm-watermark",
"displayName": "zmm-watermark-通用水印组件",
"version": "1.1.5",
"description": "支持富文本、自动计算所需水印数量不卡顿、自定义旋转角度等",
"keywords": [
"",
"水印",
"水印组件",
"通用水印",
"自定义水印",
"富文本水印"
],
"repository": "",
"engines": {
"HBuilderX": "^3.6.17"
},
"dcloudext": {
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "插件不采集任何数据",
"permissions": "无"
},
"npmurl": "",
"type": "component-vue"
},
"uni_modules": {
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y",
"alipay": "n"
},
"client": {
"App": {
"app-vue": "y",
"app-nvue": "y"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "y",
"百度": "y",
"字节跳动": "y",
"QQ": "y"
},
"快应用": {
"华为": "y",
"联盟": "y"
},
"Vue": {
"vue2": "y",
"vue3": "y"
}
}
}
}
}

@ -0,0 +1,48 @@
#uniapp水印组件
原理
循环标签
作者
`zmm2113@qq.com`
版本
> 兼容性支持:安卓、苹果、H5、微信小程序(其他平台未测试理论上支持)
优势
> 支持富文本、自动计算所需水印数量不卡顿、自定义旋转角度等
注意事项
> 因为层级原因需要将组件需要放置到顶部
一、使用示例
```
<template>
<view class="container">
<zmm-watermark :watermark="watermark"></zmm-watermark>
</view>
</template>
<script>
import img from '@/static/logo.png';
export default {
data() {
return {
watermark: '<h5>我是h5标签我是h5标签我是h5标签我是h5标签</h5><p style="color:#f00">我是p标签</p><br><img style="width:30px" src="' + img + '" />'
}
}
}
</script>
```
二、配置(注意配置数据类型)
配置|数据类型|默认参数|说明
-|-|-|-
watermark|String|"水印文字"|水印文字(支持html富文本)
color|String|"#000000"|水印文字默认颜色
fontSize|Number|16|水印文字大小
opacity|Number|0.15|水印透明度
margin|Number|20|水印之间上下间距
rotate|Number|-21|水印旋转角度
column|Number|3|水印列数
Loading…
Cancel
Save