调整项目管理模块中基础项目中的一些名称,接口文件添加了一部分接口
This commit is contained in:
parent
c0b99c2ba2
commit
6dd15833f2
@ -20,11 +20,21 @@ export const ExammoduleApi = {
|
|||||||
return await request.get({ url: `/inspect/exammodule/get?id=` + id })
|
return await request.get({ url: `/inspect/exammodule/get?id=` + id })
|
||||||
},
|
},
|
||||||
|
|
||||||
|
//所有体检套餐
|
||||||
|
getListExammodule: async () => {
|
||||||
|
return await request.get({ url: `/inspect/exammodule/getList` })
|
||||||
|
},
|
||||||
|
|
||||||
// 新增体检套餐
|
// 新增体检套餐
|
||||||
createExammodule: async (data: ExammoduleVO) => {
|
createExammodule: async (data: ExammoduleVO) => {
|
||||||
return await request.post({ url: `/inspect/exammodule/create`, data })
|
return await request.post({ url: `/inspect/exammodule/create`, data })
|
||||||
},
|
},
|
||||||
|
|
||||||
|
//新增体检套餐和项目
|
||||||
|
ListcreateExammodule: async (data: any) => {
|
||||||
|
return await request.post({ url: `/inspect/exammodule/Listcreate`, data })
|
||||||
|
},
|
||||||
|
|
||||||
// 修改体检套餐
|
// 修改体检套餐
|
||||||
updateExammodule: async (data: ExammoduleVO) => {
|
updateExammodule: async (data: ExammoduleVO) => {
|
||||||
return await request.put({ url: `/inspect/exammodule/update`, data })
|
return await request.put({ url: `/inspect/exammodule/update`, data })
|
||||||
@ -35,6 +45,13 @@ export const ExammoduleApi = {
|
|||||||
return await request.delete({ url: `/inspect/exammodule/delete?id=` + id })
|
return await request.delete({ url: `/inspect/exammodule/delete?id=` + id })
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// 按照套餐项目ID和套餐ID删除体检套餐项目
|
||||||
|
deleteExammoduleitemcode: async (params: { itemCode: string, examModuleID: number }) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: `/inspect/exammodule/deleteitemcode?itemCode=${params.itemCode}&examModuleID=${params.examModuleID}`
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
// 导出体检套餐 Excel
|
// 导出体检套餐 Excel
|
||||||
exportExammodule: async (params) => {
|
exportExammodule: async (params) => {
|
||||||
return await request.download({ url: `/inspect/exammodule/export-excel`, params })
|
return await request.download({ url: `/inspect/exammodule/export-excel`, params })
|
||||||
|
@ -20,10 +20,10 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="项目名称">
|
<el-form-item label="项目名称">
|
||||||
<el-input v-model="queryParams.projectName" placeholder="请输入名称" />
|
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="项目代号">
|
<el-form-item label="项目代号">
|
||||||
<el-input v-model="queryParams.projectCode" placeholder="请输入项目代码" />
|
<el-input v-model="queryParams.projectCode" placeholder="请输入项目代号" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="handleSearch">搜索</el-button>
|
<el-button type="primary" @click="handleSearch">搜索</el-button>
|
||||||
@ -57,9 +57,13 @@
|
|||||||
<el-table-column type="selection" width="55" :resizable="false" />
|
<el-table-column type="selection" width="55" :resizable="false" />
|
||||||
<el-table-column prop="itemCode" label="项目代号" :resizable="false" />
|
<el-table-column prop="itemCode" label="项目代号" :resizable="false" />
|
||||||
<el-table-column prop="itemName" label="检查项目名称" :resizable="false" />
|
<el-table-column prop="itemName" label="检查项目名称" :resizable="false" />
|
||||||
<el-table-column prop="price" label="项目单价" :resizable="false" />
|
<el-table-column prop="price" label="项目单价(元)" :resizable="false" />
|
||||||
<el-table-column prop="discountedPrice" label="折扣价" :resizable="false" />
|
<el-table-column label="折扣价(元)" :resizable="false">
|
||||||
<el-table-column prop="discounted" label="折扣百分比" :resizable="false" />
|
<template #default="scope">
|
||||||
|
{{ calculateDiscountedPrice(scope.row.price, scope.row.discounted) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="discounted" label="折扣(%) " :resizable="false" />
|
||||||
<el-table-column prop="section" label="科室名称" :resizable="false" />
|
<el-table-column prop="section" label="科室名称" :resizable="false" />
|
||||||
<el-table-column prop="unit" label="项目单位" :resizable="false" />
|
<el-table-column prop="unit" label="项目单位" :resizable="false" />
|
||||||
<el-table-column prop="highValue" label="取值上限" :resizable="false" />
|
<el-table-column prop="highValue" label="取值上限" :resizable="false" />
|
||||||
@ -75,7 +79,7 @@
|
|||||||
<template #dropdown>
|
<template #dropdown>
|
||||||
<el-dropdown-menu>
|
<el-dropdown-menu>
|
||||||
<el-dropdown-item @click="handleEdit(scope.row.id)">编辑</el-dropdown-item>
|
<el-dropdown-item @click="handleEdit(scope.row.id)">编辑</el-dropdown-item>
|
||||||
<el-dropdown-item @click="handleDelete(scope.row)">删除</el-dropdown-item>
|
<el-dropdown-item @click="handleDelete(scope.row)" style="color: red;">删除</el-dropdown-item>
|
||||||
</el-dropdown-menu>
|
</el-dropdown-menu>
|
||||||
</template>
|
</template>
|
||||||
</el-dropdown>
|
</el-dropdown>
|
||||||
@ -104,7 +108,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive, onMounted, onBeforeMount, watch } from 'vue'
|
import { ref, reactive, onMounted, watch } from 'vue'
|
||||||
import { Plus, ArrowDown } from '@element-plus/icons-vue'
|
import { Plus, ArrowDown } from '@element-plus/icons-vue'
|
||||||
import { DepartmentApi, DepartmentVO } from '@/api/inspect/inspectdepartment/index'
|
import { DepartmentApi, DepartmentVO } from '@/api/inspect/inspectdepartment/index'
|
||||||
import { itemsApi, itemsVO } from '@/api/inspect/inspectitems/index'
|
import { itemsApi, itemsVO } from '@/api/inspect/inspectitems/index'
|
||||||
@ -315,6 +319,12 @@ watch(editDialogVisible, (newVal) => {
|
|||||||
getTableData()
|
getTableData()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 添加计算折扣价的方法
|
||||||
|
const calculateDiscountedPrice = (price: number, discount: number): number => {
|
||||||
|
if (!price || !discount) return 0;
|
||||||
|
return Number((price - price * (discount / 100)).toFixed(2));
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
@ -68,7 +68,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="折扣百分比" prop="discounted">
|
<el-form-item label="折扣" prop="discounted">
|
||||||
<el-input v-model="formData.discounted" placeholder="请输入折扣">
|
<el-input v-model="formData.discounted" placeholder="请输入折扣">
|
||||||
<template #append>%</template>
|
<template #append>%</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
@ -118,12 +118,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import type { FormInstance } from 'element-plus'
|
import type { FormInstance } from 'element-plus'
|
||||||
import { DepartmentApi, DepartmentVO } from '@/api/inspect/inspectdepartment/index'
|
import { DepartmentApi, DepartmentVO } from '@/api/inspect/inspectdepartment/index'
|
||||||
import { itemsApi, itemsVO } from '@/api/inspect/inspectitems/index'
|
import { itemsApi, itemsVO } from '@/api/inspect/inspectitems/index'
|
||||||
import { getStrDictOptions } from '@/utils/dict'
|
import { getStrDictOptions } from '@/utils/dict'
|
||||||
|
|
||||||
const visible = ref(false)
|
const visible = ref(false)
|
||||||
const formRef = ref<FormInstance>()
|
const formRef = ref<FormInstance>()
|
||||||
const departmentOptions = ref<{ value: string; label: string }[]>([])
|
const departmentOptions = ref<{ value: string; label: string }[]>([])
|
||||||
@ -156,7 +157,7 @@ const getDepartmentList = async () => {
|
|||||||
try {
|
try {
|
||||||
const data = await DepartmentApi.getListDepartment()
|
const data = await DepartmentApi.getListDepartment()
|
||||||
departmentOptions.value = data.map((item: DepartmentVO) => ({
|
departmentOptions.value = data.map((item: DepartmentVO) => ({
|
||||||
value: item.departmentName,
|
value: item.id,
|
||||||
label: item.departmentName
|
label: item.departmentName
|
||||||
}))
|
}))
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -165,7 +166,10 @@ const getDepartmentList = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 提交表单
|
// 定义emit事件
|
||||||
|
const emit = defineEmits(['success'])
|
||||||
|
|
||||||
|
// 修改提交表单方法
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
if (!formRef.value) return
|
if (!formRef.value) return
|
||||||
|
|
||||||
@ -179,11 +183,13 @@ const handleSubmit = async () => {
|
|||||||
}
|
}
|
||||||
if (formData.value.section) {
|
if (formData.value.section) {
|
||||||
const section = formData.value.section
|
const section = formData.value.section
|
||||||
formData.value.section = section.split('|')[0]
|
formData.value.sectionID = section.split('|')[0]
|
||||||
formData.value.sectionID = section.split('|')[1]
|
formData.value.section = section.split('|')[1]
|
||||||
}
|
}
|
||||||
await itemsApi.createitems(formData.value as itemsVO)
|
await itemsApi.createitems(formData.value as itemsVO)
|
||||||
ElMessage.success('添加成功')
|
ElMessage.success('添加成功')
|
||||||
|
// 触发success事件
|
||||||
|
emit('success')
|
||||||
handleClose()
|
handleClose()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('添加失败:', error)
|
console.error('添加失败:', error)
|
||||||
|
@ -23,13 +23,12 @@
|
|||||||
:value="item.value"
|
:value="item.value"
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
<el-button type="primary" @click="handleSearch">搜索</el-button>
|
<el-button type="primary" @click="handleSearch" style="margin-top: 10px ;margin-bottom : 10px;">搜索</el-button>
|
||||||
<el-button type="primary" @click="save">保存</el-button>
|
<el-button type="primary" @click="save" style="margin-top: 10px ;margin-bottom : 10px;">添加</el-button>
|
||||||
<el-button type="danger" @click="handleDelete">删除选中</el-button>
|
|
||||||
<el-button type="danger" @click="handleClear">清空列表</el-button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-table
|
<el-table
|
||||||
|
ref="tableRef"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
border
|
border
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
@ -59,9 +58,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ExammoduleApi } from '@/api/inspect/exammodule'
|
|
||||||
import { DepartmentApi, DepartmentVO } from '@/api/inspect/inspectdepartment/index'
|
import { DepartmentApi, DepartmentVO } from '@/api/inspect/inspectdepartment/index'
|
||||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import { itemsApi } from '@/api/inspect/inspectitems/index'
|
import { itemsApi } from '@/api/inspect/inspectitems/index'
|
||||||
//搜索查询
|
//搜索查询
|
||||||
async function handleSearch() {
|
async function handleSearch() {
|
||||||
@ -80,17 +78,13 @@ async function handleSearch() {
|
|||||||
queryParams.sectionID = searchForm.department // 使用section作为科室查询参数
|
queryParams.sectionID = searchForm.department // 使用section作为科室查询参数
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('查询参数:', queryParams) // 添加日志查看实际发送的参数
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await itemsApi.getitemsPage(queryParams)
|
const res = await itemsApi.getitemsPage(queryParams)
|
||||||
console.log('查询结果:', res)
|
|
||||||
if (res) {
|
if (res) {
|
||||||
tableData.value = res.list || []
|
tableData.value = res.list || []
|
||||||
total.value = res.total || 0
|
total.value = res.total || 0
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('查询失败:', error)
|
|
||||||
ElMessage.error('查询失败')
|
ElMessage.error('查询失败')
|
||||||
tableData.value = []
|
tableData.value = []
|
||||||
total.value = 0
|
total.value = 0
|
||||||
@ -110,7 +104,6 @@ const getDepartmentList = async () => {
|
|||||||
label: item.departmentName
|
label: item.departmentName
|
||||||
}))
|
}))
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取科室列表失败:', error)
|
|
||||||
ElMessage.error('获取科室列表失败')
|
ElMessage.error('获取科室列表失败')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -118,10 +111,21 @@ const getDepartmentList = async () => {
|
|||||||
const currentPage = ref(1)
|
const currentPage = ref(1)
|
||||||
const pageSize = ref(10)
|
const pageSize = ref(10)
|
||||||
const total = ref(0)
|
const total = ref(0)
|
||||||
|
const emit = defineEmits(['update:modelValue', 'save-items'])
|
||||||
|
|
||||||
|
const tableRef = ref(null)
|
||||||
|
|
||||||
//保存数据
|
//保存数据
|
||||||
const save = () => {
|
const save = () => {
|
||||||
console.log(tableData.value)
|
if (selectedRows.value.length === 0) {
|
||||||
|
ElMessage.warning('请先选择要保存的项目')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
emit('save-items', selectedRows.value)
|
||||||
|
emit('update:modelValue', false)
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleSizeChange = (val: number) => {
|
const handleSizeChange = (val: number) => {
|
||||||
pageSize.value = val
|
pageSize.value = val
|
||||||
handleSearch()
|
handleSearch()
|
||||||
@ -133,53 +137,13 @@ const handleCurrentChange = (val: number) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 添加选中行数据的响应式变量
|
// 添加选中行数据的响应式变量
|
||||||
const selectedRows = ref([])
|
const selectedRows = ref<any[]>([])
|
||||||
|
|
||||||
// 表格多选
|
// 表格多选
|
||||||
const handleSelectionChange = (selection: any[]) => {
|
const handleSelectionChange = (selection: any[]) => {
|
||||||
selectedRows.value = selection
|
selectedRows.value = selection
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改删除方法为删除选中
|
|
||||||
const handleDelete = () => {
|
|
||||||
if (selectedRows.value.length === 0) {
|
|
||||||
ElMessage.warning('请选择要删除的数据')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ElMessageBox.confirm('确认从列表中移除选中的数据吗?', '提示', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(() => {
|
|
||||||
// 获取选中行的索引数组
|
|
||||||
const selectedIndices = selectedRows.value.map(row =>
|
|
||||||
tableData.value.findIndex(item => item === row)
|
|
||||||
)
|
|
||||||
|
|
||||||
// 从后向前删除,避免索引变化影响
|
|
||||||
selectedIndices.sort((a, b) => b - a).forEach(index => {
|
|
||||||
if (index !== -1) {
|
|
||||||
tableData.value.splice(index, 1)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
ElMessage.success('移除成功')
|
|
||||||
}).catch(() => {})
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleClear = () => {
|
|
||||||
ElMessageBox.confirm('确认清空列表数据吗?', '提示', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(() => {
|
|
||||||
tableData.value = []
|
|
||||||
total.value = 0
|
|
||||||
ElMessage.success('清空成功')
|
|
||||||
}).catch(() => {})
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getDepartmentList()
|
getDepartmentList()
|
||||||
})
|
})
|
||||||
|
@ -20,7 +20,36 @@
|
|||||||
:class="{ active: selectedPackage?.id === item.id }"
|
:class="{ active: selectedPackage?.id === item.id }"
|
||||||
@click="handleSelectPackage(item)"
|
@click="handleSelectPackage(item)"
|
||||||
>
|
>
|
||||||
<div class="package-name">{{ item.examModuleName }}</div>
|
<div class="package-content">
|
||||||
|
<div class="package-name">
|
||||||
|
<template v-if="item.isEditing">
|
||||||
|
<el-input
|
||||||
|
v-model="item.examModuleName"
|
||||||
|
size="small"
|
||||||
|
@blur="saveEdit(item)"
|
||||||
|
@keyup.enter="saveEdit(item)"
|
||||||
|
@input="validateNumber($event, item)"
|
||||||
|
@click.stop
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
{{ item.examModuleName }}
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
<div class="package-actions">
|
||||||
|
<el-dropdown @command="(command) => handleCommand(command, item)" trigger="click" @click.stop>
|
||||||
|
<span class="el-dropdown-link">
|
||||||
|
操作<el-icon class="el-icon--right"><arrow-down /></el-icon>
|
||||||
|
</span>
|
||||||
|
<template #dropdown>
|
||||||
|
<el-dropdown-menu>
|
||||||
|
<el-dropdown-item command="edit">编辑</el-dropdown-item>
|
||||||
|
<el-dropdown-item command="delete" class="delete-item" divided>删除</el-dropdown-item>
|
||||||
|
</el-dropdown-menu>
|
||||||
|
</template>
|
||||||
|
</el-dropdown>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -31,41 +60,28 @@
|
|||||||
<el-button type="primary" @click="handleAdd">
|
<el-button type="primary" @click="handleAdd">
|
||||||
<el-icon><Plus /></el-icon>新增套餐
|
<el-icon><Plus /></el-icon>新增套餐
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button type="primary" @click="handleDelete">
|
|
||||||
<el-icon><Delete /></el-icon>删除
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" @click="openDrawer">
|
<el-button type="primary" @click="openDrawer">
|
||||||
<el-icon><Plus /></el-icon>添加项目
|
<el-icon><Plus /></el-icon>添加项目
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button type="primary" @click="handleSubmit">
|
<el-button type="danger" @click="handleDeleteSelected">
|
||||||
|
<el-icon><Delete /></el-icon>删除选中
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="success"
|
||||||
|
@click="handleSubmit"
|
||||||
|
:disabled="!isSubmitEnabled"
|
||||||
|
>
|
||||||
<el-icon><Upload /></el-icon>提交
|
<el-icon><Upload /></el-icon>提交
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="search-form">
|
<el-table :data="tableData" border style="width: 100%" @selection-change="handleSelectionChange">
|
||||||
<el-form :inline="true" :model="searchForm">
|
|
||||||
<el-form-item label="套餐编号" required>
|
|
||||||
<el-input v-model="searchForm.name" placeholder="请输入" style="width: 200px" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="套餐名称" required>
|
|
||||||
<el-input v-model="searchForm.name" placeholder="请输入" style="width: 200px" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<el-table :data="tableData" border style="width: 100%">
|
|
||||||
<el-table-column type="selection" width="55" />
|
<el-table-column type="selection" width="55" />
|
||||||
<el-table-column prop="name" label="名称" />
|
<el-table-column prop="name" label="基础项目名称" />
|
||||||
<el-table-column prop="price" label="销售价(元)" />
|
<el-table-column prop="price" label="销售价(元)" />
|
||||||
<el-table-column prop="discount" label="折扣(%)" />
|
<el-table-column prop="discount" label="折扣(%)" />
|
||||||
<el-table-column prop="discountPrice" label="折扣价(元)" />
|
<el-table-column prop="discountPrice" label="折扣价(元)" />
|
||||||
<el-table-column prop="address" label="检查地址" />
|
<el-table-column prop="moduleName" label="项目单元" />
|
||||||
<el-table-column label="操作" width="180">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button type="primary" size="small" @click="handleEdit(scope.row)">编辑</el-button>
|
|
||||||
<el-button type="danger" size="small" @click="handleDelete(scope.row)">删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<div class="pagination-container">
|
<div class="pagination-container">
|
||||||
@ -90,7 +106,7 @@
|
|||||||
size="30%"
|
size="30%"
|
||||||
:destroy-on-close="true"
|
:destroy-on-close="true"
|
||||||
>
|
>
|
||||||
<Drawer/>
|
<Drawer @save-items="handleSaveItems"/>
|
||||||
</el-drawer>
|
</el-drawer>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -100,11 +116,13 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, reactive, onMounted, computed } from 'vue'
|
import { ref, reactive, onMounted, computed } from 'vue'
|
||||||
import { Plus, Delete, Upload, Search, Picture, PictureFilled } from '@element-plus/icons-vue'
|
import { Plus, Delete, Upload, Search, Picture, PictureFilled, ArrowDown } from '@element-plus/icons-vue'
|
||||||
import NewPackage from './new.vue'
|
import NewPackage from './new.vue'
|
||||||
import { ExammoduleApi } from '@/api/inspect/exammodule'
|
import { ExammoduleApi } from '@/api/inspect/exammodule'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import Drawer from './drawer.vue'
|
import Drawer from './drawer.vue'
|
||||||
|
import { itemsApi } from '@/api/inspect/inspectitems'
|
||||||
|
import { ElMessageBox } from 'element-plus'
|
||||||
// 添加搜索关键字
|
// 添加搜索关键字
|
||||||
const searchKeyword = ref('')
|
const searchKeyword = ref('')
|
||||||
// 修改搜索表单,添加type字段
|
// 修改搜索表单,添加type字段
|
||||||
@ -140,30 +158,86 @@ const filteredPackageList = computed(() => {
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
// 获取套餐列表
|
// 修改获取套餐列表的方法
|
||||||
const getPackageList = async () => {
|
const getPackageList = async () => {
|
||||||
try {
|
try {
|
||||||
const res = await ExammoduleApi.getExammodulePage({
|
const res = await ExammoduleApi.getListExammodule()
|
||||||
pageNo: 1,
|
|
||||||
pageSize: 100
|
if (res) {
|
||||||
})
|
// 对列表进行处理,将相同 examModuleID 的记录合并
|
||||||
// 修改数据获取方式,直接获取 res.list
|
const groupedPackages = {}
|
||||||
if (res?.list) {
|
res.forEach(item => {
|
||||||
packageList.value = res.list
|
if (item.examModuleID && item.examModuleID.toString().trim() !== '') {
|
||||||
} else {
|
if (!groupedPackages[item.examModuleID]) {
|
||||||
|
groupedPackages[item.examModuleID] = {
|
||||||
|
...item,
|
||||||
|
itemCodes: item.itemCode ? [item.itemCode] : []
|
||||||
|
}
|
||||||
|
} else if (item.itemCode) {
|
||||||
|
groupedPackages[item.examModuleID].itemCodes.push(item.itemCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
packageList.value = Object.values(groupedPackages)
|
||||||
|
} else {
|
||||||
packageList.value = []
|
packageList.value = []
|
||||||
console.warn('获取套餐列表数据结构异常:', res)
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取套餐列表失败:', error)
|
|
||||||
packageList.value = []
|
packageList.value = []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 选择套餐
|
// 修改选择套餐的方法
|
||||||
const handleSelectPackage = (item) => {
|
const handleSelectPackage = async (item) => {
|
||||||
selectedPackage.value = item
|
selectedPackage.value = item
|
||||||
// 可以在这里添加其他操作,比如加载套餐详情等
|
hasDataChanged.value = false // 重置数据变化标记
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 如果没有 itemCodes 或 itemCodes 为空数组,直接返回空表格
|
||||||
|
if (!item.itemCodes || item.itemCodes.length === 0) {
|
||||||
|
tableData.value = []
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取该套餐下所有项目的详情
|
||||||
|
const itemDetails = []
|
||||||
|
for (const itemCode of item.itemCodes) {
|
||||||
|
const itemDetail = await itemsApi.getitemsPage({
|
||||||
|
itemCode: itemCode,
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 1
|
||||||
|
})
|
||||||
|
if (itemDetail?.list?.[0]) {
|
||||||
|
itemDetails.push({
|
||||||
|
name: itemDetail.list[0].itemName,
|
||||||
|
price: itemDetail.list[0].price,
|
||||||
|
discount: itemDetail.list[0].discount,
|
||||||
|
discountPrice: itemDetail.list[0].discountPrice,
|
||||||
|
moduleName: itemDetail.list[0].moduleName
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tableData.value = itemDetails
|
||||||
|
} catch (error) {
|
||||||
|
console.error('加载套餐项目失败:', error)
|
||||||
|
ElMessage.error('加载套餐项目失败')
|
||||||
|
tableData.value = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取项目详情的方法(需要您提供对应的接口)
|
||||||
|
const getItemDetail = async (itemCode) => {
|
||||||
|
try {
|
||||||
|
// 这里需要调用您的项目详情接口
|
||||||
|
const response = await itemsApi.getItems({
|
||||||
|
itemCode: itemCode
|
||||||
|
})
|
||||||
|
return response
|
||||||
|
} catch (error) {
|
||||||
|
console.error('获取项目详情失败:', error)
|
||||||
|
return null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索处理
|
// 搜索处理
|
||||||
@ -187,20 +261,208 @@ const refreshList = async () => {
|
|||||||
await getPackageList() // 重新获取套餐列表
|
await getPackageList() // 重新获取套餐列表
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleDelete = (row) => {
|
const handleDelete = async () => {
|
||||||
// 处理删除
|
if (!selectedPackage.value) {
|
||||||
|
ElMessage.warning('请先选择要删除的套餐')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
await ElMessageBox.confirm('确定要删除该套餐吗?此操作将删除该套餐下的所有项目。', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
})
|
||||||
|
|
||||||
|
// 获取所有具有相同 examModuleID 的记录
|
||||||
|
const res = await ExammoduleApi.getExammodulePage({
|
||||||
|
examModuleID: selectedPackage.value.examModuleID,
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 100
|
||||||
|
})
|
||||||
|
|
||||||
|
if (res?.list) {
|
||||||
|
// 删除所有相关记录
|
||||||
|
const deletePromises = res.list.map(item =>
|
||||||
|
ExammoduleApi.deleteExammodule(item.id)
|
||||||
|
)
|
||||||
|
await Promise.all(deletePromises)
|
||||||
|
}
|
||||||
|
|
||||||
|
ElMessage.success('删除成功')
|
||||||
|
|
||||||
|
// 刷新列表
|
||||||
|
await getPackageList()
|
||||||
|
|
||||||
|
// 清空选中状态和表格数据
|
||||||
|
selectedPackage.value = null
|
||||||
|
tableData.value = []
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
if (error !== 'cancel') {
|
||||||
|
console.error('删除失败:', error)
|
||||||
|
ElMessage.error('删除失败')
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleAddItem = () => {
|
const handleAddItem = () => {
|
||||||
// 处理添加项目
|
// 处理添加项目
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleSubmit = () => {
|
// 添加计算属性控制提交按钮状态
|
||||||
// 处理提交
|
const isSubmitEnabled = computed(() => {
|
||||||
|
return tableData.value.length > 0 && selectedPackage.value && hasDataChanged.value
|
||||||
|
})
|
||||||
|
|
||||||
|
// 添加数据变化标记
|
||||||
|
const hasDataChanged = ref(false)
|
||||||
|
|
||||||
|
// 修改 handleSaveItems 方法
|
||||||
|
const handleSaveItems = async (items) => {
|
||||||
|
if (!selectedPackage.value) {
|
||||||
|
ElMessage.warning('请先选择套餐')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将新选择的项目添加到表格数据中
|
||||||
|
const newItems = items.map(item => ({
|
||||||
|
name: item.itemName,
|
||||||
|
price: item.price,
|
||||||
|
discount: item.discount,
|
||||||
|
discountPrice: item.discountPrice,
|
||||||
|
moduleName: item.moduleName
|
||||||
|
}))
|
||||||
|
|
||||||
|
// 检查是否有重复项目
|
||||||
|
const existingNames = tableData.value.map(item => item.name)
|
||||||
|
const uniqueItems = newItems.filter(item => !existingNames.includes(item.name))
|
||||||
|
|
||||||
|
if (uniqueItems.length === 0) {
|
||||||
|
ElMessage.warning('所选项目已存在')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将新项目添加到表格数据中
|
||||||
|
tableData.value = [...tableData.value, ...uniqueItems]
|
||||||
|
hasDataChanged.value = true // 标记数据已变化
|
||||||
|
|
||||||
|
drawer.value = false
|
||||||
|
ElMessage.success('项目添加成功')
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleEdit = (row) => {
|
const multipleSelection = ref([])
|
||||||
// 处理编辑
|
|
||||||
|
// 处理表格选择变化
|
||||||
|
const handleSelectionChange = (selection) => {
|
||||||
|
multipleSelection.value = selection
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改删除选中项的方法
|
||||||
|
const handleDeleteSelected = async () => {
|
||||||
|
if (multipleSelection.value.length === 0) {
|
||||||
|
ElMessage.warning('请先选择要删除的项目')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
await ElMessageBox.confirm('确定要删除选中的项目吗?', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
})
|
||||||
|
|
||||||
|
// 遍历选中的项目
|
||||||
|
for (const item of multipleSelection.value) {
|
||||||
|
// 通过项目名称查询获取itemCode
|
||||||
|
const itemsRes = await itemsApi.getitemsPage({
|
||||||
|
itemName: item.name,
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 1
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!itemsRes?.list?.[0]) {
|
||||||
|
ElMessage.warning(`未找到项目"${item.name}"的信息`)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
const itemCode = itemsRes.list[0].itemCode
|
||||||
|
// 删除项目
|
||||||
|
await ExammoduleApi.deleteExammoduleitemcode({
|
||||||
|
itemCode: itemCode,
|
||||||
|
examModuleID: selectedPackage.value.examModuleID
|
||||||
|
})
|
||||||
|
|
||||||
|
// 从表格数据中移除已删除的项目
|
||||||
|
tableData.value = tableData.value.filter(row => row.name !== item.name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清空选中状态
|
||||||
|
multipleSelection.value = []
|
||||||
|
|
||||||
|
// 刷新套餐列表
|
||||||
|
await getPackageList()
|
||||||
|
|
||||||
|
// 重新获取当前套餐的最新数据
|
||||||
|
if (selectedPackage.value) {
|
||||||
|
const updatedPackage = packageList.value.find(p => p.examModuleID === selectedPackage.value.examModuleID)
|
||||||
|
if (updatedPackage) {
|
||||||
|
await handleSelectPackage(updatedPackage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hasDataChanged.value = true // 标记数据已变化
|
||||||
|
|
||||||
|
ElMessage.success('删除成功')
|
||||||
|
} catch (error) {
|
||||||
|
if (error !== 'cancel') {
|
||||||
|
console.error('删除失败:', error)
|
||||||
|
ElMessage.error('删除失败')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const validateNumber = (value, item) => {
|
||||||
|
if (value) {
|
||||||
|
// 只保留数字
|
||||||
|
item.examModuleName = value.replace(/\D/g, '')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const saveEdit = async (item) => {
|
||||||
|
if (!item.examModuleName.trim()) {
|
||||||
|
item.examModuleName = item.originalName
|
||||||
|
item.isEditing = false
|
||||||
|
ElMessage.warning('套餐名称不能为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
await ExammoduleApi.updateExammodule({
|
||||||
|
examModuleName: item.examModuleName,
|
||||||
|
examModuleID: item.examModuleID
|
||||||
|
})
|
||||||
|
ElMessage.success('更新成功')
|
||||||
|
item.isEditing = false
|
||||||
|
await getPackageList()
|
||||||
|
|
||||||
|
const updatedPackage = packageList.value.find(p => p.examModuleID === item.examModuleID)
|
||||||
|
if (updatedPackage) {
|
||||||
|
selectedPackage.value = updatedPackage
|
||||||
|
await handleSelectPackage(updatedPackage)
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('更新失败:', error)
|
||||||
|
item.examModuleName = item.originalName
|
||||||
|
item.isEditing = false
|
||||||
|
ElMessage.error('更新失败')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const drawer = ref(false)
|
||||||
|
|
||||||
|
const openDrawer = () => {
|
||||||
|
drawer.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
// 分页方法
|
// 分页方法
|
||||||
@ -214,10 +476,143 @@ const handleCurrentChange = (val) => {
|
|||||||
getPackageList()
|
getPackageList()
|
||||||
}
|
}
|
||||||
|
|
||||||
const drawer = ref(false)
|
// 修改 handleSubmit 方法
|
||||||
|
const handleSubmit = async () => {
|
||||||
|
if (!selectedPackage.value) {
|
||||||
|
ElMessage.warning('请先选择套餐')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
const openDrawer = () => {
|
if (tableData.value.length === 0) {
|
||||||
drawer.value = true
|
ElMessage.warning('请先添加项目')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 如果当前套餐没有 itemCode,先删除这条数据
|
||||||
|
if (!selectedPackage.value.itemCodes || selectedPackage.value.itemCodes.length === 0) {
|
||||||
|
await ExammoduleApi.deleteExammodule(selectedPackage.value.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建一个数组来存储所有的绑定关系
|
||||||
|
const bindList = []
|
||||||
|
|
||||||
|
// 遍历表格数据,获取每个项目的ID并准备绑定数据
|
||||||
|
for (const item of tableData.value) {
|
||||||
|
// 通过项目名称查询项目ID
|
||||||
|
const itemsRes = await itemsApi.getitemsPage({
|
||||||
|
itemName: item.name,
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 1
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!itemsRes?.list?.[0]) {
|
||||||
|
ElMessage.warning(`未找到项目"${item.name}"的信息`)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查该项目是否已经绑定到当前套餐
|
||||||
|
const itemCode = itemsRes.list[0].itemCode
|
||||||
|
if (!selectedPackage.value.itemCodes?.includes(itemCode)) {
|
||||||
|
// 只有未绑定的项目才添加到绑定列表
|
||||||
|
bindList.push({
|
||||||
|
id: null,
|
||||||
|
examModuleName: selectedPackage.value.examModuleName,
|
||||||
|
examModuleID: selectedPackage.value.examModuleID,
|
||||||
|
itemCode: itemCode
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 只有有新项目需要绑定时才提交
|
||||||
|
if (bindList.length > 0) {
|
||||||
|
await ExammoduleApi.ListcreateExammodule(bindList)
|
||||||
|
ElMessage.success('提交成功')
|
||||||
|
} else {
|
||||||
|
ElMessage.success('数据已更新')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 刷新列表和当前选中套餐的数据
|
||||||
|
await getPackageList()
|
||||||
|
// 如果当前有选中的套餐,重新加载其数据
|
||||||
|
if (selectedPackage.value) {
|
||||||
|
const updatedPackage = packageList.value.find(p => p.examModuleID === selectedPackage.value.examModuleID)
|
||||||
|
if (updatedPackage) {
|
||||||
|
await handleSelectPackage(updatedPackage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hasDataChanged.value = false // 重置数据变化标记
|
||||||
|
} catch (error) {
|
||||||
|
console.error('提交失败:', error)
|
||||||
|
ElMessage.error('提交失败')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleEdit = async () => {
|
||||||
|
if (!selectedPackage.value) {
|
||||||
|
ElMessage.warning('请先选择要编辑的套餐')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const { value: newName } = await ElMessageBox.prompt('请输入新的套餐名称', '编辑套餐', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
inputValue: selectedPackage.value.examModuleName
|
||||||
|
})
|
||||||
|
|
||||||
|
if (newName.trim() === '') {
|
||||||
|
ElMessage.warning('套餐名称不能为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取所有具有相同 examModuleID 的记录
|
||||||
|
const res = await ExammoduleApi.getExammodulePage({
|
||||||
|
examModuleID: selectedPackage.value.examModuleID,
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 100
|
||||||
|
})
|
||||||
|
|
||||||
|
if (res?.list) {
|
||||||
|
// 更新所有相关记录的名称
|
||||||
|
const updatePromises = res.list.map(item =>
|
||||||
|
ExammoduleApi.updateExammodule({
|
||||||
|
id: item.id,
|
||||||
|
examModuleName: newName,
|
||||||
|
examModuleID: selectedPackage.value.examModuleID
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
await Promise.all(updatePromises)
|
||||||
|
ElMessage.success('更新成功')
|
||||||
|
|
||||||
|
// 刷新列表和选中状态
|
||||||
|
await getPackageList()
|
||||||
|
const updatedPackage = packageList.value.find(p => p.examModuleID === selectedPackage.value.examModuleID)
|
||||||
|
if (updatedPackage) {
|
||||||
|
selectedPackage.value = updatedPackage
|
||||||
|
await handleSelectPackage(updatedPackage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
if (error !== 'cancel') {
|
||||||
|
console.error('更新失败:', error)
|
||||||
|
ElMessage.error('更新失败')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加下拉菜单命令处理函数
|
||||||
|
const handleCommand = (command, item) => {
|
||||||
|
switch (command) {
|
||||||
|
case 'edit':
|
||||||
|
handleEdit(item)
|
||||||
|
break
|
||||||
|
case 'delete':
|
||||||
|
handleDelete(item)
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -237,8 +632,9 @@ const openDrawer = () => {
|
|||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
||||||
height: 90%;
|
height: 90vh; /* 设置固定高度 */
|
||||||
overflow-y: auto;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.panel-title {
|
.panel-title {
|
||||||
@ -317,9 +713,25 @@ const openDrawer = () => {
|
|||||||
|
|
||||||
/* 添加套餐列表样式 */
|
/* 添加套餐列表样式 */
|
||||||
.package-list {
|
.package-list {
|
||||||
|
flex: 1;
|
||||||
|
overflow-y: auto; /* 启用垂直滚动 */
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 自定义滚动条样式 */
|
||||||
|
.package-list::-webkit-scrollbar {
|
||||||
|
width: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.package-list::-webkit-scrollbar-thumb {
|
||||||
|
background-color: #dcdfe6;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.package-list::-webkit-scrollbar-track {
|
||||||
|
background-color: #f5f7fa;
|
||||||
|
}
|
||||||
|
|
||||||
.package-item {
|
.package-item {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid #eee;
|
||||||
@ -346,6 +758,10 @@ const openDrawer = () => {
|
|||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.package-name .el-input {
|
||||||
|
margin: -5px 0;
|
||||||
|
}
|
||||||
|
|
||||||
.drawer-content {
|
.drawer-content {
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
@ -391,4 +807,29 @@ const openDrawer = () => {
|
|||||||
color: #606266;
|
color: #606266;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.package-content {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.package-actions {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-dropdown-link {
|
||||||
|
cursor: pointer;
|
||||||
|
color: #409EFF;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-dropdown-link:hover {
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.delete-item {
|
||||||
|
color: #F56C6C !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -55,7 +55,6 @@ const formData = reactive({
|
|||||||
packageName: '',
|
packageName: '',
|
||||||
examModuleName: '',
|
examModuleName: '',
|
||||||
examModuleID: 0,
|
examModuleID: 0,
|
||||||
itemCode: ''
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const handlePackageCodeInput = (value) => {
|
const handlePackageCodeInput = (value) => {
|
||||||
@ -75,22 +74,6 @@ const rules = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
},
|
|
||||||
{
|
|
||||||
validator: async (rule, value, callback) => {
|
|
||||||
if (!value) return callback()
|
|
||||||
const result = await ExammoduleApi.createExammodule({
|
|
||||||
examModuleName: formData.packageName,
|
|
||||||
examModuleID: Number(value),
|
|
||||||
itemCode: value,
|
|
||||||
})
|
|
||||||
if (result === 999) {
|
|
||||||
callback(new Error('套餐编号已存在'))
|
|
||||||
} else {
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
trigger: 'blur'
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
packageName: [{ required: true, message: '请输入套餐名称', trigger: 'blur' }]
|
packageName: [{ required: true, message: '请输入套餐名称', trigger: 'blur' }]
|
||||||
@ -116,6 +99,18 @@ const handleSubmit = async () => {
|
|||||||
if (!newPackageRef.value) return
|
if (!newPackageRef.value) return
|
||||||
try {
|
try {
|
||||||
await newPackageRef.value.validate()
|
await newPackageRef.value.validate()
|
||||||
|
|
||||||
|
// 在表单验证通过后检查套餐编号是否存在
|
||||||
|
const result = await ExammoduleApi.createExammodule({
|
||||||
|
examModuleName: formData.packageName,
|
||||||
|
examModuleID: Number(formData.packageCode),
|
||||||
|
})
|
||||||
|
|
||||||
|
if (result === 999) {
|
||||||
|
ElMessage.error('套餐编号已存在')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ElMessage.success('新增套餐成功')
|
ElMessage.success('新增套餐成功')
|
||||||
visible.value = false
|
visible.value = false
|
||||||
emit('refresh-list')
|
emit('refresh-list')
|
||||||
|
Loading…
Reference in New Issue
Block a user