|
|
@@ -0,0 +1,536 @@
|
|
|
+<template>
|
|
|
+ <Dialog v-model="dialogVisible" :title="dialogTitle" width="70vw">
|
|
|
+ <el-form
|
|
|
+ ref="formRef"
|
|
|
+ v-loading="formLoading"
|
|
|
+ :model="formData"
|
|
|
+ :rules="formRules"
|
|
|
+ :disabled="formType === 'detail'"
|
|
|
+ label-width="130px"
|
|
|
+ >
|
|
|
+ <!-- 套餐信息 -->
|
|
|
+ <div class="section-title">套餐信息</div>
|
|
|
+
|
|
|
+ <el-form-item label="套餐图片:" prop="comboImage">
|
|
|
+ <div class="flex items-start gap-20px">
|
|
|
+ <UploadImg
|
|
|
+ v-model="formData.comboImage"
|
|
|
+ height="120px"
|
|
|
+ width="120px"
|
|
|
+ :disabled="formType === 'detail'"
|
|
|
+ />
|
|
|
+ <div class="text-gray-500 text-13px">
|
|
|
+ <div>尺寸:正方形,推荐 800px * 800px,</div>
|
|
|
+ <div>图片将用于平台和小程序中,作为商品封面和头部展示。</div>
|
|
|
+ <el-button type="primary" link>使用默认图片 >></el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="服务类别:" prop="serviceTypeId">
|
|
|
+ <el-select
|
|
|
+ v-model="formData.serviceTypeId"
|
|
|
+ placeholder="请选择"
|
|
|
+ class="!w-300px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in serviceTypeList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="套餐名称:" prop="comboName">
|
|
|
+ <el-input
|
|
|
+ v-model="formData.comboName"
|
|
|
+ placeholder="请输入"
|
|
|
+ class="!w-300px"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="套餐明细:" prop="comboDetailIds">
|
|
|
+ <div class="w-full">
|
|
|
+ <el-button v-if="formType !== 'detail'" type="primary" link @click="openSelectItemDialog">
|
|
|
+ 选择服务项目 >>
|
|
|
+ </el-button>
|
|
|
+ <div v-if="selectedItems.length" class="mt-10px p-10px bg-gray-50 rounded">
|
|
|
+ <div v-for="(item, index) in selectedItems" :key="item.id" class="flex items-center justify-between mb-5px last:mb-0">
|
|
|
+ <span>{{ item.serviceName }}({{ item.servicePrice }}元)</span>
|
|
|
+ <el-button v-if="formType !== 'detail'" type="danger" link size="small" @click="removeSelectedItem(index)">删除</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="text-red-500 text-12px mt-5px" v-if="formType !== 'detail'">
|
|
|
+ 提示:请选择已有的服务项目组合成套餐(套餐内的项目不能超过10条)。
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="套餐价格:" prop="comboPrice">
|
|
|
+ <el-input-number
|
|
|
+ v-model="formData.comboPrice"
|
|
|
+ :min="0"
|
|
|
+ :precision="2"
|
|
|
+ placeholder="请输入"
|
|
|
+ class="!w-300px"
|
|
|
+ @change="handlePriceChange"
|
|
|
+ />
|
|
|
+ <span class="ml-10px">元</span>
|
|
|
+ <div class="text-orange-500 text-12px mt-5px" v-if="formType !== 'detail'">
|
|
|
+ 提示:套餐价格默认等于所选的服务项目的总费用,也可手动修改。
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="套餐概述:" prop="comboDescription">
|
|
|
+ <el-input
|
|
|
+ v-model="formData.comboDescription"
|
|
|
+ type="textarea"
|
|
|
+ :rows="4"
|
|
|
+ placeholder="请输入服务概述"
|
|
|
+ maxlength="2000"
|
|
|
+ show-word-limit
|
|
|
+ class="!w-full"
|
|
|
+ />
|
|
|
+ <div class="text-red-500 text-12px mt-5px" v-if="formType !== 'detail'">
|
|
|
+ 提示:套餐概述默认由所选的服务项目的"名称:概述"拼接而成,支持手动编辑。新增的服务项目会自动添加至末尾,删除服务项目时,其对应的概述文字将保留,需手动删除。
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="套餐详情:" prop="comboDetailImages">
|
|
|
+ <div class="flex flex-col gap-10px">
|
|
|
+ <UploadImgs
|
|
|
+ v-model="comboDetailImages"
|
|
|
+ :limit="9"
|
|
|
+ height="100px"
|
|
|
+ width="140px"
|
|
|
+ :disabled="formType === 'detail'"
|
|
|
+ />
|
|
|
+ <div class="text-gray-500 text-13px">
|
|
|
+ <div>尺寸:推荐 750px * 1000px(宽750px,高1000px)</div>
|
|
|
+ <div>最多可上传9张</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- 更多信息 -->
|
|
|
+ <div class="section-title mt-30px">更多信息</div>
|
|
|
+
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="是否上架:" prop="isShelf" label-width="166px">
|
|
|
+ <el-select
|
|
|
+ v-model="formData.isShelf"
|
|
|
+ placeholder="请选择"
|
|
|
+ class="!w-full"
|
|
|
+ >
|
|
|
+ <el-option label="是" value="是" />
|
|
|
+ <el-option label="否" value="否" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="服务积分:" prop="servicePoints" label-width="166px">
|
|
|
+ <el-input-number
|
|
|
+ v-model="formData.servicePoints"
|
|
|
+ :min="0"
|
|
|
+ :precision="0"
|
|
|
+ placeholder="请输入"
|
|
|
+ class="!w-full"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="志愿者服务是否扣费:" prop="volunteerDeductFee" label-width="166px">
|
|
|
+ <el-select
|
|
|
+ v-model="formData.volunteerDeductFee"
|
|
|
+ placeholder="请选择"
|
|
|
+ class="!w-full"
|
|
|
+ >
|
|
|
+ <el-option label="是" value="是" />
|
|
|
+ <el-option label="否" value="否" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="服务人员提成方式:" prop="staffCommissionType" label-width="166px">
|
|
|
+ <div class="flex items-center gap-10px w-full">
|
|
|
+ <el-select
|
|
|
+ v-model="formData.staffCommissionType"
|
|
|
+ placeholder="请选择"
|
|
|
+ class="flex-1"
|
|
|
+ @change="handleCommissionTypeChange"
|
|
|
+ >
|
|
|
+ <el-option label="按单" value="按单" />
|
|
|
+ <el-option label="按比例" value="按比例" />
|
|
|
+ </el-select>
|
|
|
+ <el-input-number
|
|
|
+ v-model="formData.staffCommissionValue"
|
|
|
+ :min="0"
|
|
|
+ :precision="formData.staffCommissionType === '按比例' ? 1 : 2"
|
|
|
+ placeholder="请输入"
|
|
|
+ class="!w-150px"
|
|
|
+ />
|
|
|
+ <span>{{ formData.staffCommissionType === '按比例' ? '%' : '元/单' }}</span>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <!-- 选择服务项目弹窗 -->
|
|
|
+ <Dialog v-model="selectItemDialogVisible" title="选择服务项目" width="80vw" append-to-body>
|
|
|
+ <div class="mb-15px">
|
|
|
+ <el-form :inline="true" class="-mb-15px">
|
|
|
+ <el-form-item label="服务类别:">
|
|
|
+ <el-select
|
|
|
+ v-model="itemQueryParams.serviceTypeId"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ class="!w-200px"
|
|
|
+ @change="getAvailableItems"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in serviceTypeList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="mb-15px">
|
|
|
+ <div class="font-bold mb-10px">服务项目列表:</div>
|
|
|
+ <el-table
|
|
|
+ ref="itemTableRef"
|
|
|
+ :data="availableItems"
|
|
|
+ row-key="id"
|
|
|
+ @selection-change="handleItemSelectionChange"
|
|
|
+ max-height="400px"
|
|
|
+ >
|
|
|
+ <el-table-column type="selection" width="55" align="center" />
|
|
|
+ <el-table-column label="序号" type="index" width="80" align="center" />
|
|
|
+ <el-table-column prop="serviceName" label="服务名称" align="center" min-width="150" />
|
|
|
+ <el-table-column prop="serviceTypeName" label="服务类别" align="center" min-width="120" />
|
|
|
+ <el-table-column prop="deductElderFee" label="是否收费" align="center" width="100" />
|
|
|
+ <el-table-column prop="servicePrice" label="金额(元)" align="center" width="100" />
|
|
|
+ <el-table-column prop="billingMethod" label="收费方式" align="center" width="100" />
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="bg-gray-50 p-15px rounded">
|
|
|
+ <div class="font-bold mb-10px">已勾选项目:</div>
|
|
|
+ <div v-if="tempSelectedItems.length" class="flex flex-wrap gap-10px">
|
|
|
+ <el-tag
|
|
|
+ v-for="item in tempSelectedItems"
|
|
|
+ :key="item.id"
|
|
|
+ closable
|
|
|
+ @close="removeTempItem(item.id)"
|
|
|
+ >
|
|
|
+ {{ item.serviceName }}({{ item.servicePrice }}元)
|
|
|
+ </el-tag>
|
|
|
+ </div>
|
|
|
+ <div v-else class="text-gray-400">暂无已选项目</div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <template #footer>
|
|
|
+ <el-button type="primary" @click="confirmSelectItems">保 存</el-button>
|
|
|
+ <el-button @click="selectItemDialogVisible = false">取 消</el-button>
|
|
|
+ </template>
|
|
|
+ </Dialog>
|
|
|
+
|
|
|
+ <template #footer>
|
|
|
+ <el-button v-if="formType !== 'detail'" type="primary" @click="submitForm">保 存</el-button>
|
|
|
+ <el-button @click="dialogVisible = false">{{ formType === 'detail' ? '关 闭' : '取 消' }}</el-button>
|
|
|
+ </template>
|
|
|
+ </Dialog>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script lang="ts" setup>
|
|
|
+import { FormRules } from 'element-plus'
|
|
|
+import UploadImg from '@/components/UploadFile/src/UploadImg.vue'
|
|
|
+import UploadImgs from '@/components/UploadFile/src/UploadImgs.vue'
|
|
|
+import * as ServiceComboApi from '@/api/living-home/elderly'
|
|
|
+
|
|
|
+defineOptions({ name: 'ServiceComboForm' })
|
|
|
+
|
|
|
+const { t } = useI18n()
|
|
|
+const message = useMessage()
|
|
|
+
|
|
|
+const dialogVisible = ref(false)
|
|
|
+const dialogTitle = ref('')
|
|
|
+const formLoading = ref(false)
|
|
|
+const formType = ref('')
|
|
|
+const comboDetailImages = ref<string[]>([])
|
|
|
+const serviceTypeList = ref<any[]>([])
|
|
|
+const selectItemDialogVisible = ref(false)
|
|
|
+const availableItems = ref<any[]>([])
|
|
|
+const tempSelectedItems = ref<any[]>([])
|
|
|
+const selectedItems = ref<any[]>([])
|
|
|
+const itemTableRef = ref()
|
|
|
+const itemQueryParams = reactive({
|
|
|
+ serviceTypeId: undefined as number | undefined
|
|
|
+})
|
|
|
+
|
|
|
+const formData = ref<ServiceComboApi.ServiceComboVO>({
|
|
|
+ id: undefined,
|
|
|
+ comboImage: '',
|
|
|
+ serviceTypeId: undefined,
|
|
|
+ comboName: '',
|
|
|
+ comboDetailIds: [],
|
|
|
+ comboItems: [],
|
|
|
+ comboPrice: undefined,
|
|
|
+ discountedPrice: undefined,
|
|
|
+ billingMethod: '按次',
|
|
|
+ comboDescription: '',
|
|
|
+ comboDetailImages: '',
|
|
|
+ isShelf: '是',
|
|
|
+ volunteerDeductFee: '否',
|
|
|
+ servicePoints: undefined,
|
|
|
+ staffCommissionType: '按单',
|
|
|
+ staffCommissionValue: undefined
|
|
|
+})
|
|
|
+
|
|
|
+const formRules = reactive<FormRules>({
|
|
|
+ serviceTypeId: [{ required: true, message: '请选择服务类别', trigger: 'change' }],
|
|
|
+ comboName: [{ required: true, message: '请输入套餐名称', trigger: 'blur' }],
|
|
|
+ comboDetailIds: [{ required: true, message: '请选择套餐明细', trigger: 'change', type: 'array' }],
|
|
|
+ comboPrice: [{ required: true, message: '请输入套餐价格', trigger: 'blur' }],
|
|
|
+ isShelf: [{ required: true, message: '请选择是否上架', trigger: 'change' }],
|
|
|
+ volunteerDeductFee: [{ required: true, message: '请选择志愿者服务是否扣费', trigger: 'change' }],
|
|
|
+ staffCommissionType: [{ required: true, message: '请选择服务人员提成方式', trigger: 'change' }]
|
|
|
+})
|
|
|
+
|
|
|
+const formRef = ref()
|
|
|
+
|
|
|
+/** 获取服务类别列表 */
|
|
|
+const getServiceTypeList = async () => {
|
|
|
+ try {
|
|
|
+ const data = await ServiceComboApi.getServiceTypeList()
|
|
|
+ serviceTypeList.value = data || []
|
|
|
+ } catch (error) {
|
|
|
+ serviceTypeList.value = [
|
|
|
+ { id: 1, name: '生活照料' },
|
|
|
+ { id: 2, name: '医疗护理' },
|
|
|
+ { id: 3, name: '康复保健' },
|
|
|
+ { id: 4, name: '精神慰藉' },
|
|
|
+ { id: 5, name: '文化娱乐' }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/** 获取可用的服务项目 */
|
|
|
+const getAvailableItems = async () => {
|
|
|
+ try {
|
|
|
+ const params: any = {}
|
|
|
+ if (itemQueryParams.serviceTypeId) {
|
|
|
+ params.serviceTypeId = itemQueryParams.serviceTypeId
|
|
|
+ }
|
|
|
+ const data = await ServiceComboApi.getServiceItemList(params)
|
|
|
+ availableItems.value = data || []
|
|
|
+ } catch (error) {
|
|
|
+ availableItems.value = [
|
|
|
+ { id: 1, serviceName: '居家清洁服务', serviceTypeName: '生活照料', servicePrice: 80, deductElderFee: '是', billingMethod: '按次' },
|
|
|
+ { id: 2, serviceName: '助餐送餐服务', serviceTypeName: '生活照料', servicePrice: 25, deductElderFee: '是', billingMethod: '按次' },
|
|
|
+ { id: 3, serviceName: '陪同就医服务', serviceTypeName: '医疗护理', servicePrice: 120, deductElderFee: '是', billingMethod: '按时' },
|
|
|
+ { id: 4, serviceName: '健康体检服务', serviceTypeName: '医疗护理', servicePrice: 200, deductElderFee: '是', billingMethod: '按次' }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/** 打开选择项目弹窗 */
|
|
|
+const openSelectItemDialog = () => {
|
|
|
+ tempSelectedItems.value = [...selectedItems.value]
|
|
|
+ itemQueryParams.serviceTypeId = undefined
|
|
|
+ getAvailableItems()
|
|
|
+ selectItemDialogVisible.value = true
|
|
|
+}
|
|
|
+
|
|
|
+/** 处理项目选择变化 */
|
|
|
+const handleItemSelectionChange = (selection: any[]) => {
|
|
|
+ const existingIds = new Set(tempSelectedItems.value.map(item => item.id))
|
|
|
+ selection.forEach(item => {
|
|
|
+ if (!existingIds.has(item.id)) {
|
|
|
+ if (tempSelectedItems.value.length >= 10) {
|
|
|
+ message.warning('套餐内的项目不能超过10条')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ tempSelectedItems.value.push(item)
|
|
|
+ existingIds.add(item.id)
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+/** 移除临时选中的项目 */
|
|
|
+const removeTempItem = (id: number) => {
|
|
|
+ const index = tempSelectedItems.value.findIndex(item => item.id === id)
|
|
|
+ if (index !== -1) {
|
|
|
+ tempSelectedItems.value.splice(index, 1)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/** 确认选择项目 */
|
|
|
+const confirmSelectItems = () => {
|
|
|
+ selectedItems.value = [...tempSelectedItems.value]
|
|
|
+ formData.value.comboDetailIds = selectedItems.value.map(item => item.id)
|
|
|
+ formData.value.comboItems = selectedItems.value
|
|
|
+
|
|
|
+ // 自动计算总价
|
|
|
+ const totalPrice = selectedItems.value.reduce((sum, item) => sum + (item.servicePrice || 0), 0)
|
|
|
+ formData.value.comboPrice = totalPrice
|
|
|
+
|
|
|
+ // 自动生成概述
|
|
|
+ const descriptions = selectedItems.value.map(item => `${item.serviceName}:${item.serviceDescription || ''}`)
|
|
|
+ formData.value.comboDescription = descriptions.join('\n')
|
|
|
+
|
|
|
+ selectItemDialogVisible.value = false
|
|
|
+}
|
|
|
+
|
|
|
+/** 移除已选项目 */
|
|
|
+const removeSelectedItem = (index: number) => {
|
|
|
+ selectedItems.value.splice(index, 1)
|
|
|
+ formData.value.comboDetailIds = selectedItems.value.map(item => item.id)
|
|
|
+ formData.value.comboItems = [...selectedItems.value]
|
|
|
+
|
|
|
+ // 重新计算价格
|
|
|
+ const totalPrice = selectedItems.value.reduce((sum, item) => sum + (item.servicePrice || 0), 0)
|
|
|
+ formData.value.comboPrice = totalPrice
|
|
|
+}
|
|
|
+
|
|
|
+/** 价格变化处理 */
|
|
|
+const handlePriceChange = (value: number | undefined) => {
|
|
|
+ if (value && formData.value.discountedPrice === undefined) {
|
|
|
+ formData.value.discountedPrice = value * 0.9
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/** 提成方式变化 */
|
|
|
+const handleCommissionTypeChange = (value: string) => {
|
|
|
+ formData.value.staffCommissionValue = undefined
|
|
|
+}
|
|
|
+
|
|
|
+/** 打开弹窗 */
|
|
|
+const open = async (type: string, id?: number) => {
|
|
|
+ dialogVisible.value = true
|
|
|
+ resetForm()
|
|
|
+
|
|
|
+ if (type === 'create') {
|
|
|
+ dialogTitle.value = '新增服务套餐'
|
|
|
+ formType.value = 'create'
|
|
|
+ } else if (type === 'update') {
|
|
|
+ dialogTitle.value = '编辑服务套餐'
|
|
|
+ formType.value = 'update'
|
|
|
+ } else if (type === 'detail') {
|
|
|
+ dialogTitle.value = '服务套餐详情'
|
|
|
+ formType.value = 'detail'
|
|
|
+ }
|
|
|
+
|
|
|
+ if (id) {
|
|
|
+ formLoading.value = true
|
|
|
+ try {
|
|
|
+ const data = await ServiceComboApi.getServiceCombo(id)
|
|
|
+ formData.value = data
|
|
|
+ if (data.comboItems) {
|
|
|
+ selectedItems.value = data.comboItems
|
|
|
+ }
|
|
|
+ if (data.comboDetailImages) {
|
|
|
+ comboDetailImages.value = data.comboDetailImages.split(',')
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ formLoading.value = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+defineExpose({ open })
|
|
|
+
|
|
|
+/** 提交表单 */
|
|
|
+const emit = defineEmits(['success'])
|
|
|
+const submitForm = async () => {
|
|
|
+ if (!formRef.value) return
|
|
|
+ const valid = await formRef.value.validate()
|
|
|
+ if (!valid) return
|
|
|
+
|
|
|
+ formLoading.value = true
|
|
|
+ try {
|
|
|
+ const submitData = {
|
|
|
+ ...formData.value,
|
|
|
+ comboDetailImages: comboDetailImages.value.join(',')
|
|
|
+ }
|
|
|
+
|
|
|
+ if (formType.value === 'create') {
|
|
|
+ await ServiceComboApi.createServiceCombo(submitData)
|
|
|
+ message.success(t('common.createSuccess'))
|
|
|
+ } else {
|
|
|
+ await ServiceComboApi.updateServiceCombo(submitData)
|
|
|
+ message.success(t('common.updateSuccess'))
|
|
|
+ }
|
|
|
+ dialogVisible.value = false
|
|
|
+ emit('success')
|
|
|
+ } finally {
|
|
|
+ formLoading.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/** 重置表单 */
|
|
|
+const resetForm = () => {
|
|
|
+ formData.value = {
|
|
|
+ id: undefined,
|
|
|
+ comboImage: '',
|
|
|
+ serviceTypeId: undefined,
|
|
|
+ comboName: '',
|
|
|
+ comboDetailIds: [],
|
|
|
+ comboItems: [],
|
|
|
+ comboPrice: undefined,
|
|
|
+ discountedPrice: undefined,
|
|
|
+ billingMethod: '按次',
|
|
|
+ comboDescription: '',
|
|
|
+ comboDetailImages: '',
|
|
|
+ isShelf: '是',
|
|
|
+ volunteerDeductFee: '否',
|
|
|
+ servicePoints: undefined,
|
|
|
+ staffCommissionType: '按单',
|
|
|
+ staffCommissionValue: undefined
|
|
|
+ }
|
|
|
+ comboDetailImages.value = []
|
|
|
+ selectedItems.value = []
|
|
|
+ formRef.value?.resetFields()
|
|
|
+}
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ getServiceTypeList()
|
|
|
+})
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped lang="scss">
|
|
|
+.section-title {
|
|
|
+ position: relative;
|
|
|
+ padding-left: 15px;
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #303133;
|
|
|
+ margin-bottom: 20px;
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ top: 50%;
|
|
|
+ transform: translateY(-50%);
|
|
|
+ width: 4px;
|
|
|
+ height: 18px;
|
|
|
+ background-color: var(--el-color-primary);
|
|
|
+ border-radius: 2px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+:deep(.el-textarea__inner) {
|
|
|
+ resize: none;
|
|
|
+}
|
|
|
+</style>
|