wanggaokun 1 год назад
Родитель
Сommit
86e84ed1bf

+ 4 - 1
.env.production

@@ -30,4 +30,7 @@ VITE_APP_RSA_PRIVATE_KEY = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAmc3C
 VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
 
 # 线上环境接口地址
-VITE_API_URL = "http://localhost:8080"
+VITE_API_URL = /api-pro
+
+# 开发环境跨域代理,支持配置多个
+VITE_PROXY = [["/api-pro","http://localhost:8080"]]

+ 0 - 96
src/components/DialogOld/form.vue

@@ -1,96 +0,0 @@
-<template>
-  <el-dialog
-    v-model="dialogVisible"
-    :close-on-click-modal="false"
-    :title="parameter.title"
-    :destroy-on-close="true"
-    :width="parameter.width"
-    :top="parameter.top"
-    draggable
-  >
-    <ProFrom ref="proFormRef" :field-list="parameter.fieldList" :options="_options" :model="parameter.model" />
-    <template #footer>
-      <span class="dialog-footer">
-        <el-button type="primary" v-if="parameter.isEdit" :loading="butLoading" @click="handleSubmit">确认</el-button>
-        <el-button @click="handleCancel">取消</el-button>
-      </span>
-    </template>
-  </el-dialog>
-</template>
-
-<script setup lang="ts" name="FormDialog">
-import { ref } from 'vue'
-import ProFrom from '@/components/ProFormOld/index.vue'
-import { ElMessage } from 'element-plus'
-
-export interface FormParameterProps {
-  title: string // 标题
-  width?: number // 弹框宽度
-  labelWidth?: number // label宽度
-  api?: (params: any) => Promise<any> // 表单提交api
-  fieldList: Form.FieldItem[] // 动态表单字段
-  isEdit?: boolean // 是否编辑
-  top?: string // 离顶部距离
-  model?: Record<string, any> // 表单数据对象
-  getTableList?: () => void // 获取表格数据的Api
-}
-// dialog状态
-const dialogVisible = ref(false)
-const butLoading = ref(false)
-// 父组件传过来的参数
-const parameter = ref<FormParameterProps>({
-  title: '',
-  width: 500,
-  top: '8vh',
-  fieldList: [],
-  isEdit: true
-})
-const _options: Form.Options = {
-  labelWidth: 100,
-  hasFooter: false,
-  disabled: false
-}
-const proFormRef = ref<InstanceType<typeof ProFrom> | null>(null)
-// 表单提交校验
-const handleSubmit = () => {
-  const formEl = proFormRef.value?.formRef
-  butLoading.value = true
-  if (!formEl) return
-  formEl.validate(valid => {
-    if (valid) {
-      parameter.value.api!(parameter.value.model).then(res => {
-        if (res.code == 200) {
-          proFormRef.value?.resetForm(formEl)
-          ElMessage.success('操作成功')
-          dialogVisible.value = false
-          parameter.value.getTableList && parameter.value.getTableList()
-        } else {
-          console.log('message', res.message)
-        }
-      })
-      butLoading.value = false
-    }
-  })
-}
-
-// 取消按钮,重置表单,关闭弹框
-const handleCancel = () => {
-  const formEl = proFormRef.value?.formRef
-  if (!formEl) return
-  proFormRef.value?.resetForm(formEl)
-  butLoading.value = false
-  dialogVisible.value = false
-}
-
-// 接收父组件参数
-const openDialog = (params: FormParameterProps) => {
-  parameter.value = { ...parameter.value, ...params }
-  _options.disabled = !parameter.value.isEdit
-  butLoading.value = false
-  dialogVisible.value = true
-}
-
-defineExpose({
-  openDialog
-})
-</script>

+ 0 - 105
src/components/DialogOld/table.vue

