2025-07-04 16:19:09 +08:00

204 lines
6.1 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.

<template>
<a-modal :open="modal.open" :title="modal.title" :width="640" :confirm-loading="modal.confirmLoading"
:after-close="onAfterClose" :cancel-text="cancelText" :ok-text="okText" @ok="handleOk" @cancel="handleCancel">
<a-form ref="formRef" :model="formData" :rules="formRules">
<a-card class="mb-8-2">
<a-row :gutter="12">
<a-col :span="24">
<a-form-item :label="'名称'" name="name">
<a-input :placeholder="'请输入名称'" v-model:value="formData.name"></a-input>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item :label="'顺序'" name="sequence">
<a-input-number :placeholder="'请输入顺序'" v-model:value="formData.sequence"></a-input-number>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item :label="'状态'" name="status">
<a-radio-group v-model:value="formData.status" :options="[
{ label: '启用', value: 'enabled' },
{ label: '停用', value: 'disabled' },
]"></a-radio-group>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item :label="'图片'" name="img">
<x-upload-image v-model="img" @imgChange="imgChange" />
<p class="hint">310*206px图片大小不超过100kb</p>
</a-form-item>
</a-col>
</a-row>
</a-card>
</a-form>
</a-modal>
</template>
<script setup>
import { cloneDeep } from 'lodash-es'
import { ref } from 'vue'
import { config } from '@/config'
import apis from '@/apis'
import { useForm, useModal } from '@/hooks'
import { message } from 'ant-design-vue'
import { useI18n } from 'vue-i18n'
import dayjs from 'dayjs'
import { createMenu, getMenu, updateMenu } from '@/apis/modules/imgmgt'
const emit = defineEmits(['ok'])
const { t } = useI18n() // 解构出t方法
const { modal, showModal, hideModal, showLoading, hideLoading } = useModal()
const { formRecord, formData, formRef, formRules, resetForm } = useForm()
const cancelText = ref(t('button.cancel'))
const okText = ref(t('button.confirm'))
const rolesValue = ref([])
const roles = ref([])
const img = ref('')
formRules.value = {
name: { required: true, message: '请输入名称' },
status: [{ required: true, message: '请选择状态', trigger: 'change' }],
sequence: [{ required: true, message: '请选择顺序', trigger: 'change' }],
img: [{ required: true, message: '请上传图片', trigger: 'change' }],
}
/**
* select 选择框
*/
const handleChange = (value) => {
rolesValue.value = value
}
const imgChange = (value) => {
formData.value.img = value
}
/**
* 新建
*/
function handleCreate() {
showModal({
type: 'create',
// 80对应about
title: '添加',
})
formData.value.status = 'enabled'
}
/**
* 编辑
*/
async function handleEdit(record = {}) {
showModal({
type: 'edit',
title: t('pages.system.user.edit'),
})
const { data, success } = await apis.imgmgt.getMenu(record.id).catch()
if (!success) {
hideModal()
return
}
formData.value = { ...data }
formData.value.pushAt=dayjs(data.pushAt)
console.log(formData.value)
img.value = config('http.apiBasic') + data.img
}
/**
* 确定
*/
function handleOk() {
if (!formData.value.img) return message.error('请上传图片');
formRef.value.validateFields().then(async (values) => {
console.log(values)
try {
showLoading()
const params = {
...values,
img: formData.value.img,
// pushAt:dayjs(formData.value.pushAt).format("YYYY-MM-DD"),
type: 90 ,
// 90对应talentCenter
}
let result = null
console.log(modal.value.type)
switch (modal.value.type) {
case 'create':
result = await apis.imgmgt.createMenu(params).catch(() => {
throw new Error()
})
break
case 'edit':
// result = await apis.imgmgt.updateMenu(formData.value.id, params).catch(() => {
result = await apis.imgmgt.updateMenu(formData.value.id, params).catch(() => {
throw new Error()
})
break
}
hideLoading()
if (config('http.code.success') === result?.success) {
hideModal()
emit('ok')
}
} catch (error) {
console.log(error)
hideLoading()
}
})
.catch((e) => {
console.log(e)
hideLoading()
})
}
/**
* 对权限组 过数据格式
*/
function formatArr(data, type = '') {
const rolesArr = []
data.forEach((item) => {
roles.value.forEach((r) => {
if (type === 'edit') {
if (item.role_id === r.value) {
rolesArr.push({
value: item.role_id,
label: r.label,
})
return
}
} else if (r.value === item) {
rolesArr.push({
role_id: item,
role_name: r.label,
})
return
}
})
})
return rolesArr
}
/**
* 取消
*/
function handleCancel() {
img.value = ''
hideModal()
}
/**
* 关闭后
*/
function onAfterClose() {
resetForm()
hideLoading()
}
defineExpose({
handleCreate,
handleEdit,
})
</script>
<style lang="less" scoped>
.hint {
color: red;
margin: 10px 0;
}
</style>