|
@@ -0,0 +1,187 @@
|
|
|
+<template>
|
|
|
+ <ElDrawer ref="elDrawerRef" v-model="drawerVisible" :title="drawerProps.title" v-bind="$attrs" destroy-on-close>
|
|
|
+ <template #header="scope">
|
|
|
+ <slot name="header" v-bind="scope">
|
|
|
+ <div style="display: flex">
|
|
|
+ <slot name="title">
|
|
|
+ <span style="flex: 1">{{ drawerProps.title }}</span>
|
|
|
+ </slot>
|
|
|
+ </div>
|
|
|
+ </slot>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <el-form
|
|
|
+ ref="ruleFormRef"
|
|
|
+ label-width="100px"
|
|
|
+ label-suffix=" :"
|
|
|
+ label-position="top"
|
|
|
+ :rules="rules"
|
|
|
+ :model="drawerProps.row"
|
|
|
+ @submit.enter.prevent="handleConfirm">
|
|
|
+ <el-form-item label="上级字典" prop="parentId">
|
|
|
+ <el-tree-select
|
|
|
+ v-model="drawerProps.row.parentId"
|
|
|
+ :data="treeData"
|
|
|
+ check-strictly
|
|
|
+ placeholder="请选择上级"
|
|
|
+ :render-after-expand="false"
|
|
|
+ clearable
|
|
|
+ :default-expand-all="true"
|
|
|
+ :props="treeProps" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="字典标签" prop="dictLabel">
|
|
|
+ <el-input v-model="drawerProps.row.dictLabel" placeholder="字典标签" clearable />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="字典值" prop="dictValue">
|
|
|
+ <el-input v-model="drawerProps.row.dictValue" placeholder="字典值" clearable />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="排序" prop="orderNum">
|
|
|
+ <el-input-number v-model="drawerProps.row.orderNum" :precision="0" :min="1" :max="999999" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="状态" prop="status">
|
|
|
+ <el-radio-group v-model="drawerProps.row.status" default-value="1">
|
|
|
+ <el-radio-button label="启用" value="1" />
|
|
|
+ <el-radio-button label="停用" value="0" />
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="回显样式" prop="callbackShowStyle">
|
|
|
+ <el-radio-group v-model="drawerProps.row.callbackShowStyle">
|
|
|
+ <el-radio :value="item.value" v-for="item in tagsTypeOptions" :key="item.label">
|
|
|
+ <el-tag :type="item.value">
|
|
|
+ {{ item.label }}
|
|
|
+ </el-tag>
|
|
|
+ </el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="备注" prop="remark">
|
|
|
+ <el-input v-model="drawerProps.row.remark" placeholder="请填写备注" clearable />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <template #footer>
|
|
|
+ <slot name="footer">
|
|
|
+ <ElButton @click="drawerVisible = false">取 消</ElButton>
|
|
|
+ <ElButton type="primary" @click="handleConfirm()">确 定</ElButton>
|
|
|
+ </slot>
|
|
|
+ </template>
|
|
|
+ </ElDrawer>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts" name="OrgForm">
|
|
|
+import { DictBo, DictTreeVO } from '@/api/interface/system/dict'
|
|
|
+import DictApi from '@/api/module/system/dict'
|
|
|
+import { ResultEnum } from '@/enums/HttpEnum'
|
|
|
+export interface Options {
|
|
|
+ id?: number
|
|
|
+ label: string
|
|
|
+ value: string
|
|
|
+}
|
|
|
+/**
|
|
|
+ * 标签类型
|
|
|
+ * @type {[Options,Options]}
|
|
|
+ */
|
|
|
+const tagsTypeOptions: Options[] = [
|
|
|
+ {
|
|
|
+ id: 1,
|
|
|
+ label: 'Default',
|
|
|
+ value: 'primary'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 2,
|
|
|
+ label: 'Success',
|
|
|
+ value: 'success'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 3,
|
|
|
+ label: 'Info',
|
|
|
+ value: 'info'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 4,
|
|
|
+ label: 'Warning',
|
|
|
+ value: 'warning'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 5,
|
|
|
+ label: 'Danger',
|
|
|
+ value: 'danger'
|
|
|
+ }
|
|
|
+]
|
|
|
+import { FormInstance } from 'element-plus'
|
|
|
+const rules = reactive({
|
|
|
+ name: [{ required: true, message: '请填写组织名称' }],
|
|
|
+ parentId: [{ required: true, message: '请选择上级' }],
|
|
|
+ orderNum: [{ required: true, message: '排序不能为空' }],
|
|
|
+ status: [{ required: true, message: '状态不能为空' }]
|
|
|
+})
|
|
|
+
|
|
|
+interface EcoDrawerProps {
|
|
|
+ api?: (params: any) => Promise<any> // 调用接口
|
|
|
+ title: string // 顶部标题
|
|
|
+ isView: boolean
|
|
|
+ row: Partial<DictBo>
|
|
|
+ getTableList?: () => void
|
|
|
+}
|
|
|
+
|
|
|
+const treeData = ref<DictTreeVO[]>([])
|
|
|
+const treeProps = {
|
|
|
+ value: 'dictId',
|
|
|
+ label: 'dictLabel'
|
|
|
+}
|
|
|
+
|
|
|
+const drawerVisible = ref(false)
|
|
|
+const drawerProps = ref<EcoDrawerProps>({
|
|
|
+ isView: false,
|
|
|
+ title: '',
|
|
|
+ row: {}
|
|
|
+})
|
|
|
+
|
|
|
+// emit
|
|
|
+const emit = defineEmits(['submit'])
|
|
|
+
|
|
|
+// 接收父组件传过来的参数
|
|
|
+const acceptParams = (params: EcoDrawerProps) => {
|
|
|
+ drawerProps.value = params
|
|
|
+ drawerVisible.value = true
|
|
|
+ loadTree()
|
|
|
+ console.log(drawerProps.value.row.parentId)
|
|
|
+}
|
|
|
+
|
|
|
+const loadTree = () => {
|
|
|
+ DictApi.tree().then(res => {
|
|
|
+ treeData.value = [
|
|
|
+ {
|
|
|
+ parentId: '-1',
|
|
|
+ dictId: '0',
|
|
|
+ dictLabel: '顶层',
|
|
|
+ children: res.data
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+// 提交数据(新增/编辑)
|
|
|
+const ruleFormRef = ref<FormInstance>()
|
|
|
+const handleConfirm = () => {
|
|
|
+ ruleFormRef.value!.validate(async valid => {
|
|
|
+ if (!valid) return
|
|
|
+ try {
|
|
|
+ const { code } = await drawerProps.value.api!(drawerProps.value.row)
|
|
|
+ if (code == ResultEnum.SUCCESS) {
|
|
|
+ ElMessage.success({ message: `${drawerProps.value.title}成功!` })
|
|
|
+ drawerProps.value.getTableList!()
|
|
|
+ emit('submit')
|
|
|
+ drawerVisible.value = false
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.log(error)
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+defineExpose({
|
|
|
+ acceptParams
|
|
|
+})
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped lang="scss"></style>
|