<script lang="ts" setup name="ListSourceAdd"> import { reactive, ref } from 'vue' import type { Ref } from 'vue' import { ElMessage, genFileId } from 'element-plus' import type { UploadInstance, UploadProps, UploadRawFile } from 'element-plus' import { exportFile } from '@/utils/exportUtils' import { getSoucreLisListExport, getSoucreLisUpdate, getSoucreListAdd, getSoucreListDetail, getSoucreListlevelType } from '@/api/system/source' import { getPriceAddList, getQueryPriceInfo, getTypeSelect, getUpdatePriceInfo } from '@/api/system/price' const props = defineProps({ infoId: { type: String, default: '0', }, buttonType: { type: String, default: '', }, }) const emit = defineEmits(['close']) const formInline = ref({ checkType: '', createTime: null, directorDiscountPermission: '', historicalPriceList: [], id: null, isDel: 0, model: '', operatorDiscountPermission: '', price: null, priceDescription: '', priceItem: '', priceLimit: '', priceName: '', priceNo: null, priceStandard: '', priceType: '', remark: '', updateTime: null, }) const checkTypeOptions = ref([]) const priceTypeOptions = ref([]) const priceItemOptions = ref([]) const operatorDiscountPermissionOptions = ref([]) const directorDiscountPermissionOptions = ref([]) const dialogVisible = ref(false) const addPersonList = ref({ personNo: '', name: '', department: '', job: '', phone: '', }) const SelectionList = ref([]) const upload = ref<UploadInstance>() const close = () => { emit('close') } const getInfo = () => { getQueryPriceInfo({ id: props.infoId }).then((res) => { formInline.value = res.data }) } const getOptions = (code: string) => { getTypeSelect(code).then((res) => { if (code === 'checkType') { checkTypeOptions.value = res.data } else if (code === 'priceType') { priceTypeOptions.value = res.data } else if (code === 'priceItem') { priceItemOptions.value = res.data } else if (code === 'operatorDiscountPermission') { operatorDiscountPermissionOptions.value = res.data } else if (code === 'directorDiscountPermission') { directorDiscountPermissionOptions.value = res.data } }) } getOptions('checkType') getOptions('priceType') getOptions('priceItem') getOptions('operatorDiscountPermission') getOptions('directorDiscountPermission') // 点击提交/导出按钮 const getAddList = (type: string) => { if (type === '提交' && props.buttonType !== '编辑') { getPriceAddList(formInline.value).then((res) => { if (res.code === 200) { close() } }) } else if (type === '提交' && props.buttonType === '编辑') { formInline.value.id = props.infoId getUpdatePriceInfo(formInline.value).then((res) => { if (res.code === 200) { close() } }) } else { // 打印 const printObj = ref({ id: 'print', // 需要打印元素的id popTitle: '证书报告模板', // 打印配置页上方的标题 extraHead: '', // 最上方的头部文字,附加在head标签上的额外标签,使用逗号分割 preview: false, // 是否启动预览模式,默认是false previewBeforeOpenCallback() { console.log('正在加载预览窗口!') }, // 预览窗口打开之前的callback previewOpenCallback() { console.log('已经加载完预览窗口,预览打开了!') }, // 预览窗口打开时的callback beforeOpenCallback() { console.log('开始打印之前!') }, // 开始打印之前的callback openCallback() { console.log('执行打印了!') }, // 调用打印时的callback closeCallback() { console.log('关闭了打印工具!') }, // 关闭打印的callback(无法区分确认or取消) clickMounted() { console.log('点击v-print绑定的按钮了!') }, standard: '', extarCss: '', }) } } // 文件上传限制 const handleExceed: UploadProps['onExceed'] = (files) => { console.log(files, 'wenjian') upload.value!.clearFiles() const file = files[0] as UploadRawFile file.uid = genFileId() upload.value!.handleStart(file) } // 文件上传成功 const uploadSuccess = (file) => { formInline.value.minioFileName = file.name } if (props.buttonType !== '') { getInfo() } </script> <template> <app-container> <div class="top-info"> <h4 class="title"> 基本信息 </h4> <div> <el-button v-print="buttonType === '详情' ? printObj : ''" type="primary" plain @click="getAddList(buttonType === '详情' ? '打印' : '提交')"> {{ buttonType === '详情' ? '打印' : '提交' }} </el-button> <el-button type="warning" plain @click="close"> 关闭 </el-button> </div> </div> <div class="info-content"> <el-form :inline="true" :model="formInline" class="demo-form-inline" label-position="left" > <!-- <el-form-item label="价格编号:" label-width="auto"> <el-input v-model="formInline.priceNo" placeholder="请输入价格编号" :disabled="buttonType === '详情'" /> </el-form-item> --> <el-form-item label="价格名称:" label-width="110"> <el-input v-model="formInline.priceName" placeholder="请输入价格名称" :disabled="buttonType === '详情'" /> </el-form-item> <span> <el-form-item label="检校类型:" label-width="110"> <el-select v-model="formInline.checkType" clearable placeholder="检校类型" size="default" :disabled="buttonType === '详情'" > <el-option v-for="item in checkTypeOptions" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> <!-- <el-form-item label="创建时间:" label-width="80"> <el-date-picker v-model="formInline.createTime" type="datetime" placeholder="请选择创建时间" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD h:m:s" :disabled="buttonType === '详情'" /> </el-form-item> --> </span> <el-form-item label="类别:" label-width="auto"> <el-select v-model="formInline.priceType" clearable placeholder="类别" style="width: 80%;" size="default" :disabled="buttonType === '详情'" > <el-option v-for="item in priceTypeOptions" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> <div class="input-width"> <el-form-item label="项目:" label-width="110"> <el-select v-model="formInline.priceItem" clearable placeholder="项目" style="width: 80%;" size="default" :disabled="buttonType === '详情'" > <el-option v-for="item in priceItemOptions" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> <el-form-item label="依据标准:" label-width="110"> <el-input v-model="formInline.priceStandard" style="width: 18vw;" clearable placeholder="依据标准" size="default" :disabled="buttonType === '详情'" /> </el-form-item> </div> <div> <el-form-item label="标准价格(元):" label-width="110"> <el-input v-model="formInline.price" clearable placeholder="依据标准" size="default" :disabled="buttonType === '详情'" /> </el-form-item> </div> <div class="input-width"> <el-form-item label="限制范围:" label-width="110"> <el-input v-model="formInline.priceLimit" placeholder="请输入限制范围" :disabled="buttonType === '详情'" /> </el-form-item> <el-form-item label="说明:"> <el-input v-model="formInline.priceDescription" placeholder="请输入说明" :disabled="buttonType === '详情'" /> </el-form-item> </div> <div> <el-form-item label="业务员折扣权限:" label-width="auto"> <el-select v-model="formInline.operatorDiscountPermission" style="width: 26vw;" clearable placeholder="业务员折扣权限" size="default" :disabled="buttonType === '详情'" > <el-option v-for="item in operatorDiscountPermissionOptions" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> <el-form-item label="负责人折扣权限:" label-width="auto"> <el-select v-model="formInline.directorDiscountPermission" style="width: 26vw;" clearable placeholder="业务员折扣权限" size="default" :disabled="buttonType === '详情'" > <el-option v-for="item in directorDiscountPermissionOptions" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </div> <div class="input-width"> <el-form-item label="备注:" label-width="110"> <el-input v-model="formInline.remark" placeholder="请输入备注" :disabled="buttonType === '详情'" /> </el-form-item> </div> </el-form> </div> </app-container> </template> <style lang="scss" scoped> .top-info { width: 100%; height: 50px; padding-right: 10px; display: flex; align-items: center; justify-content: space-between; border-radius: 10px; background-color: #fff; .title { width: 75%; text-align: center; } } :deep .el-input .el-input--default .el-input--suffix { width: 200px !important; } .info-content { margin-top: 10px; padding: 5px; border-radius: 10px; background-color: #fff; .info-dizhi { margin-right: 155px; } } .el-select { width: 9vw; margin-right: 15px; } .info-dizhi .el-input { width: 20vw; } .input-width .el-input { width: 30vw; } .info-appendix span { margin-right: 25px; } .table-top { margin-top: 10px; padding: 5px; display: flex; justify-content: space-between; align-items: center; border-radius: 10px; background-color: #fff; .table-top-title { width: 60vw; text-align: center; } } .dialog-button { margin-left: 50%; transform: translateX(-50%); } </style>