personnel_management_mobile/pages/demo/crud1.vue

442 lines
9.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="container">
<view class="safe-area-inset-bottom">
<rider-curd
v-model="form"
:option="option"
:data="list"
:rules="rules"
:readonly.sync="readonly"
formType="uniForm"
@search="onSearch"
@action-click="onActionClick"
@submit="onSubmit"
@del="onRemove"
ref="crud"
>
<template #form>
<view class="uni-form">
<view class="uni-form-item">
<view class="uni-form-item-label uni-form-item-required">通知标题</view>
<view class="uni-form-item-input">
<input
class="uni-input"
v-model="form.title"
placeholder="通知标题"
:placeholder-style="placeholderStyle"
:disabled="readonly"
/>
</view>
</view>
<view class="uni-form-item">
<view class="uni-form-item-label uni-form-item-required">通知类型</view>
<view class="uni-form-item-input">
<picker
@change="e => onConfirm(e, 'category')"
:range="categoryList"
range-key="dictValue"
class="curdPicker"
:disabled="readonly"
>
<input
class="uni-input"
v-model="formLabel.category"
disabled
placeholder="通知类型"
:placeholder-style="placeholderStyle"
/>
</picker>
</view>
<view class="uni-form-item-icon"><u-icon name="arrow-right" color="#999" size="28"></u-icon></view>
</view>
<view class="uni-form-item">
<view class="uni-form-item-label uni-form-item-required">通知日期</view>
<view class="uni-form-item-input">
<picker
@change="e => onConfirm(e, 'releaseTime')"
mode="date"
:value="form.releaseTime"
:start="startDate"
:end="endDate"
class="curdPicker"
:disabled="readonly"
>
<input
class="uni-input"
v-model="form.releaseTime"
disabled
placeholder="通知日期"
:placeholder-style="placeholderStyle"
/>
</picker>
</view>
<view class="uni-form-item-icon"><u-icon name="arrow-right" color="#999" size="28"></u-icon></view>
</view>
<view class="uni-form-item">
<view class="uni-form-item-label">通知内容</view>
<view v-if="!readonly" class="uni-form-item-btn" @click="onRichEdit(form.content)">去编辑</view>
</view>
<mp-html :content="form.content"></mp-html>
</view>
</template>
<template #loadmore>
<u-loadmore :status="loadStatus" @loadmore="getList()" />
</template>
</rider-curd>
</view>
</view>
</template>
<script>
import riderCurd from '@/components/rider-crud/index'
import mpHtml from '@/components/rider-crud/components/mp-html/mp-html'
import { getList, add, update, remove } from '@/api/notice.js'
import { dictionary } from '@/api/system/dict.js'
import { logo } from '../../common/setting'
import { getDicLabel } from '@/components/rider-crud/util/tool.js'
export default {
components: { riderCurd, mpHtml },
data() {
return {
form: {
content: ''
},
formLabel: {
category: '' ,
},
list: [],
params: {
current: 1,
size: 10
},
readonly: false, // 查看时控制表单只读
labelWidth: 160,
placeholderStyle: 'color:rgb(192, 196, 204); font-size:14px',
option: {
navTitle: 'CRUD 操作', //标题
manageBtn: true, // 右上角管理按钮,默认不显示
searchShow: true, //是否显示搜索,默认不显示
column: [
{
label: '通知标题',
prop: 'title'
},
{
label: '通知类型',
prop: 'categoryName'
},
{
label: '通知日期',
prop: 'releaseTime'
}
],
actions: [
{
name: '编辑', // 操作名称
icon: 'edit-pen', //操作图标,有图标文字不显示
color: '#333', // 字体颜色
fontsize: 30, //字体大小单位rpx
width: 40, // 宽度单位px
background: '#fff' // 菜单按钮背景色
},
{
name: '删除',
icon: 'trash',
color: '#333',
fontsize: 30,
width: 40,
background: '#fff'
}
]
},
rules: {
title: [{ required: true, message: '请输入通知标题', trigger: 'blur' }],
category: [{ required: true, message: '请选择通知类型', trigger: 'change', type: 'number' }],
releaseTime: [{ required: true, message: '请选择通知日期', trigger: 'change' }]
},
loadStatus: 'loadmore', // 列表加载状态
checkedSwitch: false,
timeShow: false,
timeParams: {
year: true,
month: true,
day: true,
hour: true,
minute: true,
second: true
},
categoryShow: false,
categoryList: [], //类型
category: '',
pagesTotal: 0
}
},
computed: {
startDate() {
return this.getDate('start')
},
endDate() {
return this.getDate('end')
}
},
onShow() {
let that = this
uni.$on('richBack', function(data) {
that.$set(that.form, 'content', data)
})
},
onReady() {
this.getList(true)
this.getCategoryList()
},
onPullDownRefresh() {
this.getList(true)
},
onReachBottom() {
if (this.loadStatus == 'nomore') return
this.getList()
},
methods: {
getDate(type) {
const date = new Date()
let year = date.getFullYear()
let month = date.getMonth() + 1
let day = date.getDate()
if (type === 'start') {
year = year - 60
} else {
year = year + 2
}
month = month > 9 ? month : '0' + month
day = day > 9 ? day : '0' + day
return `${year}-${month}-${day}`
},
// 获取列表
getList(override = false) {
if (override) {
this.params.current = 1
}
const { size } = this.params
getList(this.params)
.then(res => {
const { records, current } = res.data
if (records.length < size) this.loadStatus = 'nomore'
else this.loadStatus = 'loadmore'
if (override) {
this.list = records
} else {
this.list = this.list.concat(records)
}
this.params.current++
uni.stopPullDownRefresh()
})
.catch(err => {
uni.stopPullDownRefresh()
})
},
// 通知类型
getCategoryList() {
dictionary({ code: 'notice' }).then(res => {
this.categoryList = res.data
})
},
// picker确定
onConfirm(e, type) {
if (type == 'category') {
const i = this.categoryList[e.detail.value]
this.$set(this.formLabel, type, i.dictValue)
this.$set(this.form, type, Number(i.dictKey))
} else {
this.$set(this.form, type, `${e.detail.value} 12:00:00`)
}
},
// 编辑富文本
onRichEdit(e) {
uni.navigateTo({
url: `/pages/rich/index?data=${e}`
})
},
// 搜索 (自行配置搜索内容)
onSearch(val) {
this.params = {
current: 1,
size: 10,
title: val
}
this.getList(true)
},
// 左滑按钮点击
onActionClick({ index, data, action, done }) {
const { name } = action
switch (name) {
case '新增':
this.formLabel = { category: '' }
done()
break
case '删除':
this.onRemove(data.id)
break
case '查看':
this.readonly = true
case '编辑':
this.formLabel.category = getDicLabel(data.category, this.categoryList)
done()
break
}
},
// 删除
onRemove(id) {
uni.showModal({
title: '确定要删除吗?',
success: action => {
if (action.confirm) {
remove(id).then(() => {
uni.showToast({
title: '删除成功',
icon: 'none'
})
setTimeout(() => {
this.$refs['crud'].allCheckHide(false)
}, 100)
// #ifdef APP
this.getList(true)
// #endif
// #ifndef APP
uni.startPullDownRefresh({})
// #endif
})
}
}
})
},
// 表单提交
onSubmit(form, action, unloading, done) {
if (action == '新增') {
add(form)
.then(res => {
uni.showToast({
title: '新增成功',
icon: 'none'
})
this.formLabel = { category: '' }
done()
uni.startPullDownRefresh({})
})
.catch(() => {
unloading()
})
} else if (action == '编辑') {
update(form)
.then(res => {
uni.showToast({
title: '编辑成功',
icon: 'none'
})
this.formLabel = { category: '' }
done()
uni.startPullDownRefresh({})
})
.catch(() => {
unloading()
})
}
}
}
}
</script>
<style>
page {
background: #f6f6f6;
}
.uni-picker-container {
z-index: 99999 !important;
}
</style>
<style lang="scss" scoped>
.nav-right {
color: #fff;
font-size: 28rpx;
font-weight: normal;
padding-right: 24rpx;
}
.uni-form {
&-item {
position: relative;
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 0;
font-size: 14px;
color: #303133;
line-height: 70rpx;
box-sizing: border-box;
&-label {
width: 160rpx;
.required {
color: #fa3534;
vertical-align: middle;
}
}
&-required {
position: relative;
&:after {
content: '*';
position: absolute;
left: -8px;
color: #fa3534;
vertical-align: middle;
}
}
&-input {
flex: 1;
.uni-input {
font-size: 14px;
color: #303133;
}
}
&-btn {
color: #fff;
width: auto;
font-size: 22rpx;
line-height: 50rpx;
padding: 0 20rpx;
border-radius: 6rpx;
background: linear-gradient(rgb(95, 136, 255), rgb(105, 176, 255));
}
}
&-item:after {
content: ' ';
border-bottom-width: 2rpx;
position: absolute;
left: 0;
top: 0;
pointer-events: none;
box-sizing: border-box;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
width: 199.8%;
height: 199.7%;
-webkit-transform: scale(0.5, 0.5);
transform: scale(0.5, 0.5);
border: 0 solid #e4e7ed;
z-index: 2;
}
&-item:after {
border-bottom-width: 2rpx;
}
}
</style>