lcny-admin-mobile-vue/src/pages/crop/basics-crop.vue

237 lines
5.7 KiB
Vue

<template>
<view>
<Appbar title="基地农作物">
<template #right>
<view v-auth="['endpoint.crops.create']" class="text-white mr-20px" @click="handleCreate">新增</view>
</template>
</Appbar>
<u-sticky>
<view class="bg-white">
<SearchForm
:schemas="searchFormSchema"
@submit="handleSubmit"
></SearchForm>
</view>
</u-sticky>
<mescroll-body
@init="mescrollInit"
@up="upCallback"
:up="upOption"
:down="downOption"
>
<view>
<u-swipe-action
v-for="(item, i) in dataList"
:show="item.show"
:index="i"
:key="item.id"
class="my-20rpx mx-30rpx rounded-md overflow-hidden"
:options="options"
@click="handleClick"
@content-click="handleContentClick"
>
<view>
<view class="bg-white p-20rpx">
<view>名称:{{ item.name }} </view>
<view class="flex">
<view class="flex-1">单位:{{ item.unit }}</view>
<view class="flex-1"
>是否是结点:{{ item.is_end ? '是' : '否' }}</view
>
</view>
</view>
</view>
</u-swipe-action>
</view>
</mescroll-body>
<!-- 详情 -->
<BaseTablePopup
v-model="baseShow"
:colums="baseTableColums"
:data="currentData"
@onEdit="handleEdit"
@onDel="handleDel"
:editAuth="['endpoint.crops.edit']"
:delAuth="['endpoint.crops.destroy']"
>
</BaseTablePopup>
<!-- 编辑 -->
<cuPopup v-model="formShow" :title="currentData ? '编辑农作物' : '新增农作物'">
<BasicsEdit
@cancel="formShow = false"
@confirm="handleEditConfirm"
:data="currentData"
:crop_type="1"
></BasicsEdit>
</cuPopup>
</view>
</template>
<script>
import Appbar from '@/components/Appbar'
import SearchForm from '@/components/search-form'
import { http } from '@/api/index.js'
import MescrollMixin from '@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js'
import cuPopup from '@/components/cu-popup/index.vue'
import BaseTablePopup from '@/components/base-table/popup.vue'
import BasicsEdit from './components/basics-edit.vue'
import checkPermission from '@/utils/permission.js'
const baseTableColums = [
{
title: '名称',
dataIndex: 'name',
},
{
title: '单位',
dataIndex: 'unit',
},
{
title: '是否是结点',
dataIndex: 'is_end',
format: (text) => {
return text == 1 ? '是' : '否'
},
},
// {
// title: '',
// dataIndex: 'extends',
// },
]
export default {
mixins: [MescrollMixin],
components: {
SearchForm,
Appbar,
cuPopup,
BaseTablePopup,
BasicsEdit,
},
data() {
return {
baseTableColums,
currentData: null,
filterParmas: {},
downOption: {
use: false,
},
upOption: {
auto: false,
page: {
size: 20,
},
},
dataList: [],
formShow: false,
baseShow: false,
searchFormSchema: [
{
field: 'name',
label: '名称',
component: 'Input',
componentProps: {
placeholder: '请输入名称',
},
},
],
}
},
computed: {
options() {
return [
{
text: '编辑',
opt: 'edit',
permission: ['endpoint.crops.edit'],
style: {
backgroundColor: '#007aff',
},
},
{
text: '删除',
opt: 'delete',
permission: ['endpoint.crops.destroy'],
style: {
backgroundColor: '#dd524d',
},
},
].filter((e) => checkPermission(e.permission))
},
},
methods: {
handleSubmit(e) {
this.filterParmas = e
this.mescroll.resetUpScroll()
},
upCallback({ num, size }) {
this.getData({
...this.filterParmas,
page: num,
per_page: size,
type: 'all',
crop_type: 1,
})
},
async getData(e) {
try {
const { data } = await http.get(`/api/crops`, {
params: e,
})
if (e.page == 1) this.dataList = []
const { data: list, meta } = data
this.dataList = this.dataList.concat(
list.map((e) => Object.assign({ show: false }, e))
)
this.mescroll.endByPage(list.length, meta.total)
} catch (error) {
this.mescroll.endErr()
}
},
handleClick(index1, index) {
const { opt } = this.options[index]
const item = this.dataList[index1]
this.currentData = item
if (opt == 'edit') {
this.handleEdit(item)
} else if (opt == 'delete') {
this.handleDel(item)
}
},
handleContentClick(e) {
this.currentData = this.dataList[e]
this.baseShow = true
},
handleEdit(item) {
this.currentData = item
this.formShow = true
this.baseShow = false
},
async handleDel(item) {
uni.showModal({
title: '提示',
content: '是否确定删除?',
success: async (res) => {
if (res.confirm) {
try {
await this.$http.delete(`/api/crops/${item.id}`)
this.mescroll.resetUpScroll()
this.baseShow = false
} catch ({ data }) {
this.$u.toast(data.message)
}
}
},
})
},
async handleCreate() {
this.currentData = null
this.formShow = true
this.baseShow = false
},
handleEditConfirm() {
this.mescroll.resetUpScroll()
this.formShow = false
},
},
}
</script>