基础资料优化处理
							parent
							
								
									af997e65b1
								
							
						
					
					
						commit
						be3e482df7
					
				| 
						 | 
				
			
			@ -0,0 +1,81 @@
 | 
			
		|||
<template>
 | 
			
		||||
	<a-card :bordered="false">
 | 
			
		||||
		<a-form ref="formRef" :model="formState" class="ant-advanced-search-form">
 | 
			
		||||
			<a-row :gutter="24">
 | 
			
		||||
				<a-col v-for="field in visibleFields" :key="field.name" :span="6" v-show="field.visible !== false">
 | 
			
		||||
					<a-form-item :label="field.label" :name="field.name">
 | 
			
		||||
						<component :is="field.component" v-model:value="formState[field.name]" v-bind="field.props" />
 | 
			
		||||
					</a-form-item>
 | 
			
		||||
				</a-col>
 | 
			
		||||
				<a-col :span="6">
 | 
			
		||||
					<a-button type="primary" @click="onSearch">查询</a-button>
 | 
			
		||||
					<a-button style="margin: 0 8px" @click="onReset">重置</a-button>
 | 
			
		||||
					<a @click="toggleAdvanced" style="margin-left: 8px" v-if="formFields.length > 3">
 | 
			
		||||
						{{ advanced ? '收起' : '展开' }}
 | 
			
		||||
						<component :is="advanced ? 'up-outlined' : 'down-outlined'" />
 | 
			
		||||
					</a>
 | 
			
		||||
				</a-col>
 | 
			
		||||
			</a-row>
 | 
			
		||||
		</a-form>
 | 
			
		||||
	</a-card>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
	import { ref, defineProps, defineEmits, computed } from 'vue'
 | 
			
		||||
 | 
			
		||||
	const props = defineProps({
 | 
			
		||||
		formState: {
 | 
			
		||||
			type: Object,
 | 
			
		||||
			required: true
 | 
			
		||||
		},
 | 
			
		||||
		formFields: {
 | 
			
		||||
			type: Array,
 | 
			
		||||
			required: true
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	const emit = defineEmits(['search', 'reset', 'toggleAdvanced'])
 | 
			
		||||
 | 
			
		||||
	const formRef = ref(null)
 | 
			
		||||
	const advanced = ref(false)
 | 
			
		||||
 | 
			
		||||
	const visibleFields = ref([])
 | 
			
		||||
 | 
			
		||||
	watch(
 | 
			
		||||
		() => props.formFields,
 | 
			
		||||
		(newValue) => {
 | 
			
		||||
			visibleFields.value = newValue
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			immediate: true
 | 
			
		||||
		}
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	const onSearch = () => {
 | 
			
		||||
		emit('search')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const onReset = () => {
 | 
			
		||||
		formRef.value.resetFields()
 | 
			
		||||
		emit('reset')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const toggleAdvanced = () => {
 | 
			
		||||
		advanced.value = !advanced.value
 | 
			
		||||
		if (advanced.value) {
 | 
			
		||||
			visibleFields.value.forEach((item) => {
 | 
			
		||||
				if (item.visible === false) {
 | 
			
		||||
					item.visible = true
 | 
			
		||||
				}
 | 
			
		||||
			})
 | 
			
		||||
		} else {
 | 
			
		||||
			visibleFields.value.forEach((item) => {
 | 
			
		||||
				if (item.visible !== false && item.isShowVisible) {
 | 
			
		||||
					item.visible = false
 | 
			
		||||
				}
 | 
			
		||||
			})
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		emit('toggleAdvanced', advanced.value)
 | 
			
		||||
	}
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,56 +0,0 @@
 | 
			
		|||
<template>
 | 
			
		||||
	<a-form :model="model" :rules="rules" layout="vertical" ref="searchFormRef">
 | 
			
		||||
		<a-row :gutter="16">
 | 
			
		||||
			<a-col :span="6" v-for="(item, index) in formItems" :key="index">
 | 
			
		||||
				<a-form-item :label="item.label" :name="item.name" :rules="item.rules">
 | 
			
		||||
					<component
 | 
			
		||||
						style="width: 100%"
 | 
			
		||||
						:is="item.type"
 | 
			
		||||
						v-model:value="model[item.name]"
 | 
			
		||||
						:disabled="allDisabled"
 | 
			
		||||
						v-bind="item.attrs"
 | 
			
		||||
					/>
 | 
			
		||||
				</a-form-item>
 | 
			
		||||
			</a-col>
 | 
			
		||||
			<a-col :span="6">
 | 
			
		||||
				<a-button type="primary">查询</a-button>
 | 
			
		||||
				<a-button style="margin: 0 8px">重置</a-button>
 | 
			
		||||
			</a-col>
 | 
			
		||||
		</a-row>
 | 
			
		||||
	</a-form>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
	import { ref, watch } from 'vue'
 | 
			
		||||
 | 
			
		||||
	const props = defineProps({
 | 
			
		||||
		formItems: {
 | 
			
		||||
			type: Array,
 | 
			
		||||
			required: true
 | 
			
		||||
		},
 | 
			
		||||
		model: {
 | 
			
		||||
			type: Object,
 | 
			
		||||
			required: true
 | 
			
		||||
		},
 | 
			
		||||
		rules: {
 | 
			
		||||
			type: Object,
 | 
			
		||||
			default: () => ({})
 | 
			
		||||
		},
 | 
			
		||||
		allDisabled: {
 | 
			
		||||
			type: Boolean,
 | 
			
		||||
			default: false
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	const searchFormRef = ref(null)
 | 
			
		||||
 | 
			
		||||
	// Expose validate method
 | 
			
		||||
	defineExpose({
 | 
			
		||||
		validate: () => searchFormRef.value.validate(),
 | 
			
		||||
		resetFields: () => searchFormRef.value.resetFields()
 | 
			
		||||
	})
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped>
 | 
			
		||||
	/* Add your styles here */
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,145 +0,0 @@
 | 
			
		|||
<template>
 | 
			
		||||
	<div class="table-wrapper">
 | 
			
		||||
		<!-- 工具栏 -->
 | 
			
		||||
		<div class="table-tool">
 | 
			
		||||
			<a-button @click="addRow" type="primary">新增</a-button>
 | 
			
		||||
			<a-button @click="addRow" type="primary">删除</a-button>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<!-- 表格 -->
 | 
			
		||||
		<a-table
 | 
			
		||||
			size="middle"
 | 
			
		||||
			:dataSource="dataSource"
 | 
			
		||||
			:columns="computedColumns"
 | 
			
		||||
			:rowKey="rowKey"
 | 
			
		||||
			@change="handleTableChange"
 | 
			
		||||
			:scroll="{ x: 'max-content' }"
 | 
			
		||||
			:row-selection="rowSelection"
 | 
			
		||||
		>
 | 
			
		||||
			<template #bodyCell="{ column, record }">
 | 
			
		||||
				<template v-if="column.editable">
 | 
			
		||||
					<component
 | 
			
		||||
						style="width: 100%"
 | 
			
		||||
						:is="getComponent(column.dataType)"
 | 
			
		||||
						v-model:value="record[column.dataIndex]"
 | 
			
		||||
						:options="column.options"
 | 
			
		||||
						v-bind="column.attrs"
 | 
			
		||||
					/>
 | 
			
		||||
				</template>
 | 
			
		||||
				<template v-else>
 | 
			
		||||
					<span>{{ record[column.dataIndex] }}</span>
 | 
			
		||||
				</template>
 | 
			
		||||
			</template>
 | 
			
		||||
			<template #actions="{ record }">
 | 
			
		||||
				<a-button @click="edit(record[props.rowKey])" size="small">编辑</a-button>
 | 
			
		||||
				<a-popconfirm title="确定删除吗?" @confirm="() => deleteRow(record[props.rowKey])">
 | 
			
		||||
					<a-button type="danger" size="small">删除</a-button>
 | 
			
		||||
				</a-popconfirm>
 | 
			
		||||
			</template>
 | 
			
		||||
		</a-table>
 | 
			
		||||
	</div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
	import { ref, reactive, computed, defineProps } from 'vue'
 | 
			
		||||
 | 
			
		||||
	// 通过 defineProps 获取外部传递的属性
 | 
			
		||||
	const props = defineProps({
 | 
			
		||||
		initialData: {
 | 
			
		||||
			type: Array,
 | 
			
		||||
			default: () => []
 | 
			
		||||
		},
 | 
			
		||||
		columns: {
 | 
			
		||||
			type: Array,
 | 
			
		||||
			default: () => []
 | 
			
		||||
		},
 | 
			
		||||
		rowKey: {
 | 
			
		||||
			type: String,
 | 
			
		||||
			default: 'key'
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	// 内部数据
 | 
			
		||||
	const dataSource = ref([...props.initialData])
 | 
			
		||||
	const editingKey = ref(null)
 | 
			
		||||
 | 
			
		||||
	// 获取合适的组件
 | 
			
		||||
	const getComponent = (dataType) => {
 | 
			
		||||
		switch (dataType) {
 | 
			
		||||
			case 'number':
 | 
			
		||||
				return 'a-input-number'
 | 
			
		||||
			case 'select':
 | 
			
		||||
				return 'a-select'
 | 
			
		||||
			default:
 | 
			
		||||
				return 'a-input'
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 计算列配置
 | 
			
		||||
	const computedColumns = computed(() => {
 | 
			
		||||
		return props.columns.map((col) => ({
 | 
			
		||||
			...col,
 | 
			
		||||
			editable: col.editable
 | 
			
		||||
		}))
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	const addRow = () => {
 | 
			
		||||
		const newRow = {
 | 
			
		||||
			[props.rowKey]: Date.now().toString(),
 | 
			
		||||
			...props.columns.reduce((acc, col) => {
 | 
			
		||||
				if (col.dataIndex) acc[col.dataIndex] = ''
 | 
			
		||||
				return acc
 | 
			
		||||
			}, {})
 | 
			
		||||
		}
 | 
			
		||||
		dataSource.value = [...dataSource.value, newRow]
 | 
			
		||||
		edit(newRow[props.rowKey])
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const deleteRow = (key) => {
 | 
			
		||||
		dataSource.value = dataSource.value.filter((item) => item[props.rowKey] !== key)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const handleFieldChange = (key, field, value) => {
 | 
			
		||||
		dataSource.value = dataSource.value.map((item) => (item[props.rowKey] === key ? { ...item, [field]: value } : item))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const isEditing = (record) => record[props.rowKey] === editingKey.value
 | 
			
		||||
 | 
			
		||||
	const edit = (key) => {
 | 
			
		||||
		editingKey.value = key
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const save = () => {
 | 
			
		||||
		editingKey.value = null
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const cancel = () => {
 | 
			
		||||
		editingKey.value = null
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const handleTableChange = (pagination, filters, sorter) => {
 | 
			
		||||
		console.log('Table changed:', pagination, filters, sorter)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const rowSelection = {
 | 
			
		||||
		onChange: (selectedRowKeys, selectedRows) => {
 | 
			
		||||
			console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows)
 | 
			
		||||
		},
 | 
			
		||||
		onSelect: (record, selected, selectedRows) => {
 | 
			
		||||
			console.log(record, selected, selectedRows)
 | 
			
		||||
		},
 | 
			
		||||
		onSelectAll: (selected, selectedRows, changeRows) => {
 | 
			
		||||
			console.log(selected, selectedRows, changeRows)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped>
 | 
			
		||||
	.table-wrapper {
 | 
			
		||||
		margin: 16px;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.table-tool {
 | 
			
		||||
		margin-bottom: 16px;
 | 
			
		||||
	}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -204,6 +204,7 @@
 | 
			
		|||
		visible.value = true
 | 
			
		||||
 | 
			
		||||
		nextTick(() => {
 | 
			
		||||
			searchFormState.value.enabledState = 'ENABLE'
 | 
			
		||||
			// 加载生产线分类
 | 
			
		||||
			dynamicTreeRef.value.loadTreeData()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -337,6 +337,7 @@
 | 
			
		|||
 | 
			
		||||
	// 刷新
 | 
			
		||||
	const refresh = (bool = false) => {
 | 
			
		||||
		console.log(123131)
 | 
			
		||||
		bool &&
 | 
			
		||||
			(data.localPagination = Object.assign(
 | 
			
		||||
				{},
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,190 +3,154 @@ import { cloneDeep } from 'lodash-es'
 | 
			
		|||
import useTabs from '@/utils/useTabs'
 | 
			
		||||
import extendFieldApi from '@/api/base/extendfield/extendFieldApi'
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 使用表单处理程序封装表单的提交、初始化和回退逻辑。
 | 
			
		||||
 * @param {Array} formItems 表单项配置,包含表单字段名、默认值等信息。
 | 
			
		||||
 * @param {Object} api 包含表单提交和获取详情方法的对象。
 | 
			
		||||
 * @param backRouter
 | 
			
		||||
 * @returns {Object} 返回包含表单数据、提交加载状态、表单引用、提交函数等的对象。
 | 
			
		||||
 */
 | 
			
		||||
export default function useFormHandler(formItems, api, backRouter) {
 | 
			
		||||
	// 初始化页面类型状态
 | 
			
		||||
	const state = reactive({
 | 
			
		||||
		PAGE_TYPE: ''
 | 
			
		||||
	})
 | 
			
		||||
	let extendFormData = ref({})
 | 
			
		||||
	// 操作信息
 | 
			
		||||
	let inform = reactive({
 | 
			
		||||
 | 
			
		||||
	const extendFormData = ref({})
 | 
			
		||||
	const inform = reactive({
 | 
			
		||||
		createUserName: '',
 | 
			
		||||
		createTime: '',
 | 
			
		||||
		updateUserName: '',
 | 
			
		||||
		updateTime: ''
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	// 初始化表单数据对象
 | 
			
		||||
	let formData = reactive({})
 | 
			
		||||
	// 初始化提交加载状态
 | 
			
		||||
	const formData = reactive({})
 | 
			
		||||
	const submitLoading = ref(false)
 | 
			
		||||
	// 初始化表单引用数组
 | 
			
		||||
	const formRefs = ref([])
 | 
			
		||||
 | 
			
		||||
	// 使用vue-router的useRoute钩子获取当前路由信息
 | 
			
		||||
	const route = useRoute()
 | 
			
		||||
	// 使用vue-router的useRouter钩子获取路由管理对象
 | 
			
		||||
	const router = useRouter()
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 根据表单项配置初始化表单数据。
 | 
			
		||||
	 * @param {Array} formItems 表单项配置数组。
 | 
			
		||||
	 * @param {Object} formData 初始化后的表单数据对象。
 | 
			
		||||
	 */
 | 
			
		||||
	const initializeFormData = (formItems, formData) => {
 | 
			
		||||
	// 初始化表单数据
 | 
			
		||||
	const initializeFormData = () => {
 | 
			
		||||
		formItems.forEach((item) => {
 | 
			
		||||
			formData[item.name] = item.defaultValue || null
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 处理表单提交逻辑。
 | 
			
		||||
	 * @param {Object} params 提交时额外的参数配置,包含是否深度克隆formData的标志。
 | 
			
		||||
	 */
 | 
			
		||||
	const onSubmit = async (params) => {
 | 
			
		||||
	// 提交表单
 | 
			
		||||
	const onSubmit = async (params = {}) => {
 | 
			
		||||
		submitLoading.value = true
 | 
			
		||||
		try {
 | 
			
		||||
			// 验证所有表单字段
 | 
			
		||||
			await Promise.all(formRefs.value.map((form) => form.validate()))
 | 
			
		||||
			submitLoading.value = true
 | 
			
		||||
			await validateForms()
 | 
			
		||||
 | 
			
		||||
			// 根据参数配置决定是否深度克隆formData
 | 
			
		||||
			let formDataParam = params.isDeep ? cloneDeep(params) : formData
 | 
			
		||||
 | 
			
		||||
			// 安全地处理路由查询参数
 | 
			
		||||
			const safeId = validateAndCleanId(route.query.id)
 | 
			
		||||
			const formDataParam = params.isDeep ? cloneDeep(params) : formData
 | 
			
		||||
			const safeId = validateAndCleanId(route.query.id || params.id)
 | 
			
		||||
			if (safeId) {
 | 
			
		||||
				formDataParam.id = safeId
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// 调用api提交表单数据
 | 
			
		||||
			await api.submitForm(formDataParam, safeId)
 | 
			
		||||
			// 提交成功后返回上一页,并关闭当前标签页
 | 
			
		||||
			handleBack(backRouter)
 | 
			
		||||
			const res = await api.submitForm(formDataParam, safeId)
 | 
			
		||||
 | 
			
		||||
			if (params.isEnable) return res
 | 
			
		||||
 | 
			
		||||
			handleBack()
 | 
			
		||||
		} catch (error) {
 | 
			
		||||
			console.error('Validation error:', error)
 | 
			
		||||
			console.error('Validation or submission error:', error)
 | 
			
		||||
			throw error
 | 
			
		||||
		} finally {
 | 
			
		||||
			submitLoading.value = false
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 校验并清洁ID,确保其安全使用。
 | 
			
		||||
	 * @param {string} id 待校验的ID。
 | 
			
		||||
	 * @returns {string|undefined} 校验通过后返回清洁的ID,否则返回undefined。
 | 
			
		||||
	 */
 | 
			
		||||
	// 验证表单
 | 
			
		||||
	const validateForms = () => {
 | 
			
		||||
		return Promise.all(formRefs.value.map((form) => form.validate()))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 校验并清洁ID
 | 
			
		||||
	const validateAndCleanId = (id) => {
 | 
			
		||||
		if (id && /^[a-zA-Z0-9\-_]+$/.test(id)) {
 | 
			
		||||
			return id
 | 
			
		||||
		}
 | 
			
		||||
		console.warn('Invalid ID:', id)
 | 
			
		||||
		return undefined
 | 
			
		||||
		return id && /^[a-zA-Z0-9\-_]+$/.test(id) ? id : undefined
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 处理返回操作,返回上一级页面并关闭当前标签页。
 | 
			
		||||
	 */
 | 
			
		||||
	const handleBack = (routerPath) => {
 | 
			
		||||
		// useTabs.close(route)
 | 
			
		||||
		useTabs.close('', routerPath)
 | 
			
		||||
	// 返回并关闭当前标签页
 | 
			
		||||
	const handleBack = () => {
 | 
			
		||||
		useTabs.close('', backRouter)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 根据页面类型加载表单数据。
 | 
			
		||||
	 * @param {String} pageType 页面类型,用于区分新增和编辑等不同场景。
 | 
			
		||||
	 * @returns {Promise<Object>} 返回获取的详情数据。
 | 
			
		||||
	 */
 | 
			
		||||
	// 根据页面类型加载表单数据
 | 
			
		||||
	const fetchData = async (pageType) => {
 | 
			
		||||
		initializeFormData(formItems, formData)
 | 
			
		||||
		initializeFormData()
 | 
			
		||||
		if (pageType && pageType !== 'ADD') {
 | 
			
		||||
			try {
 | 
			
		||||
				const res = await api.getDetail({ id: route.query.id })
 | 
			
		||||
 | 
			
		||||
				// 根据返回的详情数据初始化表单数据
 | 
			
		||||
				for (let key in formData) {
 | 
			
		||||
					if (res[key] !== undefined) {
 | 
			
		||||
						formData[key] = res[key]
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// 操作信息
 | 
			
		||||
				for (let key in inform) {
 | 
			
		||||
					if (res[key] !== undefined) {
 | 
			
		||||
						inform[key] = res[key]
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// 扩展字段
 | 
			
		||||
				populateFormData(res)
 | 
			
		||||
				if (res.extJson) {
 | 
			
		||||
					extendFormData.value = JSON.parse(res.extJson)
 | 
			
		||||
				}
 | 
			
		||||
				return res
 | 
			
		||||
			} catch (error) {
 | 
			
		||||
				console.error('API request failed:', error)
 | 
			
		||||
				console.error('Failed to fetch data:', error)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 扩展字段。
 | 
			
		||||
	 */
 | 
			
		||||
	const getExtendField = async (model) => {
 | 
			
		||||
		let extendData = []
 | 
			
		||||
		// 字段扩展
 | 
			
		||||
		const resExtendField = await extendFieldApi.extendFieldTypeList({
 | 
			
		||||
			enabledState: 'ENABLE',
 | 
			
		||||
			model
 | 
			
		||||
	// 填充表单数据
 | 
			
		||||
	const populateFormData = (data) => {
 | 
			
		||||
		Object.keys(formData).forEach((key) => {
 | 
			
		||||
			if (data[key] !== undefined) formData[key] = data[key]
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
		console.log(resExtendField, 'resExtendField')
 | 
			
		||||
		Object.keys(inform).forEach((key) => {
 | 
			
		||||
			if (data[key] !== undefined) inform[key] = data[key]
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
		if (resExtendField) {
 | 
			
		||||
			resExtendField.forEach((item) => {
 | 
			
		||||
				if (item.showValues) {
 | 
			
		||||
					const showValues = JSON.parse(item.showValues)
 | 
			
		||||
					let options = []
 | 
			
		||||
					showValues.forEach((value) => {
 | 
			
		||||
						options.push({
 | 
			
		||||
							value: value.name,
 | 
			
		||||
							label: value.name
 | 
			
		||||
						})
 | 
			
		||||
					})
 | 
			
		||||
					extendData.push({
 | 
			
		||||
						label: item.name,
 | 
			
		||||
						name: item.fieldName,
 | 
			
		||||
						type: item.showType,
 | 
			
		||||
						span: 6,
 | 
			
		||||
						attrs: {
 | 
			
		||||
							placeholder: '请输入内容',
 | 
			
		||||
							options
 | 
			
		||||
						}
 | 
			
		||||
					})
 | 
			
		||||
				}
 | 
			
		||||
	// 获取扩展字段
 | 
			
		||||
	const getExtendField = async (model) => {
 | 
			
		||||
		try {
 | 
			
		||||
			const resExtendField = await extendFieldApi.extendFieldTypeList({
 | 
			
		||||
				enabledState: 'ENABLE',
 | 
			
		||||
				model
 | 
			
		||||
			})
 | 
			
		||||
			console.log(resExtendField, 'resExtendField')
 | 
			
		||||
			const extendData =
 | 
			
		||||
				resExtendField?.map((item) => {
 | 
			
		||||
					if (item.enabledState === 'ENABLE') {
 | 
			
		||||
						const options = item.showValues
 | 
			
		||||
							? JSON.parse(item.showValues).map((value) => ({
 | 
			
		||||
									value: value.name,
 | 
			
		||||
									label: value.name
 | 
			
		||||
							  }))
 | 
			
		||||
							: []
 | 
			
		||||
						return {
 | 
			
		||||
							label: item.name,
 | 
			
		||||
							name: item.fieldName,
 | 
			
		||||
							type: item.showType,
 | 
			
		||||
							span: 6,
 | 
			
		||||
							attrs: {
 | 
			
		||||
								placeholder: '请输入内容',
 | 
			
		||||
								options
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}) || []
 | 
			
		||||
 | 
			
		||||
			extendData.forEach((item) => {
 | 
			
		||||
				if (item.fieldName) extendFormData.value[item.fieldName] = null
 | 
			
		||||
				if (item && item.fieldName) extendFormData.value[item.fieldName] = null
 | 
			
		||||
			})
 | 
			
		||||
			return extendData
 | 
			
		||||
		} else {
 | 
			
		||||
 | 
			
		||||
			console.log(extendData.length, 'extendData')
 | 
			
		||||
			if (extendData) {
 | 
			
		||||
				return extendData
 | 
			
		||||
			} else {
 | 
			
		||||
				return []
 | 
			
		||||
			}
 | 
			
		||||
		} catch (error) {
 | 
			
		||||
			console.error('Failed to get extend fields:', error)
 | 
			
		||||
			return []
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 返回包含各种处理函数和状态的对象
 | 
			
		||||
	return {
 | 
			
		||||
		formData,
 | 
			
		||||
		submitLoading,
 | 
			
		||||
		formRefs,
 | 
			
		||||
		inform,
 | 
			
		||||
		extendFormData,
 | 
			
		||||
		populateFormData,
 | 
			
		||||
		getExtendField,
 | 
			
		||||
		onSubmit,
 | 
			
		||||
		handleBack,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,9 +13,7 @@ import useTabs from '@/utils/useTabs'
 | 
			
		|||
 */
 | 
			
		||||
export function useTableManagement(apiModule = {}, tableColumns, hasPermData, isShowAction = true) {
 | 
			
		||||
	const searchFormState = ref({})
 | 
			
		||||
	const searchFormRef = ref(null)
 | 
			
		||||
	const selectedRowKeys = ref([])
 | 
			
		||||
	let advanced = ref(false)
 | 
			
		||||
 | 
			
		||||
	const router = useRouter()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -62,14 +60,6 @@ export function useTableManagement(apiModule = {}, tableColumns, hasPermData, is
 | 
			
		|||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 重置
 | 
			
		||||
	const reset = () => {
 | 
			
		||||
		if (tableRef.value) {
 | 
			
		||||
			searchFormRef.value.resetFields()
 | 
			
		||||
			tableRef.value.refresh(true)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 删除
 | 
			
		||||
	const deleteRecord = (record) => {
 | 
			
		||||
		let params = [{ id: record.id }]
 | 
			
		||||
| 
						 | 
				
			
			@ -97,24 +87,17 @@ export function useTableManagement(apiModule = {}, tableColumns, hasPermData, is
 | 
			
		|||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const toggleAdvanced = () => {
 | 
			
		||||
		advanced.value = !advanced.value
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 返回Hook的值
 | 
			
		||||
	return {
 | 
			
		||||
		searchFormState,
 | 
			
		||||
		searchFormRef,
 | 
			
		||||
		tableRef,
 | 
			
		||||
		selectedRowKeys,
 | 
			
		||||
		columns,
 | 
			
		||||
		options,
 | 
			
		||||
		advanced,
 | 
			
		||||
		loadData,
 | 
			
		||||
		reset,
 | 
			
		||||
		deleteRecord,
 | 
			
		||||
		deleteBatchRecords,
 | 
			
		||||
		navigateTo,
 | 
			
		||||
		toggleAdvanced
 | 
			
		||||
		navigateTo
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -292,12 +292,13 @@
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	const onSubmitForm = () => {
 | 
			
		||||
		console.log(dataSource.value, 'dataSource.value')
 | 
			
		||||
		onSubmit({
 | 
			
		||||
			isDeep: true,
 | 
			
		||||
			materialPackageList: dataSource.value,
 | 
			
		||||
			...formData,
 | 
			
		||||
			...productFormData.value,
 | 
			
		||||
			extJson: JSON.stringify(extendFormData.value) || ''
 | 
			
		||||
			extJson: JSON.stringify(extendFormData.value) || '',
 | 
			
		||||
			materialPackageList: dataSource.value
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -790,7 +791,9 @@
 | 
			
		|||
				packageProportionCount.push(item.productQty * item.unitRate)
 | 
			
		||||
			})
 | 
			
		||||
 | 
			
		||||
			formData.packageProportion = calculateRatios(packageProportionCount).join(':')
 | 
			
		||||
			formData.packageProportion = calculateRatios(packageProportionCount)
 | 
			
		||||
				? calculateRatios(packageProportionCount).join(':')
 | 
			
		||||
				: null
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -806,6 +809,16 @@
 | 
			
		|||
			ratios.push(arr[i] / arr[i - 1])
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for (let i = 0; i < ratios.length; i++) {
 | 
			
		||||
			// 检查是否有小数点
 | 
			
		||||
			if (!Number.isInteger(ratios[i])) {
 | 
			
		||||
				return notification.error({
 | 
			
		||||
					message: `包装比例转换提示`,
 | 
			
		||||
					description: `结果不能有小数,请重新填写`
 | 
			
		||||
				})
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return ratios
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
import tool from '@/utils/tool'
 | 
			
		||||
 | 
			
		||||
export const searchFields = [
 | 
			
		||||
	{ name: 'name', label: '名称', component: 'a-input', props: { placeholder: '请输入名称' } },
 | 
			
		||||
	{
 | 
			
		||||
		name: 'enabledState',
 | 
			
		||||
		label: '可用状态',
 | 
			
		||||
		component: 'a-select',
 | 
			
		||||
		props: { placeholder: '请选择状态', options: tool.dictList('COMMON_STATUS') }
 | 
			
		||||
	},
 | 
			
		||||
	{ name: 'number', label: '编码', component: 'a-input', props: { placeholder: '请输入编码' } }
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			@ -1,33 +1,10 @@
 | 
			
		|||
<template>
 | 
			
		||||
	<a-card :bordered="false">
 | 
			
		||||
		<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
 | 
			
		||||
			<a-row :gutter="24">
 | 
			
		||||
				<a-col :span="6">
 | 
			
		||||
					<a-form-item label="名称" name="name">
 | 
			
		||||
						<a-input v-model:value="searchFormState.name" placeholder="请输入名称" />
 | 
			
		||||
					</a-form-item>
 | 
			
		||||
				</a-col>
 | 
			
		||||
				<a-col :span="6">
 | 
			
		||||
					<a-form-item label="编码" name="number">
 | 
			
		||||
						<a-input v-model:value="searchFormState.number" placeholder="请输入编码" />
 | 
			
		||||
					</a-form-item>
 | 
			
		||||
				</a-col>
 | 
			
		||||
				<a-col :span="6">
 | 
			
		||||
					<a-form-item label="可用状态" name="enabledState">
 | 
			
		||||
						<a-select
 | 
			
		||||
							v-model:value="searchFormState.enabledState"
 | 
			
		||||
							placeholder="请选择可用状态"
 | 
			
		||||
							:options="$TOOL.dictList('COMMON_STATUS')"
 | 
			
		||||
						/>
 | 
			
		||||
					</a-form-item>
 | 
			
		||||
				</a-col>
 | 
			
		||||
				<a-col :span="6">
 | 
			
		||||
					<a-button type="primary" @click="tableRef.refresh()">查询</a-button>
 | 
			
		||||
					<a-button style="margin: 0 8px" @click="reset">重置</a-button>
 | 
			
		||||
				</a-col>
 | 
			
		||||
			</a-row>
 | 
			
		||||
		</a-form>
 | 
			
		||||
	</a-card>
 | 
			
		||||
	<AdvancedSearchForm
 | 
			
		||||
		:formState="searchFormState"
 | 
			
		||||
		:formFields="searchFields"
 | 
			
		||||
		@search="tableRef.refresh()"
 | 
			
		||||
		@reset="tableRef.refresh()"
 | 
			
		||||
	/>
 | 
			
		||||
 | 
			
		||||
	<a-card :bordered="false" class="mt-4" style="height: 100%">
 | 
			
		||||
		<a-row :gutter="24">
 | 
			
		||||
| 
						 | 
				
			
			@ -146,9 +123,12 @@
 | 
			
		|||
<script setup name="materiel">
 | 
			
		||||
	import materialApi from '@/api/base/material/materialApi'
 | 
			
		||||
	import materialCategoryApi from '@/api/base/material/materialCategoryApi'
 | 
			
		||||
 | 
			
		||||
	import MaterialCategoryForm from '@/views/productionBusiness/basicData/materiel/detail/materialCategoryForm.vue'
 | 
			
		||||
 | 
			
		||||
	import { useTableManagement } from '@/hook/useTableManagement'
 | 
			
		||||
	import { materielColumn } from '@/views/productionBusiness/basicData/materiel/column/materiel-column'
 | 
			
		||||
	import { searchFields } from '@/views/productionBusiness/basicData/materiel/formFields/searchFields'
 | 
			
		||||
 | 
			
		||||
	const materialCategoryFormRef = ref(null)
 | 
			
		||||
	const dynamicTreeRef = ref(null)
 | 
			
		||||
| 
						 | 
				
			
			@ -159,12 +139,10 @@
 | 
			
		|||
		selectedRowKeys,
 | 
			
		||||
		columns,
 | 
			
		||||
		loadData,
 | 
			
		||||
		reset,
 | 
			
		||||
		deleteRecord,
 | 
			
		||||
		deleteBatchRecords,
 | 
			
		||||
		options,
 | 
			
		||||
		searchFormRef,
 | 
			
		||||
		navigateTo
 | 
			
		||||
		navigateTo,
 | 
			
		||||
		deleteRecord
 | 
			
		||||
	} = useTableManagement(
 | 
			
		||||
		{
 | 
			
		||||
			page: materialApi.materialPage,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,83 +6,62 @@
 | 
			
		|||
		:destroy-on-close="true"
 | 
			
		||||
		@close="onClose"
 | 
			
		||||
	>
 | 
			
		||||
		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
 | 
			
		||||
			<a-form-item label="编码:">
 | 
			
		||||
				<a-input v-model:value="formData.number" placeholder="不输入自动生成" allow-clear />
 | 
			
		||||
			</a-form-item>
 | 
			
		||||
			<a-form-item label="名称:" name="name" props="name">
 | 
			
		||||
				<a-input v-model:value="formData.name" placeholder="请输入名称" allow-clear />
 | 
			
		||||
			</a-form-item>
 | 
			
		||||
			<a-form-item label="状态:" name="enabledState" props="enabledState">
 | 
			
		||||
				<a-select
 | 
			
		||||
					v-model:value="formData.enabledState"
 | 
			
		||||
					placeholder="请选择状态"
 | 
			
		||||
					:options="tool.dictList('COMMON_STATUS')"
 | 
			
		||||
				/>
 | 
			
		||||
			</a-form-item>
 | 
			
		||||
		</a-form>
 | 
			
		||||
		<OperationalInformation :detailData="formData" :colSpan="12" v-if="formData.id"></OperationalInformation>
 | 
			
		||||
		<DynamicForm :formItems="drawerForm" :model="formData" :rules="formRules" ref="formRef1" />
 | 
			
		||||
		<OperationalInformation :detailData="recordData" :colSpan="12" v-if="recordData.id"></OperationalInformation>
 | 
			
		||||
		<template #footer>
 | 
			
		||||
			<a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
 | 
			
		||||
			<a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
 | 
			
		||||
			<a-button type="primary" @click="onSubmitForm">保存</a-button>
 | 
			
		||||
		</template>
 | 
			
		||||
	</xn-form-container>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup name="sysUnitGroupForm">
 | 
			
		||||
	import tool from '@/utils/tool'
 | 
			
		||||
	import { cloneDeep } from 'lodash-es'
 | 
			
		||||
	import { required } from '@/utils/formRules'
 | 
			
		||||
	import sysUnitGroupApi from '@/api/base/unit/unitGroupsApi'
 | 
			
		||||
	import { drawerForm, formRules } from '@/views/productionBusiness/basicData/unit/formFields/drawerForm'
 | 
			
		||||
	import useFormHandler from '@/hook/useFormHandler'
 | 
			
		||||
 | 
			
		||||
	// 抽屉状态
 | 
			
		||||
	const visible = ref(false)
 | 
			
		||||
	const emit = defineEmits({ successful: null })
 | 
			
		||||
	const formRef = ref()
 | 
			
		||||
	// 表单数据
 | 
			
		||||
	const formData = ref({
 | 
			
		||||
		number: '',
 | 
			
		||||
		name: '',
 | 
			
		||||
		enabledState: 'ENABLE'
 | 
			
		||||
	})
 | 
			
		||||
	const submitLoading = ref(false)
 | 
			
		||||
	const enabledStateOptions = ref([])
 | 
			
		||||
	const formRef1 = ref(null)
 | 
			
		||||
	let recordData = reactive({})
 | 
			
		||||
 | 
			
		||||
	// 打开抽屉
 | 
			
		||||
	const onOpen = (record) => {
 | 
			
		||||
		visible.value = true
 | 
			
		||||
		formRules.value = [formRef1.value]
 | 
			
		||||
 | 
			
		||||
		if (record) {
 | 
			
		||||
			let recordData = cloneDeep(record)
 | 
			
		||||
			formData.value = Object.assign({}, recordData)
 | 
			
		||||
			recordData = cloneDeep(record)
 | 
			
		||||
			fetchData().then(() => {
 | 
			
		||||
				populateFormData(recordData)
 | 
			
		||||
			})
 | 
			
		||||
		} else {
 | 
			
		||||
			formData.value = { name: '', number: '', enabledState: 'ENABLE' }
 | 
			
		||||
			fetchData()
 | 
			
		||||
			recordData = {}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	// 关闭抽屉
 | 
			
		||||
	const onClose = () => {
 | 
			
		||||
		formRef.value.resetFields()
 | 
			
		||||
		visible.value = false
 | 
			
		||||
	}
 | 
			
		||||
	// 默认要校验的
 | 
			
		||||
	const formRules = {
 | 
			
		||||
		name: [required('请输入名称')],
 | 
			
		||||
		enabledState: [required('请输入状态')]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 验证并提交数据
 | 
			
		||||
	const onSubmit = () => {
 | 
			
		||||
		formRef.value.validate().then(() => {
 | 
			
		||||
			submitLoading.value = true
 | 
			
		||||
			const formDataParam = cloneDeep(formData.value)
 | 
			
		||||
			sysUnitGroupApi
 | 
			
		||||
				.sysUnitGroupSubmitForm(formDataParam, formDataParam.id)
 | 
			
		||||
				.then(() => {
 | 
			
		||||
					onClose()
 | 
			
		||||
					emit('successful')
 | 
			
		||||
				})
 | 
			
		||||
				.finally(() => {
 | 
			
		||||
					submitLoading.value = false
 | 
			
		||||
				})
 | 
			
		||||
	const onSubmitForm = () => {
 | 
			
		||||
		onSubmit({
 | 
			
		||||
			isEnable: true,
 | 
			
		||||
			id: recordData.id
 | 
			
		||||
		}).then(() => {
 | 
			
		||||
			onClose()
 | 
			
		||||
			emit('successful')
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	let { formData, onSubmit, populateFormData, fetchData } = useFormHandler([...drawerForm], {
 | 
			
		||||
		submitForm: sysUnitGroupApi.sysUnitGroupSubmitForm
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	// 抛出函数
 | 
			
		||||
	defineExpose({
 | 
			
		||||
		onOpen
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,9 +14,17 @@
 | 
			
		|||
		/>
 | 
			
		||||
	</a-card>
 | 
			
		||||
 | 
			
		||||
	<a-card :bordered="false" class="mt-4" style="height: 100%">
 | 
			
		||||
	<a-card
 | 
			
		||||
		:bordered="false"
 | 
			
		||||
		class="mt-4"
 | 
			
		||||
		style="height: 100%"
 | 
			
		||||
		v-if="extendData.length > 0 || route.query.type !== 'ADD'"
 | 
			
		||||
	>
 | 
			
		||||
		<a-tabs v-model:activeKey="activeKey">
 | 
			
		||||
			<a-tab-pane key="1" tab="扩展字段" forceRender v-if="extendData.length > 0">
 | 
			
		||||
			<a-tab-pane key="1" tab="操作信息" forceRender v-if="route.query.type !== 'ADD'">
 | 
			
		||||
				<OperationalInformation :detailData="inform" :colSpan="6"></OperationalInformation>
 | 
			
		||||
			</a-tab-pane>
 | 
			
		||||
			<a-tab-pane key="2" tab="扩展字段" forceRender v-if="extendData.length > 0">
 | 
			
		||||
				<DynamicForm
 | 
			
		||||
					:allDisabled="route.query.type === 'SEARCH'"
 | 
			
		||||
					:formItems="extendData"
 | 
			
		||||
| 
						 | 
				
			
			@ -24,38 +32,24 @@
 | 
			
		|||
					:rules="formRules"
 | 
			
		||||
					v-if="extendData.length > 0"
 | 
			
		||||
				/>
 | 
			
		||||
 | 
			
		||||
				<a-empty v-else />
 | 
			
		||||
			</a-tab-pane>
 | 
			
		||||
			<a-tab-pane key="2" tab="操作信息" v-if="route.query.type !== 'ADD'">
 | 
			
		||||
				<OperationalInformation :detailData="inform" :colSpan="6"></OperationalInformation>
 | 
			
		||||
			</a-tab-pane>
 | 
			
		||||
		</a-tabs>
 | 
			
		||||
	</a-card>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup name="basicDataUnitDetail">
 | 
			
		||||
	import tool from '@/utils/tool'
 | 
			
		||||
	import { required } from '@/utils/formRules'
 | 
			
		||||
	import unitGroupsApi from '@/api/base/unit/unitGroupsApi'
 | 
			
		||||
	import useFormHandler from '@/hook/useFormHandler'
 | 
			
		||||
	import { useRoute } from 'vue-router'
 | 
			
		||||
	import unitApi from '@/api/base/unit/unitApi'
 | 
			
		||||
	import { formRules, unitFormItems } from '@/views/productionBusiness/basicData/unit/formFields/detailFields'
 | 
			
		||||
	const route = useRoute()
 | 
			
		||||
 | 
			
		||||
	const formRef1 = ref()
 | 
			
		||||
	let activeKey = ref('1')
 | 
			
		||||
	let extendData = ref([])
 | 
			
		||||
 | 
			
		||||
	// 默认要校验的
 | 
			
		||||
	const formRules = {
 | 
			
		||||
		unitGroupId: [required('请选择单位')],
 | 
			
		||||
		name: [required('请输入名称')],
 | 
			
		||||
		rate: [required('请输入换算率')],
 | 
			
		||||
		isBase: [required('请选择是否基本单位')]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	let unitGroupList = ref([])
 | 
			
		||||
	onMounted(async () => {
 | 
			
		||||
		formRefs.value = [formRef1.value]
 | 
			
		||||
		await fetchData(route.query.type)
 | 
			
		||||
| 
						 | 
				
			
			@ -83,89 +77,6 @@
 | 
			
		|||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const unitFormItems = reactive([
 | 
			
		||||
		{
 | 
			
		||||
			label: '名称:',
 | 
			
		||||
			name: 'name',
 | 
			
		||||
			type: 'a-input',
 | 
			
		||||
			span: 6,
 | 
			
		||||
			rules: [required('请输入名称')],
 | 
			
		||||
			attrs: {
 | 
			
		||||
				placeholder: '请输入名称',
 | 
			
		||||
				allowClear: true
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			label: '编码:',
 | 
			
		||||
			name: 'number',
 | 
			
		||||
			type: 'a-input-number',
 | 
			
		||||
			span: 6,
 | 
			
		||||
			attrs: {
 | 
			
		||||
				placeholder: '请输入编码',
 | 
			
		||||
				allowClear: true
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			label: '单位组:',
 | 
			
		||||
			name: 'unitGroupId',
 | 
			
		||||
			type: 'a-select',
 | 
			
		||||
			span: 6,
 | 
			
		||||
			attrs: {
 | 
			
		||||
				placeholder: '请选择可用状态',
 | 
			
		||||
				options: [],
 | 
			
		||||
				fieldNames: {
 | 
			
		||||
					label: 'name',
 | 
			
		||||
					value: 'id'
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			defaultValue: ''
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			label: '换算率:',
 | 
			
		||||
			name: 'rate',
 | 
			
		||||
			type: 'a-input-number',
 | 
			
		||||
			span: 6,
 | 
			
		||||
			attrs: {
 | 
			
		||||
				placeholder: '请输入换算率',
 | 
			
		||||
				allowClear: true,
 | 
			
		||||
				min: 1,
 | 
			
		||||
				precision: 0
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			label: '是否基本单位:',
 | 
			
		||||
			name: 'isBase',
 | 
			
		||||
			type: 'a-select',
 | 
			
		||||
			span: 6,
 | 
			
		||||
			attrs: {
 | 
			
		||||
				placeholder: '请选择是否基本单位',
 | 
			
		||||
				options: tool.dictList('YES_NO')
 | 
			
		||||
			},
 | 
			
		||||
			defaultValue: 'NO'
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			label: '可用状态:',
 | 
			
		||||
			name: 'enabledState',
 | 
			
		||||
			type: 'a-select',
 | 
			
		||||
			span: 6,
 | 
			
		||||
			attrs: {
 | 
			
		||||
				placeholder: '请选择可用状态',
 | 
			
		||||
				options: tool.dictList('COMMON_STATUS')
 | 
			
		||||
			},
 | 
			
		||||
			defaultValue: 'ENABLE'
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			label: '备注:',
 | 
			
		||||
			name: 'remarks',
 | 
			
		||||
			type: 'a-textarea',
 | 
			
		||||
			span: 24,
 | 
			
		||||
			attrs: {
 | 
			
		||||
				placeholder: '请输入备注',
 | 
			
		||||
				allowClear: true
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	])
 | 
			
		||||
 | 
			
		||||
	const { formData, formRefs, inform, extendFormData, onSubmit, handleBack, fetchData, getExtendField } =
 | 
			
		||||
		useFormHandler(
 | 
			
		||||
			[...unitFormItems],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,91 @@
 | 
			
		|||
import { required } from '@/utils/formRules'
 | 
			
		||||
import tool from '@/utils/tool'
 | 
			
		||||
 | 
			
		||||
export const unitFormItems = reactive([
 | 
			
		||||
	{
 | 
			
		||||
		label: '名称:',
 | 
			
		||||
		name: 'name',
 | 
			
		||||
		type: 'a-input',
 | 
			
		||||
		span: 6,
 | 
			
		||||
		attrs: {
 | 
			
		||||
			placeholder: '请输入名称',
 | 
			
		||||
			allowClear: true
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		label: '编码:',
 | 
			
		||||
		name: 'number',
 | 
			
		||||
		type: 'a-input-number',
 | 
			
		||||
		span: 6,
 | 
			
		||||
		attrs: {
 | 
			
		||||
			placeholder: '请输入编码',
 | 
			
		||||
			allowClear: true
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		label: '单位组:',
 | 
			
		||||
		name: 'unitGroupId',
 | 
			
		||||
		type: 'a-select',
 | 
			
		||||
		span: 6,
 | 
			
		||||
		attrs: {
 | 
			
		||||
			placeholder: '请选择可用状态',
 | 
			
		||||
			options: [],
 | 
			
		||||
			fieldNames: {
 | 
			
		||||
				label: 'name',
 | 
			
		||||
				value: 'id'
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		defaultValue: ''
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		label: '换算率:',
 | 
			
		||||
		name: 'rate',
 | 
			
		||||
		type: 'a-input-number',
 | 
			
		||||
		span: 6,
 | 
			
		||||
		attrs: {
 | 
			
		||||
			placeholder: '请输入换算率',
 | 
			
		||||
			allowClear: true,
 | 
			
		||||
			min: 1,
 | 
			
		||||
			precision: 0
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		label: '是否基本单位:',
 | 
			
		||||
		name: 'isBase',
 | 
			
		||||
		type: 'a-select',
 | 
			
		||||
		span: 6,
 | 
			
		||||
		attrs: {
 | 
			
		||||
			placeholder: '请选择是否基本单位',
 | 
			
		||||
			options: tool.dictList('YES_NO')
 | 
			
		||||
		},
 | 
			
		||||
		defaultValue: 'NO'
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		label: '可用状态:',
 | 
			
		||||
		name: 'enabledState',
 | 
			
		||||
		type: 'a-select',
 | 
			
		||||
		span: 6,
 | 
			
		||||
		attrs: {
 | 
			
		||||
			placeholder: '请选择可用状态',
 | 
			
		||||
			options: tool.dictList('COMMON_STATUS')
 | 
			
		||||
		},
 | 
			
		||||
		defaultValue: 'ENABLE'
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		label: '备注:',
 | 
			
		||||
		name: 'remarks',
 | 
			
		||||
		type: 'a-textarea',
 | 
			
		||||
		span: 24,
 | 
			
		||||
		attrs: {
 | 
			
		||||
			placeholder: '请输入备注',
 | 
			
		||||
			allowClear: true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
export const formRules = {
 | 
			
		||||
	unitGroupId: [required('请选择单位')],
 | 
			
		||||
	name: [required('请输入名称')],
 | 
			
		||||
	rate: [required('请输入换算率')],
 | 
			
		||||
	isBase: [required('请选择是否基本单位')]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
import tool from '@/utils/tool'
 | 
			
		||||
import { required } from '@/utils/formRules'
 | 
			
		||||
 | 
			
		||||
export const drawerForm = reactive([
 | 
			
		||||
	{
 | 
			
		||||
		label: '编码:',
 | 
			
		||||
		name: 'number',
 | 
			
		||||
		type: 'a-input-number',
 | 
			
		||||
		span: 12,
 | 
			
		||||
		attrs: {
 | 
			
		||||
			placeholder: '请输入编码',
 | 
			
		||||
			allowClear: true
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		label: '名称:',
 | 
			
		||||
		name: 'name',
 | 
			
		||||
		type: 'a-input',
 | 
			
		||||
		span: 12,
 | 
			
		||||
		attrs: {
 | 
			
		||||
			placeholder: '请输入名称',
 | 
			
		||||
			allowClear: true
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		label: '可用状态:',
 | 
			
		||||
		name: 'enabledState',
 | 
			
		||||
		type: 'a-select',
 | 
			
		||||
		span: 12,
 | 
			
		||||
		attrs: {
 | 
			
		||||
			placeholder: '请选择可用状态',
 | 
			
		||||
			options: tool.dictList('COMMON_STATUS')
 | 
			
		||||
		},
 | 
			
		||||
		defaultValue: 'ENABLE'
 | 
			
		||||
	}
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
export const formRules = {
 | 
			
		||||
	name: [required('请输入名称')],
 | 
			
		||||
	enabledState: [required('请输入状态')]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
import tool from '@/utils/tool'
 | 
			
		||||
 | 
			
		||||
export const searchFields = [
 | 
			
		||||
	{ name: 'name', label: '名称', component: 'a-input', props: { placeholder: '请输入名称' } },
 | 
			
		||||
	{
 | 
			
		||||
		name: 'enabledState',
 | 
			
		||||
		label: '可用状态',
 | 
			
		||||
		component: 'a-select',
 | 
			
		||||
		props: { placeholder: '请选择状态', options: tool.dictList('COMMON_STATUS') }
 | 
			
		||||
	},
 | 
			
		||||
	{ name: 'number', label: '编码', component: 'a-input', props: { placeholder: '请输入编码' } },
 | 
			
		||||
	{
 | 
			
		||||
		name: 'isBase',
 | 
			
		||||
		label: '是否基本单位',
 | 
			
		||||
		component: 'a-select',
 | 
			
		||||
		props: { placeholder: '请选择是否基本单位', options: tool.dictList('YES_NO') },
 | 
			
		||||
		visible: false,
 | 
			
		||||
		isShowVisible: true
 | 
			
		||||
	}
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			@ -1,46 +1,10 @@
 | 
			
		|||
<template>
 | 
			
		||||
	<a-card :bordered="false">
 | 
			
		||||
		<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
 | 
			
		||||
			<a-row :gutter="24">
 | 
			
		||||
				<a-col :span="6">
 | 
			
		||||
					<a-form-item label="名称" name="name">
 | 
			
		||||
						<a-input v-model:value="searchFormState.name" placeholder="请输入名称" />
 | 
			
		||||
					</a-form-item>
 | 
			
		||||
				</a-col>
 | 
			
		||||
				<a-col :span="6">
 | 
			
		||||
					<a-form-item label="可用状态" name="enabledState">
 | 
			
		||||
						<a-select
 | 
			
		||||
							v-model:value="searchFormState.enabledState"
 | 
			
		||||
							placeholder="请选择状态"
 | 
			
		||||
							:options="tool.dictList('COMMON_STATUS')"
 | 
			
		||||
						/>
 | 
			
		||||
					</a-form-item>
 | 
			
		||||
				</a-col>
 | 
			
		||||
				<a-col :span="6">
 | 
			
		||||
					<a-form-item label="编码" name="number">
 | 
			
		||||
						<a-input v-model:value="searchFormState.number" placeholder="请输入编码" />
 | 
			
		||||
					</a-form-item>
 | 
			
		||||
				</a-col>
 | 
			
		||||
				<a-col :span="6" v-show="advanced">
 | 
			
		||||
					<a-form-item label="是否基本单位" name="isBase">
 | 
			
		||||
						<a-select
 | 
			
		||||
							v-model:value="searchFormState.isBase"
 | 
			
		||||
							placeholder="请选择是否基本单位"
 | 
			
		||||
							:options="tool.dictList('YES_NO')"
 | 
			
		||||
						/>
 | 
			
		||||
					</a-form-item>
 | 
			
		||||
				</a-col>
 | 
			
		||||
				<a-col :span="6">
 | 
			
		||||
					<a-button type="primary" @click="tableRef.refresh()">查询</a-button>
 | 
			
		||||
					<a-button style="margin: 0 8px" @click="reset">重置</a-button>
 | 
			
		||||
					<a @click="toggleAdvanced" style="margin-left: 8px">
 | 
			
		||||
						{{ advanced ? '收起' : '展开' }}
 | 
			
		||||
						<component :is="advanced ? 'up-outlined' : 'down-outlined'" />
 | 
			
		||||
					</a>
 | 
			
		||||
				</a-col>
 | 
			
		||||
			</a-row>
 | 
			
		||||
		</a-form>
 | 
			
		||||
	</a-card>
 | 
			
		||||
	<AdvancedSearchForm
 | 
			
		||||
		:formState="searchFormState"
 | 
			
		||||
		:formFields="searchFields"
 | 
			
		||||
		@search="tableRef.refresh()"
 | 
			
		||||
		@reset="tableRef.refresh()"
 | 
			
		||||
	/>
 | 
			
		||||
 | 
			
		||||
	<a-card class="mt-4" :border="false" style="height: 100%">
 | 
			
		||||
		<a-row :gutter="24">
 | 
			
		||||
| 
						 | 
				
			
			@ -58,19 +22,15 @@
 | 
			
		|||
					@deleteRowData="handleDeleteRowData"
 | 
			
		||||
					@refresh="handleRefresh"
 | 
			
		||||
					:rowSelection="unitGroupRowSelection"
 | 
			
		||||
					:scroll="{
 | 
			
		||||
						y: 500
 | 
			
		||||
					}"
 | 
			
		||||
				>
 | 
			
		||||
					<template #operator class="table-operator">
 | 
			
		||||
					<template #operator>
 | 
			
		||||
						<span>单位组</span>
 | 
			
		||||
					</template>
 | 
			
		||||
					<template #bodyCell="{ column, record }">
 | 
			
		||||
						<template v-if="column.dataIndex === 'enabledState'">
 | 
			
		||||
							<!--							<a-switch
 | 
			
		||||
								checkedValue="ENABLE"
 | 
			
		||||
								unCheckedValue="DISABLED"
 | 
			
		||||
								checked-children="启用"
 | 
			
		||||
								un-checked-children="停用"
 | 
			
		||||
								v-model:checked="record.enabledState"
 | 
			
		||||
							/>-->
 | 
			
		||||
							<a-tag color="#87d068" v-if="record.enabledState === 'ENABLE'">启用</a-tag>
 | 
			
		||||
							<a-tag color="#f50" v-if="record.enabledState === 'DISABLED'">停用</a-tag>
 | 
			
		||||
						</template>
 | 
			
		||||
| 
						 | 
				
			
			@ -88,7 +48,8 @@
 | 
			
		|||
					:tool-config="options.toolConfig"
 | 
			
		||||
					:row-selection="options.rowSelection"
 | 
			
		||||
					:scroll="{
 | 
			
		||||
						x: 100
 | 
			
		||||
						x: 100,
 | 
			
		||||
						y: 500
 | 
			
		||||
					}"
 | 
			
		||||
				>
 | 
			
		||||
					<template #operator>
 | 
			
		||||
| 
						 | 
				
			
			@ -100,13 +61,13 @@
 | 
			
		|||
										type: 'ADD'
 | 
			
		||||
									})
 | 
			
		||||
								"
 | 
			
		||||
								v-if="hasPerm('customerAdd')"
 | 
			
		||||
								v-if="hasPerm('sysUnitAdd')"
 | 
			
		||||
							>
 | 
			
		||||
								<template #icon><plus-outlined /></template>
 | 
			
		||||
								新增
 | 
			
		||||
							</a-button>
 | 
			
		||||
							<xn-batch-delete
 | 
			
		||||
								v-if="hasPerm('customerBatchDelete')"
 | 
			
		||||
								v-if="hasPerm('sysUnitBatchDelete')"
 | 
			
		||||
								:selectedRowKeys="selectedRowKeys"
 | 
			
		||||
								@batchDelete="deleteBatchRecords"
 | 
			
		||||
							/>
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +75,7 @@
 | 
			
		|||
					</template>
 | 
			
		||||
					<template #bodyCell="{ column, record }">
 | 
			
		||||
						<template v-if="column.dataIndex === 'number'">
 | 
			
		||||
							<a href="#">{{ record.number }}</a>
 | 
			
		||||
							<span style="color: #0d84ff">{{ record.number }}</span>
 | 
			
		||||
						</template>
 | 
			
		||||
						<template v-if="column.dataIndex === 'enabledState'">
 | 
			
		||||
							<a-tag color="#87d068" v-if="record.enabledState === 'ENABLE'">启用</a-tag>
 | 
			
		||||
| 
						 | 
				
			
			@ -133,15 +94,14 @@
 | 
			
		|||
												id: record.id
 | 
			
		||||
											})
 | 
			
		||||
										"
 | 
			
		||||
										v-if="hasPerm('customerEdit')"
 | 
			
		||||
										v-if="hasPerm('sysUnitEdit')"
 | 
			
		||||
									>
 | 
			
		||||
										<EyeOutlined />
 | 
			
		||||
										<!--									查看-->
 | 
			
		||||
									</a>
 | 
			
		||||
								</a-tooltip>
 | 
			
		||||
 | 
			
		||||
								<a-divider type="vertical" v-if="hasPerm(['customerEdit', 'customerDelete'], 'and')" />
 | 
			
		||||
								<a-tooltip title="查看">
 | 
			
		||||
								<a-divider type="vertical" v-if="hasPerm(['sysUnitEdit', 'sysUnitDelete'], 'and')" />
 | 
			
		||||
								<a-tooltip title="编辑">
 | 
			
		||||
									<a
 | 
			
		||||
										@click="
 | 
			
		||||
											navigateTo('/basicData/unit/detail', {
 | 
			
		||||
| 
						 | 
				
			
			@ -149,16 +109,15 @@
 | 
			
		|||
												id: record.id
 | 
			
		||||
											})
 | 
			
		||||
										"
 | 
			
		||||
										v-if="hasPerm('customerEdit')"
 | 
			
		||||
										v-if="hasPerm('sysUnitEdit')"
 | 
			
		||||
									>
 | 
			
		||||
										<FormOutlined />
 | 
			
		||||
										<!--									编辑-->
 | 
			
		||||
									</a>
 | 
			
		||||
								</a-tooltip>
 | 
			
		||||
 | 
			
		||||
								<a-divider type="vertical" v-if="hasPerm(['customerEdit', 'customerDelete'], 'and')" />
 | 
			
		||||
								<a-divider type="vertical" v-if="hasPerm(['sysUnitEdit', 'sysUnitDelete'], 'and')" />
 | 
			
		||||
								<a-popconfirm title="确定要删除吗?" @confirm="deleteRecord(record)">
 | 
			
		||||
									<a-button type="link" danger size="small" v-if="hasPerm('customerDelete')">
 | 
			
		||||
									<a-button type="link" danger size="small" v-if="hasPerm('sysUnitDelete')">
 | 
			
		||||
										<DeleteOutlined />
 | 
			
		||||
										<!--										删除-->
 | 
			
		||||
									</a-button>
 | 
			
		||||
| 
						 | 
				
			
			@ -182,7 +141,7 @@
 | 
			
		|||
	import { unitColumns, unitGroupColumns } from '@/views/productionBusiness/basicData/unit/columns/unitColumns'
 | 
			
		||||
	import UnitGroupForm from '@/views/productionBusiness/basicData/unit/detail/UnitGroupForm.vue'
 | 
			
		||||
	import { useTableManagement } from '@/hook/useTableManagement'
 | 
			
		||||
	import tool from '@/utils/tool'
 | 
			
		||||
	import { searchFields } from '@/views/productionBusiness/basicData/unit/formFields/searchFields'
 | 
			
		||||
 | 
			
		||||
	// ------------------------------ 组件 REF 变量定义 ------------------------------ //
 | 
			
		||||
	const {
 | 
			
		||||
| 
						 | 
				
			
			@ -191,13 +150,9 @@
 | 
			
		|||
		selectedRowKeys,
 | 
			
		||||
		columns,
 | 
			
		||||
		loadData,
 | 
			
		||||
		reset,
 | 
			
		||||
		deleteBatchRecords,
 | 
			
		||||
		options,
 | 
			
		||||
		searchFormRef,
 | 
			
		||||
		navigateTo,
 | 
			
		||||
		toggleAdvanced,
 | 
			
		||||
		advanced,
 | 
			
		||||
		deleteRecord
 | 
			
		||||
	} = useTableManagement(
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -216,9 +171,9 @@
 | 
			
		|||
		height: true,
 | 
			
		||||
		columnSetting: true,
 | 
			
		||||
		striped: false,
 | 
			
		||||
		plus: true,
 | 
			
		||||
		edit: true,
 | 
			
		||||
		delete: true
 | 
			
		||||
		plus: hasPerm('sysUnitGroupAdd'),
 | 
			
		||||
		edit: hasPerm('sysUnitGroupEdit'),
 | 
			
		||||
		delete: hasPerm('sysUnitGroupDelete')
 | 
			
		||||
	}
 | 
			
		||||
	let unitGroupRecord = ''
 | 
			
		||||
	let unitGroupSelectedRowKeys = ref([])
 | 
			
		||||
| 
						 | 
				
			
			@ -258,10 +213,10 @@
 | 
			
		|||
			])
 | 
			
		||||
			.then(() => {
 | 
			
		||||
				searchFormState.value.unitGroupId = ''
 | 
			
		||||
				tableRef.value.clearSelected()
 | 
			
		||||
				tableRef.value.refresh()
 | 
			
		||||
 | 
			
		||||
				unitGroupTableRef.value.refresh()
 | 
			
		||||
 | 
			
		||||
				tableRef.value.clearSelected()
 | 
			
		||||
				unitGroupTableRef.value.clearSelected()
 | 
			
		||||
			})
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,6 +80,7 @@
 | 
			
		|||
			pageType.value = record.pageType
 | 
			
		||||
			let recordData = cloneDeep(record)
 | 
			
		||||
			formData.value = Object.assign({}, recordData)
 | 
			
		||||
			console.log(formData.value)
 | 
			
		||||
		} else {
 | 
			
		||||
			pageType.value = 'ADD'
 | 
			
		||||
			formData.value = formData_enum
 | 
			
		||||
| 
						 | 
				
			
			@ -104,7 +105,6 @@
 | 
			
		|||
		formRef.value.validate().then(() => {
 | 
			
		||||
			submitLoading.value = true
 | 
			
		||||
			const formDataParam = cloneDeep(formData.value)
 | 
			
		||||
 | 
			
		||||
			employeeCategoryApi
 | 
			
		||||
				.employeeCategorySubmitForm(formDataParam, formDataParam.id)
 | 
			
		||||
				.then(() => {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -128,16 +128,24 @@
 | 
			
		|||
	import LineSelectorPlus from '@/components/Selector/lineSelectorPlus.vue'
 | 
			
		||||
	import EmployeeSelectorPlus from '@/components/Selector/employeeSelectorPlus.vue'
 | 
			
		||||
	import PersonnelForm from '@/views/productionBusiness/employee/personnelReport/detail/personnelForm.vue'
 | 
			
		||||
	import AddPersonnelItem from '@/views/productionBusiness/employee/personnelReport/detail/addPersonnelItem.vue'
 | 
			
		||||
 | 
			
		||||
	import tool from '@/utils/tool'
 | 
			
		||||
	import useFormHandler from '@/hook/useFormHandler'
 | 
			
		||||
	import { required } from '@/utils/formRules'
 | 
			
		||||
	import { useRoute } from 'vue-router'
 | 
			
		||||
	import { message } from 'ant-design-vue'
 | 
			
		||||
	import AddPersonnelItem from '@/views/productionBusiness/employee/personnelReport/detail/addPersonnelItem.vue'
 | 
			
		||||
	import dayjs from 'dayjs'
 | 
			
		||||
 | 
			
		||||
	const route = useRoute()
 | 
			
		||||
 | 
			
		||||
	const currentDay = dayjs().format('YYYY-MM-DD')
 | 
			
		||||
	// 禁用今天之后的日期
 | 
			
		||||
	const disabledDate = (current) => {
 | 
			
		||||
		// 不能选择今天之后的日期
 | 
			
		||||
		return current && current > dayjs().endOf('day')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const basicInfoFormItems = [
 | 
			
		||||
		{
 | 
			
		||||
			label: '单号:',
 | 
			
		||||
| 
						 | 
				
			
			@ -157,8 +165,10 @@
 | 
			
		|||
				placeholder: '请输入开工日期',
 | 
			
		||||
				allowClear: true,
 | 
			
		||||
				valueFormat: 'YYYY-MM-DD HH:mm:ss',
 | 
			
		||||
				disabled: route.query.type !== 'ADD'
 | 
			
		||||
			}
 | 
			
		||||
				disabled: route.query.type !== 'ADD',
 | 
			
		||||
				disabledDate: disabledDate
 | 
			
		||||
			},
 | 
			
		||||
			defaultValue: dayjs(currentDay, 'YYYY-MM-DD')
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			label: '产品(物料):',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -155,7 +155,7 @@
 | 
			
		|||
			ellipsis: true
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			title: '任务单名称',
 | 
			
		||||
			title: '产线名称',
 | 
			
		||||
			dataIndex: 'productionLineName',
 | 
			
		||||
			align: 'center',
 | 
			
		||||
			resizable: true,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -93,7 +93,10 @@
 | 
			
		|||
							</a>
 | 
			
		||||
						</a-tooltip>
 | 
			
		||||
 | 
			
		||||
						<a-divider type="vertical" v-if="hasPerm(['customerEdit', 'customerDelete'], 'and')" />
 | 
			
		||||
						<a-divider
 | 
			
		||||
							type="vertical"
 | 
			
		||||
							v-if="hasPerm(['customerEdit', 'customerDelete'], 'and') && record.state !== '2'"
 | 
			
		||||
						/>
 | 
			
		||||
						<a-tooltip title="查看">
 | 
			
		||||
							<a
 | 
			
		||||
								@click="
 | 
			
		||||
| 
						 | 
				
			
			@ -102,16 +105,19 @@
 | 
			
		|||
										id: record.id
 | 
			
		||||
									})
 | 
			
		||||
								"
 | 
			
		||||
								v-if="hasPerm('customerEdit')"
 | 
			
		||||
								v-if="hasPerm('customerEdit') && record.state !== '2'"
 | 
			
		||||
							>
 | 
			
		||||
								<FormOutlined />
 | 
			
		||||
								<!--									编辑-->
 | 
			
		||||
							</a>
 | 
			
		||||
						</a-tooltip>
 | 
			
		||||
 | 
			
		||||
						<a-divider type="vertical" v-if="hasPerm(['customerEdit', 'customerDelete'], 'and')" />
 | 
			
		||||
						<a-divider
 | 
			
		||||
							type="vertical"
 | 
			
		||||
							v-if="hasPerm(['customerEdit', 'customerDelete'], 'and') && record.state !== '2'"
 | 
			
		||||
						/>
 | 
			
		||||
						<a-popconfirm title="确定要删除吗?" @confirm="deleteRecord(record)">
 | 
			
		||||
							<a-button type="link" danger size="small" v-if="hasPerm('customerDelete')">
 | 
			
		||||
							<a-button type="link" danger size="small" v-if="hasPerm('customerDelete') && record.state !== '2'">
 | 
			
		||||
								<DeleteOutlined />
 | 
			
		||||
								<!--										删除-->
 | 
			
		||||
							</a-button>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue