<script lang="ts" setup> import { showConfirmDialog, showToast } from 'vant'; import { onMounted, ref } from 'vue' import { deleteAction, getAction, postAction, putAction } from '../../common/http'; const showPop = ref(false) const list = ref([] as any[]) const form = ref({} as any) const processList = ref([] as any[]) onMounted(() => { init() getAction('/process').then((res : any) => { if (res.code === 200) { processList.value = res.data.map((l : any) => ({ text: l.name, value: l.id })) } }) }) const init = () => { getAction('/craftFlows').then((res : any) => { if (res.code === 200) { list.value = res.data } }) } const onClickLeft = () => { history.back() } const onClickRight = () => { form.value = {processes: [{necessary:true}]} showPop.value = true } const edit = (item : any) => { form.value=JSON.parse(JSON.stringify(item)) showPop.value = true } const onSubmit = () => { if (form.value.id) { putAction('/craftFlows', form.value).then((res : any) => { if (res.code === 200) { init() showPop.value = false showToast('提交成功!') } }) } else { postAction('/craftFlows', form.value).then((res : any) => { if (res.code === 200) { init() showPop.value = false showToast('提交成功!') } }) } } const del = (item : any) => { showConfirmDialog({ title: '提示', message: '是否确认删除?', }).then(() => { let url = '/craftFlows/' + item.id deleteAction(url).then((res : any) => { if (res.code === 200) { init() showToast('删除成功!') } }) }) .catch(() => { // on cancel }); } const showPicker = ref(false) const indexType = ref() const popuList = ref([]) //选择框事件 const choosePic = (index : any) => { showPicker.value = true indexType.value = index } //选择框确认 const pickerConfirm = (val : any) => { form.value.processes[indexType.value].id = val.selectedOptions[0].value form.value.processes[indexType.value].name = val.selectedOptions[0].text showPickerCancel() } //取消 const showPickerCancel = () => { showPicker.value = false } //弹窗开启事件 const handleOpen = () => { popuList.value = processList.value } </script> <template> <view class="flex"> <van-nav-bar title="工艺流程维护" left-text="返回" left-arrow right-text="新增" @click-left="onClickLeft" @click-right="onClickRight" /> <view class="content"> <view class="grid-container"> <view class="grid-item">工艺流程名称</view> <view class="grid-item">操作</view> </view> <view class="grid-container" v-for="(item,index) in list" :key="index"> <view class="grid-item">{{item.name}}</view> <view class="grid-item"><span style="color: #35a5f7" @click="edit(item)">编辑</span> <span style="color: red" @click="del(item)">删除 </span></view> </view> </view> </view> <van-popup v-model:show="showPop" style="width: 90%" round> <view> <h3 style="text-align: center">{{form.id?'编辑工艺流程':'新增工艺流程'}}</h3> <van-form @submit="onSubmit"> <van-cell-group inset> <van-field v-model="form.name" name="工艺流程名称" label="工艺流程名称" colon label-width="7em" :rules="[{ required: true, message: '请填写' }]" /> <van-field name="工序流程类型" label="工序流程类型" colon label-width="7em" class="b-a" :rules="[{ required: true, message: '请填写' }]"> <template #input> <van-radio-group v-model="form.type" direction="horizontal"> <van-radio name="常规">常规</van-radio> <van-radio name="回修">回修</van-radio> </van-radio-group> </template> </van-field> <p>请选择对应工序</p> <view v-for="(item,index) in form.processes" :key="index" class="a-b"> <van-icon name="add" color="red" size="25" v-if="index===0" @click="form.processes.push({necessary:true})" /> <van-icon name="clear" color="red" size="25" v-if="index!=0" @click="form.processes.splice(index,1)" /> <van-field v-model="item.name" name="工序" label="工序" label-align="right" readonly colon label-width="2.5em" class="bor" @click="choosePic(index)" :rules="[{ required: true, message: '请填写' }]"> </van-field> <van-checkbox v-model="item.necessary" :name="false" style="margin-left: 15rpx;">不可跳过</van-checkbox> </view> </van-cell-group> <view class="a-c"> <van-button type="danger" @click="showPop=false">取消</van-button> <van-button type="primary" native-type="submit">确认</van-button> </view> </van-form> </view> </van-popup> <!--选择框--> <van-popup v-model:show="showPicker" round position="bottom" @open="handleOpen"> <van-picker show-toolbar :columns="popuList" @confirm="pickerConfirm" @cancel="showPickerCancel" ref="pickerRef" /> </van-popup> </template> <style scoped lang="scss"> .flex { display: flex; flex-direction: column; height: 100vh; width: 100vw; .van-nav-bar { width: 100%; } .content { flex: 1; padding: 0 20rpx; .grid-container { display: grid; grid-template-columns: 3fr 1.5fr; .grid-item { border: 1rpx solid #f2f2f2; text-align: center; ::v-deep(.van-cell) { padding: 0 10rpx; } } } .card { margin: 20rpx 30rpx; padding: 10rpx; border: 1rpx solid #02a7f0; border-radius: 20rpx; } } } .a-b { display: flex; align-items: center; ::v-deep .van-cell { padding: 0; } } ::v-deep .van-field { font-size: 16px; } ::v-deep .van-field__control { border-bottom: 1rpx solid #d7d7d7; text-align: center; font-size: 16px; } ::v-deep .van-field__label { text-align: end !important; } .b-a { ::v-deep .van-field__control { border-bottom: none; } } .a-b { display: flex; align-items: center; padding: 10rpx 0; ::v-deep .van-field__control { border: 1rpx solid #d7d7d7; text-align: center; } ::v-deep .van-field { width: 62% !important; } } .a-c { display: flex; align-items: center; justify-content: space-around; margin: 30rpx; ::v-deep .van-button--normal { padding: 0 30rpx !important; height: 60rpx; } } </style>