123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338 |
- <template>
- <Dialog :title="dialogTitle" v-model="dialogVisible">
- <el-form
- ref="formRef"
- :model="formData"
- :rules="formRules"
- label-width="100px"
- v-loading="formLoading"
- >
- <el-form-item label="标本类型" prop="specimenType">
- <el-select v-model="formData.specimenType"
- placeholder="请选择标本类型">
- <el-option
- v-for="dict in getIntDictOptions(DICT_TYPE.MUSEUMS_SPECIMEN_TYPE)"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="标本编号" prop="specimenNumber">
- <el-input v-model="formData.assetNumber" placeholder="请输入标本编号"/>
- </el-form-item>
- <el-form-item label="资产号" prop="assetNumber">
- <el-input v-model="formData.assetNumber" placeholder="请输入资产号"/>
- </el-form-item>
- <el-form-item label="存放位置" prop="storageLocation">
- <el-input v-model="formData.storageLocation" placeholder="请输入存放位置"/>
- </el-form-item>
- <el-form-item label="中文名称" prop="chineseName">
- <el-input v-model="formData.chineseName" placeholder="请输入中文名称"/>
- </el-form-item>
- <el-form-item label="英文名称" prop="englishName">
- <el-input v-model="formData.englishName" placeholder="请输入英文名称"/>
- </el-form-item>
- <el-form-item label="成分" prop="composition">
- <el-input v-model="formData.composition" placeholder="请输入成分"/>
- </el-form-item>
- <el-form-item label="产地" prop="origin">
- <el-input v-model="formData.origin" placeholder="请输入产地"/>
- </el-form-item>
- <el-form-item label="时代" prop="era">
- <el-input v-model="formData.era" placeholder="请输入时代"/>
- </el-form-item>
- <el-form-item label="保存地层" prop="preservedLayer">
- <el-input v-model="formData.preservedLayer" placeholder="请输入保存地层"/>
- </el-form-item>
- <el-form-item label="陨石类型" prop="meteoriteType">
- <el-input v-model="formData.meteoriteType" placeholder="请输入陨石类型"/>
- </el-form-item>
- <el-form-item label="国际命名" prop="internationalName">
- <el-input v-model="formData.internationalName" placeholder="请输入国际命名"/>
- </el-form-item>
- <el-form-item label="发现时间" prop="discoveryTime">
- <el-date-picker
- v-model="formData.discoveryTime"
- type="date"
- value-format="x"
- placeholder="选择发现时间"
- />
- </el-form-item>
- <el-form-item label="降落时间" prop="fallTime">
- <el-date-picker
- v-model="formData.fallTime"
- type="date"
- value-format="x"
- placeholder="选择降落时间"
- />
- </el-form-item>
- <el-form-item label="保存类型" prop="preservationType">
- <el-select v-model="formData.preservationType"
- placeholder="请选择保存类型">
- <el-option
- v-for="dict in getIntDictOptions(DICT_TYPE.MUSEUMS_SPECIMEN_INFO)"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="尺寸" prop="size">
- <el-input v-model="formData.size" placeholder="请输入尺寸"/>
- </el-form-item>
- <el-form-item label="重量" prop="weight">
- <el-input v-model="formData.weight" placeholder="请输入重量"/>
- </el-form-item>
- <el-form-item label="来源" prop="source">
- <el-select v-model="formData.source" placeholder="请选择来源">
- <el-option
- v-for="dict in getIntDictOptions(DICT_TYPE.MUSEUMS_SOURCE)"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="标本提供者" prop="provider">
- <el-input v-model="formData.provider" placeholder="请输入标本提供者"/>
- </el-form-item>
- <el-form-item label="入藏时间" prop="acquisitionTime">
- <el-date-picker
- v-model="formData.acquisitionTime"
- type="date"
- value-format="x"
- placeholder="选择入藏时间"
- />
- </el-form-item>
- <el-form-item label="用途" prop="purpose">
- <el-input v-model="formData.purpose" placeholder="请输入用途"/>
- </el-form-item>
- <el-form-item label="描述" prop="description">
- <Editor v-model="formData.description" height="150px"/>
- </el-form-item>
- <el-form-item label="馆藏状态" prop="collectionStatus">
- <el-radio-group v-model="formData.collectionStatus">
- <el-radio
- v-for="dict in getIntDictOptions(DICT_TYPE.MUSEUMS_COLLECTION_STATUS)"
- :key="dict.value"
- :label="dict.value"
- >
- {{ dict.label }}
- </el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="备注" prop="notes">
- <el-input v-model="formData.notes" placeholder="请输入备注"/>
- </el-form-item>
- <el-form-item label="图片名称" prop="imageName">
- <el-input v-model="formData.imageName" placeholder="请输入图片名称"/>
- </el-form-item>
- <el-form-item label="图片路径" prop="imagePath">
- <UploadImg v-model="formData.imagePath" />
- <!-- <el-upload-->
- <!-- v-model="formData.imagePath"-->
- <!-- class="upload-demo"-->
- <!-- drag-->
- <!-- :action="importUrl + '?updateSupport=' + updateSupport"-->
- <!-- :on-success="submitFormSuccess"-->
- <!-- style="max-width:250px;max-height: 20vh;margin-left: 20px"-->
- <!-- >-->
- <!-- <el-icon class="el-icon--upload"><upload-filled /></el-icon>-->
- <!-- <div class="el-upload__text">-->
- <!-- <em>点击批量上传图片</em>-->
- <!-- </div>-->
- <!-- <template #tip>-->
- <!-- <div class="el-upload__tip">-->
- <!-- <el-checkbox v-model="updateSupport" />-->
- <!-- 是否更新已经存在的标本图片-->
- <!-- </div>-->
- <!-- </template>-->
- <!-- </el-upload>-->
- </el-form-item>
- <el-form-item label="注销原因" prop="deletedReason">
- <el-input v-model="formData.deletedReason" placeholder="请输入注销原因"/>
- </el-form-item>
- <el-form-item label="入库操作员" prop="operator">
- <el-input v-model="formData.operator" placeholder="请输入入库操作员"/>
- </el-form-item>
- <el-form-item label="入库时间" prop="entryDate">
- <el-date-picker
- v-model="formData.entryDate"
- type="date"
- value-format="x"
- placeholder="选择入库时间"
- />
- </el-form-item>
- </el-form>
- <template #footer>
- <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
- <el-button @click="dialogVisible = false">取 消</el-button>
- </template>
- </Dialog>
- </template>
- <script setup lang="ts">
- import {getIntDictOptions, DICT_TYPE} from '@/utils/dict'
- import {SpecimenInfoApi, SpecimenInfoVO} from '@/api/museums/specimeninfo'
- //import type {UploadProps, UploadUserFile} from 'element-plus'
- import { UploadFilled } from '@element-plus/icons-vue'
- import { ref, reactive, defineExpose, defineEmits } from 'vue'
- //import {log} from "echarts/types/src/util/log";
- /** 标本管理 表单 */
- defineOptions({name: 'SpecimenInfoForm'})
- const {t} = useI18n() // 国际化
- const message = useMessage() // 消息弹窗
- const dialogVisible = ref(false) // 弹窗的是否展示
- const dialogTitle = ref('') // 弹窗的标题
- const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
- const formType = ref('') // 表单的类型:create - 新增;update - 修改
- const formData = ref({
- id: undefined,
- specimenType: undefined,
- specimenNumber: undefined,
- assetNumber: undefined,
- storageLocation: undefined,
- chineseName: undefined,
- englishName: undefined,
- composition: undefined,
- origin: undefined,
- era: undefined,
- preservedLayer: undefined,
- meteoriteType: undefined,
- internationalName: undefined,
- discoveryTime: undefined,
- fallTime: undefined,
- preservationType: undefined,
- size: undefined,
- weight: undefined,
- source: undefined,
- provider: undefined,
- acquisitionTime: undefined,
- purpose: undefined,
- description: undefined,
- collectionStatus: undefined,
- notes: undefined,
- imageName: undefined,
- imagePath: undefined,
- deletedReason: undefined,
- operator: undefined,
- entryDate: undefined
- })
- const formRules = reactive({
- specimenType: [{
- required: true,
- message: '标本类型(矿物、岩石矿石、化石、陨石)不能为空',
- trigger: 'change'
- }],
- specimenNumber: [{required: true, message: '标本编号不能为空', trigger: 'blur'}]
- })
- const formRef = ref() // 表单 Ref
- const updateSupport = ref(0) // 是否更新已经存在的用户数据
- const importUrl =
- import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/museums/specimen-info/import-specimen-images'
- /** 打开弹窗 */
- const open = async (type: string, id?: number) => {
- dialogVisible.value = true
- dialogTitle.value = t('action.' + type)
- formType.value = type
- //updateSupport.value = 0
- resetForm()
- // 修改时,设置数据
- if (id) {
- formLoading.value = true
- try {
- formData.value = await SpecimenInfoApi.getSpecimenInfo(id)
- } finally {
- formLoading.value = false
- }
- }
- }
- defineExpose({open}) // 提供 open 方法,用于打开弹窗
- /** 提交表单 */
- const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
- const submitForm = async () => {
- // 校验表单
- await formRef.value.validate()
- // 提交请求
- formLoading.value = true
- try {
- const data = formData.value as unknown as SpecimenInfoVO
- if (formType.value === 'create') {
- await SpecimenInfoApi.createSpecimenInfo(data)
- message.success(t('common.createSuccess'))
- } else {
- await SpecimenInfoApi.updateSpecimenInfo(data)
- message.success(t('common.updateSuccess'))
- }
- dialogVisible.value = false
- // 发送操作成功的事件
- emit('success')
- } finally {
- formLoading.value = false
- }
- }
- /**图片上传**/
- // /** 图片上传成功 */
- //
- // const submitFormSuccess = (response: any) => {
- // console.log('tj',response)
- // if (response.code !== 0) {
- // message.error(response.msg)
- // formLoading.value = false
- // return
- // }
- // formLoading.value = false
- // dialogVisible.value = false
- // // 发送操作成功的事件
- //
- // }
- /** 重置表单 */
- const resetForm = () => {
- formData.value = {
- id: undefined,
- specimenType: undefined,
- specimenNumber: undefined,
- assetNumber: undefined,
- storageLocation: undefined,
- chineseName: undefined,
- englishName: undefined,
- composition: undefined,
- origin: undefined,
- era: undefined,
- preservedLayer: undefined,
- meteoriteType: undefined,
- internationalName: undefined,
- discoveryTime: undefined,
- fallTime: undefined,
- preservationType: undefined,
- size: undefined,
- weight: undefined,
- source: undefined,
- provider: undefined,
- acquisitionTime: undefined,
- purpose: undefined,
- description: undefined,
- collectionStatus: undefined,
- notes: undefined,
- imageName: undefined,
- imagePath: undefined,
- deletedReason: undefined,
- operator: undefined,
- entryDate: undefined
- }
- formRef.value?.resetFields()
- }
- </script>
|