hldy_vue/src/views/synchronization/directive/directiveopelog/components/DirectiveOpeLogInfoAdd.vue

372 lines
13 KiB
Vue

<template>
<a-spin :spinning="confirmLoading">
<div v-show="!isEditMedia"
style="padding-top: 14px;padding-left: 14px;padding-right: 14px; background-color: #fff;border-radius: 10px;box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);margin-bottom: 14px;">
<JFormContainer :disabled="true">
<template #detail>
<a-form ref="formRef" :labelCol="labelCol" :wrapperCol="wrapperCol" :colon="false"
name="ConfigService2DirectiveForm" style="padding: 0px 0px;">
<a-row v-show="!isEditMedia">
<a-col :span="8">
<a-form-item label="分类标签" v-bind="validateInfos.instructionTagName"
id="ConfigServiceDirectiveForm-instructionTagName" name="instructionTagName">
<a-input v-model:value="formData.instructionTagName" placeholder="分类标签" disabled />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="服务类别" v-bind="validateInfos.categoryName"
id="ConfigServiceDirectiveForm-categoryName" name="categoryName">
<a-input v-model:value="formData.categoryName" placeholder="服务类别" disabled />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="服务类型" v-bind="validateInfos.typeName" id="ConfigServiceDirectiveForm-typeName"
name="typeId">
<a-input v-model:value="formData.typeName" placeholder="服务类型" disabled />
</a-form-item>
</a-col>
</a-row>
</a-form>
</template>
</JFormContainer>
</div>
<div style="padding: 14px;background-color: #fff;border-radius: 10px;box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);">
<JFormContainer :disabled="true">
<template #detail>
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" :colon="false"
name="ConfigService2DirectiveForm" style="padding: 20px 0px;">
<a-row>
<a-col :span="12">
<a-form-item label="服务指令名称" v-bind="validateInfos.directiveName"
id="ConfigServiceDirectiveForm-directiveName" name="directiveName">
<a-input v-model:value="formData.directiveName" placeholder="服务指令名称" disabled></a-input>
</a-form-item>
</a-col>
<!-- <a-col :span="12">
<a-form-item label="周期类型" v-bind="validateInfos.cycleType" id="ConfigServiceDirectiveForm-cycleType"
name="cycleType">
<a-input v-model:value="formData.cycleTypeName" placeholder="周期类型" disabled></a-input>
</a-form-item>
</a-col> -->
<a-col :span="12">
<a-form-item label="服务时长 (分钟)" v-bind="validateInfos.serviceDuration"
id="ConfigServiceDirectiveForm-serviceDuration" name="serviceDuration">
<a-input v-model:value="formData.serviceDuration" placeholder="服务时长(分钟)" disabled></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="收费价格 (元)" v-bind="validateInfos.tollPrice" id="ConfigServiceDirectiveForm-tollPrice"
name="tollPrice">
<a-input v-model:value="formData.tollPrice" placeholder="收费价格" disabled></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="超时时长 (分钟)" v-bind="validateInfos.timeoutDuration"
id="ConfigServiceDirectiveForm-timeoutDuration" name="timeoutDuration">
<a-input v-model:value="formData.timeoutDuration" placeholder="超时时长(分钟)" disabled></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="提成价格 (元)" v-bind="validateInfos.comPrice" id="ConfigServiceDirectiveForm-comPrice"
name="comPrice">
<a-input v-model:value="formData.comPrice" placeholder="提成价格" disabled></a-input>
</a-form-item>
</a-col>
<a-col :span="24" >
<a-form-item label="服务指令描述" v-bind="validateInfos.comPrice" id="ConfigServiceDirectiveForm-comPrice" :labelCol="labelCol2" :wrapperCol="wrapperCol2"
name="comPrice">
<a-textarea style="color: #606266;" v-model:value="formData.serviceContent" placeholder="服务指令描述"
:maxlength="200" :rows="3" :autoSize="{ minRows: 3 }" :showCount="true" disabled />
</a-form-item>
</a-col>
</a-row>
</a-form>
</template>
</JFormContainer>
</div>
<div
style="padding: 14px;background-color: #fff;border-radius: 0 0px 10px 10px;box-shadow: 0 10px 10px rgba(0.1, 0.1, 0.2, 0.1); margin-top: -80px;">
<JFormContainer>
<template #detail>
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" :colon="false"
name="ConfigService2DirectiveForm" style="padding: 20px 0px;">
<a-row style="padding: 20px;">
<a-col :span="6">
<DirectiveRadioCom :directiveMediaBtnValue="directiveMediaBtnValue" @change="mediaBtnChanged">
</DirectiveRadioCom>
</a-col>
</a-row>
<a-row style="padding: 0px 20px;">
<a-col :span="24" v-show="directiveMediaBtnValue == 0">
<JImageUploadtz :value="!!formData.previewFile ? formData.previewFile : defaultPrePic" disabled />
</a-col>
<!-- <a-col :span="24" v-show="directiveMediaBtnValue == 1">
<JImageUploadtz :value="!!formData.previewFileSmall ? formData.previewFileSmall : defaultPreSmallPic"
disabled />
</a-col> -->
<a-col :span="24" v-show="directiveMediaBtnValue == 1">
<JUploadMP3 :value="formData.mp3File" disabled />
</a-col>
<a-col :span="24" v-show="directiveMediaBtnValue == 2">
<JUploadMP4 :value="formData.mp4File" fileType="mp4" disabled />
</a-col>
<a-col :span="24" v-show="directiveMediaBtnValue == 3">
<JImageUploadtz :value="!!formData.immediateFile ? formData.immediateFile : defaultImmediatePic"
disabled />
</a-col>
<a-col :span="24" v-show="directiveMediaBtnValue == 4">
<JImageUploadtz
:value="!!formData.immediateFileFocus ? formData.immediateFileFocus : defaultImmediatePic" disabled />
</a-col>
</a-row>
<!-- <a-row style="padding: 20px;">
<a-col :span="2">
<div class="description-container">
<a-button @click="toggleDescription">服务指令描述</a-button>
<div v-show="showDescription" class="description-box">
<div class="box-header">
<span class="title">服务指令描述</span>
<span class="collapse-icon" @click="toggleDescription">
<DownOutlined style="margin-right: 3px;" />收起
</span>
</div>
<div>
<a-textarea style="color: #606266;" v-model:value="formData.serviceContent" placeholder="服务指令描述"
:maxlength="200" :rows="3" :autoSize="{ minRows: 3 }" :showCount="true" disabled />
</div>
</div>
</div>
</a-col>
</a-row> -->
</a-form>
</template>
</JFormContainer>
</div>
</a-spin>
</template>
<script lang="ts" setup>
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted, watch } from 'vue';
import { defHttp } from '/@/utils/http/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import JUploadMP3 from '/@/components/Form/src/jeecg/components/JUpload/JUploadMP3.vue';
import JUploadMP4 from '/@/components/Form/src/jeecg/components/JUpload/JUploadMP4.vue';
import JImageUploadtz from '/@/components/Form/src/jeecg/components/JImageUploadtz.vue';
import { Form } from 'ant-design-vue';
import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
import DirectiveRadioCom from './DirectiveRadioCom.vue'
import { DownOutlined } from '@ant-design/icons-vue';
import { queryUpBizPrefix } from '/@/api/common/api'
import { list } from '../DirectiveOpeLogInfo.api'
const showDescription = ref(false);
// 切换悬浮容器的显示状态
const toggleDescription = () => {
showDescription.value = !showDescription.value;
};
const defaultPrePic = import.meta.env.VITE_DEFAULT_DIRECTIVE_PRE_PIC
const defaultPreSmallPic = import.meta.env.VITE_DEFAULT_DIRECTIVE_PRESMALL_PIC
const defaultImmediatePic = import.meta.env.VITE_DEFAULT_DIRECTIVE_IM_PIC
const upBizPrefix = ref('')
const formRef = ref();
const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']);
const formData = reactive<Record<string, any>>({
id: '',
categoryName: '',
createBy: '',
createTime: '',
cycleTypeName: '',
directiveName: '',
instructionTagName: '',
opeType: '',
opeType_dictText: '',
orgCode: '',
orgCode_dictText: '',
typeName: '',
tollPrice: 0,
comPrice: 0,
serviceDuration: '',
timeoutDuration: '',
serviceContent: '',
immediateFile: '',
immediateFileFocus: '',
mp3File: '',
mp4File: '',
previewFile: '',
previewFileSmall: '',
});
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 6 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const labelCol2 = ref<any>({ xs: { span: 24 }, sm: { span: 3 } });
const wrapperCol2 = ref<any>({ xs: { span: 24 }, sm: { span: 20 } });
const confirmLoading = ref<boolean>(false);
const isEditMedia = ref(false)
//表单验证
const validatorRules = reactive({
});
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
/**
* 编辑
* isEditMedia_是否为编辑指令资源 (隐藏业务字段)
*/
async function detail(record_) {
let data = await list({ 'pkId': record_.id })
let record = data.records[0]
record.cycleTypeName = record_.cycleTypeName
console.log("🌊 ~ detail ~ record:", record)
nextTick(() => {
resetFields();
const tmpData = {};
Object.keys(formData).forEach((key) => {
if (record.hasOwnProperty(key)) {
tmpData[key] = record[key]
}
})
//赋值
Object.assign(formData, tmpData);
});
}
const directiveMediaBtnValue = ref(0)
function mediaBtnChanged(v_) {
directiveMediaBtnValue.value = v_
}
onMounted(() => {
queryUpBizPrefix().then(res => {
upBizPrefix.value = res.result
})
})
defineExpose({
detail,
});
</script>
<style lang="less" scoped>
.antd-modal-form {
padding: 0px;
}
:deep .ant-checkbox-wrapper {
margin-top: 5px;
margin-bottom: 14px;
width: 30%;
}
.upload-area {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.upload-icon {
margin-bottom: 14px;
}
.upload-text {
font-size: 16px;
color: rgba(0, 0, 0, 0.85);
margin-bottom: 8px;
}
.upload-hint {
font-size: 12px;
color: rgba(0, 0, 0, 0.45);
display: flex;
align-items: center;
gap: 8px;
}
.divider {
color: rgba(0, 0, 0, 0.2);
}
.description-container {
position: relative;
z-index: 1000;
}
.description-box {
position: absolute;
bottom: 100%;
left: 0;
background: #f6faff;
border-radius: 4px;
padding: 12px;
width: 43vw;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
margin-bottom: 8px;
}
.box-header {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 8px;
margin-bottom: 12px;
}
.title {
font-weight: bold;
font-size: 16px;
}
.collapse-icon {
color: #1890ff;
cursor: pointer;
}
.content {
background: #fff;
border-radius: 4px;
padding: 12px;
position: relative;
}
.instruction {
color: #8c8c8c;
margin-bottom: 30px;
}
.confirm-btn {
position: absolute;
right: 12px;
bottom: 12px;
background: #1890ff;
border-radius: 20px;
}
/* 渐隐渐现动画 */
.slide-fade-enter-active {
transition: opacity 0.3s ease-out;
}
.slide-fade-leave-active {
transition: opacity 0.3s cubic-bezier(0.5, 0, 0.8, 1);
}
/* 进入时从透明开始 */
.slide-fade-enter-from {
opacity: 0;
}
/* 离开时渐变到透明 */
.slide-fade-leave-to {
opacity: 0;
}
/* 确保容器初始状态无变形 */
.slide-fade-enter-to,
.slide-fade-leave-from {
opacity: 1;
}
</style>