Browse Source

样式修改

master
parent
commit
df53ea3259
  1. 86
      api/jobinfo/index.js
  2. 4
      config.js
  3. 46
      pages/enterprise.vue
  4. 9
      pages/index.vue
  5. 156
      pages/owner.vue
  6. 1
      static/scss/global.scss
  7. 2
      sub/invite/index.vue
  8. 24
      sub/owner/edit.vue
  9. 109
      sub/owner/jobInfo.vue
  10. 0
      sub/owner/notice-detail.vue
  11. 10
      sub/task/detail.vue
  12. 7
      sub/task/locate.vue
  13. 2
      sub/task/record.vue
  14. 2
      uni_modules/s-components/s-tabber/index.vue
  15. 174
      uni_modules/uview-ui/components/u-modal/props.js
  16. 427
      uni_modules/uview-ui/components/u-modal/u-modal.vue
  17. 1
      wxcomponents/vant/dropdown-item/index.wxss
  18. 1
      wxcomponents/vant/dropdown-menu/index.wxss
  19. 200
      wxcomponents/vant/search/index.js
  20. 54
      wxcomponents/vant/search/index.wxss

86
api/jobinfo/index.js

@ -3,36 +3,56 @@ import request from '@/utils/request'
// 工作汇报 API
export const JobInfoApi = {
// 查询工作汇报分页
getJobInfoPage: (params) => {
return request({ url: `/system/job-info/page`, params ,method: 'get'})
},
// 查询工作汇报详情
getJobInfo: (id) => {
return request({ url: `/system/job-info/get?id=` + id, method: 'get' })
},
// 模板信息
jobDetail: (id) => {
return request({ url: `/system/job-info/jobDetail?id=` + id,method: 'get' })
},
// 新增工作汇报
createJobInfo: (data) => {
return request({ url: `/system/job-info/create`, data, method: 'post' })
},
// 修改工作汇报
updateJobInfo: (data) => {
return request({ url: `/system/job-info/update`, data , method: 'put'})
},
// 删除工作汇报
deleteJobInfo: (id) => {
return request({ url: `/system/job-info/delete?id=` + id , method: 'delete' })
}
}
// 查询工作汇报分页
getJobInfoPage: (params) => {
return request({
url: `/system/job-info/page`,
params,
method: 'get'
})
},
// 查询工作汇报详情
getJobInfo: (id) => {
return request({
url: `/system/job-info/get?id=` + id,
method: 'get'
})
},
// 模板信息
jobDetail: (id) => {
return request({
url: `/system/job-info/jobDetail?id=` + id,
method: 'get'
})
},
// 新增工作汇报
createJobInfo: (data) => {
return request({
url: `/system/job-info/create`,
data,
method: 'post'
})
},
// 修改工作汇报
updateJobInfo: (data) => {
return request({
url: `/system/job-info/update`,
data,
method: 'put'
})
},
// 删除工作汇报
deleteJobInfo: (id) => {
return request({
url: `/system/job-info/delete?id=` + id,
method: 'delete'
})
}
}

4
config.js

