lijuncheng
1 year ago
10 changed files with 0 additions and 1944 deletions
@ -1,198 +0,0 @@ |
|||
<template> |
|||
<u-grid> |
|||
<u-grid-item @click="onItemClick(item.menuSpace)" v-for="(item,index) in dataList"> |
|||
<view class="content2"> |
|||
<image src="/static/icons_ui/icons_common_sjadd.svg" style="width: 100rpx; height: 120rpx;"> |
|||
</image> |
|||
</view> |
|||
<view class="content2" style="font-size: 30rpx;width: 100%; white-space: pre-wrap; text-align:center"> |
|||
{{item.menuName}} |
|||
</view> |
|||
</u-grid-item> |
|||
</u-grid> |
|||
</template> |
|||
|
|||
<script> |
|||
import { |
|||
getBalanceByLocationcode, |
|||
getBalanceByItemCode, |
|||
getDictionaryItem |
|||
} from '@/api/request.js'; |
|||
export default { |
|||
data() { |
|||
return { |
|||
dataList: [{ |
|||
menuName: '组件\n .. ', |
|||
menuSpace: '/pages/demo/demo' |
|||
}, { |
|||
menuName: '采购收货\n (任务)', |
|||
menuSpace: '/pages/purchaseReceipt/job/receiptJob' |
|||
}, { |
|||
menuName: '采购退货\n (任务)', |
|||
menuSpace: '/pages/purchaseReturn/job/returnJob' |
|||
}, |
|||
{ |
|||
menuName: '采购退货\n (直接)', |
|||
menuSpace: '/pages/purchaseReturn/record/returnRecord' |
|||
}, |
|||
{ |
|||
menuName: '按零件查询\n(库存)', |
|||
menuSpace: '/pages/query/item' |
|||
}, { |
|||
menuName: '按库位查询\n(库存)', |
|||
menuSpace: '/pages/query/location' |
|||
}, { |
|||
menuName: '按器具查询\n(库存)', |
|||
menuSpace: '/pages/query/container' |
|||
}, { |
|||
menuName: '单据查询\n(库存)', |
|||
menuSpace: '/pages/query/number' |
|||
}, |
|||
{ |
|||
menuName: '发料\n(任务)', |
|||
menuSpace: '/pages/issue/job/issueJob' |
|||
}, |
|||
{ |
|||
menuName: '发料接收\n(任务)', |
|||
menuSpace: '/pages/issue/job/issueReceiptJob'} |
|||
, |
|||
{ |
|||
menuName: '直接发料\n ', |
|||
menuSpace: '/pages/issue/record/issueRecord' |
|||
}, |
|||
{ |
|||
menuName: '库存转移\n(自由)', |
|||
menuSpace: '/pages/transfer/record/transferFree' |
|||
}, |
|||
{ |
|||
menuName: "库存转移\n(合格转隔离)", |
|||
menuSpace: '/pages/transfer/record/transferOkToHold' |
|||
}, |
|||
{ |
|||
menuName: "库存转移\n(隔离转合格)", |
|||
menuSpace: '/pages/transfer/record/transferHoldToOk' |
|||
}, |
|||
{ |
|||
menuName: "原料上架\n(任务)", |
|||
menuSpace: '/pages/putaway/job/putawayJob' |
|||
}, |
|||
{ |
|||
menuName: "原料上架\n(记录)", |
|||
menuSpace: '/pages/putaway/record/putawayRecord' |
|||
}, |
|||
{ |
|||
menuName: "生产退料\n(任务)", |
|||
menuSpace: '/pages/productionreturn/job/returnJob' |
|||
}, |
|||
{ |
|||
menuName: "生产退料\n(合格退料)", |
|||
menuSpace: '/pages/productionreturn/record/returnToStore' |
|||
}, |
|||
{ |
|||
menuName: "生产退料\n(隔离退料)", |
|||
menuSpace: '/pages/productionreturn/record/returnToHold' |
|||
}, |
|||
{ |
|||
menuName: "盘点\n(任务)", |
|||
menuSpace: '/pages/count/job/countJob' |
|||
}, |
|||
{ |
|||
menuName: "盘点\n(记录)", |
|||
menuSpace: '/pages/count/record/countRecord' |
|||
}, |
|||
{ |
|||
menuName: "制品收货任务\n", |
|||
menuSpace: '/pages/productionReceipt/job/productionReceiptJob' |
|||
}, |
|||
{ |
|||
menuName: "制品直接收货\n", |
|||
menuSpace: '/pages/productionReceipt/record/productionReceiptRecord' |
|||
}, |
|||
] |
|||
}; |
|||
}, |
|||
onLoad() { |
|||
var code ={ |
|||
codes:["rwzt","kwlx","wpzt","jldw","kczt","qjzt","bzdw"] |
|||
} |
|||
uni.showLoading({ |
|||
title:"获取配置信息..." |
|||
}) |
|||
getDictionaryItem(code).then(res=>{ |
|||
uni.hideLoading() |
|||
if(res.data){ |
|||
var list =res.data; |
|||
uni.setStorageSync("dictionary",list) |
|||
|
|||
}else { |
|||
uni.showToast({ |
|||
title:"没有获取到数据", |
|||
duration:3000 |
|||
}) |
|||
} |
|||
}).catch(error=>{ |
|||
uni.hideLoading() |
|||
uni.showToast({ |
|||
title:error, |
|||
duration:3000 |
|||
}) |
|||
}) |
|||
}, |
|||
methods: { |
|||
|
|||
|
|||
onItemClick(menuSpace) { |
|||
uni.navigateTo({ |
|||
url: menuSpace |
|||
}); |
|||
}, |
|||
purchasePutawayClick(e) { |
|||
uni.navigateTo({ |
|||
url: '/pages/purchaseReceipt/job/receiptJob' |
|||
}); |
|||
}, |
|||
demoClick() { |
|||
uni.navigateTo({ |
|||
url: '/pages/demo/demo' |
|||
}); |
|||
|
|||
}, |
|||
itemQuery() { |
|||
uni.navigateTo({ |
|||
url: '/pages/query/item' |
|||
}); |
|||
}, |
|||
locationQuery() { |
|||
uni.navigateTo({ |
|||
url: '/pages/query/location' |
|||
}); |
|||
}, |
|||
issue() { |
|||
uni.navigateTo({ |
|||
url: '/pages/issue/job/issueJob' |
|||
}); |
|||
} |
|||
|
|||
} |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="scss"> |
|||
/* 下方这些scss变量为uView内置变量,详见开发 组件-指南-内置样式 */ |
|||
.content { |
|||
width: 100%; |
|||
display: flex; |
|||
flex-direction: row; |
|||
flex-wrap: wrap; |
|||
justify-content: flex-start; |
|||
} |
|||
|
|||
.content2 { |
|||
|
|||
display: flex; |
|||
flex-direction: row; |
|||
flex-wrap: wrap; |
|||
justify-content: center; |
|||
|
|||
} |
|||
</style> |
@ -1,71 +0,0 @@ |
|||
<template> |
|||
<view class="about-container"> |
|||
<view class="header-section text-center"> |
|||
<image style="width: 150rpx;height: 150rpx;" src="/static/logo200.png" mode="widthFix"> |
|||
</image> |
|||
<uni-title type="h2" title="若依移动端"></uni-title> |
|||
</view> |
|||
|
|||
<view class="content-section"> |
|||
<view class="menu-list"> |
|||
<view class="list-cell list-cell-arrow"> |
|||
<view class="menu-item-box"> |
|||
<view>版本信息</view> |
|||
<view class="text-right">v{{version}}</view> |
|||
</view> |
|||
</view> |
|||
<view class="list-cell list-cell-arrow"> |
|||
<view class="menu-item-box"> |
|||
<view>官方邮箱</view> |
|||
<view class="text-right">ruoyi@xx.com</view> |
|||
</view> |
|||
</view> |
|||
<view class="list-cell list-cell-arrow"> |
|||
<view class="menu-item-box"> |
|||
<view>服务热线</view> |
|||
<view class="text-right">400-999-9999</view> |
|||
</view> |
|||
</view> |
|||
<view class="list-cell list-cell-arrow"> |
|||
<view class="menu-item-box"> |
|||
<view>公司网站</view> |
|||
<view class="text-right"> |
|||
<uni-link :href="url" :text="url" showUnderLine="false"></uni-link> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<view class="copyright"> |
|||
<view>Copyright © 2022 ruoyi.vip All Rights Reserved.</view> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import config from '@/config.js' |
|||
const url=config.appInfo.site_url; |
|||
const version=config.appInfo.version; |
|||
|
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
page { |
|||
background-color: #f8f8f8; |
|||
} |
|||
|
|||
.copyright { |
|||
margin-top: 50rpx; |
|||
text-align: center; |
|||
line-height: 60rpx; |
|||
color: #999; |
|||
} |
|||
|
|||
.header-section { |
|||
display: flex; |
|||
padding: 30rpx 0 0; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
} |
|||
</style> |
@ -1,634 +0,0 @@ |
|||
<template> |
|||
<view class="container"> |
|||
<view class="page-body uni-content-info"> |
|||
<view class='cropper-content'> |
|||
<view v-if="isShowImg" class="uni-corpper" :style="'width:'+cropperInitW+'px;height:'+cropperInitH+'px;background:#000'"> |
|||
<view class="uni-corpper-content" :style="'width:'+cropperW+'px;height:'+cropperH+'px;left:'+cropperL+'px;top:'+cropperT+'px'"> |
|||
<image :src="imageSrc" :style="'width:'+cropperW+'px;height:'+cropperH+'px'"></image> |
|||
<view class="uni-corpper-crop-box" @touchstart.stop="contentStartMove" @touchmove.stop="contentMoveing" @touchend.stop="contentTouchEnd" |
|||
:style="'left:'+cutL+'px;top:'+cutT+'px;right:'+cutR+'px;bottom:'+cutB+'px'"> |
|||
<view class="uni-cropper-view-box"> |
|||
<view class="uni-cropper-dashed-h"></view> |
|||
<view class="uni-cropper-dashed-v"></view> |
|||
<view class="uni-cropper-line-t" data-drag="top" @touchstart.stop="dragStart" @touchmove.stop="dragMove"></view> |
|||
<view class="uni-cropper-line-r" data-drag="right" @touchstart.stop="dragStart" @touchmove.stop="dragMove"></view> |
|||
<view class="uni-cropper-line-b" data-drag="bottom" @touchstart.stop="dragStart" @touchmove.stop="dragMove"></view> |
|||
<view class="uni-cropper-line-l" data-drag="left" @touchstart.stop="dragStart" @touchmove.stop="dragMove"></view> |
|||
<view class="uni-cropper-point point-t" data-drag="top" @touchstart.stop="dragStart" @touchmove.stop="dragMove"></view> |
|||
<view class="uni-cropper-point point-tr" data-drag="topTight"></view> |
|||
<view class="uni-cropper-point point-r" data-drag="right" @touchstart.stop="dragStart" @touchmove.stop="dragMove"></view> |
|||
<view class="uni-cropper-point point-rb" data-drag="rightBottom" @touchstart.stop="dragStart" @touchmove.stop="dragMove"></view> |
|||
<view class="uni-cropper-point point-b" data-drag="bottom" @touchstart.stop="dragStart" @touchmove.stop="dragMove" @touchend.stop="dragEnd"></view> |
|||
<view class="uni-cropper-point point-bl" data-drag="bottomLeft"></view> |
|||
<view class="uni-cropper-point point-l" data-drag="left" @touchstart.stop="dragStart" @touchmove.stop="dragMove"></view> |
|||
<view class="uni-cropper-point point-lt" data-drag="leftTop"></view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
<view class='cropper-config'> |
|||
<button type="primary reverse" @click="getImage" style='margin-top: 30rpx;'> 选择头像 </button> |
|||
<button type="warn" @click="getImageInfo" style='margin-top: 30rpx;'> 提交 </button> |
|||
</view> |
|||
<canvas canvas-id="myCanvas" :style="'position:absolute;border: 1px solid red; width:'+imageW+'px;height:'+imageH+'px;top:-9999px;left:-9999px;'"></canvas> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import config from '@/config' |
|||
import store from "@/store" |
|||
import { uploadAvatar } from "@/api/system/user" |
|||
|
|||
const baseUrl = config.baseUrl |
|||
let sysInfo = uni.getSystemInfoSync() |
|||
let SCREEN_WIDTH = sysInfo.screenWidth |
|||
let PAGE_X, // 手按下的x位置 |
|||
PAGE_Y, // 手按下y的位置 |
|||
PR = sysInfo.pixelRatio, // dpi |
|||
T_PAGE_X, // 手移动的时候x的位置 |
|||
T_PAGE_Y, // 手移动的时候Y的位置 |
|||
CUT_L, // 初始化拖拽元素的left值 |
|||
CUT_T, // 初始化拖拽元素的top值 |
|||
CUT_R, // 初始化拖拽元素的 |
|||
CUT_B, // 初始化拖拽元素的 |
|||
CUT_W, // 初始化拖拽元素的宽度 |
|||
CUT_H, // 初始化拖拽元素的高度 |
|||
IMG_RATIO, // 图片比例 |
|||
IMG_REAL_W, // 图片实际的宽度 |
|||
IMG_REAL_H, // 图片实际的高度 |
|||
DRAFG_MOVE_RATIO = 1, //移动时候的比例, |
|||
INIT_DRAG_POSITION = 100, // 初始化屏幕宽度和裁剪区域的宽度之差,用于设置初始化裁剪的宽度 |
|||
DRAW_IMAGE_W = sysInfo.screenWidth // 设置生成的图片宽度 |
|||
|
|||
export default { |
|||
/** |
|||
* 页面的初始数据 |
|||
*/ |
|||
data() { |
|||
return { |
|||
imageSrc: store.getters.avatar, |
|||
isShowImg: false, |
|||
// 初始化的宽高 |
|||
cropperInitW: SCREEN_WIDTH, |
|||
cropperInitH: SCREEN_WIDTH, |
|||
// 动态的宽高 |
|||
cropperW: SCREEN_WIDTH, |
|||
cropperH: SCREEN_WIDTH, |
|||
// 动态的left top值 |
|||
cropperL: 0, |
|||
cropperT: 0, |
|||
|
|||
transL: 0, |
|||
transT: 0, |
|||
|
|||
// 图片缩放值 |
|||
scaleP: 0, |
|||
imageW: 0, |
|||
imageH: 0, |
|||
|
|||
// 裁剪框 宽高 |
|||
cutL: 0, |
|||
cutT: 0, |
|||
cutB: SCREEN_WIDTH, |
|||
cutR: '100%', |
|||
qualityWidth: DRAW_IMAGE_W, |
|||
innerAspectRadio: DRAFG_MOVE_RATIO |
|||
} |
|||
}, |
|||
/** |
|||
* 生命周期函数--监听页面初次渲染完成 |
|||
*/ |
|||
onReady: function () { |
|||
this.loadImage() |
|||
}, |
|||
methods: { |
|||
setData: function (obj) { |
|||
let that = this |
|||
Object.keys(obj).forEach(function (key) { |
|||
that.$set(that.$data, key, obj[key]) |
|||
}) |
|||
}, |
|||
getImage: function () { |
|||
var _this = this |
|||
uni.chooseImage({ |
|||
success: function (res) { |
|||
_this.setData({ |
|||
imageSrc: res.tempFilePaths[0], |
|||
}) |
|||
_this.loadImage() |
|||
}, |
|||
}) |
|||
}, |
|||
loadImage: function () { |
|||
var _this = this |
|||
|
|||
uni.getImageInfo({ |
|||
src: _this.imageSrc, |
|||
success: function success(res) { |
|||
IMG_RATIO = 1 / 1 |
|||
if (IMG_RATIO >= 1) { |
|||
IMG_REAL_W = SCREEN_WIDTH |
|||
IMG_REAL_H = SCREEN_WIDTH / IMG_RATIO |
|||
} else { |
|||
IMG_REAL_W = SCREEN_WIDTH * IMG_RATIO |
|||
IMG_REAL_H = SCREEN_WIDTH |
|||
} |
|||
let minRange = IMG_REAL_W > IMG_REAL_H ? IMG_REAL_W : IMG_REAL_H |
|||
INIT_DRAG_POSITION = minRange > INIT_DRAG_POSITION ? INIT_DRAG_POSITION : minRange |
|||
// 根据图片的宽高显示不同的效果 保证图片可以正常显示 |
|||
if (IMG_RATIO >= 1) { |
|||
let cutT = Math.ceil((SCREEN_WIDTH / IMG_RATIO - (SCREEN_WIDTH / IMG_RATIO - INIT_DRAG_POSITION)) / 2) |
|||
let cutB = cutT |
|||
let cutL = Math.ceil((SCREEN_WIDTH - SCREEN_WIDTH + INIT_DRAG_POSITION) / 2) |
|||
let cutR = cutL |
|||
_this.setData({ |
|||
cropperW: SCREEN_WIDTH, |
|||
cropperH: SCREEN_WIDTH / IMG_RATIO, |
|||
// 初始化left right |
|||
cropperL: Math.ceil((SCREEN_WIDTH - SCREEN_WIDTH) / 2), |
|||
cropperT: Math.ceil((SCREEN_WIDTH - SCREEN_WIDTH / IMG_RATIO) / 2), |
|||
cutL: cutL, |
|||
cutT: cutT, |
|||
cutR: cutR, |
|||
cutB: cutB, |
|||
// 图片缩放值 |
|||
imageW: IMG_REAL_W, |
|||
imageH: IMG_REAL_H, |
|||
scaleP: IMG_REAL_W / SCREEN_WIDTH, |
|||
qualityWidth: DRAW_IMAGE_W, |
|||
innerAspectRadio: IMG_RATIO |
|||
}) |
|||
} else { |
|||
let cutL = Math.ceil((SCREEN_WIDTH * IMG_RATIO - (SCREEN_WIDTH * IMG_RATIO)) / 2) |
|||
let cutR = cutL |
|||
let cutT = Math.ceil((SCREEN_WIDTH - INIT_DRAG_POSITION) / 2) |
|||
let cutB = cutT |
|||
_this.setData({ |
|||
cropperW: SCREEN_WIDTH * IMG_RATIO, |
|||
cropperH: SCREEN_WIDTH, |
|||
// 初始化left right |
|||
cropperL: Math.ceil((SCREEN_WIDTH - SCREEN_WIDTH * IMG_RATIO) / 2), |
|||
cropperT: Math.ceil((SCREEN_WIDTH - SCREEN_WIDTH) / 2), |
|||
|
|||
cutL: cutL, |
|||
cutT: cutT, |
|||
cutR: cutR, |
|||
cutB: cutB, |
|||
// 图片缩放值 |
|||
imageW: IMG_REAL_W, |
|||
imageH: IMG_REAL_H, |
|||
scaleP: IMG_REAL_W / SCREEN_WIDTH, |
|||
qualityWidth: DRAW_IMAGE_W, |
|||
innerAspectRadio: IMG_RATIO |
|||
}) |
|||
} |
|||
_this.setData({ |
|||
isShowImg: true |
|||
}) |
|||
uni.hideLoading() |
|||
} |
|||
}) |
|||
}, |
|||
// 拖动时候触发的touchStart事件 |
|||
contentStartMove(e) { |
|||
PAGE_X = e.touches[0].pageX |
|||
PAGE_Y = e.touches[0].pageY |
|||
}, |
|||
|
|||
// 拖动时候触发的touchMove事件 |
|||
contentMoveing(e) { |
|||
var _this = this |
|||
var dragLengthX = (PAGE_X - e.touches[0].pageX) * DRAFG_MOVE_RATIO |
|||
var dragLengthY = (PAGE_Y - e.touches[0].pageY) * DRAFG_MOVE_RATIO |
|||
// 左移 |
|||
if (dragLengthX > 0) { |
|||
if (this.cutL - dragLengthX < 0) dragLengthX = this.cutL |
|||
} else { |
|||
if (this.cutR + dragLengthX < 0) dragLengthX = -this.cutR |
|||
} |
|||
|
|||
if (dragLengthY > 0) { |
|||
if (this.cutT - dragLengthY < 0) dragLengthY = this.cutT |
|||
} else { |
|||
if (this.cutB + dragLengthY < 0) dragLengthY = -this.cutB |
|||
} |
|||
this.setData({ |
|||
cutL: this.cutL - dragLengthX, |
|||
cutT: this.cutT - dragLengthY, |
|||
cutR: this.cutR + dragLengthX, |
|||
cutB: this.cutB + dragLengthY |
|||
}) |
|||
|
|||
PAGE_X = e.touches[0].pageX |
|||
PAGE_Y = e.touches[0].pageY |
|||
}, |
|||
|
|||
contentTouchEnd() { |
|||
|
|||
}, |
|||
|
|||
// 获取图片 |
|||
getImageInfo() { |
|||
var _this = this |
|||
uni.showLoading({ |
|||
title: '图片生成中...', |
|||
}) |
|||
// 将图片写入画布 |
|||
const ctx = uni.createCanvasContext('myCanvas') |
|||
ctx.drawImage(_this.imageSrc, 0, 0, IMG_REAL_W, IMG_REAL_H) |
|||
ctx.draw(true, () => { |
|||
// 获取画布要裁剪的位置和宽度 均为百分比 * 画布中图片的宽度 保证了在微信小程序中裁剪的图片模糊 位置不对的问题 canvasT = (_this.cutT / _this.cropperH) * (_this.imageH / pixelRatio) |
|||
var canvasW = ((_this.cropperW - _this.cutL - _this.cutR) / _this.cropperW) * IMG_REAL_W |
|||
var canvasH = ((_this.cropperH - _this.cutT - _this.cutB) / _this.cropperH) * IMG_REAL_H |
|||
var canvasL = (_this.cutL / _this.cropperW) * IMG_REAL_W |
|||
var canvasT = (_this.cutT / _this.cropperH) * IMG_REAL_H |
|||
uni.canvasToTempFilePath({ |
|||
x: canvasL, |
|||
y: canvasT, |
|||
width: canvasW, |
|||
height: canvasH, |
|||
destWidth: canvasW, |
|||
destHeight: canvasH, |
|||
quality: 0.5, |
|||
canvasId: 'myCanvas', |
|||
success: function (res) { |
|||
uni.hideLoading() |
|||
let data = {name: 'avatarfile', filePath: res.tempFilePath} |
|||
uploadAvatar(data).then(response => { |
|||
//store.commit('SET_AVATAR', response.imgUrl) |
|||
/*cloud*/ |
|||
store.commit('SET_AVATAR',baseUrl + response.imgUrl) |
|||
uni.showToast({ title: "修改成功", icon: 'success' }) |
|||
uni.$emit('refresh'); |
|||
uni.navigateBack(); |
|||
}) |
|||
} |
|||
}) |
|||
}) |
|||
}, |
|||
// 设置大小的时候触发的touchStart事件 |
|||
dragStart(e) { |
|||
T_PAGE_X = e.touches[0].pageX |
|||
T_PAGE_Y = e.touches[0].pageY |
|||
CUT_L = this.cutL |
|||
CUT_R = this.cutR |
|||
CUT_B = this.cutB |
|||
CUT_T = this.cutT |
|||
}, |
|||
|
|||
// 设置大小的时候触发的touchMove事件 |
|||
dragMove(e) { |
|||
var _this = this |
|||
var dragType = e.target.dataset.drag |
|||
switch (dragType) { |
|||
case 'right': |
|||
var dragLength = (T_PAGE_X - e.touches[0].pageX) * DRAFG_MOVE_RATIO |
|||
if (CUT_R + dragLength < 0) dragLength = -CUT_R |
|||
this.setData({ |
|||
cutR: CUT_R + dragLength |
|||
}) |
|||
break |
|||
case 'left': |
|||
var dragLength = (T_PAGE_X - e.touches[0].pageX) * DRAFG_MOVE_RATIO |
|||
if (CUT_L - dragLength < 0) dragLength = CUT_L |
|||
if ((CUT_L - dragLength) > (this.cropperW - this.cutR)) dragLength = CUT_L - (this.cropperW - this.cutR) |
|||
this.setData({ |
|||
cutL: CUT_L - dragLength |
|||
}) |
|||
break |
|||
case 'top': |
|||
var dragLength = (T_PAGE_Y - e.touches[0].pageY) * DRAFG_MOVE_RATIO |
|||
if (CUT_T - dragLength < 0) dragLength = CUT_T |
|||
if ((CUT_T - dragLength) > (this.cropperH - this.cutB)) dragLength = CUT_T - (this.cropperH - this.cutB) |
|||
this.setData({ |
|||
cutT: CUT_T - dragLength |
|||
}) |
|||
break |
|||
case 'bottom': |
|||
var dragLength = (T_PAGE_Y - e.touches[0].pageY) * DRAFG_MOVE_RATIO |
|||
if (CUT_B + dragLength < 0) dragLength = -CUT_B |
|||
this.setData({ |
|||
cutB: CUT_B + dragLength |
|||
}) |
|||
break |
|||
case 'rightBottom': |
|||
var dragLengthX = (T_PAGE_X - e.touches[0].pageX) * DRAFG_MOVE_RATIO |
|||
var dragLengthY = (T_PAGE_Y - e.touches[0].pageY) * DRAFG_MOVE_RATIO |
|||
|
|||
if (CUT_B + dragLengthY < 0) dragLengthY = -CUT_B |
|||
if (CUT_R + dragLengthX < 0) dragLengthX = -CUT_R |
|||
let cutB = CUT_B + dragLengthY |
|||
let cutR = CUT_R + dragLengthX |
|||
|
|||
this.setData({ |
|||
cutB: cutB, |
|||
cutR: cutR |
|||
}) |
|||
break |
|||
default: |
|||
break |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style> |
|||
/* pages/uni-cropper/index.wxss */ |
|||
|
|||
.uni-content-info { |
|||
/* position: fixed; |
|||
top: 0; |
|||
left: 0; |
|||
right: 0; |
|||
bottom: 0; |
|||
display: block; |
|||
align-items: center; |
|||
flex-direction: column; */ |
|||
} |
|||
|
|||
.cropper-config { |
|||
padding: 20rpx 40rpx; |
|||
} |
|||
|
|||
.cropper-content { |
|||
min-height: 750rpx; |
|||
width: 100%; |
|||
} |
|||
|
|||
.uni-corpper { |
|||
position: relative; |
|||
overflow: hidden; |
|||
-webkit-user-select: none; |
|||
-moz-user-select: none; |
|||
-ms-user-select: none; |
|||
user-select: none; |
|||
-webkit-tap-highlight-color: transparent; |
|||
-webkit-touch-callout: none; |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
.uni-corpper-content { |
|||
position: relative; |
|||
} |
|||
|
|||
.uni-corpper-content image { |
|||
display: block; |
|||
width: 100%; |
|||
min-width: 0 !important; |
|||
max-width: none !important; |
|||
height: 100%; |
|||
min-height: 0 !important; |
|||
max-height: none !important; |
|||
image-orientation: 0deg !important; |
|||
margin: 0 auto; |
|||
} |
|||
/* 移动图片效果 */ |
|||
|
|||
.uni-cropper-drag-box { |
|||
position: absolute; |
|||
top: 0; |
|||
right: 0; |
|||
bottom: 0; |
|||
left: 0; |
|||
cursor: move; |
|||
background: rgba(0, 0, 0, 0.6); |
|||
z-index: 1; |
|||
} |
|||
/* 内部的信息 */ |
|||
|
|||
.uni-corpper-crop-box { |
|||
position: absolute; |
|||
background: rgba(255, 255, 255, 0.3); |
|||
z-index: 2; |
|||
} |
|||
|
|||
.uni-corpper-crop-box .uni-cropper-view-box { |
|||
position: relative; |
|||
display: block; |
|||
width: 100%; |
|||
height: 100%; |
|||
overflow: visible; |
|||
outline: 1rpx solid #69f; |
|||
outline-color: rgba(102, 153, 255, .75) |
|||
} |
|||
/* 横向虚线 */ |
|||
|
|||
.uni-cropper-dashed-h { |
|||
position: absolute; |
|||
top: 33.33333333%; |
|||
left: 0; |
|||
width: 100%; |
|||
height: 33.33333333%; |
|||
border-top: 1rpx dashed rgba(255, 255, 255, 0.5); |
|||
border-bottom: 1rpx dashed rgba(255, 255, 255, 0.5); |
|||
} |
|||
/* 纵向虚线 */ |
|||
|
|||
.uni-cropper-dashed-v { |
|||
position: absolute; |
|||
left: 33.33333333%; |
|||
top: 0; |
|||
width: 33.33333333%; |
|||
height: 100%; |
|||
border-left: 1rpx dashed rgba(255, 255, 255, 0.5); |
|||
border-right: 1rpx dashed rgba(255, 255, 255, 0.5); |
|||
} |
|||
/* 四个方向的线 为了之后的拖动事件*/ |
|||
|
|||
.uni-cropper-line-t { |
|||
position: absolute; |
|||
display: block; |
|||
width: 100%; |
|||
background-color: #69f; |
|||
top: 0; |
|||
left: 0; |
|||
height: 1rpx; |
|||
opacity: 0.1; |
|||
cursor: n-resize; |
|||
} |
|||
|
|||
.uni-cropper-line-t::before { |
|||
content: ''; |
|||
position: absolute; |
|||
top: 50%; |
|||
right: 0rpx; |
|||
width: 100%; |
|||
-webkit-transform: translate3d(0, -50%, 0); |
|||
transform: translate3d(0, -50%, 0); |
|||
bottom: 0; |
|||
height: 41rpx; |
|||
background: transparent; |
|||
z-index: 11; |
|||
} |
|||
|
|||
.uni-cropper-line-r { |
|||
position: absolute; |
|||
display: block; |
|||
background-color: #69f; |
|||
top: 0; |
|||
right: 0rpx; |
|||
width: 1rpx; |
|||
opacity: 0.1; |
|||
height: 100%; |
|||
cursor: e-resize; |
|||
} |
|||
|
|||
.uni-cropper-line-r::before { |
|||
content: ''; |
|||
position: absolute; |
|||
top: 0; |
|||
left: 50%; |
|||
width: 41rpx; |
|||
-webkit-transform: translate3d(-50%, 0, 0); |
|||
transform: translate3d(-50%, 0, 0); |
|||
bottom: 0; |
|||
height: 100%; |
|||
background: transparent; |
|||
z-index: 11; |
|||
} |
|||
|
|||
.uni-cropper-line-b { |
|||
position: absolute; |
|||
display: block; |
|||
width: 100%; |
|||
background-color: #69f; |
|||
bottom: 0; |
|||
left: 0; |
|||
height: 1rpx; |
|||
opacity: 0.1; |
|||
cursor: s-resize; |
|||
} |
|||
|
|||
.uni-cropper-line-b::before { |
|||
content: ''; |
|||
position: absolute; |
|||
top: 50%; |
|||
right: 0rpx; |
|||
width: 100%; |
|||
-webkit-transform: translate3d(0, -50%, 0); |
|||
transform: translate3d(0, -50%, 0); |
|||
bottom: 0; |
|||
height: 41rpx; |
|||
background: transparent; |
|||
z-index: 11; |
|||
} |
|||
|
|||
.uni-cropper-line-l { |
|||
position: absolute; |
|||
display: block; |
|||
background-color: #69f; |
|||
top: 0; |
|||
left: 0; |
|||
width: 1rpx; |
|||
opacity: 0.1; |
|||
height: 100%; |
|||
cursor: w-resize; |
|||
} |
|||
|
|||
.uni-cropper-line-l::before { |
|||
content: ''; |
|||
position: absolute; |
|||
top: 0; |
|||
left: 50%; |
|||
width: 41rpx; |
|||
-webkit-transform: translate3d(-50%, 0, 0); |
|||
transform: translate3d(-50%, 0, 0); |
|||
bottom: 0; |
|||
height: 100%; |
|||
background: transparent; |
|||
z-index: 11; |
|||
} |
|||
|
|||
.uni-cropper-point { |
|||
width: 5rpx; |
|||
height: 5rpx; |
|||
background-color: #69f; |
|||
opacity: .75; |
|||
position: absolute; |
|||
z-index: 3; |
|||
} |
|||
|
|||
.point-t { |
|||
top: -3rpx; |
|||
left: 50%; |
|||
margin-left: -3rpx; |
|||
cursor: n-resize; |
|||
} |
|||
|
|||
.point-tr { |
|||
top: -3rpx; |
|||
left: 100%; |
|||
margin-left: -3rpx; |
|||
cursor: n-resize; |
|||
} |
|||
|
|||
.point-r { |
|||
top: 50%; |
|||
left: 100%; |
|||
margin-left: -3rpx; |
|||
margin-top: -3rpx; |
|||
cursor: n-resize; |
|||
} |
|||
|
|||
.point-rb { |
|||
left: 100%; |
|||
top: 100%; |
|||
-webkit-transform: translate3d(-50%, -50%, 0); |
|||
transform: translate3d(-50%, -50%, 0); |
|||
cursor: n-resize; |
|||
width: 36rpx; |
|||
height: 36rpx; |
|||
background-color: #69f; |
|||
position: absolute; |
|||
z-index: 1112; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.point-b { |
|||
left: 50%; |
|||
top: 100%; |
|||
margin-left: -3rpx; |
|||
margin-top: -3rpx; |
|||
cursor: n-resize; |
|||
} |
|||
|
|||
.point-bl { |
|||
left: 0%; |
|||
top: 100%; |
|||
margin-left: -3rpx; |
|||
margin-top: -3rpx; |
|||
cursor: n-resize; |
|||
} |
|||
|
|||
.point-l { |
|||
left: 0%; |
|||
top: 50%; |
|||
margin-left: -3rpx; |
|||
margin-top: -3rpx; |
|||
cursor: n-resize; |
|||
} |
|||
|
|||
.point-lt { |
|||
left: 0%; |
|||
top: 0%; |
|||
margin-left: -3rpx; |
|||
margin-top: -3rpx; |
|||
cursor: n-resize; |
|||
} |
|||
/* 裁剪框预览内容 */ |
|||
|
|||
.uni-cropper-viewer { |
|||
position: relative; |
|||
width: 100%; |
|||
height: 100%; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.uni-cropper-viewer image { |
|||
position: absolute; |
|||
z-index: 2; |
|||
} |
|||
</style> |
@ -1,109 +0,0 @@ |
|||
<template> |
|||
<view class="help-container"> |
|||
<view v-for="(item, findex) in list" :key="findex" :title="item.title" class="list-title"> |
|||
<view class="text-title"> |
|||
<view :class="item.icon"></view>{{ item.title }} |
|||
</view> |
|||
<view class="childList"> |
|||
<view v-for="(child, zindex) in item.childList" :key="zindex" class="question" hover-class="hover" |
|||
@click="handleText(child)"> |
|||
<view class="text-item">{{ child.title }}</view> |
|||
<view class="line" v-if="zindex !== item.childList.length - 1"></view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import { ref } from "vue"; |
|||
|
|||
const list =ref([{ |
|||
icon: 'iconfont icon-github', |
|||
title: '若依问题', |
|||
childList: [{ |
|||
title: '若依开源吗?', |
|||
content: '开源' |
|||
}, { |
|||
title: '若依可以商用吗?', |
|||
content: '可以' |
|||
}, { |
|||
title: '若依官网地址多少?', |
|||
content: 'http://ruoyi.vip' |
|||
}, { |
|||
title: '若依文档地址多少?', |
|||
content: 'http://doc.ruoyi.vip' |
|||
}] |
|||
}, |
|||
{ |
|||
icon: 'iconfont icon-help', |
|||
title: '其他问题', |
|||
childList: [{ |
|||
title: '如何退出登录?', |
|||
content: '请点击[我的] - [应用设置] - [退出登录]即可退出登录', |
|||
}, { |
|||
title: '如何修改用户头像?', |
|||
content: '请点击[我的] - [选择头像] - [点击提交]即可更换用户头像', |
|||
}, { |
|||
title: '如何修改登录密码?', |
|||
content: '请点击[我的] - [应用设置] - [修改密码]即可修改登录密码', |
|||
}] |
|||
} |
|||
]) |
|||
|
|||
function handleText(item) { |
|||
uni.navigateTo({ |
|||
url: `/pages/common/textview/index?title=${item.title}&content=${item.content}` |
|||
}); |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
page { |
|||
background-color: #f8f8f8; |
|||
} |
|||
|
|||
.help-container { |
|||
margin-bottom: 100rpx; |
|||
padding: 30rpx; |
|||
} |
|||
|
|||
.list-title { |
|||
margin-bottom: 30rpx; |
|||
} |
|||
|
|||
.childList { |
|||
background: #ffffff; |
|||
box-shadow: 0px 0px 10rpx rgba(193, 193, 193, 0.2); |
|||
border-radius: 16rpx; |
|||
margin-top: 10rpx; |
|||
} |
|||
|
|||
.line { |
|||
width: 100%; |
|||
height: 1rpx; |
|||
background-color: #F5F5F5; |
|||
} |
|||
|
|||
.text-title { |
|||
color: #303133; |
|||
font-size: 32rpx; |
|||
font-weight: bold; |
|||
margin-left: 10rpx; |
|||
|
|||
.iconfont { |
|||
font-size: 16px; |
|||
margin-right: 10rpx; |
|||
} |
|||
} |
|||
|
|||
.text-item { |
|||
font-size: 28rpx; |
|||
padding: 24rpx; |
|||
} |
|||
|
|||
.question { |
|||
color: #606266; |
|||
font-size: 28rpx; |
|||
} |
|||
</style> |
@ -1,223 +0,0 @@ |
|||
<template> |
|||
<view class="mine-container" :style="{height: `${windowHeight}px`}"> |
|||
<!--顶部个人信息栏--> |
|||
<view class="header-section"> |
|||
<view class="flex padding justify-between"> |
|||
<view class="flex align-center"> |
|||
<view v-if="!avatar" class="cu-avatar xl round bg-white"> |
|||
<view class="iconfont icon-people text-gray icon"></view> |
|||
</view> |
|||
<image v-if="avatar" @click="handleToAvatar" :src="avatar" class="cu-avatar xl round" |
|||
mode="widthFix"> |
|||
</image> |
|||
<view v-if="!name" @click="handleToLogin" class="login-tip"> |
|||
点击登录 |
|||
</view> |
|||
<view v-if="name" @click="handleToInfo" class="user-info"> |
|||
<view class="u_title"> |
|||
用户名:{{ name }} |
|||
</view> |
|||
</view> |
|||
</view> |
|||
<view @click="handleToInfo" class="flex align-center"> |
|||
<text>个人信息</text> |
|||
<view class="iconfont icon-right"></view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<view class="content-section"> |
|||
<view class="mine-actions grid col-4 text-center"> |
|||
<view class="action-item" @click="handleJiaoLiuQun"> |
|||
<view class="iconfont icon-friendfill text-pink icon"></view> |
|||
<text class="text">交流群</text> |
|||
</view> |
|||
<view class="action-item" @click="handleBuilding"> |
|||
<view class="iconfont icon-service text-blue icon"></view> |
|||
<text class="text">在线客服</text> |
|||
</view> |
|||
<view class="action-item" @click="handleBuilding"> |
|||
<view class="iconfont icon-community text-mauve icon"></view> |
|||
<text class="text">反馈社区</text> |
|||
</view> |
|||
<view class="action-item" @click="handleBuilding"> |
|||
<view class="iconfont icon-dianzan text-green icon"></view> |
|||
<text class="text">点赞我们</text> |
|||
</view> |
|||
</view> |
|||
|
|||
<view class="menu-list"> |
|||
<view class="list-cell list-cell-arrow" @click="handleToEditInfo"> |
|||
<view class="menu-item-box"> |
|||
<view class="iconfont icon-user menu-icon"></view> |
|||
<view>编辑资料</view> |
|||
</view> |
|||
</view> |
|||
<view class="list-cell list-cell-arrow" @click="handleHelp"> |
|||
<view class="menu-item-box"> |
|||
<view class="iconfont icon-help menu-icon"></view> |
|||
<view>常见问题</view> |
|||
</view> |
|||
</view> |
|||
<view class="list-cell list-cell-arrow" @click="handleAbout"> |
|||
<view class="menu-item-box"> |
|||
<view class="iconfont icon-aixin menu-icon"></view> |
|||
<view>关于我们</view> |
|||
</view> |
|||
</view> |
|||
<view class="list-cell list-cell-arrow" @click="handleToSetting"> |
|||
<view class="menu-item-box"> |
|||
<view class="iconfont icon-setting menu-icon"></view> |
|||
<view>应用设置</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import storage from '@/common/utils/storage' |
|||
|
|||
export default { |
|||
data() { |
|||
return { |
|||
name: this.$store.state.user.name, |
|||
// version: getApp().globalData.config.appInfo.version |
|||
} |
|||
}, |
|||
computed: { |
|||
avatar() { |
|||
return this.$store.state.user.avatar |
|||
}, |
|||
windowHeight() { |
|||
return uni.getSystemInfoSync().windowHeight - 50 |
|||
} |
|||
}, |
|||
methods: { |
|||
handleToInfo() { |
|||
uni.navigateTo({ |
|||
url: '/pages/mine/info/index' |
|||
}); |
|||
}, |
|||
handleToEditInfo() { |
|||
uni.navigateTo({ |
|||
url: '/pages/mine/info/edit' |
|||
}); |
|||
}, |
|||
handleToSetting() { |
|||
uni.navigateTo({ |
|||
url: '/pages/mine/setting/index' |
|||
}); |
|||
}, |
|||
handleToLogin() { |
|||
uni.reLaunch({ |
|||
url: '/pages/login' |
|||
}); |
|||
}, |
|||
handleToAvatar() { |
|||
uni.navigateTo({ |
|||
url: '/pages/mine/avatar/index' |
|||
}); |
|||
}, |
|||
handleLogout() { |
|||
this.$modal.confirm('确定注销并退出系统吗?').then(() => { |
|||
this.$store.dispatch('LogOut').then(() => { |
|||
uni.reLaunch('/pages/index') |
|||
}) |
|||
}) |
|||
}, |
|||
handleHelp() { |
|||
uni.navigateTo({ |
|||
url: '/pages/mine/help/index' |
|||
}); |
|||
}, |
|||
handleAbout() { |
|||
uni.navigateTo({ |
|||
url: '/pages/mine/about/index' |
|||
}); |
|||
}, |
|||
handleJiaoLiuQun() { |
|||
uni.showToast({ |
|||
title: 'QQ群:133713780', |
|||
mask: false, |
|||
icon: "none", |
|||
duration: 1000 |
|||
}); |
|||
}, |
|||
handleBuilding() { |
|||
uni.showToast({ |
|||
title: '模块建设中~', |
|||
mask: false, |
|||
icon: "none", |
|||
duration: 1000 |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
page { |
|||
background-color: #f5f6f7; |
|||
} |
|||
|
|||
.mine-container { |
|||
width: 100%; |
|||
height: 100%; |
|||
|
|||
|
|||
.header-section { |
|||
padding: 15px 15px 45px 15px; |
|||
background-color: #3c96f3; |
|||
color: white; |
|||
|
|||
.login-tip { |
|||
font-size: 18px; |
|||
margin-left: 10px; |
|||
} |
|||
|
|||
.cu-avatar { |
|||
border: 2px solid #eaeaea; |
|||
|
|||
.icon { |
|||
font-size: 40px; |
|||
} |
|||
} |
|||
|
|||
.user-info { |
|||
margin-left: 15px; |
|||
|
|||
.u_title { |
|||
font-size: 18px; |
|||
line-height: 30px; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.content-section { |
|||
position: relative; |
|||
top: -50px; |
|||
|
|||
.mine-actions { |
|||
margin: 15px 15px; |
|||
padding: 20px 0px; |
|||
border-radius: 8px; |
|||
background-color: white; |
|||
|
|||
.action-item { |
|||
.icon { |
|||
font-size: 28px; |
|||
} |
|||
|
|||
.text { |
|||
display: block; |
|||
font-size: 13px; |
|||
margin: 8px 0px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -1,131 +0,0 @@ |
|||
<template> |
|||
<view class="container"> |
|||
<view class="example"> |
|||
<uni-forms ref="form" :model="user" labelWidth="80px"> |
|||
<uni-forms-item label="用户昵称" name="nickName"> |
|||
<uni-easyinput v-model="user.nickName" placeholder="请输入昵称" /> |
|||
</uni-forms-item> |
|||
<uni-forms-item label="手机号码" name="phonenumber"> |
|||
<uni-easyinput v-model="user.phonenumber" placeholder="请输入手机号码" /> |
|||
</uni-forms-item> |
|||
<uni-forms-item label="邮箱" name="email"> |
|||
<uni-easyinput v-model="user.email" placeholder="请输入邮箱" /> |
|||
</uni-forms-item> |
|||
<uni-forms-item label="性别" name="sex" required> |
|||
<uni-data-checkbox v-model="user.sex" :localdata="sexs" /> |
|||
</uni-forms-item> |
|||
</uni-forms> |
|||
<button type="primary" @click="submit">提交</button> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { getUserProfile ,updateUserProfile} from "@/api/request" |
|||
|
|||
export default { |
|||
data() { |
|||
return { |
|||
user: { |
|||
nickName: "", |
|||
phonenumber: "", |
|||
email: "", |
|||
sex: "" |
|||
}, |
|||
sexs: [{ |
|||
text: '男', |
|||
value: "0" |
|||
}, { |
|||
text: '女', |
|||
value: "1" |
|||
}], |
|||
rules: { |
|||
nickName: { |
|||
rules: [{ |
|||
required: true, |
|||
errorMessage: '用户昵称不能为空' |
|||
}] |
|||
}, |
|||
phonenumber: { |
|||
rules: [{ |
|||
required: true, |
|||
errorMessage: '手机号码不能为空' |
|||
}, { |
|||
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, |
|||
errorMessage: '请输入正确的手机号码' |
|||
}] |
|||
}, |
|||
email: { |
|||
rules: [{ |
|||
required: true, |
|||
errorMessage: '邮箱地址不能为空' |
|||
}, { |
|||
format: 'email', |
|||
errorMessage: '请输入正确的邮箱地址' |
|||
}] |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
onLoad() { |
|||
// this.getUser() |
|||
}, |
|||
onReady() { |
|||
this.$refs.form.setRules(this.rules) |
|||
}, |
|||
methods: { |
|||
getUser() { |
|||
getUserProfile().then(response => { |
|||
this.user = response.data |
|||
}) |
|||
}, |
|||
submit(ref) { |
|||
this.$refs.form.validate().then(res => { |
|||
updateUserProfile(this.user).then(response => { |
|||
uni.showToast({ |
|||
title: '修改成功', |
|||
mask: false, |
|||
duration: 1000 |
|||
}); |
|||
uni.navigateBack(); |
|||
}) |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
page { |
|||
background-color: #ffffff; |
|||
} |
|||
|
|||
.example { |
|||
padding: 15px; |
|||
background-color: #fff; |
|||
} |
|||
|
|||
.segmented-control { |
|||
margin-bottom: 15px; |
|||
} |
|||
|
|||
.button-group { |
|||
margin-top: 15px; |
|||
display: flex; |
|||
justify-content: space-around; |
|||
} |
|||
|
|||
.form-item { |
|||
display: flex; |
|||
align-items: center; |
|||
flex: 1; |
|||
} |
|||
|
|||
.button { |
|||
display: flex; |
|||
align-items: center; |
|||
height: 35px; |
|||
line-height: 35px; |
|||
margin-left: 10px; |
|||
} |
|||
</style> |
@ -1,44 +0,0 @@ |
|||
<template> |
|||
<view class="container"> |
|||
<uni-list> |
|||
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'person-filled'}" title="昵称" :rightText="user.nickName" /> |
|||
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'phone-filled'}" title="手机号码" :rightText="user.phonenumber" /> |
|||
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'email-filled'}" title="邮箱" :rightText="user.email" /> |
|||
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'auth-filled'}" title="岗位" :rightText="postGroup" /> |
|||
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'staff-filled'}" title="角色" :rightText="roleGroup" /> |
|||
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'calendar-filled'}" title="创建日期" :rightText="user.createTime" /> |
|||
</uni-list> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { getUserProfile } from "@/api/request.js" |
|||
|
|||
export default { |
|||
data() { |
|||
return { |
|||
user: {}, |
|||
roleGroup: "", |
|||
postGroup: "" |
|||
} |
|||
}, |
|||
onLoad() { |
|||
this.getUser() |
|||
}, |
|||
methods: { |
|||
getUser() { |
|||
getUserProfile().then(response => { |
|||
this.user = response.data |
|||
this.roleGroup = response.roleGroup |
|||
this.postGroup = response.postGroup |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
page { |
|||
background-color: #ffffff; |
|||
} |
|||
</style> |
@ -1,91 +0,0 @@ |
|||
<template> |
|||
<view class="pwd-retrieve-container"> |
|||
<uni-forms ref="form" :value="user" labelWidth="80px"> |
|||
<uni-forms-item name="oldPassword" label="旧密码"> |
|||
<uni-easyinput type="password" v-model="user.oldPassword" placeholder="请输入旧密码" /> |
|||
</uni-forms-item> |
|||
<uni-forms-item name="newPassword" label="新密码"> |
|||
<uni-easyinput type="password" v-model="user.newPassword" placeholder="请输入新密码" /> |
|||
</uni-forms-item> |
|||
<uni-forms-item name="confirmPassword" label="确认密码"> |
|||
<uni-easyinput type="password" v-model="user.confirmPassword" placeholder="请确认新密码" /> |
|||
</uni-forms-item> |
|||
<button type="primary" @click="submit">提交</button> |
|||
</uni-forms> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { updateUserPwd } from "@/api/request" |
|||
|
|||
export default { |
|||
data() { |
|||
return { |
|||
user: { |
|||
oldPassword: undefined, |
|||
newPassword: undefined, |
|||
confirmPassword: undefined |
|||
}, |
|||
rules: { |
|||
oldPassword: { |
|||
rules: [{ |
|||
required: true, |
|||
errorMessage: '旧密码不能为空' |
|||
}] |
|||
}, |
|||
newPassword: { |
|||
rules: [{ |
|||
required: true, |
|||
errorMessage: '新密码不能为空', |
|||
}, |
|||
{ |
|||
minLength: 6, |
|||
maxLength: 20, |
|||
errorMessage: '长度在 6 到 20 个字符' |
|||
} |
|||
] |
|||
}, |
|||
confirmPassword: { |
|||
rules: [{ |
|||
required: true, |
|||
errorMessage: '确认密码不能为空' |
|||
}, { |
|||
validateFunction: (rule, value, data) => data.newPassword === value, |
|||
errorMessage: '两次输入的密码不一致' |
|||
} |
|||
] |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
onReady() { |
|||
this.$refs.form.setRules(this.rules) |
|||
}, |
|||
methods: { |
|||
submit() { |
|||
this.$refs.form.validate().then(res => { |
|||
updateUserPwd(this.user.oldPassword, this.user.newPassword).then(response => { |
|||
uni.showToast({ |
|||
title: '修改成功', |
|||
mask: false, |
|||
duration: 1000 |
|||
}); |
|||
uni.navigateBack(); |
|||
}) |
|||
|
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
page { |
|||
background-color: #ffffff; |
|||
} |
|||
|
|||
.pwd-retrieve-container { |
|||
padding-top: 36rpx; |
|||
padding: 15px; |
|||
} |
|||
</style> |
@ -1,105 +0,0 @@ |
|||
<template> |
|||
<view class="setting-container" :style="{height: `${windowHeight}px`}"> |
|||
<view class="menu-list"> |
|||
<view class="list-cell list-cell-arrow" @click="handleToPwd"> |
|||
<view class="menu-item-box"> |
|||
<view class="iconfont icon-password menu-icon"></view> |
|||
<view>修改密码</view> |
|||
</view> |
|||
</view> |
|||
<view class="list-cell list-cell-arrow" @click="handleToUpgrade"> |
|||
<view class="menu-item-box"> |
|||
<view class="iconfont icon-refresh menu-icon"></view> |
|||
<view>检查更新</view> |
|||
</view> |
|||
</view> |
|||
<view class="list-cell list-cell-arrow" @click="handleCleanTmp"> |
|||
<view class="menu-item-box"> |
|||
<view class="iconfont icon-clean menu-icon"></view> |
|||
<view>清理缓存</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
<view class="cu-list menu"> |
|||
<view class="cu-item item-box"> |
|||
<view class="content text-center" @click="handleLogout"> |
|||
<text class="text-black">退出登录</text> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
<view> |
|||
<uni-popup ref="popup" type="dialog"> |
|||
<uni-popup-dialog type="info" cancelText="关闭" confirmText="退出" |
|||
title="通知" content="确定注销并退出系统吗" |
|||
@confirm="dialogConfirm" |
|||
@close="dialogClose"> |
|||
</uni-popup-dialog> |
|||
</uni-popup> |
|||
</view> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import { ref } from "vue"; |
|||
import store from '@/store' |
|||
|
|||
const windowHeight=ref(uni.getSystemInfoSync().windowHeight) ; |
|||
const popup = ref(null); |
|||
|
|||
function handleToPwd() { |
|||
uni.navigateTo({ |
|||
url: '/pages/mine/pwd/index' |
|||
}); |
|||
}; |
|||
|
|||
function handleToUpgrade() { |
|||
uni.showToast({ |
|||
title: '模块建设中~', |
|||
mask: false, |
|||
icon:"none", |
|||
duration: 1000 |
|||
}); |
|||
}; |
|||
|
|||
function handleCleanTmp() { |
|||
uni.showToast({ |
|||
title: '模块建设中~', |
|||
mask: false, |
|||
icon:"none", |
|||
duration: 1000 |
|||
}); |
|||
}; |
|||
function handleLogout() { |
|||
popup.value.open(); |
|||
}; |
|||
function dialogConfirm() { |
|||
//console.log('----------------点击确认------------') |
|||
store.dispatch('LogOut').then(() => { |
|||
uni.reLaunch({ |
|||
url: '/pages/login' |
|||
}); |
|||
}) |
|||
}; |
|||
function dialogClose() { |
|||
//console.log('点击关闭') |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.page { |
|||
background-color: #f8f8f8; |
|||
} |
|||
|
|||
.item-box { |
|||
background-color: #FFFFFF; |
|||
margin: 30rpx; |
|||
display: flex; |
|||
flex-direction: row; |
|||
justify-content: center; |
|||
align-items: center; |
|||
padding: 10rpx; |
|||
border-radius: 8rpx; |
|||
color: #303133; |
|||
font-size: 32rpx; |
|||
} |
|||
</style> |
@ -1,338 +0,0 @@ |
|||
<template> |
|||
<!-- <page-meta root-font-size="18px"></page-meta> --> |
|||
<view class=""> |
|||
<com-blank-view @goScan='openScanPopup' v-if="locationCode==''"></com-blank-view> |
|||
<view class="top_card"> |
|||
<location-info :locationDetail='locationDetail' v-if="locationCode"></location-info> |
|||
</view> |
|||
|
|||
<view class="tabs" v-if="locationCode" style="height: 100%;"> |
|||
<u-line></u-line> |
|||
<scroll-view id="tab-bar" class="scroll-h" :scroll-x="true" :show-scrollbar="false"> |
|||
<view class="title_tab"> |
|||
<view v-for="(tab, index) in tabBars" :key="tab.id" class="uni-tab-item" :id="tab.id" |
|||
:data-current="index" @click="ontabtap"> |
|||
<text class="uni-tab-item-title" |
|||
:class="tabIndex == index ? 'uni-tab-item-title-active' : ''">{{ tab.name }}</text> |
|||
</view> |
|||
</view> |
|||
</scroll-view> |
|||
<scroll-view :scroll-top="scrollTop" scroll-y="true" @scrolltoupper="upper" @scrolltolower="lower" |
|||
@scroll="scroll"> |
|||
<view v-if="tabIndex == 0" v-for="(item, index) in summarysList"> |
|||
<comLocationDetailCard :isShowPack="false" :dataContent="item" style='margin: 10rpx;'> |
|||
</comLocationDetailCard> |
|||
</view> |
|||
</scroll-view> |
|||
<scroll-view :scroll-top="scrollTop" scroll-y="true" @scrolltoupper="upper" @scrolltolower="lower" |
|||
@scroll="scroll"> |
|||
<view v-if="tabIndex == 1" v-for="(item, index) in detailList"> |
|||
<comLocationDetailCard :dataContent="item" style='margin: 10rpx;'></comLocationDetailCard> |
|||
</view> |
|||
</scroll-view> |
|||
<!-- 预计入 --> |
|||
<scroll-view :scroll-top="scrollTop" scroll-y="true" @scrolltoupper="upper" @scrolltolower="lower" |
|||
@scroll="scroll"> |
|||
|
|||
<view v-if="tabIndex == 2" v-for="(item, index) in detailList"> |
|||
<comLocationDetailCard :dataContent="item" style='margin: 10rpx;'></comLocationDetailCard> |
|||
</view> |
|||
</scroll-view> |
|||
<!-- 预计出 --> |
|||
<scroll-view :scroll-top="scrollTop" scroll-y="true" @scrolltoupper="upper" @scrolltolower="lower" |
|||
@scroll="scroll"> |
|||
<view v-if="tabIndex == 3" v-for="(item, index) in detailList"> |
|||
<comLocationDetailCard :dataContent="item" style='margin: 10rpx;'></comLocationDetailCard> |
|||
</view> |
|||
</scroll-view> |
|||
</view> |
|||
<win-scan-button @goScan='openScanPopup' v-if="locationCode!=''"></win-scan-button> |
|||
<winScanLocationCode ref="scanPopup" title="库位代码" @getLocation='getScanCode'></winScanLocationCode> |
|||
|
|||
<show-modal ref="modal"></show-modal> |
|||
<comMessage ref="comMessage"></comMessage> |
|||
|
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { |
|||
getBalanceByLocationcodeGroup, |
|||
getBalanceByLocationcode, |
|||
} from '@/api/request.js'; |
|||
|
|||
import { |
|||
getBasicLocationByCode, |
|||
} from '@/api/request2.js'; |
|||
|
|||
import { |
|||
maxPageSize, |
|||
goHome |
|||
} from '@/common/basic.js'; |
|||
|
|||
import locationInfo from '@/mycomponents/location/locationInfo.vue' |
|||
import comBlankView from '@/mycomponents/common/comBlankView.vue' |
|||
import winScanButton from '@/mycomponents/scan/winScanButton.vue' |
|||
import comMessage from '@/mycomponents/common/comMessage.vue' |
|||
import comLocationDetailCard from '@/pages/query/coms/comLocationDetailCard.vue' |
|||
import winScanLocation from '@/mycomponents/scan/winScanLocation.vue' |
|||
|
|||
export default { |
|||
name: 'location', |
|||
components: { |
|||
locationInfo, |
|||
comBlankView, |
|||
winScanButton, |
|||
comMessage, |
|||
comLocationDetailCard, |
|||
winScanLocation |
|||
}, |
|||
data() { |
|||
return { |
|||
locationDetail: {}, |
|||
locationCode: '', |
|||
summarys: [], |
|||
balances: [], |
|||
dataIn: [], |
|||
dataOut: [], |
|||
// 每页数据量 |
|||
pageSize: 1000, |
|||
// 当前页 |
|||
pageCurrent: 1, |
|||
// 数据总量 |
|||
tabIndex: 0, |
|||
tabBars: [{ |
|||
name: '汇总', |
|||
id: 'huizong' |
|||
}, |
|||
{ |
|||
name: '明细', |
|||
id: 'mingxi' |
|||
}, |
|||
{ |
|||
name: '预计入', |
|||
id: 'in' |
|||
}, |
|||
{ |
|||
name: '预计出', |
|||
id: 'out' |
|||
} |
|||
], |
|||
scrollTop: 0, |
|||
old: { |
|||
scrollTop: 0 |
|||
}, |
|||
dataList: [{ |
|||
Name: "物料名称", |
|||
itemCode: "CEVINR", |
|||
uom: "件", |
|||
qty: 20, |
|||
|
|||
list: [{ |
|||
packingNumber: "1234", |
|||
Lot: "202123", |
|||
uom: "件", |
|||
qty: 10 |
|||
}, |
|||
{ |
|||
packingNumber: "1234", |
|||
Lot: "202123", |
|||
uom: "件", |
|||
qty: 10 |
|||
} |
|||
] |
|||
}, |
|||
{ |
|||
Name: "测试2", |
|||
itemCode: "CEVINR2", |
|||
uom: "件", |
|||
qty: 20, |
|||
list: [{ |
|||
packingNumber: "12342", |
|||
Lot: "2021232", |
|||
uom: "件", |
|||
qty: 10 |
|||
}, |
|||
{ |
|||
packingNumber: "12342", |
|||
Lot: "2021232", |
|||
uom: "件", |
|||
qty: 10 |
|||
} |
|||
] |
|||
} |
|||
], |
|||
testData: { |
|||
Name: "物料名称", |
|||
itemCode: "CEVINR", |
|||
uom: "件", |
|||
qty: 20, |
|||
|
|||
list: [{ |
|||
packingNumber: "1234", |
|||
Lot: "202123", |
|||
uom: "件", |
|||
qty: 10 |
|||
}, |
|||
{ |
|||
packingNumber: "1234", |
|||
Lot: "202123", |
|||
uom: "件", |
|||
qty: 10 |
|||
} |
|||
] |
|||
}, |
|||
detailList: [], |
|||
summarysList: [] |
|||
}; |
|||
}, |
|||
onLoad() {}, |
|||
onNavigationBarButtonTap(e) { |
|||
if (e.index === 0) { |
|||
goHome(); |
|||
} |
|||
}, |
|||
filters: { |
|||
|
|||
}, |
|||
mounted() { |
|||
this.openScanPopup() |
|||
}, |
|||
methods: { |
|||
openScanPopup() { |
|||
this.$refs.scanPopup.openScanPopup(); |
|||
}, |
|||
closeScanPopup() { |
|||
this.$refs.scanPopup.closeScanPopup(); |
|||
}, |
|||
getScanCode(location,code) { |
|||
this.locationCode = ''; |
|||
this.summarys = []; |
|||
this.balances = []; |
|||
this.locationCode = code; |
|||
this.locationDetail=location |
|||
this.getContentByTab(this.tabIndex); |
|||
}, |
|||
|
|||
getSummary() { |
|||
let that = this; |
|||
uni.showLoading({ |
|||
title: "加载中...", |
|||
mask: true |
|||
}); |
|||
getBalanceByLocationcodeGroup(this.locationCode).then(res => { |
|||
uni.hideLoading(); |
|||
if (res.data.total > 0) { |
|||
this.summarysList = this.setShowList(res.data.list) |
|||
} else { |
|||
this.showMessage('未查找到库位【' + this.locationCode + '】'); |
|||
} |
|||
}).catch(error => { |
|||
uni.hideLoading(); |
|||
this.showMessage(error); |
|||
}) |
|||
|
|||
}, |
|||
|
|||
getDetailList() { |
|||
let that = this; |
|||
uni.showLoading({ |
|||
title: "加载中...", |
|||
mask: true |
|||
}); |
|||
getBalanceByLocationcode(this.locationCode).then(res => { |
|||
uni.hideLoading(); |
|||
if (res.data.total > 0) { |
|||
this.detailList = this.setShowList(res.data.list) |
|||
} else { |
|||
this.showMessage('未查找到库位【' + this.locationCode + '】'); |
|||
} |
|||
}).catch(error => { |
|||
uni.hideLoading(); |
|||
this.showMessage(error); |
|||
}) |
|||
}, |
|||
|
|||
setShowList(list) { |
|||
var resultlist = []; |
|||
list.forEach(res => { |
|||
var temp = resultlist.find(res1 => |
|||
res1.itemCode == res.itemCode) |
|||
|
|||
if (temp == undefined) { |
|||
var data = { |
|||
itemCode: res.itemCode, |
|||
qty: res.qty, |
|||
uom: res.uom, |
|||
list: [] |
|||
} |
|||
var item = { |
|||
packingNumber: res.packingNumber, |
|||
batch: res.batch, |
|||
uom: res.uom, |
|||
qty: res.qty, |
|||
inventoryStatus: res.inventoryStatus, |
|||
} |
|||
data.list.push(item) |
|||
resultlist.push(data) |
|||
} else { |
|||
temp.qty += res.qty |
|||
var item = { |
|||
packingNumber: res.packingNumber, |
|||
batch: res.batch, |
|||
uom: res.uom, |
|||
qty: res.qty, |
|||
inventoryStatus: res.inventoryStatus, |
|||
} |
|||
temp.list.push(item) |
|||
} |
|||
}) |
|||
return resultlist; |
|||
}, |
|||
ontabtap(e) { |
|||
let index = e.target.dataset.current || e.currentTarget.dataset.current; |
|||
this.tabIndex = index; |
|||
this.getContentByTab(this.tabIndex); |
|||
}, |
|||
|
|||
getContentByTab(index) { |
|||
if (index === 0) { |
|||
this.getSummary(); |
|||
} else if (index === 1) this.getDetailList() |
|||
else if (index === 2) { |
|||
this.dataIn = this.balances; |
|||
} else if (index == 3) { |
|||
this.dataOut = this.balances; |
|||
} |
|||
}, |
|||
|
|||
upper: function(e) { |
|||
// console.log(e) |
|||
}, |
|||
lower: function(e) { |
|||
// console.log(e) |
|||
}, |
|||
scroll: function(e) { |
|||
// console.log(e) |
|||
this.old.scrollTop = e.detail.scrollTop; |
|||
}, |
|||
showMessage(message) { |
|||
this.$refs.comMessage.showWarningMessage(message, res => { |
|||
if (res) { |
|||
this.afterCloseMessage() |
|||
} |
|||
}); |
|||
}, |
|||
afterCloseMessage() { |
|||
this.$refs.scanPopup.getfocus(); |
|||
} |
|||
} |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="scss"> |
|||
page { |
|||
height: 100%; |
|||
} |
|||
</style> |
|||
|
Loading…
Reference in new issue