@@ -1,105 +0,0 @@
-<template>
-  <el-dialog
-    v-model="dialogVisible"
-    :close-on-click-modal="false"
-    :title="parameter.title"
-    :destroy-on-close="true"
-    :width="parameter.width"
-    :top="parameter.top"
-    draggable
-  >
-    <ProTable
-      ref="proTable"
-      height="50vh"
-      :tool-button="parameter.toolButton"
-      :columns="parameter.columns"
-      row-key="roleId"
-      :request-api="parameter.getTableList"
-      :init-param="initParam"
-    />
-    <template #footer>
-      <span class="dialog-footer">
-        <el-button type="primary" :loading="butLoading" @click="handleSubmit">确认</el-button>
-        <el-button @click="handleCancel">取消</el-button>
-      </span>
-    </template>
-  </el-dialog>
-</template>
-
-<script setup lang="ts" name="FormDialog">
-import { ref, reactive } from 'vue'
-import ProTable from '@/components/ProTable/index.vue'
-import { ElMessage } from 'element-plus'
-import { ProTableInstance, ColumnProps } from '@/components/ProTable/interface'
-
-export interface TableParameterProps {
-  title?: string // 标题
-  width?: number // 弹框宽度
-  top?: string // 离顶部距离
-  toolButton?: boolean
-  api?: (params: any) => Promise<any> // 表单提交api
-  columns?: ColumnProps[] // 动态表单字段
-  getTableList?: (params: any) => Promise<any> // 获取表格数据的Api
-  backTableList?: (params: any) => Promise<any> // 返回主表表格数据的Api
-}
-// dialog状态
-const dialogVisible = ref(false)
-const butLoading = ref(false)
-
-// 接受父组件参数,配置默认值
-// const parameter = ref<TableParameterProps>({
-//   title: '',
-//   width: 600,
-//   top: '5vh',
-//   toolButton: false,
-//   columns: [] as ColumnProps[]
-// })
-let parameter = withDefaults(defineProps<TableParameterProps>(), {
-  title: '',
-  width: 600,
-  top: '5vh',
-  toolButton: false,
-  columns: () => []
-})
-// ProTable 实例
-const proTable = ref<ProTableInstance>()
-
-const initParam = reactive({ deptId: '' })
-// 定义 emit 事件
-const emit = defineEmits<{
-  submitForm: []
-}>()
-// 表单提交校验
-const handleSubmit = () => {
-  butLoading.value = true
-  let tableNames: any[] | undefined = proTable.value?.selectedList.map(item => item.tableName)
-  parameter.api!(tableNames).then(res => {
-    if (res.code == 200) {
-      ElMessage.success('操作成功')
-      dialogVisible.value = false
-      emit('submitForm')
-    } else {
-      console.log('message', res.message)
-    }
-  })
-  butLoading.value = false
-}
-
-// 取消按钮,重置表单,关闭弹框
-const handleCancel = () => {
-  butLoading.value = false
-  dialogVisible.value = false
-}
-
-// 接收父组件参数
-const openDialog = (params: TableParameterProps) => {
-  parameter = { ...parameter, ...params }
-  butLoading.value = false
-  dialogVisible.value = true
-}
-
-defineExpose({
-  openDialog
-})
-</script>
-<style scoped lang="scss"></style>

+ 0 - 227
src/components/ProFormOld/index.vue