@ -1,8 +1,8 @@
// 应用全局配置
module.exports = {
// baseUrl: 'http://188.188.5.188:48080',
// baseUrl: 'https://hb.jzce.com',
baseUrl: 'http://188.188.3.232:48080',
baseUrl: 'https://hb.jzce.com',
// baseUrl: 'http://188.188.3.232:48080',
// baseUrl: 'http://localhost:48080',
baseApi: '/admin-api',
imgUrl: 'https://hb.jzce.com',

46
pages/enterprise.vue

@ -173,18 +173,29 @@ export default {
methods: {
getPageHeight() {
const query = uni.createSelectorQuery().in(this)
query
.select('#sreach')
.boundingClientRect(data => {
this.sreachHeight = data.height
})
.exec()
// query
// .select('#sreach')
// .boundingClientRect(data => {
// this.sreachHeight = data.height
// })
// .exec()
// query
// .select('#page')
// .boundingClientRect(data => {
// this.listHeight = data.height - 35 - 25
// })
// .exec()
query
.select('#page')
.boundingClientRect(data => {
this.listHeight = data.height - 35 - 25
.boundingClientRect()
.select('.drop-box')
.boundingClientRect()
.select('#sreach')
.boundingClientRect()
.exec(data => {
this.listHeight =
data[0].height - data[1].height - data[2].height - 25
})
.exec()
},
async getList() {
uni.showToast({
@ -373,7 +384,22 @@ export default {
box-shadow: none;
height: fit-content !important;
font-size: 26rpx;
padding: 12rpx 24rpx;
justify-content: space-between;
// padding: 12rpx 24rpx;
}
}
::v-deep .van-search {
padding-bottom: 0;
.van-search__content {
height: 44px;
border-radius: 16rpx;
align-items: center;
.van-icon {
font-size: 40rpx;
}
.van-field__body {
height: 100%;
}
}
}
::v-deep .u-list {

9
pages/index.vue

@ -203,7 +203,7 @@ export default {
return {
dictMap: {},
queryParams: {
selectWeek: '3',
selectWeek: '',
deptId: '',
type: 1
},
@ -294,6 +294,10 @@ export default {
}
this.dropOption.select_week = [
{
value: '',
text: '全部'
},
...dict.data.select_week.map(i => {
return {
value: i.value,
@ -484,6 +488,9 @@ export default {
height: fit-content !important;
font-size: 26rpx;
padding: 8rpx 24rpx;
.select-title {
color: #17c653;
}
}
::v-deep .van-dropdown-item {
margin-bottom: 64rpx;

156
pages/owner.vue

@ -5,39 +5,39 @@
class="section wd-flex wd-flex-row wd-justify-between wd-items-center"
@tap="edit"
>
<view class="wd-flex wd-flex-col" style="gap: 4px">
<view class="wd-flex wd-flex-col" style="gap: 12rpx">
<view
class="wd-flex wd-flex-row"
style="gap: 8px; align-items: center"
style="gap: 16rpx; align-items: center"
>
<text class="wd-font-800 wd-text-20">{{ user.realName }}</text>
<u-tag
:text="user.dept.name"
shape="circle"
bgColor="#000"
borderColor="#000"
size="mini"
></u-tag>
<text
class="wd-font-800"
style="font-size: 40rpx; color: #252f4a"
>
{{ user.realName }}
</text>
<text class="dept">{{ user.dept.name }}</text>
</view>
<view class="moblie">{{ user.mobile }}</view>
</view>
<view class="wd-flex wd-flex-row" style="gap: 10px">
<u-avatar :src="user.avatar"></u-avatar>
<u-icon name="arrow-right"></u-icon>
<view class="wd-flex wd-flex-row" style="gap: 16rpx">
<u-avatar :src="user.avatar" size="126rpx"></u-avatar>
<u-icon name="arrow-right" color="#C4CADA"></u-icon>
</view>
</view>
<view
class="section wd-flex wd-flex-row wd-justify-between"
@click="openSubMessage"
>
<view class="wd-flex wd-flex-row" style="gap: 16rpx">
<view class="wd-flex wd-flex-row" style="gap: 8rpx">
<u--image
src="/static/images/owner/message.png"
width="40rpx"
height="40rpx"
mode="aspectFill"
></u--image>
<text class="wd-font-800">消息通知</text>
<text style="color: #252f4a">消息通知</text>
</view>
<!-- <view class="wd-flex wd-flex-row wd-items-center" style="gap: 8px">
<u-count-to
@ -48,12 +48,18 @@
></u-count-to>
<u-icon name="arrow-right"></u-icon>
</view> -->
<view
class="wd-flex wd-flex-row wd-items-center"
style="gap: 16rpx"
>
<text></text>
<u-icon name="arrow-right"></u-icon>
<view class="row">
<view class="notice-wrapper">
<u-count-to
:startVal="0"
:endVal="policyTotal"
fontSize="14px"
separator=","
color="#fff"
></u-count-to>
</view>
<u-icon name="arrow-right" color="#C4CADA"></u-icon>
</view>
</view>
<!-- <view class="section wd-flex wd-flex-row wd-justify-between">
@ -80,26 +86,17 @@
class="section wd-flex wd-flex-row wd-justify-between"
@click="btnPolicy"
>
<view class="wd-flex wd-flex-row" style="gap: 16rpx">
<view class="wd-flex wd-flex-row" style="gap: 8rpx">
<u--image
src="/static/images/owner/list.png"
width="40rpx"
height="40rpx"
mode="aspectFill"
></u--image>
<text class="wd-font-800">政策法规</text>
<text style="color: #252f4a">政策法规</text>
</view>
<view
class="wd-flex wd-flex-row wd-items-center"
style="gap: 16rpx"
>
<u-count-to
:startVal="0"
:endVal="policyTotal"
fontSize="14px"
separator=","
></u-count-to>
<u-icon name="arrow-right"></u-icon>
<view class="row">
<u-icon name="arrow-right" color="#C4CADA"></u-icon>
</view>
</button>
<button
@ -107,61 +104,59 @@
open-type="share"
@click="invite"
>
<view class="wd-flex wd-flex-row" style="gap: 16rpx">
<view class="wd-flex wd-flex-row" style="gap: 8rpx">
<u--image
src="/static/images/owner/edit.png"
width="40rpx"
height="40rpx"
mode="aspectFill"
></u--image>
<text class="wd-font-800">企业入驻</text>
<text style="color: #252f4a">企业入驻</text>
</view>
<view
class="wd-flex wd-flex-row wd-items-center"
style="gap: 16rpx"
>
<u-icon name="arrow-right"></u-icon>
<view class="row">
<u-icon name="arrow-right" color="#C4CADA"></u-icon>
</view>
</button>
<view
class="section wd-flex wd-flex-row wd-justify-between"
@click="callPhone"
>
<view class="wd-flex wd-flex-row" style="gap: 16rpx">
<view class="wd-flex wd-flex-row" style="gap: 8rpx">
<u--image
src="/static/images/owner/phone.png"
width="40rpx"
height="40rpx"
mode="aspectFill"
></u--image>
<text class="wd-font-800">内部专线</text>
<text style="color: #252f4a">内部专线</text>
</view>
<view
class="wd-flex wd-flex-row wd-items-center"
style="gap: 16rpx"
>
<text>点击呼叫</text>
<u-icon name="arrow-right"></u-icon>
<view class="row">
<view style="color: #78829d; line-height: 120%">点击拨打</view>
<u-icon name="arrow-right" color="#C4CADA"></u-icon>
</view>
</view>
<button
class="section wd-flex wd-flex-row wd-justify-between"
@click="btnJobInfo"
>
<view class="wd-flex wd-flex-row" style="gap: 16rpx">
<view class="wd-flex wd-flex-row" style="gap: 8rpx">
<u--image
src="/static/images/owner/bill.png"
width="40rpx"
height="40rpx"
mode="aspectFill"
></u--image>
<text class="wd-font-800">工作汇报</text>
<text style="color: #252f4a">工作汇报</text>
</view>
<view
class="wd-flex wd-flex-row wd-items-center"
style="gap: 16rpx"
>
<u-icon name="arrow-right"></u-icon>
<view class="row">
<u-count-to
:startVal="0"
:endVal="jobCount"
fontSize="28rpx"
separator=","
color="#17C653"
></u-count-to>
<u-icon name="arrow-right" color="#C4CADA"></u-icon>
</view>
</button>
</scroll-view>
@ -172,12 +167,14 @@
import { mapGetters } from 'vuex'
import { getUserProfile } from '@/api/system/user.js'
import { PolicyApi, formatPolicyContext } from '@/api/policy/index.js'
import { JobInfoApi } from '@/api/jobinfo/index.js'
import { NoticApi } from '@/api/common/notic.js'
export default {
data() {
return {
user: {},
policyTotal: 0,
jobCount: 0,
share: {}
}
},
@ -202,16 +199,15 @@ export default {
url: '/sub/owner/jobInfo'
})
},
init() {
async init() {
getUserProfile().then(res => {
this.user = res.data
})
PolicyApi.getPolicyPage({
pageNum: 1,
pageSize: 10
}).then(res => {
this.policyTotal = res.data.total
})
const notic = await NoticApi.getListData({ readStatus: false })
this.policyTotal = notic.data.total
const job = await JobInfoApi.getJobInfoPage()
this.jobCount = job.data.total
},
openSubMessage() {
uni.requestSubscribeMessage({
@ -257,17 +253,43 @@ export default {
}
}
.owner-container {
padding: 20rpx;
padding: 32rpx;
height: 100%;
.dept {
font-size: 24rpx;
background-color: #17c653;
color: #fff;
padding: 4rpx 16rpx;
border-radius: 240rpx;
}
.section {
border-radius: $cs-border-radius;
border-radius: 16rpx;
background: #fff;
margin-bottom: $cs-gap;
margin-bottom: 32rpx;
padding: 48rpx;
font-size: 28rpx;
}
.moblie {
color: $uni-text-color-grey;
}
.notice-wrapper {
height: 45rpx;
width: 45rpx;
background-color: #17c653;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
}
.row {
display: flex;
flex-flow: row nowrap;
align-items: center;
gap: 8rpx;
}
}
::v-deep .u-tag--mini {
padding: 4rpx 16rpx;
}
</style>

1
static/scss/global.scss

@ -30,6 +30,7 @@ button {
.tagList {
display: flex;
flex-flow: row wrap;
align-items: center;
gap: 16rpx;
.tag {

2
sub/invite/index.vue

@ -107,7 +107,7 @@ export default {
share: {
title: '企业变更管理', //
path: `/sub/invite/index?inviteId=${this.$store.getters.userId}`,
imageUrl: ''
imageUrl: 'https://hb.jzce.com/fx_bggl.png'
}
}
},

24
sub/owner/edit.vue

@ -17,7 +17,7 @@
<view
class="section wd-flex wd-flex-row wd-justify-between wd-items-center"
>
<text class="wd-font-800">我的头像</text>
<text style="color: #99a1b7">我的头像</text>
<button
class="wd-flex wd-flex-row wd-items-center avatarBtn"
style="gap: 8px"
@ -33,7 +33,7 @@
<view
class="section wd-flex wd-flex-row wd-justify-between wd-items-center"
>
<text class="wd-font-800">姓名</text>
<text style="color: #99a1b7">姓名</text>
<view class="wd-flex wd-flex-row wd-items-center" style="gap: 8px">
<input
class="wd-text-right"
@ -41,8 +41,9 @@
placeholder-class="txt"
placeholder="请输入姓名"
v-model="form.realName"
placeholder-style="color:#99a1b7"
/>
<u-icon name="arrow-right" color="#99A1B7" size="16"></u-icon>
<u-icon name="arrow-right" color="#99a1b7" size="16"></u-icon>
</view>
</view>
<!-- 用户性别 -->
@ -50,7 +51,7 @@
class="section wd-flex wd-flex-row wd-justify-between wd-items-center"
@click="showPicker('system_user_sex', 'sex')"
>
<text class="wd-font-800">性别</text>
<text style="color: #99a1b7">性别</text>
<view class="wd-flex wd-flex-row wd-items-center" style="gap: 8px">
<text v-if="form.sex">
{{
@ -61,23 +62,27 @@
}}
</text>
<text class="placeholder" v-else>请选择性别</text>
<u-icon name="arrow-right" color="#99A1B7" size="16"></u-icon>
<u-icon name="arrow-right" color="#99a1b7" size="16"></u-icon>
</view>
</view>
<!-- 手机号码 -->
<view
class="section wd-flex wd-flex-row wd-justify-between wd-items-center"
>
<text class="wd-font-800">手机号码</text>
<view class="wd-flex wd-flex-row wd-items-center" style="gap: 8px">
<text style="color: #99a1b7">手机号码</text>
<view
class="wd-flex wd-flex-row wd-items-center"
style="gap: 16rpx"
>
<input
class="wd-text-right"
type="number"
placeholder-class="txt"
placeholder="请输入手机号码"
v-model="form.mobile"
placeholder-style="color:#99a1b7"
/>
<u-icon name="arrow-right" color="#99A1B7" size="16"></u-icon>
<u-icon name="arrow-right" color="#99a1b7" size="16"></u-icon>
</view>
</view>
<!-- 所属部门 -->
@ -160,7 +165,6 @@ export default {
}
},
init() {
console.log('登录信息', this.$store.getters)
if (this.$store.getters.userId) {
getUserProfile().then(res => {
this.form = res.data
@ -313,7 +317,7 @@ export default {
}
}
.placeholder {
color: $uni-text-color-grey;
color: #99a1b7;
}
button {
padding-left: 0;

109
sub/owner/jobInfo.vue

@ -2,21 +2,41 @@
<view class="jobInfo-container">
<!-- 搜索框区域 -->
<view class="search-box">
<van-search :value="abc" placeholder="输入关键字查询" id="sreach" @clear="handleClear" @change="handleSearch" />
<van-search
:value="abc"
placeholder="输入关键字查询"
id="sreach"
@clear="handleClear"
@change="handleSearch"
/>
</view>
<!-- 列表区域 -->
<view class="jobInfo-list">
<scroll-view class="jobInfo-scroll" scroll-y @scrolltolower="loadNextPage" @refresherrefresh="onRefresh"
refresher-enabled :refresher-triggered="isRefreshing">
<view class="jobInfo-item" v-for="item in jobInfoList" :key="item.id">
<scroll-view
class="jobInfo-scroll"
scroll-y
@scrolltolower="loadNextPage"
@refresherrefresh="onRefresh"
refresher-enabled
:refresher-triggered="isRefreshing"
>
<view
class="jobInfo-item"
v-for="item in jobInfoList"
:key="item.id"
>
<view class="item-main" @click="handlejobInfoClick(item)">
<view class="jobInfo-title">{{ item.title }}</view>
<view class="jobInfo-time">汇报日期{{ item.jobDate }}</view>
</view>
<view class="item-btns">
<button class="btn-preview" @click.stop="btnView(item)">生成预览</button>
<button class="btn-share" @click.stop="btnShare(item)">分享PDF</button>
<button class="btn-preview" @click.stop="btnView(item)">
生成预览
</button>
<button class="btn-share" @click.stop="btnShare(item)">
分享PDF
</button>
</view>
</view>
</scroll-view>
@ -35,7 +55,6 @@ import { formatDate } from '@/utils/ruoyi.js'
import config from '@/config'
import { JobInfoApi } from '@/api/jobinfo/index.js'
export default {
data() {
return {
@ -46,8 +65,10 @@ export default {
pageNum: 1, //
pageSize: 10, //
total: 0, //
loadMoreStatus: 'more',// more- loading- noMore-
itemImgUrl: config.imgUrl + '/miniohb/c103c92335bdd30d33ff8a062c219ead0626bf0a1898536bd7590285ca11c9db.png'
loadMoreStatus: 'more', // more- loading- noMore-
itemImgUrl:
config.imgUrl +
'/miniohb/c103c92335bdd30d33ff8a062c219ead0626bf0a1898536bd7590285ca11c9db.png'
}
},
//
@ -56,7 +77,6 @@ export default {
this.getjobInfoList()
},
methods: {
handleAdd() {
uni.navigateTo({
@ -71,27 +91,27 @@ export default {
// PDFURL
url: url,
success: function (res) {
const filePath = res.tempFilePath;
const filePath = res.tempFilePath
wx.openDocument({
filePath: filePath,
fileType: 'pdf', // PDF
success: function (res) {
console.log('打开文档成功');
console.log('打开文档成功')
},
fail: function (err) {
console.error('打开文档失败', err);
console.error('打开文档失败', err)
}
});
})
},
fail: function (err) {
console.error('下载文件失败', err);
console.error('下载文件失败', err)
}
});
})
},
btnShare(item) {
let url = item.pdfUrl
let fileName = item.title+".pdf"
let fileName = item.title + '.pdf'
//
wx.downloadFile({
url: url, //
@ -101,19 +121,18 @@ export default {
filePath: res.tempFilePath, //
fileName: fileName, //
success() {
console.log('文件分享成功');
console.log('文件分享成功')
},
fail(err) {
console.error('文件分享失败', err);
console.error('文件分享失败', err)
}
});
})
}
},
fail(err) {
console.error('文件下载失败', err);
console.error('文件下载失败', err)
}
});
})
},
//
@ -127,7 +146,6 @@ export default {
if (this.jobInfoList.length < this.total) {
this.pageNum++
this.getjobInfoList()
}
},
//
@ -145,7 +163,10 @@ export default {
//
const formattedData = res.data.list.map(item => ({
...item,
title: item.title.length > 15 ? item.title.slice(0, 15) + '...' : item.title,
title:
item.title.length > 15
? item.title.slice(0, 15) + '...'
: item.title,
jobDate: formatDate(item.jobDate, 'YYYY年MM月DD日')
}))
@ -158,7 +179,8 @@ export default {
console.log('列表信息', res)
this.total = res.data.total
//
this.loadMoreStatus = this.jobInfoList.length >= this.total ? 'noMore' : 'more'
this.loadMoreStatus =
this.jobInfoList.length >= this.total ? 'noMore' : 'more'
}
} catch (error) {
console.error(error)
@ -167,14 +189,14 @@ export default {
title: '获取列表失败',
icon: 'none'
})
}
finally {
this.loadMoreStatus = this.jobInfoList.length >= this.total ? 'noMore' : 'more'
} finally {
this.loadMoreStatus =
this.jobInfoList.length >= this.total ? 'noMore' : 'more'
//
//
setTimeout(() => {
this.isRefreshing = false
}, 300) //
}, 300) //
}
},
//
@ -184,7 +206,6 @@ export default {
this.searchValue = e.detail //
this.getjobInfoList()
}
},
//
handleClear() {
@ -203,7 +224,7 @@ export default {
</script>
<style lang="scss">
.jobInfo-container {
background: #F9F9F9;
background: #f9f9f9;
min-height: 100vh;
display: flex;
flex-direction: column;
@ -211,7 +232,7 @@ export default {
.search-box {
padding: 24rpx;
background: #FFFFFF;
background: #ffffff;
position: fixed;
top: 0;
left: 0;
@ -224,12 +245,14 @@ export default {
margin-top: 120rpx; // + padding
.jobInfo-scroll {
height: calc(100vh - 120rpx - 156rpx); // - -
height: calc(
100vh - 120rpx - 156rpx
); // - -
box-sizing: border-box;
}
.jobInfo-item {
background: #FFFFFF;
background: #ffffff;
padding: 24rpx;
margin: 24rpx;
border-radius: 16rpx;
@ -267,17 +290,15 @@ export default {
.btn-preview {
background: rgba(255, 111, 30, 0.1);
color: #FF6F1E;
color: #ff6f1e;
}
.btn-share {
background: rgba(23, 198, 83, 0.1);
color: #17C653;
color: #17c653;
}
}
}
}
}
@ -288,8 +309,8 @@ export default {
right: 24rpx;
height: 88rpx;
line-height: 88rpx;
background: #17C653;
color: #FFFFFF;
background: #17c653;
color: #ffffff;
font-size: 32rpx;
border-radius: 8rpx;
text-align: center;
@ -298,16 +319,16 @@ export default {
.search-box {
padding: 24rpx;
background: #FFFFFF;
background: #ffffff;
::v-deep .van-search {
padding: 0;
background: transparent;
.van-search__content {
background: #F5F5F5;
background: #f5f5f5;
border-radius: 8rpx;
}
}
}
</style>
</style>

0
sub/owner/notice-detail.vue

10
sub/task/detail.vue

@ -169,7 +169,12 @@
已选择({{ isSelect.length }})
</view>
</view>
<u-modal :show="model.show" closeOnClickOverlay @close="closeModel">
<u-modal
:show="model.show"
closeOnClickOverlay
@close="closeModel"
borderRadius="32rpx"
>
<view class="wd-flex wd-flex-col" style="gap: 20px">
<view class="header">
<view class="row-1">
@ -714,4 +719,7 @@ export default {
margin: 12px 0;
border-radius: 0px;
}
::v-deep .u-popup__content {
border-radius: 32rpx;
}
</style>

7
sub/task/locate.vue

@ -187,8 +187,7 @@ export default {
this.share = {
title: '',
path: `/sub/task/locate?inspectionsId=${this.inspectionsId}&enterpriseId=${this.enterpriseId}`,
imageUrl:
'http://82.156.141.150:9001/api/v1/download-shared-object/aHR0cDovL2xvY2FsaG9zdDo5MDAwL2h1YW5iYW8vbWluaWFwcC9pbnZhdGUucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUQxODY1RVA2NEczMEdEUUhDVTglMkYyMDI1MDIxOCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMThUMDcyMDI0WiZYLUFtei1FeHBpcmVzPTQzMTk5JlgtQW16LVNlY3VyaXR5LVRva2VuPWV5SmhiR2NpT2lKSVV6VXhNaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpoWTJObGMzTkxaWGtpT2lKQlJERTROalZGVURZMFJ6TXdSMFJSU0VOVk9DSXNJbVY0Y0NJNk1UY3pPVGt3TmpJME55d2ljR0Z5Wlc1MElqb2lZV1J0YVc0aWZRLmp6djBhdEY5QVBYXzVjYWg4c18yeXhVV3oxek9BekFzSVdzemVrUmZwcXlHd0RPWkptazlUSGJRUnBDdVNmLVMyU0otWTI1cldUd2hpNUlrY0xBSThRJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZ2ZXJzaW9uSWQ9bnVsbCZYLUFtei1TaWduYXR1cmU9MjcxZTkzOTE1MDkwYzUzYmRjYTg0MjQ1MTJhYjk3ZWQxZWMyN2QzM2MwM2U3NGUwYmRhNTBmYjQyNWI0N2MyOQ'
imageUrl: 'https://hb.jzce.com/fx_zfqd.png'
}
await this.init()
},
@ -230,7 +229,9 @@ export default {
scene: `aId=${this.inspectionsId}&bId=${this.enterpriseId}`,
path: 'sub/task/locate',
checkPath: false,
envVersion: 'develop',
// envVersion: 'develop',
// envVersion:'release',
envVersion: 'trial',
isHyaline: true
})
this.miniCode = `data:image/jpeg;base64,${res.data}`

2
sub/task/record.vue

@ -364,7 +364,7 @@ export default {
position: absolute;
right: 0;
top: 0;
transform: translateX(60rpx) translateY(16rpx) rotateZ(45deg);
transform: translateX(68rpx) translateY(19rpx) rotateZ(45deg);
transform-origin: 50% 50%;
}
}

2
uni_modules/s-components/s-tabber/index.vue

@ -112,7 +112,7 @@ export default {
align-items: center;
justify-content: space-around;
border-top: 2rpx solid #f1f1f4;
padding: 24rpx 48rpx 0px 48rpx;
padding: 24rpx 32rpx 0px 32rpx;
.tab {
display: flex;
flex-flow: column nowrap;

174
uni_modules/uview-ui/components/u-modal/props.js

@ -1,89 +1,93 @@
export default {
props: {
// 是否展示modal
show: {
type: Boolean,
default: uni.$u.props.modal.show
},
// 标题
title: {
type: [String],
default: uni.$u.props.modal.title
},
// 弹窗内容
content: {
type: String,
default: uni.$u.props.modal.content
},
// 确认文案
confirmText: {
type: String,
default: uni.$u.props.modal.confirmText
},
// 取消文案
cancelText: {
type: String,
default: uni.$u.props.modal.cancelText
},
// 是否显示确认按钮
showConfirmButton: {
type: Boolean,
default: uni.$u.props.modal.showConfirmButton
},
// 是否显示取消按钮
showCancelButton: {
type: Boolean,
default: uni.$u.props.modal.showCancelButton
},
// 确认按钮颜色
confirmColor: {
type: String,
default: uni.$u.props.modal.confirmColor
},
// 取消文字颜色
cancelColor: {
type: String,
default: uni.$u.props.modal.cancelColor
},
// 对调确认和取消的位置
buttonReverse: {
type: Boolean,
default: uni.$u.props.modal.buttonReverse
},
// 是否开启缩放效果
zoom: {
type: Boolean,
default: uni.$u.props.modal.zoom
},
// 是否异步关闭,只对确定按钮有效
asyncClose: {
type: Boolean,
default: uni.$u.props.modal.asyncClose
},
// 是否允许点击遮罩关闭modal
closeOnClickOverlay: {
type: Boolean,
default: uni.$u.props.modal.closeOnClickOverlay
},
// 给一个负的margin-top,往上偏移,避免和键盘重合的情况
negativeTop: {
type: [String, Number],
default: uni.$u.props.modal.negativeTop
},
// modal宽度,不支持百分比,可以数值,px,rpx单位
width: {
type: [String, Number],
default: uni.$u.props.modal.width
},
// 确认按钮的样式,circle-圆形,square-方形,如设置,将不会显示取消按钮
confirmButtonShape: {
type: String,
default: uni.$u.props.modal.confirmButtonShape
},
props: {
// 是否展示modal
show: {
type: Boolean,
default: uni.$u.props.modal.show
},
// 标题
title: {
type: [String],
default: uni.$u.props.modal.title
},
// 弹窗内容
content: {
type: String,
default: uni.$u.props.modal.content
},
// 确认文案
confirmText: {
type: String,
default: uni.$u.props.modal.confirmText
},
// 取消文案
cancelText: {
type: String,
default: uni.$u.props.modal.cancelText
},
// 是否显示确认按钮
showConfirmButton: {
type: Boolean,
default: uni.$u.props.modal.showConfirmButton
},
// 是否显示取消按钮
showCancelButton: {
type: Boolean,
default: uni.$u.props.modal.showCancelButton
},
// 确认按钮颜色
confirmColor: {
type: String,
default: uni.$u.props.modal.confirmColor
},
// 取消文字颜色
cancelColor: {
type: String,
default: uni.$u.props.modal.cancelColor
},
// 对调确认和取消的位置
buttonReverse: {
type: Boolean,
default: uni.$u.props.modal.buttonReverse
},
// 是否开启缩放效果
zoom: {
type: Boolean,
default: uni.$u.props.modal.zoom
},
// 是否异步关闭,只对确定按钮有效
asyncClose: {
type: Boolean,
default: uni.$u.props.modal.asyncClose
},
// 是否允许点击遮罩关闭modal
closeOnClickOverlay: {
type: Boolean,
default: uni.$u.props.modal.closeOnClickOverlay
},
// 给一个负的margin-top,往上偏移,避免和键盘重合的情况
negativeTop: {
type: [String, Number],
default: uni.$u.props.modal.negativeTop
},
// modal宽度,不支持百分比,可以数值,px,rpx单位
width: {
type: [String, Number],
default: uni.$u.props.modal.width
},
// 确认按钮的样式,circle-圆形,square-方形,如设置,将不会显示取消按钮
confirmButtonShape: {
type: String,
default: uni.$u.props.modal.confirmButtonShape
},
borderRadius: {
type: String,
default: '6px'
},
// 弹窗动画过度时间
duration:{
type:String | Number,
duration: {
type: String | Number,
default: uni.$u.props.modal.duration
}
}
}
}
}

427
uni_modules/uview-ui/components/u-modal/u-modal.vue

@ -1,228 +1,237 @@
<template>
<u-popup
mode="center"
:zoom="zoom"
:show="show"
:customStyle="{
borderRadius: '6px',
overflow: 'hidden',
marginTop: `-${$u.addUnit(negativeTop)}`
}"
:closeOnClickOverlay="closeOnClickOverlay"
:safeAreaInsetBottom="false"
:duration="duration"
@click="clickHandler"
>
<view
class="u-modal"
:style="{
width: $u.addUnit(width),
}"
>
<text
class="u-modal__title"
v-if="title"
>{{ title }}</text>
<view
class="u-modal__content"
:style="{
paddingTop: `${title ? 12 : 25}px`
}"
>
<slot>
<text class="u-modal__content__text">{{ content }}</text>
</slot>
</view>
<view
class="u-modal__button-group--confirm-button"
v-if="$slots.confirmButton"
>
<slot name="confirmButton"></slot>
</view>
<template v-else>
<u-line></u-line>
<view
class="u-modal__button-group"
:style="{
flexDirection: buttonReverse ? 'row-reverse' : 'row'
}"
>
<view
class="u-modal__button-group__wrapper u-modal__button-group__wrapper--cancel"
:hover-stay-time="150"
hover-class="u-modal__button-group__wrapper--hover"
:class="[showCancelButton && !showConfirmButton && 'u-modal__button-group__wrapper--only-cancel']"
v-if="showCancelButton"
@tap="cancelHandler"
>
<text
class="u-modal__button-group__wrapper__text"
:style="{
color: cancelColor
}"
>{{ cancelText }}</text>
</view>
<u-line
direction="column"
v-if="showConfirmButton && showCancelButton"
></u-line>
<view
class="u-modal__button-group__wrapper u-modal__button-group__wrapper--confirm"
:hover-stay-time="150"
hover-class="u-modal__button-group__wrapper--hover"
:class="[!showCancelButton && showConfirmButton && 'u-modal__button-group__wrapper--only-confirm']"
v-if="showConfirmButton"
@tap="confirmHandler"
>
<u-loading-icon v-if="loading"></u-loading-icon>
<text
v-else
class="u-modal__button-group__wrapper__text"
:style="{
color: confirmColor
}"
>{{ confirmText }}</text>
</view>
</view>
</template>
</view>
</u-popup>
<u-popup
mode="center"
:zoom="zoom"
:show="show"
:customStyle="{
borderRadius: borderRadius,
overflow: 'hidden',
marginTop: `-${$u.addUnit(negativeTop)}`
}"
:closeOnClickOverlay="closeOnClickOverlay"
:safeAreaInsetBottom="false"
:duration="duration"
@click="clickHandler"
>
<view
class="u-modal"
:style="{
width: $u.addUnit(width)
}"
>
<text class="u-modal__title" v-if="title">{{ title }}</text>
<view
class="u-modal__content"
:style="{
paddingTop: `${title ? 12 : 25}px`
}"
>
<slot>
<text class="u-modal__content__text">{{ content }}</text>
</slot>
</view>
<view
class="u-modal__button-group--confirm-button"
v-if="$slots.confirmButton"
>
<slot name="confirmButton"></slot>
</view>
<template v-else>
<u-line></u-line>
<view
class="u-modal__button-group"
:style="{
flexDirection: buttonReverse ? 'row-reverse' : 'row'
}"
>
<view
class="u-modal__button-group__wrapper u-modal__button-group__wrapper--cancel"
:hover-stay-time="150"
hover-class="u-modal__button-group__wrapper--hover"
:class="[
showCancelButton &&
!showConfirmButton &&
'u-modal__button-group__wrapper--only-cancel'
]"
v-if="showCancelButton"
@tap="cancelHandler"
>
<text
class="u-modal__button-group__wrapper__text"
:style="{
color: cancelColor
}"
>
{{ cancelText }}
</text>
</view>
<u-line
direction="column"
v-if="showConfirmButton && showCancelButton"
></u-line>
<view
class="u-modal__button-group__wrapper u-modal__button-group__wrapper--confirm"
:hover-stay-time="150"
hover-class="u-modal__button-group__wrapper--hover"
:class="[
!showCancelButton &&
showConfirmButton &&
'u-modal__button-group__wrapper--only-confirm'
]"
v-if="showConfirmButton"
@tap="confirmHandler"
>
<u-loading-icon v-if="loading"></u-loading-icon>
<text
v-else
class="u-modal__button-group__wrapper__text"
:style="{
color: confirmColor
}"
>
{{ confirmText }}
</text>
</view>
</view>
</template>
</view>
</u-popup>
</template>
<script>
import props from './props.js';
/**
* Modal 模态框
* @description 弹出模态框常用于消息提示消息确认在当前页面内完成特定的交互操作
* @tutorial https://www.uviewui.com/components/modul.html
* @property {Boolean} show 是否显示模态框请赋值给show 默认 false
* @property {String} title 标题内容
* @property {String} content 模态框内容如传入slot内容则此参数无效
* @property {String} confirmText 确认按钮的文字 默认 '确认'
* @property {String} cancelText 取消按钮的文字 默认 '取消'
* @property {Boolean} showConfirmButton 是否显示确认按钮 默认 true
* @property {Boolean} showCancelButton 是否显示取消按钮 默认 false
* @property {String} confirmColor 确认按钮的颜色 默认 '#2979ff'
* @property {String} cancelColor 取消按钮的颜色 默认 '#606266'
* @property {Number} duration 弹窗动画过度时间 默认 400
* @property {Boolean} buttonReverse 对调确认和取消的位置 默认 false
* @property {Boolean} zoom 是否开启缩放模式 默认 true
* @property {Boolean} asyncClose 是否异步关闭只对确定按钮有效见上方说明 默认 false
* @property {Boolean} closeOnClickOverlay 是否允许点击遮罩关闭Modal 默认 false
* @property {String | Number} negativeTop 往上偏移的值给一个负的margin-top往上偏移避免和键盘重合的情况单位任意数值则默认为px单位 默认 0
* @property {String | Number} width modal宽度不支持百分比可以数值pxrpx单位 默认 '650rpx'
* @property {String} confirmButtonShape 确认按钮的样式,如设置将不会显示取消按钮
* @event {Function} confirm 点击确认按钮时触发
* @event {Function} cancel 点击取消按钮时触发
* @event {Function} close 点击遮罩关闭出发closeOnClickOverlay为true有效
* @example <u-modal :show="true" title="title" content="content"></u-modal>
*/
export default {
name: 'u-modal',
mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
data() {
return {
loading: false
}
},
watch: {
show(n) {
// modal使loading
// modalloading
if (n && this.loading) this.loading = false
}
},
methods: {
//
confirmHandler() {
// loading
if (this.asyncClose) {
this.loading = true;
}
this.$emit('confirm')
},
//
cancelHandler() {
this.$emit('cancel')
},
//
// modal
// modalpopupflex
// popup
// .stop
clickHandler() {
if (this.closeOnClickOverlay) {
this.$emit('close')
}
}
}
}
import props from './props.js'
/**
* Modal 模态框
* @description 弹出模态框常用于消息提示消息确认在当前页面内完成特定的交互操作
* @tutorial https://www.uviewui.com/components/modul.html
* @property {Boolean} show 是否显示模态框请赋值给show 默认 false
* @property {String} title 标题内容
* @property {String} content 模态框内容如传入slot内容则此参数无效
* @property {String} confirmText 确认按钮的文字 默认 '确认'
* @property {String} cancelText 取消按钮的文字 默认 '取消'
* @property {Boolean} showConfirmButton 是否显示确认按钮 默认 true
* @property {Boolean} showCancelButton 是否显示取消按钮 默认 false
* @property {String} confirmColor 确认按钮的颜色 默认 '#2979ff'
* @property {String} cancelColor 取消按钮的颜色 默认 '#606266'
* @property {Number} duration 弹窗动画过度时间 默认 400
* @property {Boolean} buttonReverse 对调确认和取消的位置 默认 false
* @property {Boolean} zoom 是否开启缩放模式 默认 true
* @property {Boolean} asyncClose 是否异步关闭只对确定按钮有效见上方说明 默认 false
* @property {Boolean} closeOnClickOverlay 是否允许点击遮罩关闭Modal 默认 false
* @property {String | Number} negativeTop 往上偏移的值给一个负的margin-top往上偏移避免和键盘重合的情况单位任意数值则默认为px单位 默认 0
* @property {String | Number} width modal宽度不支持百分比可以数值pxrpx单位 默认 '650rpx'
* @property {String} confirmButtonShape 确认按钮的样式,如设置将不会显示取消按钮
* @event {Function} confirm 点击确认按钮时触发
* @event {Function} cancel 点击取消按钮时触发
* @event {Function} close 点击遮罩关闭出发closeOnClickOverlay为true有效
* @example <u-modal :show="true" title="title" content="content"></u-modal>
*/
export default {
name: 'u-modal',
mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
data() {
return {
loading: false
}
},
watch: {
show(n) {
// modal使loading
// modalloading
if (n && this.loading) this.loading = false
}
},
methods: {
//
confirmHandler() {
// loading
if (this.asyncClose) {
this.loading = true
}
this.$emit('confirm')
},
//
cancelHandler() {
this.$emit('cancel')
},
//
// modal
// modalpopupflex
// popup
// .stop
clickHandler() {
if (this.closeOnClickOverlay) {
this.$emit('close')
}
}
}
}
</script>
<style lang="scss" scoped>
@import "../../libs/css/components.scss";
$u-modal-border-radius: 6px;
@import '../../libs/css/components.scss';
$u-modal-border-radius: 6px;
.u-modal {
width: 650rpx;
border-radius: $u-modal-border-radius;
overflow: hidden;
.u-modal {
width: 650rpx;
border-radius: $u-modal-border-radius;
overflow: hidden;
&__title {
font-size: 16px;
font-weight: bold;
color: $u-content-color;
text-align: center;
padding-top: 25px;
}
&__title {
font-size: 16px;
font-weight: bold;
color: $u-content-color;
text-align: center;
padding-top: 25px;
}
&__content {
padding: 12px 25px 25px 25px;
@include flex;
justify-content: center;
&__content {
padding: 12px 25px 25px 25px;
@include flex;
justify-content: center;
&__text {
font-size: 15px;
color: $u-content-color;
flex: 1;
}
}
&__text {
font-size: 15px;
color: $u-content-color;
flex: 1;
}
}
&__button-group {
@include flex;
&__button-group {
@include flex;
&--confirm-button {
flex-direction: column;
padding: 0px 25px 15px 25px;
}
&--confirm-button {
flex-direction: column;
padding: 0px 25px 15px 25px;
}
&__wrapper {
flex: 1;
@include flex;
justify-content: center;
align-items: center;
height: 48px;
&__wrapper {
flex: 1;
@include flex;
justify-content: center;
align-items: center;
height: 48px;
&--confirm,
&--only-cancel {
border-bottom-right-radius: $u-modal-border-radius;
}
&--confirm,
&--only-cancel {
border-bottom-right-radius: $u-modal-border-radius;
}
&--cancel,
&--only-confirm {
border-bottom-left-radius: $u-modal-border-radius;
}
&--cancel,
&--only-confirm {
border-bottom-left-radius: $u-modal-border-radius;
}
&--hover {
background-color: $u-bg-color;
}
&--hover {
background-color: $u-bg-color;
}
&__text {
color: $u-content-color;
font-size: 16px;
text-align: center;
}
}
}
}
&__text {
color: $u-content-color;
font-size: 16px;
text-align: center;
}
}
}
}
</style>

1
wxcomponents/vant/dropdown-item/index.wxss

@ -23,6 +23,7 @@
.van-dropdown-item--down {
/* bottom: 48rpx */
bottom: 0;
margin-top: 24rpx;
margin-bottom: 48rpx;
}

1
wxcomponents/vant/dropdown-menu/index.wxss

@ -63,7 +63,6 @@
}
.select-title {
font-weight: bold;
transition: .2s all;
color: #071437;
}

200
wxcomponents/vant/search/index.js

@ -1,97 +1,105 @@
import { VantComponent } from '../common/component';
import { canIUseModel } from '../common/version';
import {
VantComponent
} from '../common/component';
import {
canIUseModel
} from '../common/version';
VantComponent({
field: true,
classes: ['field-class', 'input-class', 'cancel-class'],
props: {
value: {
type: String,
value: '',
},
label: String,
focus: Boolean,
error: Boolean,
disabled: Boolean,
readonly: Boolean,
inputAlign: String,
showAction: Boolean,
useActionSlot: Boolean,
useLeftIconSlot: Boolean,
useRightIconSlot: Boolean,
leftIcon: {
type: String,
value: 'search',
},
rightIcon: String,
placeholder: String,
placeholderStyle: String,
actionText: {
type: String,
value: '取消',
},
background: {
type: String,
value: '#ffffff',
},
maxlength: {
type: Number,
value: -1,
},
shape: {
type: String,
value: 'square',
},
clearable: {
type: Boolean,
value: true,
},
clearTrigger: {
type: String,
value: 'focus',
},
clearIcon: {
type: String,
value: 'clear',
},
cursorSpacing: {
type: Number,
value: 0,
},
},
methods: {
onChange(event) {
if (canIUseModel()) {
this.setData({ value: event.detail });
}
this.$emit('change', event.detail);
},
onCancel() {
/**
* 修复修改输入框值时输入框失焦和赋值同时触发赋值失效
* https://github.com/youzan/vant-weapp/issues/1768
*/
setTimeout(() => {
if (canIUseModel()) {
this.setData({ value: '' });
}
this.$emit('cancel');
this.$emit('change', '');
}, 200);
},
onSearch(event) {
this.$emit('search', event.detail);
},
onFocus(event) {
this.$emit('focus', event.detail);
},
onBlur(event) {
this.$emit('blur', event.detail);
},
onClear(event) {
this.$emit('clear', event.detail);
},
onClickInput(event) {
this.$emit('click-input', event.detail);
},
},
});
field: true,
classes: ['field-class', 'input-class', 'cancel-class'],
props: {
value: {
type: String,
value: '',
},
label: String,
focus: Boolean,
error: Boolean,
disabled: Boolean,
readonly: Boolean,
inputAlign: String,
showAction: Boolean,
useActionSlot: Boolean,
useLeftIconSlot: Boolean,
useRightIconSlot: Boolean,
leftIcon: {
type: String,
value: 'search',
},
rightIcon: String,
placeholder: String,
placeholderStyle: String,
actionText: {
type: String,
value: '取消',
},
background: {
type: String,
value: '#ffffff',
},
maxlength: {
type: Number,
value: -1,
},
shape: {
type: String,
value: 'square',
},
clearable: {
type: Boolean,
value: true,
},
clearTrigger: {
type: String,
value: 'focus',
},
clearIcon: {
type: String,
value: 'clear',
},
cursorSpacing: {
type: Number,
value: 0,
},
},
methods: {
onChange(event) {
if (canIUseModel()) {
this.setData({
value: event.detail
});
}
this.$emit('change', event.detail);
},
onCancel() {
/**
* 修复修改输入框值时输入框失焦和赋值同时触发赋值失效
* https://github.com/youzan/vant-weapp/issues/1768
*/
setTimeout(() => {
if (canIUseModel()) {
this.setData({
value: ''
});
}
this.$emit('cancel');
this.$emit('change', '');
}, 200);
},
onSearch(event) {
this.$emit('search', event.detail);
},
onFocus(event) {
this.$emit('focus', event.detail);
},
onBlur(event) {
this.$emit('blur', event.detail);
},
onClear(event) {
this.$emit('clear', event.detail);
},
onClickInput(event) {
this.$emit('click-input', event.detail);
},
},
});

