237 lines
5.7 KiB
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>
|