From e22ee79a288b909df09739bf3eb0b3eb89888df0 Mon Sep 17 00:00:00 2001
From: Lou <luzhiping@qqyjz.com>
Date: Wed, 21 Feb 2024 17:32:03 +0800
Subject: [PATCH] 个人资料添加水印,场所相关页面图片上传接口地址更换
---
subPackage/workbench/views/editCscj.vue | 2
subPackage/workbench/views/editExamine.vue | 2
uni_modules/zmm-watermark/changelog.md | 4
subPackage/workbench/views/checkReform.vue | 2
mixin/uploadMixinPlace.js | 136 +++++++++++++
subPackage/user/editUserInfo/editUserInfo.vue | 136 +++++++-----
subPackage/workbench/views/cscj.vue | 2
uni_modules/zmm-watermark/package.json | 83 ++++++++
subPackage/label/check.vue | 2
subPackage/workbench/views/selfCheckDetail.vue | 2
uni_modules/zmm-watermark/components/zmm-watermark/zmm-watermark.vue | 125 ++++++++++++
uni_modules/zmm-watermark/readme.md | 47 ++++
12 files changed, 480 insertions(+), 63 deletions(-)
diff --git a/mixin/uploadMixinPlace.js b/mixin/uploadMixinPlace.js
new file mode 100644
index 0000000..d245761
--- /dev/null
+++ b/mixin/uploadMixinPlace.js
@@ -0,0 +1,136 @@
+import {
+ prodUrl,
+ clientId,
+ clientSecret
+} from '@/common/setting'
+
+import {
+ Base64
+} from '@/utils/base64.js';
+export default {
+ data() {
+ return {
+ form: {
+ images: []
+ },
+
+ uploadConfig: {
+ acceptImg: "image",
+ acceptVideo: 'video',
+ capture: ['album', 'camera'],
+ multiple: true,
+ maxCount: "5",
+ previewFullImage: true,
+ uploadText: "上传中",
+ url: prodUrl + "/blade-resource/oss/endpoint/put-file-attach-by-prefix-path"
+ },
+ }
+ },
+
+ created() {
+ this.getHeader()
+ },
+
+ methods: {
+ //获取头部
+ getHeader() {
+ let accessToken = uni.getStorageSync('accessToken');
+ let myHeader = {}
+ if (accessToken) {
+ myHeader['Blade-Auth'] = 'bearer ' + accessToken;
+ }
+ // 客户端认证参数
+ myHeader['Authorization'] = 'Basic ' + Base64.encode(clientId + ':' + clientSecret);
+ this.uploadConfig.header = myHeader
+ },
+
+ //上传方法
+ uploadFilePromise(url) {
+ return new Promise((resolve, reject) => {
+ let a = uni.uploadFile({
+ url: this.uploadConfig.url, //接口地址
+ filePath: url,
+ name: 'file',
+ header: this.uploadConfig.header,
+ formData: {
+ prefixPath: ""
+ },
+ success: (res) => {
+ let data = JSON.parse(res.data)
+ setTimeout(() => {
+ resolve(data)
+ }, 1000)
+ }
+ });
+ })
+ },
+
+ //上传成功后对返回数据进行处理
+ async afterReadImg(event, key = "images") {
+ // console.log(key)
+ // console.log(this.form[key]);
+ this.showLoading()
+ var that = this;
+ // 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+ let lists = [].concat(event.file)
+
+ let fileListLen = this.form[key].length
+ lists.map((item) => {
+ this.form[key].push({
+ ...item,
+ status: 'uploading',
+ message: '上传中'
+ })
+ })
+ for (let i = 0; i < lists.length; i++) {
+ const result = await this.uploadFilePromise(lists[i].url)
+ that.form[key].splice(fileListLen, 1, Object.assign({}, {
+ url: result.data.link,
+ name: result.data.name
+ }))
+ fileListLen++
+ }
+
+ // let fileListLen = this.form.images.length
+ // lists.map((item) => {
+ // this.form.images.push({
+ // ...item,
+ // status: 'uploading',
+ // message: '上传中'
+ // })
+ // })
+ // for (let i = 0; i < lists.length; i++) {
+ // const result = await this.uploadFilePromise(lists[i].url)
+ // that.form.images.splice(fileListLen, 1, Object.assign({}, {
+ // url: result.data.link,
+ // name:result.data.name
+ // }))
+ // fileListLen++
+ // }
+
+
+ this.loadingClose()
+ },
+
+
+ //删除图片
+ deletePic(event, key = "images") {
+ this.form[key].splice(event.index, 1)
+ },
+
+ deletePics(event, key) {
+ console.log(event, key);
+ this[key].splice(event.index, 1)
+ },
+
+ showLoading() {
+ uni.showLoading({
+ mask: true,
+ title: '上传中'
+ })
+ },
+ loadingClose() {
+ uni.hideLoading()
+ },
+ }
+}
\ No newline at end of file
diff --git a/subPackage/label/check.vue b/subPackage/label/check.vue
index 300fc72..fee467d 100644
--- a/subPackage/label/check.vue
+++ b/subPackage/label/check.vue
@@ -91,7 +91,7 @@
</template>
<script>
- import uploadMixin from "@/mixin/uploadMixin";
+ import uploadMixin from "@/mixin/uploadMixinPlace";
import {
getPlaceCheckItem
} from "@/api/place/place.js"
diff --git a/subPackage/user/editUserInfo/editUserInfo.vue b/subPackage/user/editUserInfo/editUserInfo.vue
index 3f7c831..1eaf0e1 100644
--- a/subPackage/user/editUserInfo/editUserInfo.vue
+++ b/subPackage/user/editUserInfo/editUserInfo.vue
@@ -3,25 +3,28 @@
<view class="bgc-ff">
<view class="form-item flex j-c-s-b a-i-c">
<text class="f-30">头像</text>
- <button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="chooseAvatar" >
- <u-avatar :src="avatar" size="50"></u-avatar>
+ <button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="chooseAvatar">
+ <u-avatar :src="avatar" size="50"></u-avatar>
</button>
</view>
<view class="form-item flex j-c-s-b a-i-c">
<text class="f-30">昵称</text>
<view class="nickname">
- <input class="nickname-value" type="nickname" placeholder="请输入昵称" v-model="info.realName" @blur="getInputValue" />
+ <input class="nickname-value" type="nickname" placeholder="请输入昵称" v-model="info.realName"
+ @blur="getInputValue" />
</view>
-
+
</view>
</view>
- <footer-btn text="确定" @click="submitInfo" />
+ <footer-btn text="确定" @click="submitInfo" />
+ <zmm-watermark :watermark="watermark"></zmm-watermark>
</view>
</template>
<script>
-
- import { updateUserInfo } from "@/api/user.js"
+ import {
+ updateUserInfo
+ } from "@/api/user.js"
import {
Base64
} from '@/utils/base64.js';
@@ -32,28 +35,42 @@
minioBaseUrl
} from '@/common/setting'
export default {
- data(){
- return{
- avatar:"",
- info:{
- avatar:"",
- realName:"",
- id:"",
- deptId:""
+ data() {
+ return {
+ avatar: "",
+ info: {
+ avatar: "",
+ realName: "",
+ id: "",
+ deptId: ""
},
header: {},
uploadConfig: {
url: prodUrl + "/blade-resource/oss/endpoint/put-file",
header: {},
},
+ watermark: ""
}
},
onLoad() {
+ let {
+ nick_name,
+ phone
+ } = uni.getStorageSync("userInfo");
+ // this.watermark = `${nick_name} ${phone}`
+ this.watermark = `<h5>${nick_name}</h5><br><p style="font-size:11px;">${phone}</p>`
+
+
this.getHeader()
- let { avatar,real_name,user_id,dept_id } = uni.getStorageSync("userInfo");
- if(avatar){
+ let {
+ avatar,
+ real_name,
+ user_id,
+ dept_id
+ } = uni.getStorageSync("userInfo");
+ if (avatar) {
this.avatar = `${minioBaseUrl}${avatar}`
- }else {
+ } else {
this.avatar = avatar;
}
this.info.avatar = avatar;
@@ -61,8 +78,8 @@
this.info.id = user_id
this.info.deptId = dept_id
},
- methods:{
-
+ methods: {
+
//获取头部
getHeader() {
let accessToken = uni.getStorageSync('accessToken');
@@ -74,21 +91,21 @@
myHeader['Authorization'] = 'Basic ' + Base64.encode(clientId + ':' + clientSecret);
this.uploadConfig.header = myHeader
},
-
- chooseAvatar(e){
+
+ chooseAvatar(e) {
let {
avatarUrl
} = e.detail
this.uploadAvatar(avatarUrl)
},
-
- uploadAvatar(url){
+
+ uploadAvatar(url) {
uni.uploadFile({
- url:this.uploadConfig.url,
+ url: this.uploadConfig.url,
filePath: url,
name: 'file',
header: this.uploadConfig.header,
- success:(res)=> {
+ success: (res) => {
let data = JSON.parse(res.data);
console.log(data.data);
this.info.avatar = data.data.name;
@@ -96,56 +113,61 @@
}
})
},
-
- getInputValue(e){
+
+ getInputValue(e) {
console.log(e);
this.info.realName = e.detail.value;
},
-
-
- submitInfo(){
- updateUserInfo(this.info).then(res=>{
- if(res.code == 200){
+
+
+ submitInfo() {
+ updateUserInfo(this.info).then(res => {
+ if (res.code == 200) {
uni.showToast({
- title:res.msg
+ title: res.msg
})
- setTimeout(()=>{
- let userInfo = uni.getStorageSync("userInfo");
- userInfo.avatar = this.info.avatar;
- userInfo.real_name = this.info.realName;
- this.$u.vuex('userInfo',userInfo);
+ setTimeout(() => {
+ let userInfo = uni.getStorageSync("userInfo");
+ userInfo.avatar = this.info.avatar;
+ userInfo.real_name = this.info.realName;
+ this.$u.vuex('userInfo', userInfo);
uni.navigateBack()
- },300)
+ }, 300)
}
})
}
-
+
}
}
</script>
<style lang="scss">
- page{
- background-color:#f5f5f5;
+ page {
+ background-color: #f5f5f5;
}
- .form-item{
- padding:30rpx;
- border-bottom:1px solid #f5f5f5;
+
+ .form-item {
+ padding: 30rpx;
+ border-bottom: 1px solid #f5f5f5;
}
- .avatar-wrapper{
- border:none;
+
+ .avatar-wrapper {
+ border: none;
background: transparent;
- margin:0;
- padding:0;
+ margin: 0;
+ padding: 0;
}
- .avatar-wrapper::after{
- border:none;
- margin:0;
+
+ .avatar-wrapper::after {
+ border: none;
+ margin: 0;
}
- .nickname{
- width:80%;
- .nickname-value{
- width:100%;
+
+ .nickname {
+ width: 80%;
+
+ .nickname-value {
+ width: 100%;
text-align: right;
}
}
diff --git a/subPackage/workbench/views/checkReform.vue b/subPackage/workbench/views/checkReform.vue
index 177cfd6..363b9a5 100644
--- a/subPackage/workbench/views/checkReform.vue
+++ b/subPackage/workbench/views/checkReform.vue
@@ -152,7 +152,7 @@
</template>
<script>
- import uploadMixin from "@/mixin/uploadMixin";
+ import uploadMixin from "@/mixin/uploadMixinPlace";
import {
getPlaceCheckItem,
getPlaceCheckReformDetail,
diff --git a/subPackage/workbench/views/cscj.vue b/subPackage/workbench/views/cscj.vue
index e37c17b..cdd01bc 100644
--- a/subPackage/workbench/views/cscj.vue
+++ b/subPackage/workbench/views/cscj.vue
@@ -222,7 +222,7 @@
</template>
<script>
- import uploadMixin from "@/mixin/uploadMixin";
+ import uploadMixin from "@/mixin/uploadMixinPlace";
import lineItem from "@/subPackage/workbench/components/lineItem.vue"
import {
getLabelCate
diff --git a/subPackage/workbench/views/editCscj.vue b/subPackage/workbench/views/editCscj.vue
index ac58d68..afb89ae 100644
--- a/subPackage/workbench/views/editCscj.vue
+++ b/subPackage/workbench/views/editCscj.vue
@@ -96,7 +96,7 @@
</template>
<script>
- import uploadMixin from "@/mixin/uploadMixin";
+ import uploadMixin from "@/mixin/uploadMixinPlace";
import lineItem from "@/subPackage/workbench/components/lineItem.vue"
import {
getLabelCate
diff --git a/subPackage/workbench/views/editExamine.vue b/subPackage/workbench/views/editExamine.vue
index 5ad2511..1460c92 100644
--- a/subPackage/workbench/views/editExamine.vue
+++ b/subPackage/workbench/views/editExamine.vue
@@ -77,7 +77,7 @@
updatePlaceExtData,
getPlaceDetail
} from '@/api/placeExp/placeExp.js'
- import uploadMixin from "@/mixin/uploadMixin";
+ import uploadMixin from "@/mixin/uploadMixinPlace";
import boxTitle from "@/subPackage/workbench/components/boxTitle/index.vue"
import formItem from '../components/formItem.vue'
import {
diff --git a/subPackage/workbench/views/selfCheckDetail.vue b/subPackage/workbench/views/selfCheckDetail.vue
index 1f01f63..5d5c024 100644
--- a/subPackage/workbench/views/selfCheckDetail.vue
+++ b/subPackage/workbench/views/selfCheckDetail.vue
@@ -156,7 +156,7 @@
</template>
<script>
- import uploadMixin from "@/mixin/uploadMixin";
+ import uploadMixin from "@/mixin/uploadMixinPlace";
import {
getPlaceCheckItem,
getPlaceCheckReformDetail,
diff --git a/uni_modules/zmm-watermark/changelog.md b/uni_modules/zmm-watermark/changelog.md
new file mode 100644
index 0000000..3dc31f8
--- /dev/null
+++ b/uni_modules/zmm-watermark/changelog.md
@@ -0,0 +1,4 @@
+## 1.1.2(2022-01-12)
+调整为uni_modules目录规范
+## 1.0(2021-03-31)
+发布1.0版本
\ No newline at end of file
diff --git a/uni_modules/zmm-watermark/components/zmm-watermark/zmm-watermark.vue b/uni_modules/zmm-watermark/components/zmm-watermark/zmm-watermark.vue
new file mode 100644
index 0000000..9178e9a
--- /dev/null
+++ b/uni_modules/zmm-watermark/components/zmm-watermark/zmm-watermark.vue
@@ -0,0 +1,125 @@
+<template>
+ <view v-if="show">
+ <view class="zmm-watermark-box" :style="[{'top':top+'px'},{'opacity':opacity}]">
+ <view class="zmm-watermark-getwh" ref="getwh" id="getwh" :style="[{'max-width':maxWidth+'px'}]">
+ <rich-text :nodes="watermark"></rich-text>
+ </view>
+ <view class="zmm-watermark-content">
+ <view class="zmm-watermark-text" :style="[{'color':color},{'margin-bottom':margin+'px'},{'max-width':maxWidth+'px'},{'transform':'rotate('+rotate+'deg)'}]" v-for="(item,index) in forLength" :key="index">
+ <rich-text :nodes="watermark"></rich-text>
+ </view>
+ </view>
+ </view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ top: 0,//H5状态栏高度
+ forLength: 0 //水印数量
+ };
+ },
+ props: {
+ maxWidth: { //单条水印最大宽度
+ type: Number,
+ default: 180
+ },
+ rotate: { //水印旋转角度
+ type: Number,
+ default: -21
+ },
+ margin: { //水印之间上下间距
+ type: Number,
+ default: 50
+ },
+ watermark: { //水印文字(支持html富文本)
+ type: String,
+ default: '水印文字'
+ },
+ color: { //水印文字默认颜色
+ type: String,
+ default: '#000000'
+ },
+ opacity: { //水印透明度
+ type: Number,
+ default: 0.15
+ },
+ show: { //是否显示水印
+ type: Boolean,
+ default: true
+ },
+ },
+ mounted() {
+ this.getstatusBarHeight();
+ },
+ methods: {
+ getstatusBarHeight() { //计算水印数量
+ var SystemInfo = uni.getSystemInfoSync();
+ this.top = SystemInfo.safeArea.top + SystemInfo.windowTop;
+ var screenArea = parseInt(SystemInfo.screenHeight * (SystemInfo.screenWidth * 1.2))
+ var watermarkArea = 0
+ const query = uni.createSelectorQuery().in(this);
+ query.select('#getwh').boundingClientRect(data => {
+ watermarkArea = parseInt((data.height + this.margin) * data.width)
+ }).exec();
+ var timer = setInterval(() => {
+ if (watermarkArea == 0) {} else {
+ clearInterval(timer)
+ this.forLength = parseInt((screenArea / watermarkArea))
+ }
+ }, 500)
+ },
+ }
+ }
+</script>
+<style>
+ .zmm-watermark-box {
+ overflow: hidden;
+ width: 100%;
+ height: 100vh;
+ pointer-events: none;
+ position: fixed;
+ top: 30px;
+ z-index: 9999;
+ left: 0;
+ top: 0;
+ }
+
+ .zmm-watermark-content {
+ left: -10%;
+ position: absolute;
+ width: 120%;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: center;
+ }
+
+ .zmm-watermark-text {
+ text-align: center;
+ transform: rotate(-21deg);
+ margin: 0 10px;
+ margin-bottom: 100rpx;
+ color: rgba(0, 0, 0, 0.05);
+ max-width: 180px;
+ font-size: 16px;
+ letter-spacing: 10rpx;
+ word-break: break-all;
+ line-height: 1;
+ }
+
+ .zmm-watermark-getwh {
+ position: absolute;
+ left: 0;
+ top: 0;
+ opacity: 0;
+ display: inline-block;
+ max-width: 180px;
+ font-size: 16px;
+ letter-spacing: 10rpx;
+ word-break: break-all;
+ line-height: 1;
+ }
+</style>
diff --git a/uni_modules/zmm-watermark/package.json b/uni_modules/zmm-watermark/package.json
new file mode 100644
index 0000000..263fb86
--- /dev/null
+++ b/uni_modules/zmm-watermark/package.json
@@ -0,0 +1,83 @@
+{
+ "id": "zmm-watermark",
+ "displayName": "zmm-watermark-通用水印组件",
+ "version": "1.1.2",
+ "description": "支持富文本、自动计算所需水印数量不卡顿、自定义旋转角度等",
+ "keywords": [
+ "",
+ "水印",
+ "水印组件",
+ "通用水印",
+ "自定义水印",
+ "富文本水印"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.1"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "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"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/zmm-watermark/readme.md b/uni_modules/zmm-watermark/readme.md
new file mode 100644
index 0000000..5c17848
--- /dev/null
+++ b/uni_modules/zmm-watermark/readme.md
@@ -0,0 +1,47 @@
+#uniapp水印组件
+
+原理
+循环标签
+
+作者
+`zmm2113@qq.com`
+
+版本
+`1.1.2`
+> 兼容性支持:安卓、苹果、H5、微信小程序(其他平台未测试理论上支持)。不支持nvue!
+
+优势
+> 支持富文本、自动计算所需水印数量不卡顿、自定义旋转角度等
+
+一、使用示例
+```
+<template>
+ <view class="container">
+ <text>uniapp水印通用组件 zmm-watermark</text>
+ <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"|水印文字默认颜色
+show|Boolean|true|是否显示水印
+opacity|Number|0.15|水印透明度
+margin|Number|50|水印之间上下间距
+rotate|Number|-21|水印旋转角度
+maxWidth|Number|180|单条水印最大宽度
\ No newline at end of file
--
Gitblit v1.9.3