54
wxcomponents/vant/search/index.wxss

@ -1 +1,53 @@
@import '../common/index.wxss';.van-search{align-items:center;box-sizing:border-box;display:flex;padding:var(--search-padding,10px 12px)}.van-search__content{background-color:var(--search-background-color,#f7f8fa);border-radius:2px;display:flex;flex:1;padding-left:var(--padding-sm,12px)}.van-search__content--round{border-radius:999px}.van-search__label{color:var(--search-label-color,#323233);font-size:var(--search-label-font-size,14px);line-height:var(--search-input-height,34px);padding:var(--search-label-padding,0 5px)}.van-search__field{flex:1}.van-search__field__left-icon{color:var(--search-left-icon-color,#969799)}.van-search--withaction{padding-right:0}.van-search__action{color:var(--search-action-text-color,#323233);font-size:var(--search-action-font-size,14px);line-height:var(--search-input-height,34px)}.van-search__action--hover{background-color:#f2f3f5}.van-search__action-button{padding:var(--search-action-padding,0 8px)}
@import '../common/index.wxss';
.van-search {
align-items: center;
box-sizing: border-box;
display: flex;
padding: var(--search-padding, 10px 12px)
}
.van-search__content {
background-color: var(--search-background-color, #f7f8fa);
border-radius: 2px;
display: flex;
flex: 1;
padding-left: var(--padding-sm, 12px)
}
.van-search__content--round {
border-radius: 999px
}
.van-search__label {
color: var(--search-label-color, #323233);
font-size: var(--search-label-font-size, 14px);
line-height: var(--search-input-height, 34px);
padding: var(--search-label-padding, 0 5px)
}
.van-search__field {
flex: 1
}
.van-search__field__left-icon {
color: var(--search-left-icon-color, #969799)
}
.van-search--withaction {
padding-right: 0
}
.van-search__action {
color: var(--search-action-text-color, #323233);
font-size: var(--search-action-font-size, 14px);
line-height: var(--search-input-height, 34px)
}
.van-search__action--hover {
background-color: #f2f3f5
}
.van-search__action-button {
padding: var(--search-action-padding, 0 8px)
}
Loading…
Cancel
Save