Zlpt_Portal/src/views/user/goodsManagement/index.vue

599 lines
21 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.

<script setup lang="ts">
import TableComponent from 'components/TableComponent/index.vue'
import FormComponent from 'components/FormComponent/index.vue'
import PagingComponent from 'components/PagingComponent/index.vue'
import uploadComponent from 'components/uploadComponent/index.vue'
import { ElMessage } from 'element-plus'
import { ref } from 'vue'
import { useStore } from 'store/user'
const store = useStore()
import {
equipmentDeploymentApi,
getEquipmentListApi,
deleteGoodstApi
} from 'http/api/usercenter/goodsmang'
// 注册地址拼装
const AssemblyRegisterAddress: any = reactive([])
const deviceType: any = reactive([])
onMounted(() => {
// 获取省级数据
store.getprovinceList()
// 获取设备类型
store.getDeviceTypeList()
})
// 省级数据源
const selProvinceList: any = computed(() => {
return store.provinceList
})
// 获取市级数据源
const selMarketList: any = computed(() => {
return store.marketList
})
// 获取区级数据源
const selAreaList: any = computed(() => {
return store.areaList
})
// 设备类型大类
const selDeviceTypeList: any = computed(() => {
return store.deviceTypeList
})
// 设备类型子类
const selDeviceTypeSonList: any = computed(() => {
return store.deviceTypeSonList
})
// 设备类型小类
const selDeviceTypeSunList: any = computed(() => {
return store.deviceTypeSunList
})
// 省级下拉框选中时获取市级
const changeProvince = (val: any) => {
// console.log(val, '省选择**')
store.getmarketList(val.split(',')[0])
AssemblyRegisterAddress[0] = val.split(',')[1]
}
// 市级下拉框选中获取区级数据
const changeMarket = (val: any) => {
store.getareaList(val.split(',')[0])
AssemblyRegisterAddress[1] = val.split(',')[1]
}
// 区级下拉框获取区级数据
const opeChangeArea = (val: any) => {
AssemblyRegisterAddress[2] = val.split(',')[1]
}
// 设备类型大类
const changeDeviceType = (val: any) => {
store.getDeviceTypeSonList(val.split(',')[0])
deviceType[0] = val.split(',')[1]
}
// 设备类型子类
const changeDeviceTypeSon = (val: any) => {
store.getDeviceTypeSunList(val.split(',')[0])
deviceType[1] = val.split(',')[1]
}
// 设备类型小类
const changeDeviceTypeSun = (val: any) => {
deviceType[2] = val.split(',')[1]
}
/*
* 商品入驻弹框参数
*/
const equipmentDeploymentParams: any = ref({
/* 租赁范围 */
leaseScope: '',
/* 设备所在地 */
location: '',
/* 设备所在地 省 */
addressEconomize: '',
/* 设备所在地 市 */
addressProvince: '',
/* 设备所在地 区 */
addressArea: '',
/* 设备类型 */
typeId: '',
/* 设备类型大类 */
deviceType: '',
/* 设备类型子类 */
deviceTypeSon: '',
/* 设备类型小类*/
deviceTypeSun: '',
/* 设备品牌 */
brand: '',
/* 设备型号 */
modelName: '',
/* 出场日期 */
productionDate: '',
/* 工作小时数 */
workingHours: '',
/* 整机序列号 */
serialNumber: '',
/* 月租金 */
monthLeasePrice: '',
/* 日租金 */
dayLeasePrice: '',
/* 是否提供机手 */
isOperator: '',
/* 机手月费用 */
jsMonthPrice: '',
/* 机手日费用 */
jsDayPrice: '',
/* 详细说明 */
description: '',
/* 设备图片 */
picUrl: '',
/* 检测信息 ,保险信息*/
fileList: [
/* 检测信息 */
{
id: '28',
url: 'https://zlpt-1259760603.cos.ap-nanjing.myqcloud.com/488bab245180ebf9f1f3d7db5301be4.png'
},
/* 保险信息 */
{
id: '29',
utr: 'https://zlpt-1259760603.cos.ap-nanjing.myqcloud.com/488bab245180ebf9f1f3d7db5301be4.png'
},
/* 设备图片 */
{
id: '20',
utr: 'https://zlpt-1259760603.cos.ap-nanjing.myqcloud.com/488bab245180ebf9f1f3d7db5301be4.png'
}
],
/* 设备状态 */
maStatus: 15
})
const pageSize = 20
const pageNumber = 1
const total: any = ref(0)
const tableData: any = ref([])
// 获取数据列表
const getList = async () => {
const res: any = await getEquipmentListApi({})
console.log('商品管理99999', res)
total.value = res.total
tableData.value = res.rows.filter((item: any) => item !== null)
}
getList()
// 选择复选框时获取需要删除的数据源
const getRowId = (val: any) => {
console.log(val, '需要删除的数据源**')
}
// 编辑按钮
const editRowInfo = (row: any) => {
console.log(row, '编辑当前数据')
equipmentDeploymentParams.value = row
dialogFormVisibleSettlein.value = true
}
// 删除按钮
const deleteRowInfo = async (row: any) => {
const res: any = await deleteGoodstApi([row.maId])
if (res.code === 200) {
ElMessage({
type: 'success',
message: '删除成功'
})
getList()
}
}
// 装备入驻按钮
const equipmentDeployment = () => {
equipmentDeploymentParams.value = {
/* 租赁范围 */
leaseScope: '',
/* 设备所在地 */
location: '',
/* 设备所在地 省 */
addressEconomize: '',
/* 设备所在地 市 */
addressProvince: '',
/* 设备所在地 区 */
addressArea: '',
/* 设备类型 */
typeId: '',
/* 设备类型大类 */
deviceType: '',
/* 设备类型子类 */
deviceTypeSon: '',
/* 设备类型小类*/
deviceTypeSun: '',
/* 设备品牌 */
brand: '',
/* 设备型号 */
modelName: '',
/* 出场日期 */
productionDate: '',
/* 工作小时数 */
workingHours: '',
/* 整机序列号 */
serialNumber: '',
/* 月租金 */
monthLeasePrice: '',
/* 日租金 */
dayLeasePrice: '',
/* 是否提供机手 */
isOperator: '',
/* 机手月费用 */
jsMonthPrice: '',
/* 机手日费用 */
jsDayPrice: '',
/* 详细说明 */
description: '',
/* 设备图片 */
picUrl: '',
/* 检测信息 ,保险信息*/
fileList: [
/* 检测信息 */
{
id: '28',
url: 'https://zlpt-1259760603.cos.ap-nanjing.myqcloud.com/488bab245180ebf9f1f3d7db5301be4.png'
},
/* 保险信息 */
{
id: '29',
utr: 'https://zlpt-1259760603.cos.ap-nanjing.myqcloud.com/488bab245180ebf9f1f3d7db5301be4.png'
},
/* 设备图片 */
{
id: '20',
utr: 'https://zlpt-1259760603.cos.ap-nanjing.myqcloud.com/DemoData/10/655f1724956e0b38bf6adb6087123f7e_b.jpg'
}
],
/* 设备状态 */
maStatus: 15
}
// 打开入驻弹框
dialogFormVisibleSettlein.value = true
}
const ruleFormRef = ref()
// 入驻框保存提交
const submitBtn = async () => {
console.log(AssemblyRegisterAddress, '地址***---***')
// equipmentDeploymentParams.value.location = AssemblyRegisterAddress.join(',')
// equipmentDeploymentParams.typeId = deviceType.join(',')
const res: any = await equipmentDeploymentApi(equipmentDeploymentParams.value)
if (res.code === 200) {
ElMessage({
type: 'success',
message: '入驻成功'
})
dialogFormVisibleSettlein.value = false
getList()
}
/* ruleFormRef.value.validate((valid: any) => {
console.log(valid)
}) */
}
const tableProps: any = ref([
{ v_label: '编码', v_props: 'code', v_slot: '', width: '' },
{ v_label: '租赁范围', v_props: 'leaseScope', v_slot: '', width: '' },
{ v_label: '装备类型', v_props: 'modelName', v_slot: '', width: '' },
{ v_label: '装备名称', v_props: 'v_equipment_name', v_slot: '', width: '' },
{ v_label: '租金', v_props: 'monthLeasePrice', v_slot: '', width: '' },
{ v_label: '状态', v_props: 'maStatus', v_slot: 'v_type', width: '' },
{ v_label: '操作', v_props: 'v_operate', v_slot: 'operate', width: '140px' }
])
// 表单 lable 数据
const formItemList: any = ref([
{ v_label: '编码', v_typ: 'ipt' },
{ v_label: '状态', v_typ: 'ipt' },
{ v_label: '租赁范围', v_typ: 'sel' },
{ v_label: '装备类型', v_typ: 'sel' },
{ v_label: '装备名称', v_typ: 'ipt' }
])
// 装备入驻弹框显示隐藏
const dialogFormVisibleSettlein: any = ref(false)
const rules = ref({
v_name: [
{
required: true,
message: '必填项',
trigger: 'blur'
},
{ min: 3, max: 5, message: 'Length should be 3 to 5', trigger: 'blur' }
],
v_region: [
{
required: true,
message: '必填项',
trigger: 'blur'
}
]
})
</script>
<template>
<!-- 商品管理 -->
<FormComponent :formItemList="formItemList">
<el-form-item>
<el-button type="primary" @click="equipmentDeployment">装备入驻</el-button>
</el-form-item>
</FormComponent>
<!-- 表格 -->
<TableComponent :tableProps="tableProps" :tableData="tableData" @getRowId="getRowId">
<template v-slot:v_type="{ row }">
<el-tag v-if="row.maStatus === '15'" size="small" type="info">待上架审批</el-tag>
<el-tag v-if="row.maStatus === '16'" size="small" type="warning">待租</el-tag>
<el-tag v-if="row.maStatus === '17'" size="small" type="success">在租</el-tag>
<el-tag v-if="row.maStatus === '18'" size="small" type="danger">下架</el-tag>
</template>
<template v-slot:operate="{ row }">
<el-button size="small" type="primary" @click="editRowInfo(row)">编辑</el-button>
<el-button size="small" type="danger" @click="deleteRowInfo(row)">删除</el-button>
</template>
</TableComponent>
<!-- 分页 -->
<PagingComponent
@getList="getList"
:pageSize="pageSize"
:pageNumber="pageNumber"
:total="total" />
<!-- 装备入驻弹框 -->
<el-dialog v-model="dialogFormVisibleSettlein" title="装备入驻" width="60%" align-center>
<el-form
label-width="160"
ref="ruleFormRef"
:model="equipmentDeploymentParams"
:rules="rules">
<el-form-item label="租赁范围" prop="easeScope">
<el-input
autocomplete="off"
style="width: 360px"
v-model="equipmentDeploymentParams.leaseScope"
clearable />
</el-form-item>
<el-form-item label="设备所在地">
<el-select
v-model="equipmentDeploymentParams.addressEconomize"
placeholder="选择省"
style="width: 220px; margin: 0 5px"
@change="changeProvince"
clearable>
<el-option
v-for="item in selProvinceList"
:key="item.id"
:label="item.name"
:value="item.code + ',' + item.name"></el-option>
</el-select>
<el-select
v-model="equipmentDeploymentParams.addressProvince"
placeholder="选择市"
style="width: 220px; margin: 0 5px"
@change="changeMarket"
clearable>
<el-option
v-for="item in selMarketList"
:key="item.id"
:label="item.name"
:value="item.code + ',' + item.name"></el-option>
</el-select>
<el-select
v-model="equipmentDeploymentParams.location"
placeholder="选择区"
style="width: 220px; margin: 0 5px"
clearable
@change="opeChangeArea">
<el-option
v-for="item in selAreaList"
:key="item.id"
:label="item.name"
:value="item.code"></el-option>
</el-select>
</el-form-item>
<el-form-item label="设备类型">
<el-select
v-model="equipmentDeploymentParams.deviceType"
placeholder="选择设备类型"
style="width: 220px; margin: 0 5px"
clearable
@change="changeDeviceType">
<el-option
v-for="item in selDeviceTypeList"
:key="item.typeId"
:label="item.typeName"
:value="item.typeId + ',' + item.typeName"></el-option>
</el-select>
<el-select
placeholder="选择组别"
style="width: 220px; margin: 0 5px"
clearable
@change="changeDeviceTypeSon"
v-model="equipmentDeploymentParams.deviceTypeSon">
<el-option
v-for="item in selDeviceTypeSonList"
:key="item.typeId"
:label="item.typeName"
:value="item.typeId + ',' + item.typeName"></el-option>
</el-select>
<el-select
placeholder="选择产品名称"
style="width: 220px; margin: 0 5px"
clearable
@change="changeDeviceTypeSun"
v-model="equipmentDeploymentParams.typeId">
<el-option
v-for="item in selDeviceTypeSunList"
:key="item.typeId"
:label="item.typeName"
:value="item.typeId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="设备品牌" prop="brand">
<el-input
autocomplete="off"
style="width: 360px"
v-model="equipmentDeploymentParams.brand"
clearable />
</el-form-item>
<el-form-item label="设备型号">
<el-input
v-model="equipmentDeploymentParams.modelName"
autocomplete="off"
style="width: 360px"
clearable />
</el-form-item>
<el-form-item label="出厂日期">
<el-input
v-model="equipmentDeploymentParams.productionDate"
autocomplete="off"
style="width: 360px"
clearable />
</el-form-item>
<el-form-item label="工作小时数">
<el-input
v-model="equipmentDeploymentParams.workingHours"
autocomplete="off"
style="width: 360px; margin-right: 5px"
clearable />
小时
</el-form-item>
<el-form-item label="整机序列号">
<el-input
v-model="equipmentDeploymentParams.serialNumber"
autocomplete="off"
style="width: 360px"
clearable />
</el-form-item>
<el-form-item label="月租金">
<el-input
v-model="equipmentDeploymentParams.monthLeasePrice"
autocomplete="off"
style="width: 360px; margin-right: 5px"
clearable />
元/月
</el-form-item>
<el-form-item label="日租金">
<el-input
v-model="equipmentDeploymentParams.dayLeasePrice"
autocomplete="off"
style="width: 360px; margin-right: 5px"
clearable />
元/天
</el-form-item>
<el-form-item label="检测信息">
<uploadComponent
:maxLimit="3"
listType="picture-card"
:acceptTypeList="['.jpg', '.jpeg', '.png']"
width="120px"
height="120px">
<template v-slot:default>
<el-icon size="48" color="#aaa"><Plus /></el-icon>
</template>
</uploadComponent>
</el-form-item>
<el-form-item label="保险信息">
<uploadComponent
:maxLimit="3"
listType="picture-card"
:acceptTypeList="['.jpg', '.jpeg', '.png']"
width="120px"
height="120px">
<template v-slot:default>
<el-icon size="48" color="#aaa"><Plus /></el-icon>
</template>
</uploadComponent>
</el-form-item>
<el-form-item label="是否提供机手">
<el-select
placeholder="选择是否提供机手"
style="width: 220px; margin: 0 5px"
clearable
v-model="equipmentDeploymentParams.isOperator">
<el-option label="是" value="0"></el-option>
<el-option label="否" value="1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="机手月费用">
<el-input
v-model="equipmentDeploymentParams.jsMonthPrice"
autocomplete="off"
style="width: 360px; margin-right: 5px"
clearable />
元/月
</el-form-item>
<el-form-item label="机手日费用">
<el-input
v-model="equipmentDeploymentParams.jsDayPrice"
autocomplete="off"
style="width: 360px; margin-right: 5px"
clearable />
元/天
</el-form-item>
<el-form-item label="详细说明">
<el-input
v-model="equipmentDeploymentParams.description"
autocomplete="off"
style="width: 360px; margin-right: 5px"
clearable
type="textarea"
:rows="5" />
元/天
</el-form-item>
<el-form-item label="设备图片">
<uploadComponent
:maxLimit="3"
listType="picture-card"
:acceptTypeList="['.jpg', '.jpeg', '.png']"
width="120px"
height="120px">
<template v-slot:default>
<el-icon size="48" color="#aaa"><Plus /></el-icon>
</template>
</uploadComponent>
至少一张,最多八张
设备图片格式为jpg、png、和gif文件不得超过5M否则将无法上传。请从前后左右四个方向以及从主要工作部件内部结构等方面展示设备
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button type="primary" @click="dialogFormVisibleSettlein = false">
关 闭
</el-button>
<el-button @click="submitBtn"> </el-button>
</span>
</template>
</el-dialog>
</template>
<style>
.el-form {
margin: 15px 0;
}
</style>