@@ -1,227 +0,0 @@
-<template>
-  <el-form @submit.prevent :model="formModel" v-bind="_options" ref="formRef">
-    <el-row :gutter="5">
-      <template v-for="(item, index) in fieldList" :key="index">
-        <el-col :span="item.span || 24">
-          <el-form-item :rules="item.rules" :title="item.label" :prop="[item.field]">
-            <template #label>
-              <el-space :size="1">
-                <span>{{ `${item.label}` }}</span>
-                <el-tooltip v-if="item?.tooltip" effect="dark" :content="item.tooltip" placement="top">
-                  <i :class="'iconfont icon-yiwen'"></i>
-                </el-tooltip>
-              </el-space>
-            </template>
-            <template #default>
-              <!-- 单选框 -->
-              <el-radio-group v-if="item.type === 'radio'" v-model="formModel[item.field]" :disabled="item.disabled">
-                <el-radio
-                  :label="val[item.options?.valueKey || 'value']"
-                  v-for="val in item.options?.data"
-                  :key="val[item.options?.valueKey || 'value']"
-                >
-                  {{ val[item.options?.labelKey || 'label'] }}
-                </el-radio>
-              </el-radio-group>
-              <!-- 复选框 -->
-              <el-checkbox-group v-else-if="item.type === 'checkbox'" v-model="formModel[item.field]" :disabled="item.disabled">
-                <el-checkbox
-                  v-for="val in item.options?.data"
-                  :key="val[item.options?.valueKey || 'value']"
-                  :label="val[item.options?.valueKey || 'value']"
-                  >{{ val[item.options?.labelKey || 'label'] }}
-                </el-checkbox>
-              </el-checkbox-group>
-              <!-- 下拉框 -->
-              <el-select
-                v-else-if="item.type === 'select'"
-                v-model="formModel[item.field]"
-                :placeholder="item.options?.placeholder || '请选择'"
-                :clearable="item.clearable"
-                :multiple="item.options?.multiple"
-                :filterable="item.options?.filterable"
-                :allow-create="item.options?.allowCreate"
-                :disabled="item.disabled"
-              >
-                <el-option
-                  v-for="val in item.options?.data"
-                  :key="val[item.options?.valueKey || 'value']"
-                  :label="val[item.options?.labelKey || 'label']"
-                  :value="val[item.options?.valueKey || 'value']"
-                />
-              </el-select>
-              <el-tree-select
-                v-else-if="item.type === 'select-tree'"
-                v-model="formModel[item.field]"
-                :data="item.options?.data"
-                :props="{
-                  label: `${item.options?.labelKey || 'label'}`,
-                  children: `${item.options?.children || 'children'}`
-                }"
-                :node-key="`${item.options?.valueKey || 'id'}`"
-                placeholder="请选择归属部门"
-                clearable
-                check-strictly
-              />
-              <!-- 时间 -->
-              <el-date-picker
-                v-else-if="item.type === 'date-picker'"
-                v-model="formModel[item.field]"
-                :readonly="item.readonly"
-                :type="item.options?.type ?? 'data'"
-                :placeholder="item.placeholder || item.label"
-                :disabled="item.disabled"
-                :value-format="item.options?.valueFormat ?? 'YYYY-MM-DD HH:mm:ss'"
-                :clearable="item.clearable"
-              />
-              <el-input-number
-                v-else-if="item.type === 'input-number'"
-                v-model="formModel[item.field]"
-                :min="item.options?.min"
-                :max="item.options?.max"
-                controls-position="right"
-              />
-              <SelectIcon v-else-if="item.type === 'select-icon'" v-model:icon-value="formModel[item.field]" />
-              <!-- 默认输入框 -->
-              <el-input
-                v-else
-                v-model="formModel[item.field]"
-                :readonly="item.readonly"
-                :type="item.type ?? 'text'"
-                :placeholder="item.placeholder || item.label"
-                :disabled="item.disabled"
-                :show-password="item.showPassword"
-                :clearable="item.clearable"
-                @keyup.enter="handleKeyUp(item.enterable)"
-              />
-            </template>
-          </el-form-item>
-        </el-col>
-      </template>
-    </el-row>
-    <el-form-item v-if="_options.hasFooter">
-      <slot name="buttons" :model="formModel" :form-ref="formRef">
-        <el-button type="primary" @click="onSubmit(formRef)">{{ _options.submitButtonText }}</el-button>
-        <el-button v-if="_options.showResetButton" type="info" @click="resetForm(formRef)">
-          {{ _options.resetButtonText }}
-        </el-button>
-        <el-button v-if="_options.showCancelButton" @click="emit('cancel')">
-          {{ _options.cancelButtonText }}
-        </el-button>
-      </slot>
-    </el-form-item>
-  </el-form>
-</template>
-<script setup lang="ts" name="ProFormOld">
-import type { FormInstance } from 'element-plus'
-import { ComputedRef, ref, computed, watch, unref } from 'vue'
-import SelectIcon from '@/components/SelectIcon/index.vue'
-// 父组件传递的值
-export interface ProFormProps {
-  fieldList: Form.FieldItem[]
-  model?: Record<Form.FieldItem['field'], Form.FieldItem['value']>
-  options?: Form.Options
-}
-
-// 表单的数据
-const formModel = ref<Record<string, any>>({})
-const formRef = ref<FormInstance>()
-const props = defineProps<ProFormProps>()
-
-// 设置option默认值,如果传入自定义的配置则合并option配置项
-const _options: ComputedRef<Form.Options> = computed(() => {
-  const option = {
-    labelPosition: 'right',
-    disabled: false,
-    hasFooter: true,
-    submitButtonText: '提交',
-    resetButtonText: '重置',
-    cancelButtonText: '取消'
-  }
-  return Object.assign(option, props?.options)
-})
-interface EmitEvent {
-  (e: 'submit', params: any): void
-  (e: 'reset'): void
-  (e: 'cancel'): void
-}
-const enumMap = ref(new Map<string, { [key: string]: any }[]>())
-const setEnumMap = async ({ field, enum: enumValue }: Form.FieldItem) => {
-  if (!enumValue) return
-
-  // 如果当前 enumMap 存在相同的值 return
-  if (enumMap.value.has(field!) && (typeof enumValue === 'function' || enumMap.value.get(field!) === enumValue)) return
-
-  // 当前 enum 为静态数据,则直接存储到 enumMap
-  if (typeof enumValue !== 'function') return enumMap.value.set(field!, unref(enumValue!))
-
-  // 为了防止接口执行慢,而存储慢,导致重复请求,所以预先存储为[],接口返回后再二次存储
-  enumMap.value.set(field!, [])
-
-  // 当前 enum 为后台数据需要请求数据,则调用该请求接口,并存储到 enumMap
-  let { data } = await enumValue()
-  enumMap.value.set(field!, data)
-}
-
-// 处理枚举
-const handelEnum = (item: Form.FieldItem) => {
-  let enumData = enumMap.value.get(item.field)
-  if (!enumData) return []
-  // 返回对象类型
-  if (item.type === 'select-tree' && item.options?.labelKey && item.options?.valueKey) {
-    enumData = enumData.map((el: { [key: string]: any }) => {
-      return {
-        ...el,
-        label: el[item.options?.labelKey || 'label'],
-        children: el[item.options?.children || 'children'] || []
-      }
-    })
-  }
-  return enumData
-}
-// 处理表单项需要的参数
-props.fieldList.forEach(async item => {
-  await setEnumMap(item)
-  if (item.options) item.options.data = handelEnum(item)
-})
-const emit = defineEmits<EmitEvent>()
-// 根据fieldList初始化model, 如果formModel有传值就用传递的model数据模型,否则就给上面声明的formModel设置相应的(key,value) [item.field], item.value是表单的默认值(选填)
-watch(
-  () => props.model,
-  () => {
-    props.fieldList.map((item: Form.FieldItem) => {
-      // 如果类型为checkbox,默认值需要设置一个空数组
-      const value = item.type === 'checkbox' ? [] : ''
-      props.model ? (formModel.value = props.model) : (formModel.value[item.field] = item.value || value)
-    })
-  },
-  { immediate: true }
-)
-
-// 提交按钮
-const onSubmit = (formEl: FormInstance | undefined) => {
-  if (!formEl) return
-  formEl.validate(valid => {
-    if (valid) {
-      emit('submit', formModel.value)
-    } else {
-      return false
-    }
-  })
-}
-// 输入框回车事件
-const handleKeyUp = (enterable: boolean | undefined) => {
-  if (!enterable) return
-  onSubmit(formRef.value)
-}
-// 重置
-const resetForm = (formEl: FormInstance | undefined) => {
-  if (!formEl) return
-  formEl.resetFields()
-}
-defineExpose({
-  formRef,
-  resetForm,
-  onSubmit
-})
-</script>

