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

1255 lines
48 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 previewImg from './previewImg/index.vue'
import { ElMessage,ElMessageBox } from 'element-plus'
import type { FormInstance } from 'element-plus'
import { ref } from 'vue'
import { useStore } from 'store/user'
const store = useStore()
import { mainStore } from 'store/main'
const store2 = mainStore()
import {
getEquipmentTypeApi,//装备类型
getCompanyListApi,//所属公司
getEquipmentListApi,//列表
getDetailApi,//详情
equipmentAddApi,//新增
insertDraftApi,//草稿(编辑)
removeDeviceApi,//删除
updateUpDownApi//上下架
} from 'http/api/usercenter/goodsmang'
// 注册地址拼装
const AssemblyRegisterAddress: any = reactive([])
const deviceType: any = reactive([])
onMounted(() => {
// 获取装备树
getTypeTreeData()
// 获取下拉
getCompanyList()
// 获取省级数据
// store.getprovinceList()
// 获取设备类型
// store.getDeviceTypeList()
})
// 设备类型树
const deviceTypeTree: any = ref([])
const partTypeTreeProps: any = ref({
children: "children",
label: "name",
multiple: false,
value: "id"
})
// 获取装备树
const getTypeTreeData = async () => {
const res: any = await getEquipmentTypeApi();
console.log("treeData==========", res);
deviceTypeTree.value = res.data;
}
//装备类目-change
const deviceTypeChange = (val: any) => {
console.log(val)
if(val.length > 0) {
queryParams.value.typeId = val[3]
} else {
queryParams.value.typeId = ""
}
}
//反显 树结构数据获取父
const getSelectId = (list: any,id: any) => {
for (let i in list) {
if (list[i].id == id) {
//查询到就返回该数组对象的value
return [list[i].id];
}
if (list[i].children) {
let node: any = getSelectId(list[i].children, id);
if (node !== undefined) {
//查询到把父节把父节点加到数组前面
node.unshift(list[i].id);
return node;
}
}
}
}
/* 装备树选中数组 */
const deviceTypeList: any = ref([])
//日期周期
const dateRange: any = ref([])
/* 查询参数 */
const queryParams: any = ref({
deviceName: '',
code: '',
maStatus: '',
typeId: '',
pageSize: 10,
pageNum: 1
})
const queryFormRef = ref<FormInstance>()
const total: any = ref(0)
const tableData: any = ref([])
/* 查询按钮 */
const queryTableList = () => {
queryParams.value.pageNum=1
getList()
}
// 重置
const resetTableList = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.resetFields()
dateRange.value = []
deviceTypeList.value = []
queryParams.value.typeId = null;
queryTableList()
}
// 获取数据列表
const getList = async () => {
console.log(queryParams.value.pageNum, '***9999', queryParams.value.pageSize)
const res: any = await getEquipmentListApi(queryParams.value)
console.log(res, '列表数据**--**')
total.value = res.total
tableData.value = res.rows.filter((item: any) => item !== null)
}
// 获取数据列表
getList()
//---列表按钮事件---
// 装备新增按钮
const equipmentDeployment = () => {
settleinTitle.value = '新增装备'
disabledForm.value = false
isEditDisabled.value = true
equipmentDeploymentParams.value = {
deviceName: '',
deviceTypeList: [],
deviceCount: 1,
unitName: '',
code: '',
brand: '',
typeId: '',
companyId: '',
productionDate: '',
dayLeasePrice: '',
person: '',
personPhone: '',
deviceWeight: '',
}
mainFileList.value=[];
detailsFileList.value=[];
insurancePdf.value=[];
examinationPdf.value=[];
// 打开入驻弹框
dialogFormVisibleSettlein.value = true
}
const maId: any = ref('')
// 编辑按钮
const editRowInfo = (row: any) => {
settleinTitle.value = '装备编辑'
getDetailData(row)
disabledForm.value = false
isEditDisabled.value = true
}
/* 查看按钮 */
const previewRowInfo = (row: any) => {
settleinTitle.value = '装备详情'
getDetailData(row)
disabledForm.value = true
isEditDisabled.value = false
}
// 删除按钮
const deleteRowInfo = async (row: any) => {
ElMessageBox.confirm('是否确定删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
return removeDeviceApi([row.maId])
}).then((res) => {
if (res.code === 200) {
ElMessage({
type: 'success',
message: '删除成功'
})
getList()
}
}).catch(() => {})
}
//获取详情接口
const getDetailData = async(row: any) => {
console.log(row,"----row----")
maId.value = row.maId;
const res: any = await getDetailApi(row.maId)
console.log(res,"----detail----")
equipmentDeploymentParams.value = res.data;
equipmentDeploymentParams.value.companyId = Number(res.data.companyId);
mainFileList.value=res.data.mainFileList;
detailsFileList.value=res.data.detailsFileList;
insurancePdf.value=res.data.insurancePdf;
examinationPdf.value=res.data.examinationPdf;
//反显 装备树
equipmentDeploymentParams.value.deviceTypeList = getSelectId(deviceTypeTree.value, equipmentDeploymentParams.value.typeId);
dialogFormVisibleSettlein.value = true;
// equipmentDeploymentParams.value.cityId = String(equipmentDeploymentParams.value.cityId)
// equipmentDeploymentParams.value.areaId = String(equipmentDeploymentParams.value.areaId)
// equipmentDeploymentParams.value.provinceId = String(
// equipmentDeploymentParams.value.provinceId
// )
// equipmentDeploymentParams.value.leaseScope = String(
// equipmentDeploymentParams.value.leaseScope
// )
// equipmentDeploymentParams.value.groupId = Number(equipmentDeploymentParams.value.groupId)
// equipmentDeploymentParams.value.typeId = Number(equipmentDeploymentParams.value.typeId)
// store.getprovinceList()
// store.getmarketList(row.provinceId)
// store.getareaList(row.cityId)
// store.getDeviceTypeList()
// store.getDeviceTypeSonList(row.companyId)
// store.getDeviceTypeSunList(row.groupId)
}
const ids: any = ref([])
const handleSelectionChange = (selection:any) =>{
ids.value = selection.map((item:any) => item.maId)
}
// 上下架(批量)
const handleUpdateUpDown = (row: any,maStatus:any) => {
ElMessageBox.confirm('是否确定操作', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
let maIds = []
if (!row){
maIds = ids.value
} else {
maIds.push(row.maId)
}
if (maIds.length == 0){
ElMessage({type: 'error',message: '请选择要操作的数据'})
return
}
return updateUpDownApi({maIds,maStatus})
}).then((res) => {
if (res.code == 200) {
ElMessage({
type: 'success',
message: '操作成功'
})
getList()
}
}).catch(() => {})
}
// // 省级数据源
// 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)
// // deviceType[0] = val.split(',')[1]
// }
// // 设备类型子类
// const changeDeviceTypeSon = (val: any) => {
// store.getDeviceTypeSunList(val)
// // deviceType[1] = val.split(',')[1]
// }
// // 设备类型小类
// const changeDeviceTypeSun = (val: any) => {
// // deviceType[2] = val.split(',')[1]
// }
/*
----装备弹窗-----
*/
/* 查看 */
const disabledForm = ref(false)
/* 编辑 */
const isEditDisabled = ref(false)
/* 入驻框的标题 */
const settleinTitle = ref('')
//所属公司
const companyDataList: any = ref([])
/*
* 商品入驻弹框参数
*/
const equipmentDeploymentParams: any = ref({
deviceName: '',
deviceTypeList: [],
deviceCount: 1,
unitName: '',
code: '',
brand: '',
typeId: '',
companyId: '',
productionDate: '',
dayLeasePrice: '',
person: '',
personPhone: '',
deviceWeight: '',
})
//编码类型禁止修改数目
const countDisabled = ref(false)
//装备类目-change
const dialogTypeCascader = ref()
//装备类目-change
const dialogTypeChange = () => {
const deviceTypeList = dialogTypeCascader.value.getCheckedNodes()
console.log(deviceTypeList)
equipmentDeploymentParams.value.unitName = deviceTypeList[0].data.unitName
let manageType = deviceTypeList[0].data.manageType
if(manageType=='1'){//数量
equipmentDeploymentParams.value.deviceCount=1
countDisabled.value=false
}else if(manageType=='0'){//编码
equipmentDeploymentParams.value.deviceCount=1
countDisabled.value=true
}
}
//获取所属公司下拉数据
const getCompanyList = async () => {
const res: any = await getCompanyListApi()
console.log(res, '列表数据**--**')
companyDataList.value = res.data
}
// 装备弹框显示隐藏
const dialogFormVisibleSettlein: any = ref(false)
const ruleFormRef: any = ref(null)
//表单校验规则
const equipRules = ref({
deviceName: [
{
required: true,
message: '请输入装备名称',
trigger: 'blur'
}
],
deviceTypeList: [
{
required: true,
message: '请选择装备类目',
trigger: 'change'
}
],
deviceCount: [
{
required: true,
message: '请输入装备数量',
trigger: 'blur'
}
],
brand: [
{
required: true,
message: '请输入装备品牌',
trigger: 'blur'
}
],
code: [
{
required: true,
message: '请输入装备编号',
trigger: 'change'
}
],
companyId: [
{
required: true,
message: '请选择所属公司',
trigger: 'change'
}
],
productionDate: [
{
required: true,
message: '请选择出厂日期',
trigger: 'change'
}
],
dayLeasePrice: [
{
required: true,
message: '请输入日租金',
trigger: 'blur'
}
],
person: [
{ required: true, message: "联系人不能为空", trigger: "blur" }
],
personPhone: [
{ required: true, message: "联系电话不能为空", trigger: "blur" },
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
],
deviceWeight: [//
{ required: true, message: "整机重量不能为空", trigger: "blur" }
],
})
// 弹框保存提交
const submitBtn = () => {
ruleFormRef.value.validate(async (valid: any) => {
if (valid) {
if (equipmentDeploymentParams.value.deviceTypeList&&equipmentDeploymentParams.value.deviceTypeList.length > 0) {
equipmentDeploymentParams.value.typeId = equipmentDeploymentParams.value.deviceTypeList[3]
} else {
equipmentDeploymentParams.value.typeId = ""
}
if(mainFileList.value.length==0||mainFileList.value.length>6){
ElMessage({type: 'error',message: '主展示图不得少于1张不得多于6张'})
return
}
if(detailsFileList.value.length==0||detailsFileList.value.length>6){
ElMessage({type: 'error',message: '详情展示图不得少于1张不得多于6张'})
return
}
let param = {
...equipmentDeploymentParams.value,
mainFileList:mainFileList.value,//主展示
detailsFileList:detailsFileList.value,//详情展示
insurancePdf:insurancePdf.value,//合格证
examinationPdf:examinationPdf.value,//检测证明
}
const res: any = await equipmentAddApi(param)
if (res.code === 200) {
ElMessage({
type: 'success',
message: '保存成功'
})
dialogFormVisibleSettlein.value = false
ruleFormRef.value.resetField()
getList()
}
}
})
}
//草稿
const saveTemp = async() => {
if (equipmentDeploymentParams.value.deviceTypeList&&equipmentDeploymentParams.value.deviceTypeList.length > 0) {
equipmentDeploymentParams.value.typeId = equipmentDeploymentParams.value.deviceTypeList[3]
} else {
equipmentDeploymentParams.value.typeId = ""
}
// if(mainFileList.value.length==0||mainFileList.value.length>6){
// ElMessage({type: 'error',message: '主展示图不得少于1张不得多于6张'})
// return
// }
// if(detailsFileList.value.length==0||detailsFileList.value.length>6){
// ElMessage({type: 'error',message: '详情展示图不得少于1张不得多于6张'})
// return
// }
let param = {
...equipmentDeploymentParams.value,
mainFileList:mainFileList.value,//主展示
detailsFileList:detailsFileList.value,//详情展示
insurancePdf:insurancePdf.value,//合格证
examinationPdf:examinationPdf.value,//检测证明
}
const res: any = await insertDraftApi(param)
if (res.code === 200) {
ElMessage({
type: 'success',
message: '保存成功'
})
dialogFormVisibleSettlein.value = false
ruleFormRef.value.resetField()
getList()
}
}
/* 关闭按钮 */
const closeDialogBtn = () => {
ruleFormRef.value.resetFields()
dialogFormVisibleSettlein.value = false
}
/* 关闭对话框 */
const handleClose = (done: () => void) => {
ruleFormRef.value.resetFields()
done()
dialogFormVisibleSettlein.value = false
}
/* 检测信息图片地址 */
const successResultCallBackFnjc = (val: any) => {
equipmentDeploymentParams.value.detectionList = []
equipmentDeploymentParams.value.detectionList.push(val.msg)
equipmentDeploymentParams.value.fileList.push({
dicId: '28',
fileUrl: val.msg
})
}
/* 保险信息图片地址 */
const successResultCallBackFnbs = (val: any) => {
equipmentDeploymentParams.value.insureList = []
equipmentDeploymentParams.value.insureList.push(val.msg)
equipmentDeploymentParams.value.fileList.push({
dicId: '29',
fileUrl: val.msg
})
}
/* 设备图片信息地址 */
const successResultCallBackFnDevicePic = (val: any) => {
equipmentDeploymentParams.value.picList = []
equipmentDeploymentParams.value.picList.push(val.msg)
if (!equipmentDeploymentParams.value.picUrl) {
equipmentDeploymentParams.value.picUrl = val.msg
}
equipmentDeploymentParams.value.fileList.push({
dicId: '20',
fileUrl: val.msg
})
}
const mainFileList: any = ref([])//主展示
const detailsFileList: any = ref([])//详情展示
const insurancePdf: any = ref([])//合格证
const examinationPdf: any = ref([])//检测证明
//图片查看弹窗
const dialogVisible: any = ref(false)
const dialogImageUrl = ref('')
//上传地址+header
const imgUploadUrl = import.meta.env.VITE_API_URL + '/file/upload'
const actionUrl = ref(imgUploadUrl)
const headerInfo = reactive({
Authorization: "Bearer " + store2.token
})
// 文件上传前处理-上传大小
const beforeUpload = (file: any) => {
if (file.size / 1024 / 1024 > 2) {
ElMessage({
type: 'error',
message: '上传文件大小不能超过2M!'
})
// this.$message.error({ message: `上传文件大小不能超过2M!`,});
return false;
}
}
// 文件上传失败
const uploadError = () => {
ElMessage({
type: 'error',
message: '上传文件失败!'
})
// this.$message.error({message: `上传文件失败!`});
}
// 文件上传成功处理
const handleFileSuccess = (response: any) => {
if (response.code == 200) {
let obj = {
modelId:maId.value,
fileName: response.data.name.split("/")[4],
fileUrl: response.data.url
};
console.log(obj);
mainFileList.value.push(obj)
ElMessage({
type: 'success',
message: '上传成功!'
})
console.log(mainFileList.value)
}
}
// 文件上传成功处理
const handleFileSuccess2 = (response: any) => {
if (response.code == 200) {
let obj = {
modelId:maId.value,
fileName: response.data.name.split("/")[4],
fileUrl: response.data.url
};
console.log(obj);
detailsFileList.value.push(obj)
ElMessage({
type: 'success',
message: '上传成功!'
})
console.log(detailsFileList.value)
}
}
// 文件上传成功处理
const handleFileSuccess3 = (response: any) => {
if (response.code == 200) {
let obj = {
modelId:maId.value,
fileName: response.data.name.split("/")[4],
fileUrl: response.data.url
};
console.log(obj);
insurancePdf.value.push(obj)
ElMessage({
type: 'success',
message: '上传成功!'
})
console.log(insurancePdf.value)
}
}
// 文件上传成功处理
const handleFileSuccess4 = (response: any) => {
if (response.code == 200) {
let obj = {
modelId:maId.value,
fileName: response.data.name.split("/")[4],
fileUrl: response.data.url
};
console.log(obj);
examinationPdf.value.push(obj)
ElMessage({
type: 'success',
message: '上传成功!'
})
console.log(examinationPdf.value)
}
}
//文件下载
const handleDownload = (file: any) => {
const windowName = file.name;
window.open(file.fileUrl, windowName);
}
//文件查看
const picturePreview = (file: any) => {
dialogImageUrl.value = file.fileUrl;
dialogVisible.value = true;
}
//文件查看
const handleRemove = (list: any,index: Number) => {
list.splice(index,1)
}
</script>
<template>
<!-- 商品管理 -->
<el-form :model="queryParams" ref="queryFormRef" :inline="true" size="small" label-width="auto">
<el-form-item label="装备名称:" prop="deviceName">
<el-input v-model.trim="queryParams.deviceName" style="width: 160px" clearable />
</el-form-item>
<el-form-item label="装备编码:" prop="code">
<el-input v-model.trim="queryParams.code" style="width: 160px" clearable />
</el-form-item>
<el-form-item label="装备状态:" prop="maStatus">
<el-select style="width: 160px" v-model="queryParams.maStatus" clearable>
<el-option label="草稿状态" value="0"></el-option>
<el-option label="上架" value="1"></el-option>
<el-option label="下架" value="2"></el-option>
<el-option label="在租" value="3"></el-option>
</el-select>
</el-form-item>
<el-form-item label="装备类目:" prop="deviceTypeList">
<el-cascader
v-model="deviceTypeList"
:show-all-levels="false"
:options="deviceTypeTree"
:props="partTypeTreeProps"
filterable clearable
collapse-tags
style="width:160px"
placeholder="请选择装备类目"
ref="deviceTypeCascader"
@change="deviceTypeChange"
></el-cascader>
</el-form-item>
<el-form-item label="更新时间:" prop="dateRange">
<el-date-picker
v-model="dateRange"
type="datetimerange"
value-format="yyyy-MM-dd HH:mm:ss"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="queryTableList">查询</el-button>
<el-button type="success" @click="resetTableList(queryFormRef)">重置</el-button>
<el-button type="primary" @click="equipmentDeployment">装备新增</el-button>
<el-button type="warning" @click="handleUpdateUpDown(null,2)">批量上架</el-button>
<el-button type="warning" @click="handleUpdateUpDown(null,1)">批量下架</el-button>
</el-form-item>
</el-form>
<!-- 表格 -->
<el-table :data="tableData" style="width: auto" row-key="maId" show-overflow-tooltip max-height="400px"
:header-cell-style="{background: '#3E98FF',color: '#fff'}" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"/>
<el-table-column label="序号" align="center" width="80" type="index"></el-table-column>
<el-table-column align="center" prop="deviceName" label="装备名称" />
<el-table-column align="center" prop="code" label="编码" />
<el-table-column align="center" prop="typeName" label="装备类目">
<template #default="{ row }">
<span>{{ row.firstName }} <span v-show="row.firstName">></span> {{ row.secondName }}<span v-show="row.secondName">></span>{{ row.thirdName }}</span>
</template>
</el-table-column>
<el-table-column align="center" prop="typeName" label="装备型号" />
<el-table-column align="center" label="装备状态" width="80px">
<template #default="{ row }">
<el-tag v-if="row.maStatus == 0" size="small" type="info">草稿状态</el-tag>
<el-tag v-if="row.maStatus == 1" size="small" type="warning">下架</el-tag>
<el-tag v-if="row.maStatus == 2" size="small" type="success">上架</el-tag>
<el-tag v-if="row.maStatus == 3" size="small" type="danger">在租</el-tag>
</template>
</el-table-column>
<el-table-column prop="name" label="操作" min-width="160px" align="center">
<template #default="{ row }">
<el-button size="small" @click="previewRowInfo(row)">查看</el-button>
<el-button v-if="row.maStatus == 0||row.maStatus == 1" size="small" type="primary" @click="editRowInfo(row)">
编辑
</el-button>
<el-button v-if="row.maStatus == 2" size="mini" type="warning" @click="handleUpdateUpDown(row,1)">
下架
</el-button>
<el-button v-if="row.maStatus == 1" size="mini" type="warning" @click="handleUpdateUpDown(row,2)">
上架
</el-button>
<el-button
v-if="row.maStatus == 0 || row.maStatus == 1"
size="small"
type="danger"
@click="deleteRowInfo(row)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<PagingComponent
@getListChange="getList"
v-model:pageSize="queryParams.pageSize"
v-model:currentPage="queryParams.pageNum"
:total="total" />
<!-- 装备弹框 -->
<el-dialog v-model="dialogFormVisibleSettlein" :title="settleinTitle"
width="60%" align-center :close-on-click-modal="false" :before-close="handleClose">
<el-row :gutter="10" class="mb8" style="display: flex;align-items: center;">
<el-button type="" @click="closeDialogBtn">
关 闭
</el-button>
<el-button type="warning" @click="saveTemp">
草 稿
</el-button>
<el-button type="primary" @click="submitBtn" v-if="!disabledForm || isEditDisabled" >
提 交
</el-button>
</el-row>
<div class="title">
<span class="title-sign"></span>
<span class="title-text">基本信息</span>
</div>
<el-form label-width="160" ref="ruleFormRef" :model="equipmentDeploymentParams"
:rules="equipRules" :disabled="disabledForm">
<el-form-item label="装备名称:" prop="deviceName">
<el-input autocomplete="off" style="width: 850px" maxlength="30"
v-model="equipmentDeploymentParams.deviceName" clearable />
</el-form-item>
<el-row>
<el-form-item label="装备类目:" prop="deviceTypeList">
<el-cascader
v-model="equipmentDeploymentParams.deviceTypeList"
:show-all-levels="false"
:options="deviceTypeTree"
:props="partTypeTreeProps"
filterable clearable
collapse-tags
style="width: 350px"
placeholder="请选择装备类目"
ref="dialogTypeCascader"
@change="dialogTypeChange"
></el-cascader>
</el-form-item>
<el-form-item label="设备数量:" prop="deviceCount">
<el-input
@input="(v)=>(equipmentDeploymentParams.deviceCount=v.replace(/[^\d.]/g,''))"
v-model="equipmentDeploymentParams.deviceCount"
placeholder="请输入设备数量"
clearable maxlength="20"
style="width: 350px;" :disabled="countDisabled"
/>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="装备单位:" prop="unitName">
<el-input
autocomplete="off"
style="width: 350px" maxlength="20"
v-model="equipmentDeploymentParams.unitName"
clearable />
</el-form-item>
<el-form-item label="装备品牌" prop="brand">
<el-input
v-model="equipmentDeploymentParams.brand"
autocomplete="off" maxlength="20"
style="width: 350px"
clearable />
</el-form-item>
</el-row>
<el-row>
<el-form-item label="装备编号" prop="code">
<el-input
autocomplete="off"
style="width: 350px" maxlength="40"
v-model="equipmentDeploymentParams.code"
clearable />
</el-form-item>
<el-form-item label="所属公司:" prop="companyId">
<el-select
v-model="equipmentDeploymentParams.companyId"
placeholder="请选择所属公司"
clearable style="width: 350px">
<el-option
v-for="item in companyDataList"
:key="item.companyId"
:label="item.companyName"
:value="item.companyId"
/>
</el-select>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="出厂日期:" prop="productionDate">
<el-date-picker
v-model="equipmentDeploymentParams.productionDate"
placeholder="请选择出厂日期"
value-format="yyyy-MM-dd"
type="date" style="width: 350px;">
</el-date-picker>
</el-form-item>
<el-form-item label="租赁价格(天/元)" prop="dayLeasePrice">
<el-input
@input="(v)=>(equipmentDeploymentParams.dayLeasePrice=v.replace(/[^\d.]/g,''))"
v-model="equipmentDeploymentParams.dayLeasePrice"
placeholder="请输入租赁价格"
clearable maxlength="20"
style="width: 350px;"
/>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="联系人:" prop="person">
<el-input
v-model="equipmentDeploymentParams.person"
placeholder="请输入联系人"
clearable maxlength="20"
style="width: 350px;"
/>
</el-form-item>
<el-form-item label="联系电话:" prop="personPhone">
<el-input
v-model="equipmentDeploymentParams.personPhone"
placeholder="请输入联系电话"
clearable maxlength="20"
style="width: 350px;"
/>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="整机重量(KG)" prop="deviceWeight">
<el-input
@input="(v)=>(equipmentDeploymentParams.deviceWeight=v.replace(/[^\d.]/g,''))"
v-model="equipmentDeploymentParams.deviceWeight"
placeholder="请输入整机重量"
clearable maxlength="20"
style="width: 350px;"
/>
</el-form-item>
</el-row>
<!-- <el-form-item label="检测信息" prop="detectionList">
<uploadComponent
v-if="!disabledForm || isEditDisabled"
:maxLimit="1"
listType="picture-card"
:acceptTypeList="['.pdf', '.jpg', '.jpeg', '.png']"
width="120px"
height="120px"
:autoUpload="true"
:successResultCallBack="successResultCallBackFnjc">
<template v-slot:default>
<el-icon size="20" color="#aaa"><Plus /></el-icon>
</template>
</uploadComponent>
<template v-else>
<a
style="color: rgb(97, 226, 153); cursor: pointer"
target="_blank"
:href="equipmentDeploymentParams.jcUrl">
查 看 附 件
</a>
</template>
</el-form-item>
<el-form-item label="保险信息" prop="insureList">
<uploadComponent
v-if="!disabledForm || isEditDisabled"
:maxLimit="1"
listType="picture-card"
:acceptTypeList="['.pdf', '.jpg', '.jpeg', '.png']"
width="120px"
height="120px"
:autoUpload="true"
:successResultCallBack="successResultCallBackFnbs">
<template v-slot:default>
<el-icon size="20" color="#aaa"><Plus /></el-icon>
</template>
</uploadComponent>
<template v-else>
<a
style="color: rgb(97, 226, 153); cursor: pointer"
target="_blank"
:href="equipmentDeploymentParams.bsUrl">
查 看 附 件
</a>
</template>
</el-form-item>
<el-form-item label="设备图片" prop="picList">
<uploadComponent
v-if="!disabledForm && isEditDisabled"
:maxLimit="8"
listType="picture-card"
:acceptTypeList="['.jpg', '.jpeg', '.png']"
width="120px"
height="120px"
:successResultCallBack="successResultCallBackFnDevicePic"
:autoUpload="true"
:multiple="true">
<template v-slot:default>
<el-icon size="48" color="#aaa"><Plus /></el-icon>
</template>
</uploadComponent>
<span v-if="!disabledForm">
至少一张,最多八张
设备图片格式为jpg、png、和gif文件不得超过5M否则将无法上传。请从前后左右四个方向以及从主要工作部件内部结构等方面展示设备
</span>
<template v-if="disabledForm && !isEditDisabled">
<template v-if="equipmentDeploymentParams.devPicList.length > 0">
<el-image
v-for="item in equipmentDeploymentParams.devPicList"
:key="item"
style="width: 120px; height: 120px; margin-right: 8px"
:src="item"
fit="cover" />
</template>
<template v-else>暂无图片</template>
</template>
</el-form-item> -->
</el-form>
<div class="title">
<span class="title-sign"></span>
<span class="title-text">装备图片</span>
</div>
<div class="uploadBox">
<div class="labelBox">
<div style="margin-left: 20px;">
<span style="color: red;">*</span>
<span style="font-size: 14px;color: #606266;font-weight: 600;">主展示图: </span>
</div>
<div style="margin-left: 20px;">
<el-upload ref="upload" :limit="6" :headers="headerInfo"
:action="actionUrl" :show-file-list="false" accept=".png, .jpg, .jpeg"
:on-success="handleFileSuccess" :auto-upload="true"
:before-upload="beforeUpload" :on-error="uploadError"
>
<el-button icon="FolderOpened">上传文件</el-button>
</el-upload>
</div>
<div style="color: #999;font-size: 12px;margin-left: 20px;">支持格式:.jpg .png单个文件大小不能超过2M</div>
</div>
<div class="imgsBox">
<!-- <div class="imgItem" v-if="mainFileList.length==0">
<div class="icon-list" style="left: 60px;">
<span class="imgItem__icon" >
<i class="el-icon-plus"/>
</span>
</div>
</div> -->
<div class="imgItem" v-for="(item,index) in mainFileList" :key="index">
<img class="picture-card" :src="item.fileUrl" alt="">
<div class="icon-list">
<span class="imgItem__icon hide" @click="handleDownload(item)">
<i class="el-icon-download"/>
</span>
<span class="imgItem__icon hide" @click="picturePreview(item)">
<i class="el-icon-zoom-in"/>
</span>
<span class="imgItem__icon hide" @click="handleRemove(mainFileList,index)">
<i class="el-icon-delete"/>
</span>
</div>
<p class="file-name">{{ item.fileName }}</p>
</div>
</div>
<div class="tipBox">
*注:图片排序为平台展示顺序不得少于1张不得多于6张
</div>
</div>
<div class="uploadBox">
<div class="labelBox">
<div style="margin-left: 20px;">
<span style="color: red;">*</span>
<span style="font-size: 14px;color: #606266;font-weight: 600;">详情页展示图: </span>
</div>
<div style="margin-left: 20px;">
<el-upload ref="upload" :limit="6" :headers="headerInfo"
:action="actionUrl" :show-file-list="false" accept=".png, .jpg, .jpeg"
:on-success="handleFileSuccess2" :auto-upload="true"
:before-upload="beforeUpload" :on-error="uploadError"
>
<el-button icon="FolderOpened">上传文件</el-button>
</el-upload>
</div>
<div style="color: #999;font-size: 12px;margin-left: 20px;">支持格式:.jpg .png单个文件大小不能超过2M</div>
</div>
<div class="imgsBox">
<div class="imgItem" v-for="(item,index) in detailsFileList" :key="index">
<img class="picture-card" :src="item.fileUrl" alt="">
<div class="icon-list">
<span class="imgItem__icon hide" @click="handleDownload(item)">
<i class="el-icon-download"/>
</span>
<span class="imgItem__icon hide" @click="picturePreview(item)">
<i class="el-icon-zoom-in"/>
</span>
<span class="imgItem__icon hide" @click="handleRemove(detailsFileList,index)">
<i class="el-icon-delete"/>
</span>
</div>
<p class="file-name">{{ item.fileName }}</p>
</div>
</div>
<div class="tipBox">
*注:图片排序为平台展示顺序不得少于1张不得多于6张
</div>
</div>
<div class="title">
<span class="title-sign"></span>
<span class="title-text">装备证书</span>
</div>
<div class="uploadBox">
<div class="labelBox">
<div style="margin-left: 20px;">
<span style="color: red;">*</span>
<span style="font-size: 14px;color: #606266;font-weight: 600;">合格证: </span>
</div>
<div style="margin-left: 20px;">
<el-upload ref="upload" :limit="6" :headers="headerInfo"
:action="actionUrl" :show-file-list="false" accept=".png, .jpg, .jpeg"
:on-success="handleFileSuccess3" :auto-upload="true"
:before-upload="beforeUpload" :on-error="uploadError"
>
<el-button icon="FolderOpened">上传文件</el-button>
</el-upload>
</div>
<div style="color: #999;font-size: 12px;margin-left: 20px;">支持格式:.jpg .png单个文件大小不能超过2M</div>
</div>
<div class="imgsBox">
<div class="imgItem" v-for="(item,index) in insurancePdf" :key="index">
<img class="picture-card" :src="item.fileUrl" alt="">
<div class="icon-list">
<span class="imgItem__icon hide" @click="handleDownload(item)">
<i class="el-icon-download"/>
</span>
<span class="imgItem__icon hide" @click="picturePreview(item)">
<i class="el-icon-zoom-in"/>
</span>
<span class="imgItem__icon hide" @click="handleRemove(insurancePdf,index)">
<i class="el-icon-delete"/>
</span>
</div>
<p class="file-name">{{ item.fileName }}</p>
</div>
</div>
</div>
<div class="uploadBox">
<div class="labelBox">
<div style="margin-left: 20px;">
<span style="color: red;">*</span>
<span style="font-size: 14px;color: #606266;font-weight: 600;">检测证明: </span>
</div>
<div style="margin-left: 20px;">
<el-upload ref="upload" :limit="6" :headers="headerInfo"
:action="actionUrl" :show-file-list="false" accept=".png, .jpg, .jpeg"
:on-success="handleFileSuccess4" :auto-upload="true"
:before-upload="beforeUpload" :on-error="uploadError"
>
<el-button icon="FolderOpened">上传文件</el-button>
</el-upload>
</div>
<div style="color: #999;font-size: 12px;margin-left: 20px;">支持格式:.jpg .png单个文件大小不能超过2M</div>
</div>
<div class="imgsBox">
<div class="imgItem" v-for="(item,index) in examinationPdf" :key="index">
<img class="picture-card" :src="item.fileUrl" alt="">
<div class="icon-list">
<span class="imgItem__icon hide" @click="handleDownload(item)">
<i class="el-icon-download"/>
</span>
<span class="imgItem__icon hide" @click="picturePreview(item)">
<i class="el-icon-zoom-in"/>
</span>
<span class="imgItem__icon hide" @click="handleRemove(examinationPdf,index)">
<i class="el-icon-delete"/>
</span>
</div>
<p class="file-name">{{ item.fileName }}</p>
</div>
</div>
</div>
<!-- <template #footer>
<span class="dialog-footer">
<el-button type="primary" @click="closeDialogBtn"> </el-button>
<el-button @click="submitBtn" v-if="!disabledForm || isEditDisabled" type="success">
提 交
</el-button>
</span>
</template> -->
</el-dialog>
<!-- 图片查看弹窗 -->
<el-dialog v-model="dialogVisible" width="500px" height="500px">
<img width="100%" height="500px" :src="dialogImageUrl" />
</el-dialog>
</template>
<style lang="scss" scoped>
.el-form {
margin: 15px 0;
}
.title{
margin: 10px;
margin-left: 20px;
display: flex;
align-items: center;
}
.title-sign{
display: inline-block;
width: 4px;
height: 16px;
background: #409EFF;
}
.title-text{
font-weight: 700;
margin-left: 10px;
}
.uploadBox{
margin: 20px 40px;
}
.labelBox{
width: auto;
height: auto;
display: flex;
align-items: center;
margin-bottom: 20px;
}
.imgsBox{
width: auto;
height: auto;
display: flex;
align-items: center;
margin-bottom: 30px;
margin-left: 20px;
.imgItem{
width: 160px;
height: 160px;
margin-right: 40px;
border: 1px dashed #bbb;
position: relative;
.picture-card{
width: 160px;
height: 160px;
}
.icon-list{
width: 60px;height: 20px;
position: absolute;
top: 70px;
left: 40px;
display: flex;
align-items: center;
}
.imgItem__icon{
margin: 0 5px;
}
.file-name{
font-size: 10px;
}
}
.hide{
display: none;
}
.imgItem:hover .hide{
display: block;
}
}
.tipBox{
color: red;
font-size: 12px;
margin-left: 20px;
}
</style>