+ 0 - 77
src/typings/ProFormOld.d.ts

@@ -1,77 +0,0 @@
-import { type FormItemRule } from 'element-plus'
-export = Form
-export as namespace Form
-export type FieldNamesProps = {
-  label: string
-  value: string
-  children?: string
-}
-export interface EnumProps {
-  label?: string // 选项框显示的文字
-  value?: string | number | boolean | any[] // 选项框值
-  disabled?: boolean // 是否禁用此选项
-  tagType?: string // 当 tag 为 true 时,此选择会指定 tag 显示类型
-  children?: EnumProps[] // 为树形选择时,可以通过 children 属性指定子选项
-  [key: string]: any
-}
-declare namespace Form {
-  type ItemType =
-    | 'password'
-    | 'text'
-    | 'textarea'
-    | 'radio'
-    | 'checkbox'
-    | 'select'
-    | 'select-v2'
-    | 'select-tree'
-    | 'date-picker'
-    | 'input-number'
-    | 'select-icon'
-  // 当FiledItem的type === 'radio' | 'checkbox'时的需要的参数类型
-  interface IFieldOptions {
-    labelKey?: string
-    valueKey?: string
-    children?: string
-    placeholder?: string
-    data?: Record<string, any>[]
-    multiple?: boolean
-    type?: IDatePickerType
-    max?: number
-    min?: number
-    filterable?: boolean
-    allowCreate?: boolean
-    clearable?: boolean
-    valueFormat?: string
-  }
-  interface Options {
-    labelWidth?: string | number
-    labelPosition?: 'left' | 'right' | 'top'
-    disabled?: boolean
-    size?: 'large' | 'small' | 'default'
-    showResetButton?: boolean // 是否展示重置按钮
-    showCancelButton?: boolean // 是否展示取消按钮
-    submitButtonText?: string
-    resetButtonText?: string
-    cancelButtonText?: string
-    blockSubmitButton?: boolean // 提交按钮是否以块级按钮呈现
-    hasFooter?: boolean // 表单是否有footer
-  }
-  interface FieldItem {
-    label?: string
-    labelWidth?: string | number // 标签宽度,例如 '50px'。 可以使用 auto。
-    field: string
-    type?: ItemType
-    tooltip?: string // 问号,tooltip提示
-    value?: any
-    placeholder?: string
-    disabled?: boolean
-    readonly?: boolean
-    options?: IFieldOptions
-    rules?: FormItemRule[]
-    clearable?: boolean // 是否可清空
-    showPassword?: boolean // 是否显示切换密码图标
-    enterable?: boolean // 当为输入框时,是否启用回车触发提交功能
-    span?: number // 表单col宽度
-    enum?: EnumProps[] | Ref<EnumProps[]> | ((params?: any) => Promise<any>) // 枚举字典
-  }
-}

+ 0 - 4
src/views/monitor/logininfor/index.vue

@@ -1,7 +1,6 @@
 <template>
   <div class="table-box">
     <ProTable ref="proTable" :columns="columns" row-key="infoId" :request-api="listLogininforApi" :init-param="initParam"> </ProTable>
-    <FormDialog ref="formDialogRef" />
     <ImportExcel ref="dialogRef" />
   </div>
 </template>
@@ -10,7 +9,6 @@
 import { ref, reactive } from 'vue'
 import ProTable from '@/components/ProTable/index.vue'
 import ImportExcel from '@/components/ImportExcel/index.vue'
-import FormDialog from '@/components/DialogOld/form.vue'
 import { ProTableInstance, ColumnProps } from '@/components/ProTable/interface'
 import { listLogininforApi } from '@/api/modules/monitor/logininfor'
 import { getDictsApi } from '@/api/modules/system/dictData'
@@ -24,8 +22,6 @@ const initParam = reactive({ type: 1 })
 // 批量添加系统访问记录
 const dialogRef = ref<InstanceType<typeof ImportExcel> | null>(null)
 
-const formDialogRef = ref<InstanceType<typeof FormDialog> | null>(null)
-
 // 表格配置项
 const columns = reactive<ColumnProps<any>[]>([
   { prop: 'infoId', label: '访问ID' },