|
|
@@ -40,13 +40,13 @@ const { loading: branchLoading } = useRequest(branchMethod).onSuccess(({ data })
|
|
|
const to = (data?: any[]): any[] => {
|
|
|
return Array.isArray(data)
|
|
|
? data.map((item) => {
|
|
|
- return {
|
|
|
- ...item,
|
|
|
- value: item.id,
|
|
|
- key: item.id.toString(),
|
|
|
- children: to(item.children),
|
|
|
- };
|
|
|
- })
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ value: item.id,
|
|
|
+ key: item.id.toString(),
|
|
|
+ children: to(item.children),
|
|
|
+ };
|
|
|
+ })
|
|
|
: [];
|
|
|
};
|
|
|
branch.value = to(data);
|
|
|
@@ -102,8 +102,6 @@ const form = reactive<any>({
|
|
|
|
|
|
const checkedList = ref<string[]>(['1']); // 默认选中第一个
|
|
|
|
|
|
-const deliverArr = ref<string[]>([]);
|
|
|
-
|
|
|
// 建议频率相关字段
|
|
|
const suggestedFrequencyUnit = ref<string>(''); // 建议频率单位
|
|
|
|
|
|
@@ -114,20 +112,35 @@ const isDerivationModalOpen = ref(false);
|
|
|
const rules: any = {
|
|
|
name: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
|
|
|
conditioningProgramType: [{ required: true, message: '请选择方案类型', trigger: 'change' }],
|
|
|
+ offlineDuration: [{ required: true, message: '请输入服务所需时间', trigger: 'blur' }],
|
|
|
institutionId: [
|
|
|
{
|
|
|
- required: true,
|
|
|
- message: '请选择机构名称',
|
|
|
trigger: 'blur',
|
|
|
validator: async (_rule: any, value: any) => {
|
|
|
// 如果推导逻辑弹窗打开,跳过验证
|
|
|
if (isDerivationModalOpen.value) return Promise.resolve();
|
|
|
- if (!value) return Promise.reject(new Error('请选择机构名称'));
|
|
|
+ if (!value) return Promise.reject('请选择机构名称');
|
|
|
return Promise.resolve();
|
|
|
},
|
|
|
},
|
|
|
],
|
|
|
photo: [{ required: true, message: '请上传商品图片', trigger: 'change' }],
|
|
|
+ isDelivery: [
|
|
|
+ {
|
|
|
+ trigger: 'change',
|
|
|
+ validator: async (_rule: any, value: any) => {
|
|
|
+ // 如果只选择了调理方案项目(包含 '2' 但不包含 '1'),配送不必填
|
|
|
+ if (checkedList.value.includes('2') && !checkedList.value.includes('1')) {
|
|
|
+ return Promise.resolve();
|
|
|
+ }
|
|
|
+ // 项目应用含有服务包项目或商品类型是实体商品时,配送必填
|
|
|
+ if ((checkedList.value.includes('1') || form.sellType === '1') && !value) {
|
|
|
+ return Promise.reject('请选择配送方式');
|
|
|
+ }
|
|
|
+ return Promise.resolve();
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
};
|
|
|
const showMiniProgramCode = ref<boolean>(false);
|
|
|
const showBuyLink = ref<boolean>(false);
|
|
|
@@ -161,6 +174,16 @@ const showDelivery = computed(() => {
|
|
|
return form.sellType === '1';
|
|
|
});
|
|
|
|
|
|
+// 判断配送是否必填(显示红色星号)
|
|
|
+const isDeliveryRequired = computed(() => {
|
|
|
+ // 如果只选择了调理方案项目,不必填
|
|
|
+ if (checkedList.value.includes('2') && !checkedList.value.includes('1')) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // 项目应用含有服务包项目或商品类型是实体商品时,必填
|
|
|
+ return checkedList.value.includes('1') || form.sellType === '1';
|
|
|
+});
|
|
|
+
|
|
|
// 线下服务:itemsList 和 system 类型都需要“服务所需时间”
|
|
|
const showServiceRequiredTime = computed(() => {
|
|
|
return form.sellType === '2';
|
|
|
@@ -207,10 +230,10 @@ function cancel() {
|
|
|
}
|
|
|
function doSubmit() {
|
|
|
// 手动验证方案类型
|
|
|
- if (!form.conditioningProgramType) {
|
|
|
- message.error('请选择方案类型');
|
|
|
- return;
|
|
|
- }
|
|
|
+ // if (!form.conditioningProgramType) {
|
|
|
+ // message.error('请选择方案类型');
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
|
|
|
// 自定义验证:检查项目应用是否已选择
|
|
|
if (!checkedList.value || checkedList.value.length === 0) {
|
|
|
@@ -269,15 +292,15 @@ function doSubmit() {
|
|
|
return;
|
|
|
}
|
|
|
// 线下服务:服务所需时间必填
|
|
|
- if (form.sellType === '2' && !form.offlineDuration) {
|
|
|
- message.error('请输入服务所需时间');
|
|
|
- return;
|
|
|
- }
|
|
|
+ // if (form.sellType === '2' && !form.offlineDuration) {
|
|
|
+ // message.error('请输入服务所需时间');
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
// 实体商品:配送必填(itemsList 和 system 类型都需要)
|
|
|
- if (form.sellType === '1' && (!deliverArr.value || deliverArr.value.length === 0)) {
|
|
|
- message.error('请选择配送方式');
|
|
|
- return;
|
|
|
- }
|
|
|
+ // if (form.sellType === '1' && (!deliverArr.value || deliverArr.value.length === 0)) {
|
|
|
+ // message.error('请选择配送方式');
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
}
|
|
|
} else if (form.addType === 'itemsList') {
|
|
|
// 计价规则非必填时,做全填/全空校验
|
|
|
@@ -321,25 +344,25 @@ function doSubmit() {
|
|
|
|
|
|
// 购买链接与跳转类型联动校验
|
|
|
if (form.addType === 'itemsList') {
|
|
|
-
|
|
|
+
|
|
|
// 有购买链接则必须选择跳转类型
|
|
|
const hasBuyUrl = !!(form.attrEighth && String(form.attrEighth).trim());
|
|
|
if (hasBuyUrl && !form.attrNinth) {
|
|
|
message.error('请选择跳转类型');
|
|
|
return;
|
|
|
}
|
|
|
- // 如果选择了小程序码类型,类型是小程序码 小程序码必填 链接可填
|
|
|
- if (form.attrNinth === 'miniprogram' && miniProgramCodeList.value.length === 0) {
|
|
|
+ // 如果选择了小程序码类型,类型是小程序码 小程序码必填 链接可填
|
|
|
+ if (form.attrNinth === 'miniprogram' && miniProgramCodeList.value.length === 0) {
|
|
|
message.error('请上传小程序码');
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 商品图片必填
|
|
|
- if (!fileList.value || fileList.value.length === 0) {
|
|
|
- message.error('请上传商品图片');
|
|
|
- return;
|
|
|
- }
|
|
|
+ // if (!fileList.value || fileList.value.length === 0) {
|
|
|
+ // message.error('请上传商品图片');
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
|
|
|
formRef.value?.validate().then(() => {
|
|
|
form.photo = fileList.value[0]?.response?.url || fileList.value[0]?.url || '';
|
|
|
@@ -419,7 +442,7 @@ onMounted(async () => {
|
|
|
if (res.isForInfer === 'Y') checked.push('2');
|
|
|
checkedList.value = checked.length > 0 ? checked : ['1', '2'];
|
|
|
Object.assign(form, res);
|
|
|
- suggestedFrequencyUnit.value = res.convertUnit; // 建议频率使用单位
|
|
|
+ suggestedFrequencyUnit.value = res.convertUnit; // 建议频率使用单位
|
|
|
form.cpMedicines = (res.cpMedicines ?? []).map((item: any) => ({
|
|
|
name: item.name || item.herbName || item.medicineName || '',
|
|
|
dosage: item.dosage,
|
|
|
@@ -434,36 +457,36 @@ onMounted(async () => {
|
|
|
|
|
|
fileList.value = res.photo
|
|
|
? [
|
|
|
- {
|
|
|
- uid: '-1',
|
|
|
- name: 'image.png',
|
|
|
- status: 'done',
|
|
|
- url: res.photo,
|
|
|
- thumbUrl: res.photo,
|
|
|
- },
|
|
|
- ]
|
|
|
+ {
|
|
|
+ uid: '-1',
|
|
|
+ name: 'image.png',
|
|
|
+ status: 'done',
|
|
|
+ url: res.photo,
|
|
|
+ thumbUrl: res.photo,
|
|
|
+ },
|
|
|
+ ]
|
|
|
: [];
|
|
|
optionsList.value = res.itemImgFirst
|
|
|
? [
|
|
|
- {
|
|
|
- uid: '-1',
|
|
|
- name: 'image.png',
|
|
|
- status: 'done',
|
|
|
- url: res.itemImgFirst,
|
|
|
- thumbUrl: res.itemImgFirst,
|
|
|
- },
|
|
|
- ]
|
|
|
+ {
|
|
|
+ uid: '-1',
|
|
|
+ name: 'image.png',
|
|
|
+ status: 'done',
|
|
|
+ url: res.itemImgFirst,
|
|
|
+ thumbUrl: res.itemImgFirst,
|
|
|
+ },
|
|
|
+ ]
|
|
|
: [];
|
|
|
miniProgramCodeList.value = res.attrTen
|
|
|
? [
|
|
|
- {
|
|
|
- uid: '-1',
|
|
|
- name: 'image.png',
|
|
|
- status: 'done',
|
|
|
- url: res.attrTen,
|
|
|
- thumbUrl: res.attrTen,
|
|
|
- },
|
|
|
- ]
|
|
|
+ {
|
|
|
+ uid: '-1',
|
|
|
+ name: 'image.png',
|
|
|
+ status: 'done',
|
|
|
+ url: res.attrTen,
|
|
|
+ thumbUrl: res.attrTen,
|
|
|
+ },
|
|
|
+ ]
|
|
|
: [];
|
|
|
// 处理视频数据
|
|
|
if (res.itemVideoFirst) {
|
|
|
@@ -728,7 +751,7 @@ watch(
|
|
|
// 一口价模式:建议频率单位与一口价单位保持一致
|
|
|
if (form.cpFixedPricingRule?.convertUnit) {
|
|
|
suggestedFrequencyUnit.value = form.cpFixedPricingRule.convertUnit;
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
suggestedFrequencyUnit.value = '';
|
|
|
}
|
|
|
} else if (val === '1') {
|
|
|
@@ -772,21 +795,47 @@ watch(
|
|
|
(newVal) => {
|
|
|
if (newVal === '1') {
|
|
|
// 实体商品:默认支持配送(itemsList / system 都一样)
|
|
|
- form.isDelivery = 'Y';
|
|
|
- deliverArr.value = ['Y'];
|
|
|
+ // 但如果只选择了调理方案项目,配送不是必填,不设置默认值,让用户自己选择
|
|
|
+ if (!(checkedList.value.includes('2') && !checkedList.value.includes('1'))) {
|
|
|
+ form.isDelivery = 'Y';
|
|
|
+ }
|
|
|
} else {
|
|
|
// 其他类型:清空配送
|
|
|
form.isDelivery = null;
|
|
|
- deliverArr.value = [];
|
|
|
}
|
|
|
}
|
|
|
);
|
|
|
-function deliveryChange(value: any) {
|
|
|
- form.isDelivery = value[value.length - 1];
|
|
|
-}
|
|
|
+
|
|
|
+// 监听项目应用变化,当只选择调理方案项目时,自动设置为一口价
|
|
|
+watch(
|
|
|
+ () => checkedList.value,
|
|
|
+ (newVal) => {
|
|
|
+ // 如果只选择了调理方案项目(包含 '2' 但不包含 '1'),自动设置为一口价
|
|
|
+ if (newVal.includes('2') && !newVal.includes('1')) {
|
|
|
+ form.pricingType = '0';
|
|
|
+ // 如果只选择调理方案项目,配送不是必填,清空默认值让用户自己选择
|
|
|
+ if (form.sellType === '1') {
|
|
|
+ form.isDelivery = null;
|
|
|
+ }
|
|
|
+ } else if (form.sellType === '1' && !form.isDelivery) {
|
|
|
+ // 如果从只选择调理方案项目变为其他情况,且是实体商品,恢复默认值
|
|
|
+ form.isDelivery = 'Y';
|
|
|
+ }
|
|
|
+ }
|
|
|
+);
|
|
|
function getConditioningProgramSupplier() {
|
|
|
// 供应商改为可选,不做额外强制联动
|
|
|
}
|
|
|
+
|
|
|
+// 处理配送选项点击,允许取消选择
|
|
|
+function handleDeliveryClick(value: string) {
|
|
|
+ // 如果点击的是已选中的选项,则取消选择
|
|
|
+ if (form.isDelivery === value) {
|
|
|
+ form.isDelivery = null;
|
|
|
+ } else {
|
|
|
+ form.isDelivery = value;
|
|
|
+ }
|
|
|
+}
|
|
|
// 项目应用数据
|
|
|
const plainOptions = [
|
|
|
{ id: '1', name: '服务包项目' },
|
|
|
@@ -868,17 +917,8 @@ function handleDerivation() {
|
|
|
<a-input v-model:value="form.name" placeholder="请输入" />
|
|
|
</a-form-item>
|
|
|
<a-form-item label="方案类型:" name="conditioningProgramType" style="width: 100%" required>
|
|
|
- <vxe-select
|
|
|
- v-model="form.conditioningProgramType"
|
|
|
- :options="typeOptions"
|
|
|
- placeholder="请选择方案类型"
|
|
|
- clearable
|
|
|
- filterable
|
|
|
- transfer
|
|
|
- empty-text="暂无数据"
|
|
|
- @focus="handleSelectClick"
|
|
|
- style="width: 100%"
|
|
|
- />
|
|
|
+ <vxe-select v-model="form.conditioningProgramType" :options="typeOptions" placeholder="请选择方案类型" clearable
|
|
|
+ filterable transfer empty-text="暂无数据" @focus="handleSelectClick" style="width: 100%" />
|
|
|
</a-form-item>
|
|
|
<a-form-item label="项目应用:" required v-if="form.addType === 'itemsList'">
|
|
|
<a-checkbox-group v-model:value="checkedList">
|
|
|
@@ -894,10 +934,10 @@ function handleDerivation() {
|
|
|
<a-radio value="3">线上权益</a-radio>
|
|
|
</a-radio-group>
|
|
|
</a-form-item>
|
|
|
- <a-form-item label="计价规则:" name="pricingType" :required="checkedList.includes('1')">
|
|
|
+ <a-form-item label="计价规则:" name="pricingType" :required="checkedList.includes('1') || (checkedList.includes('2') && !checkedList.includes('1'))">
|
|
|
<a-radio-group v-model:value="form.pricingType">
|
|
|
<a-radio value="0">一口价</a-radio>
|
|
|
- <a-radio value="1">按穴位/经络/部位</a-radio>
|
|
|
+ <a-radio value="1" v-if="!checkedList.includes('2')">按穴位/经络/部位</a-radio>
|
|
|
</a-radio-group>
|
|
|
</a-form-item>
|
|
|
<div class="price-row" v-if="form.pricingType === '0' && form.cpFixedPricingRule">
|
|
|
@@ -909,101 +949,70 @@ function handleDerivation() {
|
|
|
<a-input v-model:value="form.cpFixedPricingRule.pricingUnit" placeholder="请输入" style="width: 100px" />
|
|
|
|
|
|
<span style="margin-left: 32px">相当于</span>
|
|
|
- <a-input v-model:value="form.cpFixedPricingRule.convertDose" placeholder="请输入" style="width: 100px; margin-left: 8px" />
|
|
|
- <vxe-select v-model="form.cpFixedPricingRule.convertUnit" :options="unitOptions" placeholder="请选择" clearable transfer style="width: 100px; margin-left: 8px" />
|
|
|
+ <a-input v-model:value="form.cpFixedPricingRule.convertDose" placeholder="请输入"
|
|
|
+ style="width: 100px; margin-left: 8px" />
|
|
|
+ <vxe-select v-model="form.cpFixedPricingRule.convertUnit" :options="unitOptions" placeholder="请选择" clearable
|
|
|
+ transfer style="width: 100px; margin-left: 8px" />
|
|
|
|
|
|
<span style="color: #aaa; margin-left: 8px">(使用单位)</span>
|
|
|
</div>
|
|
|
- <a-form-item label="建议频率:" v-if="form.addType === 'itemsList' || form.addType === 'system'" required>
|
|
|
- <div class="suggested-frequency-row">
|
|
|
- <span>每</span>
|
|
|
- <a-input v-model:value="form.frequencyType" placeholder="请输入" style="width: 100px; margin: 0 8px" />
|
|
|
- <span>天</span>
|
|
|
- <a-input v-model:value="form.frequencyMeasure" placeholder="请输入" style="width: 100px; margin: 0 8px" />
|
|
|
- <vxe-select
|
|
|
- v-model="suggestedFrequencyUnit"
|
|
|
- :options="unitOptions"
|
|
|
- placeholder="请选择"
|
|
|
- :clearable="form.pricingType !== '0'"
|
|
|
- transfer
|
|
|
- style="width: 100px; margin-left: 8px"
|
|
|
- />
|
|
|
- </div>
|
|
|
- </a-form-item>
|
|
|
- <a-form-item
|
|
|
- label="服务所需时间:"
|
|
|
- v-if="(form.addType === 'itemsList' || form.addType === 'system') && showServiceRequiredTime"
|
|
|
- required
|
|
|
- >
|
|
|
- <a-input v-model:value="form.offlineDuration" placeholder="请输入" style="width: 200px" />
|
|
|
- <span style="margin-left: 8px">分钟</span>
|
|
|
- </a-form-item>
|
|
|
<div v-if="form.pricingType === '1'" class="per-rule">
|
|
|
<div class="price-row">
|
|
|
<span>计价1:</span>
|
|
|
- <span class="flex items-center"
|
|
|
- >当"穴位/经络/部位" ≤
|
|
|
- <a-input
|
|
|
- placeholder="请输入"
|
|
|
- class="w-20 ml-2 mr-2"
|
|
|
- v-model:value="form.cpDynamicPricingRule[0].min"
|
|
|
- @change="() => (form.cpDynamicPricingRule[1].max = form.cpDynamicPricingRule[0].min)"
|
|
|
- />个时,</span
|
|
|
- >
|
|
|
- <vxe-select
|
|
|
- v-model="form.cpDynamicPricingRule[0].priceType"
|
|
|
- :options="[
|
|
|
- { label: '单价', value: 0, priceType: 0 },
|
|
|
- { label: '一口价', value: 1, priceType: 1 },
|
|
|
- ]"
|
|
|
- placeholder="请选择"
|
|
|
- clearable
|
|
|
- transfer
|
|
|
- style="width: 100px; margin: 0 4px"
|
|
|
- />
|
|
|
+ <span class="flex items-center">当"穴位/经络/部位" ≤
|
|
|
+ <a-input placeholder="请输入" class="w-20 ml-2 mr-2" v-model:value="form.cpDynamicPricingRule[0].min"
|
|
|
+ @change="() => (form.cpDynamicPricingRule[1].max = form.cpDynamicPricingRule[0].min)" />个时,</span>
|
|
|
+ <vxe-select v-model="form.cpDynamicPricingRule[0].priceType" :options="[
|
|
|
+ { label: '单价', value: 0, priceType: 0 },
|
|
|
+ { label: '一口价', value: 1, priceType: 1 },
|
|
|
+ ]" placeholder="请选择" clearable transfer style="width: 100px; margin: 0 4px" />
|
|
|
<span>=</span>
|
|
|
- <a-input v-model:value="form.cpDynamicPricingRule[0].price" style="width: 80px; margin: 0 4px" placeholder="请输入" />
|
|
|
+ <a-input v-model:value="form.cpDynamicPricingRule[0].price" style="width: 80px; margin: 0 4px"
|
|
|
+ placeholder="请输入" />
|
|
|
<span>元</span>
|
|
|
</div>
|
|
|
<div class="price-row">
|
|
|
<span>计价2:</span>
|
|
|
- <span class="flex items-center"
|
|
|
- >当"穴位/经络/部位" > <a-input placeholder="请输入" class="w-20 ml-2 mr-2" v-model:value="form.cpDynamicPricingRule[1].max" disabled />个时,</span
|
|
|
- >
|
|
|
- <vxe-select
|
|
|
- v-model="form.cpDynamicPricingRule[1].priceType"
|
|
|
- :options="[
|
|
|
- { label: '单价', value: 0, priceType: 0 },
|
|
|
- { label: '一口价', value: 1, priceType: 1 },
|
|
|
- ]"
|
|
|
- placeholder="请选择"
|
|
|
- clearable
|
|
|
- transfer
|
|
|
- style="width: 100px; margin: 0 4px"
|
|
|
- />
|
|
|
+ <span class="flex items-center">当"穴位/经络/部位" > <a-input placeholder="请输入" class="w-20 ml-2 mr-2"
|
|
|
+ v-model:value="form.cpDynamicPricingRule[1].max" disabled />个时,</span>
|
|
|
+ <vxe-select v-model="form.cpDynamicPricingRule[1].priceType" :options="[
|
|
|
+ { label: '单价', value: 0, priceType: 0 },
|
|
|
+ { label: '一口价', value: 1, priceType: 1 },
|
|
|
+ ]" placeholder="请选择" clearable transfer style="width: 100px; margin: 0 4px" />
|
|
|
<span>=</span>
|
|
|
- <a-input v-model:value="form.cpDynamicPricingRule[1].price" style="width: 80px; margin: 0 4px" placeholder="请输入" />
|
|
|
+ <a-input v-model:value="form.cpDynamicPricingRule[1].price" style="width: 80px; margin: 0 4px"
|
|
|
+ placeholder="请输入" />
|
|
|
<span>元</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <a-form-item label="建议频率:" v-if="form.addType === 'itemsList' || form.addType === 'system'" required>
|
|
|
+ <div class="suggested-frequency-row">
|
|
|
+ <span>每</span>
|
|
|
+ <a-input v-model:value="form.frequencyType" placeholder="请输入" style="width: 100px; margin: 0 8px" />
|
|
|
+ <span>天</span>
|
|
|
+ <a-input v-model:value="form.frequencyMeasure" placeholder="请输入" style="width: 100px; margin: 0 8px" />
|
|
|
+ <vxe-select v-model="suggestedFrequencyUnit" :options="unitOptions" placeholder="请选择"
|
|
|
+ :clearable="form.pricingType !== '0'" transfer style="width: 100px; margin-left: 8px" />
|
|
|
+ </div>
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item label="服务所需时间:"
|
|
|
+ name="offlineDuration"
|
|
|
+ v-if="(form.addType === 'itemsList' || form.addType === 'system') && showServiceRequiredTime" required>
|
|
|
+ <a-input v-model:value="form.offlineDuration" placeholder="请输入" style="width: 200px" />
|
|
|
+ <span style="margin-left: 8px">分钟</span>
|
|
|
+ </a-form-item>
|
|
|
+
|
|
|
|
|
|
<a-form-item label="组成:">
|
|
|
<div class="herb-list">
|
|
|
<template v-for="(herb, idx) in form.cpMedicines" :key="herb.id">
|
|
|
<div class="herb-item">
|
|
|
- <button class="herb-remove" v-if="form?.cpMedicines?.length > 1" @click="removeHerb(idx)" type="button">×</button>
|
|
|
+ <button class="herb-remove" v-if="form?.cpMedicines?.length > 1" @click="removeHerb(idx)"
|
|
|
+ type="button">×</button>
|
|
|
<!-- <RemoteSelect :load="cpMedicinesMethod" key-prop="name" v-model:value="herb.name" /> -->
|
|
|
- <SearchableSelect
|
|
|
- v-model="herb.name"
|
|
|
- :options="herbList"
|
|
|
- placeholder="请选择"
|
|
|
- value-key="name"
|
|
|
- label-key="name"
|
|
|
- key-key="id"
|
|
|
- :fetch-options="cpMedicinesMethod"
|
|
|
- style="width: 150px"
|
|
|
- :allow-custom-input="true"
|
|
|
- />
|
|
|
+ <SearchableSelect v-model="herb.name" :options="herbList" placeholder="请选择" value-key="name"
|
|
|
+ label-key="name" key-key="id" :fetch-options="cpMedicinesMethod" style="width: 150px"
|
|
|
+ :allow-custom-input="true" />
|
|
|
<a-input v-model:value="herb.dosage" class="herb-dosage" placeholder="剂量" />
|
|
|
<span>g</span>
|
|
|
</div>
|
|
|
@@ -1012,12 +1021,8 @@ function handleDerivation() {
|
|
|
</div>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="特色:" v-if="form.addType === 'itemsList'">
|
|
|
- <textarea
|
|
|
- v-model="form.attrFirst"
|
|
|
- placeholder="请输入"
|
|
|
- rows="3"
|
|
|
- style="width: 100%; padding: 8px; border: 1px solid #d9d9d9; border-radius: 4px; resize: vertical; font-family: inherit"
|
|
|
- />
|
|
|
+ <textarea v-model="form.attrFirst" placeholder="请输入" rows="3"
|
|
|
+ style="width: 100%; padding: 8px; border: 1px solid #d9d9d9; border-radius: 4px; resize: vertical; font-family: inherit" />
|
|
|
</a-form-item>
|
|
|
<a-form-item label="功效:">
|
|
|
<a-input v-model:value="form.effect" placeholder="请输入" />
|
|
|
@@ -1029,17 +1034,14 @@ function handleDerivation() {
|
|
|
<a-input v-model:value="form.attrFourth" placeholder="请输入" />
|
|
|
</a-form-item>
|
|
|
<a-form-item label="操作方法:" v-if="form.addType === 'itemsList'">
|
|
|
- <textarea
|
|
|
- v-model="form.attrFifth"
|
|
|
- placeholder="请输入"
|
|
|
- rows="3"
|
|
|
- style="width: 100%; padding: 8px; border: 1px solid #d9d9d9; border-radius: 4px; resize: vertical; font-family: inherit"
|
|
|
- />
|
|
|
+ <textarea v-model="form.attrFifth" placeholder="请输入" rows="3"
|
|
|
+ style="width: 100%; padding: 8px; border: 1px solid #d9d9d9; border-radius: 4px; resize: vertical; font-family: inherit" />
|
|
|
</a-form-item>
|
|
|
|
|
|
<div class="image-row">
|
|
|
<a-form-item label="操作图片:" class="image-form-item" v-if="form.addType === 'itemsList'">
|
|
|
- <a-upload :showUploadList="uploadProps" v-model:file-list="optionsList" list-type="picture-card" @preview="handlePreview" :maxCount="1" :customRequest="customUpload">
|
|
|
+ <a-upload :showUploadList="uploadProps" v-model:file-list="optionsList" list-type="picture-card"
|
|
|
+ @preview="handlePreview" :maxCount="1" :customRequest="customUpload">
|
|
|
<div v-if="optionsList.length < 1">
|
|
|
<PlusOutlined />
|
|
|
<div style="margin-top: 8px">上传</div>
|
|
|
@@ -1047,7 +1049,8 @@ function handleDerivation() {
|
|
|
</a-upload>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="商品图片:" class="image-form-item" name="photo" required>
|
|
|
- <a-upload :showUploadList="uploadProps" v-model:file-list="fileList" list-type="picture-card" @preview="handlePreview" :maxCount="1" :customRequest="customUpload">
|
|
|
+ <a-upload :showUploadList="uploadProps" v-model:file-list="fileList" list-type="picture-card"
|
|
|
+ @preview="handlePreview" :maxCount="1" :customRequest="customUpload">
|
|
|
<div v-if="fileList.length < 1">
|
|
|
<PlusOutlined />
|
|
|
<div style="margin-top: 8px">上传</div>
|
|
|
@@ -1058,16 +1061,9 @@ function handleDerivation() {
|
|
|
<a-form-item label="操作视频:" class="image-form-item" v-if="form.addType === 'itemsList'">
|
|
|
<div class="video-upload-wrapper">
|
|
|
<div class="video-upload-container">
|
|
|
- <a-upload
|
|
|
- :showUploadList="false"
|
|
|
- :custom-request="customVideoRequest"
|
|
|
- :max-count="1"
|
|
|
- :multiple="false"
|
|
|
- :before-upload="beforeVideoUpload"
|
|
|
- @change="handleVideoChange"
|
|
|
- :file-list="videoFileList"
|
|
|
- accept="video/mp4,video/avi,video/mov,video/webm"
|
|
|
- >
|
|
|
+ <a-upload :showUploadList="false" :custom-request="customVideoRequest" :max-count="1" :multiple="false"
|
|
|
+ :before-upload="beforeVideoUpload" @change="handleVideoChange" :file-list="videoFileList"
|
|
|
+ accept="video/mp4,video/avi,video/mov,video/webm">
|
|
|
<div v-if="!form.itemVideoFirst && !uploading" class="video-upload-btn">
|
|
|
<PlusOutlined />
|
|
|
<div style="margin-top: 8px">上传视频</div>
|
|
|
@@ -1087,17 +1083,13 @@ function handleDerivation() {
|
|
|
<div class="video-thumbnail">
|
|
|
<video :src="form.itemVideoFirst" preload="metadata" class="video-preview" />
|
|
|
<div class="video-overlay">
|
|
|
- <a-button
|
|
|
- type="primary"
|
|
|
- size="small"
|
|
|
- @click.stop="
|
|
|
- handleVideoPreview({
|
|
|
- uid: 'video-preview',
|
|
|
- name: '操作视频',
|
|
|
- url: form.itemVideoFirst,
|
|
|
- })
|
|
|
- "
|
|
|
- >
|
|
|
+ <a-button type="primary" size="small" @click.stop="
|
|
|
+ handleVideoPreview({
|
|
|
+ uid: 'video-preview',
|
|
|
+ name: '操作视频',
|
|
|
+ url: form.itemVideoFirst,
|
|
|
+ })
|
|
|
+ ">
|
|
|
预览
|
|
|
</a-button>
|
|
|
<a-button danger size="small" @click.stop="removeVideo"> 删除 </a-button>
|
|
|
@@ -1113,20 +1105,12 @@ function handleDerivation() {
|
|
|
</div>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="疗程说明:" v-if="form.addType === 'itemsList'">
|
|
|
- <textarea
|
|
|
- v-model="form.attrSixth"
|
|
|
- placeholder="请输入"
|
|
|
- rows="3"
|
|
|
- style="width: 100%; padding: 8px; border: 1px solid #d9d9d9; border-radius: 4px; resize: vertical; font-family: inherit"
|
|
|
- />
|
|
|
+ <textarea v-model="form.attrSixth" placeholder="请输入" rows="3"
|
|
|
+ style="width: 100%; padding: 8px; border: 1px solid #d9d9d9; border-radius: 4px; resize: vertical; font-family: inherit" />
|
|
|
</a-form-item>
|
|
|
<a-form-item label="使用注意:" v-if="form.addType === 'itemsList'">
|
|
|
- <textarea
|
|
|
- v-model="form.attrSeventh"
|
|
|
- placeholder="请输入"
|
|
|
- rows="3"
|
|
|
- style="width: 100%; padding: 8px; border: 1px solid #d9d9d9; border-radius: 4px; resize: vertical; font-family: inherit"
|
|
|
- />
|
|
|
+ <textarea v-model="form.attrSeventh" placeholder="请输入" rows="3"
|
|
|
+ style="width: 100%; padding: 8px; border: 1px solid #d9d9d9; border-radius: 4px; resize: vertical; font-family: inherit" />
|
|
|
</a-form-item>
|
|
|
<a-form-item label="推导逻辑:" v-if="form.addType === 'itemsList'" :required="checkedList.includes('2')">
|
|
|
<button @click="handleDerivation" v-if="!hasDerivationLogic || isDerivationEmpty">编辑</button>
|
|
|
@@ -1140,23 +1124,37 @@ function handleDerivation() {
|
|
|
<span class="derivation-label">年龄限制:</span>
|
|
|
<span class="derivation-content">{{ derivationData.cpPatientMatchRule.age }}</span>
|
|
|
</div>
|
|
|
- <div v-if="derivationData.cpPatientMatchRule.diagnoseDiseaseNames && derivationData.cpPatientMatchRule.diagnoseDiseaseNames.length > 0" class="derivation-item">
|
|
|
+ <div
|
|
|
+ v-if="derivationData.cpPatientMatchRule.diagnoseDiseaseNames && derivationData.cpPatientMatchRule.diagnoseDiseaseNames.length > 0"
|
|
|
+ class="derivation-item">
|
|
|
<span class="derivation-label">专病:</span>
|
|
|
- <span class="derivation-content">{{ derivationData.cpPatientMatchRule.diagnoseDiseaseNames.join('、') }}</span>
|
|
|
+ <span class="derivation-content">{{ derivationData.cpPatientMatchRule.diagnoseDiseaseNames.join('、')
|
|
|
+ }}</span>
|
|
|
</div>
|
|
|
- <div v-if="derivationData.cpPatientMatchRule.diagnoseSyndromeNames && derivationData.cpPatientMatchRule.diagnoseSyndromeNames.length > 0" class="derivation-item">
|
|
|
+ <div
|
|
|
+ v-if="derivationData.cpPatientMatchRule.diagnoseSyndromeNames && derivationData.cpPatientMatchRule.diagnoseSyndromeNames.length > 0"
|
|
|
+ class="derivation-item">
|
|
|
<span class="derivation-label">证型:</span>
|
|
|
- <span class="derivation-content">{{ derivationData.cpPatientMatchRule.diagnoseSyndromeNames.join('、') }}</span>
|
|
|
+ <span class="derivation-content">{{ derivationData.cpPatientMatchRule.diagnoseSyndromeNames.join('、')
|
|
|
+ }}</span>
|
|
|
</div>
|
|
|
- <div v-if="derivationData.cpPatientMatchRule.constitutionGroupNames && derivationData.cpPatientMatchRule.constitutionGroupNames.length > 0" class="derivation-item">
|
|
|
+ <div
|
|
|
+ v-if="derivationData.cpPatientMatchRule.constitutionGroupNames && derivationData.cpPatientMatchRule.constitutionGroupNames.length > 0"
|
|
|
+ class="derivation-item">
|
|
|
<span class="derivation-label">体质:</span>
|
|
|
- <span class="derivation-content">{{ derivationData.cpPatientMatchRule.constitutionGroupNames.join('、') }}</span>
|
|
|
+ <span class="derivation-content">{{ derivationData.cpPatientMatchRule.constitutionGroupNames.join('、')
|
|
|
+ }}</span>
|
|
|
</div>
|
|
|
- <div v-if="derivationData.cpPatientMatchRule.willillStateNames && derivationData.cpPatientMatchRule.willillStateNames.length > 0" class="derivation-item">
|
|
|
+ <div
|
|
|
+ v-if="derivationData.cpPatientMatchRule.willillStateNames && derivationData.cpPatientMatchRule.willillStateNames.length > 0"
|
|
|
+ class="derivation-item">
|
|
|
<span class="derivation-label">欲病状态:</span>
|
|
|
- <span class="derivation-content">{{ derivationData.cpPatientMatchRule.willillStateNames.join('、') }}</span>
|
|
|
+ <span class="derivation-content">{{ derivationData.cpPatientMatchRule.willillStateNames.join('、')
|
|
|
+ }}</span>
|
|
|
</div>
|
|
|
- <div v-if="derivationData.cpPatientMatchRule.tabooCrowds && derivationData.cpPatientMatchRule.tabooCrowds.length > 0" class="derivation-item">
|
|
|
+ <div
|
|
|
+ v-if="derivationData.cpPatientMatchRule.tabooCrowds && derivationData.cpPatientMatchRule.tabooCrowds.length > 0"
|
|
|
+ class="derivation-item">
|
|
|
<span class="derivation-label">禁忌人群:</span>
|
|
|
<span class="derivation-content">{{ derivationData.cpPatientMatchRule.tabooCrowds.join('、') }}</span>
|
|
|
</div>
|
|
|
@@ -1165,22 +1163,17 @@ function handleDerivation() {
|
|
|
</a-form-item>
|
|
|
<!-- 跳转类型 -->
|
|
|
<a-form-item label="跳转类型:" v-if="form.addType === 'itemsList'" style="width: 100%">
|
|
|
- <Vxe-select v-model="form.attrNinth" :options="jumpTypeOptions" placeholder="请选择" clearable transfer style="width: 100%" />
|
|
|
+ <Vxe-select v-model="form.attrNinth" :options="jumpTypeOptions" placeholder="请选择" clearable transfer
|
|
|
+ style="width: 100%" />
|
|
|
</a-form-item>
|
|
|
<!-- 购买链接 -->
|
|
|
<a-form-item label="购买链接:" v-if="form.addType === 'itemsList' && showBuyLink">
|
|
|
<a-input v-model:value="form.attrEighth" placeholder="请输入" />
|
|
|
</a-form-item>
|
|
|
- <a-form-item label="小程序码:" class="image-form-item"
|
|
|
- v-if="form.addType === 'itemsList' && showMiniProgramCode" :required="isMiniProgramCodeType">
|
|
|
- <a-upload
|
|
|
- :showUploadList="uploadProps"
|
|
|
- v-model:file-list="miniProgramCodeList"
|
|
|
- list-type="picture-card"
|
|
|
- @preview="handlePreview"
|
|
|
- :maxCount="1"
|
|
|
- :customRequest="customUpload"
|
|
|
- >
|
|
|
+ <a-form-item label="小程序码:" class="image-form-item" v-if="form.addType === 'itemsList' && showMiniProgramCode"
|
|
|
+ :required="isMiniProgramCodeType">
|
|
|
+ <a-upload :showUploadList="uploadProps" v-model:file-list="miniProgramCodeList" list-type="picture-card"
|
|
|
+ @preview="handlePreview" :maxCount="1" :customRequest="customUpload">
|
|
|
<div v-if="miniProgramCodeList.length < 1">
|
|
|
<PlusOutlined />
|
|
|
<div style="margin-top: 8px">上传</div>
|
|
|
@@ -1189,41 +1182,27 @@ function handleDerivation() {
|
|
|
</a-form-item>
|
|
|
<!-- 机构名称 -->
|
|
|
<a-form-item label="机构名称:" v-if="form?.addType === 'itemsList'" required name="institutionId">
|
|
|
- <a-tree-select
|
|
|
- :disabled="form.addType === 'itemsList' && !!form.sourceId"
|
|
|
- v-model:value="form.institutionId"
|
|
|
- style="width: 100%"
|
|
|
- :dropdownStyle="{ maxHeight: '400px', overflow: 'auto', zIndex: 4000 }"
|
|
|
- :dropdownMatchSelectWidth="false"
|
|
|
- :getPopupContainer="getSafePopupContainer"
|
|
|
- placeholder="请选择"
|
|
|
- allow-clear
|
|
|
- tree-default-expand-all
|
|
|
- :tree-data="branch"
|
|
|
- :loading="branchLoading"
|
|
|
- @change="onInstitutionChange"
|
|
|
- ></a-tree-select>
|
|
|
+ <a-tree-select :disabled="form.addType === 'itemsList' && !!form.sourceId" v-model:value="form.institutionId"
|
|
|
+ style="width: 100%" :dropdownStyle="{ maxHeight: '400px', overflow: 'auto', zIndex: 4000 }"
|
|
|
+ :dropdownMatchSelectWidth="false" :getPopupContainer="getSafePopupContainer" placeholder="请选择" allow-clear
|
|
|
+ tree-default-expand-all :tree-data="branch" :loading="branchLoading"
|
|
|
+ @change="onInstitutionChange"></a-tree-select>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="供应商:" name="conditioningProgramSupplierId" :rules="supplierRules" style="width: 100%">
|
|
|
- <a-select
|
|
|
- v-model:value="form.conditioningProgramSupplierId"
|
|
|
- :options="supplierOptions"
|
|
|
- placeholder="请选择"
|
|
|
- allow-clear
|
|
|
- show-search
|
|
|
- :getPopupContainer="getSafePopupContainer"
|
|
|
- :dropdownMatchSelectWidth="false"
|
|
|
- :dropdownStyle="{ zIndex: 5000 }"
|
|
|
- style="width: 100%"
|
|
|
- @change="getConditioningProgramSupplier"
|
|
|
- not-found-content="暂无数据"
|
|
|
- />
|
|
|
+ <a-select v-model:value="form.conditioningProgramSupplierId" :options="supplierOptions" placeholder="请选择"
|
|
|
+ allow-clear show-search :getPopupContainer="getSafePopupContainer" :dropdownMatchSelectWidth="false"
|
|
|
+ :dropdownStyle="{ zIndex: 5000 }" style="width: 100%" @change="getConditioningProgramSupplier"
|
|
|
+ not-found-content="暂无数据" />
|
|
|
</a-form-item>
|
|
|
- <a-form-item label="配送:" name="isDelivery" v-if="showDelivery" :required="form.sellType === '1'">
|
|
|
- <a-checkbox-group v-model:value="deliverArr" @change="deliveryChange">
|
|
|
- <a-checkbox value="Y">支持</a-checkbox>
|
|
|
- <a-checkbox value="N">不支持</a-checkbox>
|
|
|
- </a-checkbox-group>
|
|
|
+ <a-form-item name="isDelivery" v-if="showDelivery">
|
|
|
+
|
|
|
+
|
|
|
+ <span> <span v-if="isDeliveryRequired" style="color: #ff4d4f">* </span>配送:</span>
|
|
|
+
|
|
|
+ <a-radio-group :value="form.isDelivery">
|
|
|
+ <a-radio value="Y" @click="handleDeliveryClick('Y')">支持</a-radio>
|
|
|
+ <a-radio value="N" @click="handleDeliveryClick('N')">不支持</a-radio>
|
|
|
+ </a-radio-group>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="启用状态:" name="status" v-if="form.addType === 'itemsList'" required>
|
|
|
<a-radio-group v-model:value="form.status">
|
|
|
@@ -1231,16 +1210,12 @@ function handleDerivation() {
|
|
|
<a-radio value="1">停用</a-radio>
|
|
|
</a-radio-group>
|
|
|
</a-form-item>
|
|
|
- <a-image
|
|
|
- :width="200"
|
|
|
- :style="{ display: 'none' }"
|
|
|
- :preview="{
|
|
|
- visible,
|
|
|
- onVisibleChange: setVisible,
|
|
|
- }"
|
|
|
- :src="previewImg"
|
|
|
- />
|
|
|
- <video :src="videoUrl" controls v-if="videoUrl" style="width: 100%; max-width: 500px; border-radius: 6px" preload="metadata" />
|
|
|
+ <a-image :width="200" :style="{ display: 'none' }" :preview="{
|
|
|
+ visible,
|
|
|
+ onVisibleChange: setVisible,
|
|
|
+ }" :src="previewImg" />
|
|
|
+ <video :src="videoUrl" controls v-if="videoUrl" style="width: 100%; max-width: 500px; border-radius: 6px"
|
|
|
+ preload="metadata" />
|
|
|
<div class="form-actions-center">
|
|
|
<a-button @click="cancel">取消</a-button>
|
|
|
<a-button type="primary" style="background: #faad14; border: none" @click="doSubmit">确定</a-button>
|
|
|
@@ -1258,28 +1233,34 @@ function handleDerivation() {
|
|
|
flex-direction: column;
|
|
|
/* max-height: 80vh; */
|
|
|
}
|
|
|
+
|
|
|
.per-rule {
|
|
|
margin-bottom: 16px;
|
|
|
}
|
|
|
+
|
|
|
.price-row {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
margin-bottom: 15px;
|
|
|
}
|
|
|
+
|
|
|
.suggested-frequency-row {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
}
|
|
|
+
|
|
|
.label {
|
|
|
font-weight: 500;
|
|
|
color: #222;
|
|
|
margin-right: 8px;
|
|
|
}
|
|
|
+
|
|
|
.herb-list {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
flex-wrap: wrap;
|
|
|
}
|
|
|
+
|
|
|
.herb-item {
|
|
|
position: relative;
|
|
|
display: flex;
|
|
|
@@ -1288,11 +1269,13 @@ function handleDerivation() {
|
|
|
margin-bottom: 8px;
|
|
|
padding-left: 16px;
|
|
|
}
|
|
|
+
|
|
|
.herb-dosage {
|
|
|
width: 70px;
|
|
|
font-size: 14px;
|
|
|
margin-right: 10px;
|
|
|
}
|
|
|
+
|
|
|
.herb-remove {
|
|
|
position: absolute;
|
|
|
left: 0;
|
|
|
@@ -1310,6 +1293,7 @@ function handleDerivation() {
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
}
|
|
|
+
|
|
|
.form-actions-center {
|
|
|
display: flex;
|
|
|
justify-content: center;
|
|
|
@@ -1325,9 +1309,11 @@ function handleDerivation() {
|
|
|
flex-direction: column;
|
|
|
overflow: auto;
|
|
|
}
|
|
|
+
|
|
|
.slider-section {
|
|
|
margin-bottom: 16px;
|
|
|
}
|
|
|
+
|
|
|
.slider-labels {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
@@ -1337,10 +1323,12 @@ function handleDerivation() {
|
|
|
font-weight: 500;
|
|
|
color: #222;
|
|
|
}
|
|
|
+
|
|
|
.slider-row {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
}
|
|
|
+
|
|
|
.slider-desc {
|
|
|
color: #222;
|
|
|
white-space: nowrap;
|
|
|
@@ -1349,11 +1337,13 @@ function handleDerivation() {
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
}
|
|
|
+
|
|
|
.slider-value {
|
|
|
margin-left: 16px;
|
|
|
color: #faad14;
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
+
|
|
|
.upload-btn {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
@@ -1367,51 +1357,61 @@ function handleDerivation() {
|
|
|
transition: border-color 0.3s;
|
|
|
width: 100px;
|
|
|
}
|
|
|
+
|
|
|
.upload-btn:hover {
|
|
|
border-color: #1890ff;
|
|
|
background: #f0f7ff;
|
|
|
}
|
|
|
+
|
|
|
.upload-btn .anticon {
|
|
|
font-size: 16px;
|
|
|
color: #1890ff;
|
|
|
}
|
|
|
+
|
|
|
.upload-btn .upload-text {
|
|
|
margin-top: 8px;
|
|
|
color: #666;
|
|
|
font-size: 15px;
|
|
|
}
|
|
|
+
|
|
|
.video-preview {
|
|
|
border-radius: 6px;
|
|
|
background: #000;
|
|
|
width: 120px !important;
|
|
|
height: 100px !important;
|
|
|
}
|
|
|
+
|
|
|
.video-preview video {
|
|
|
border-radius: 6px;
|
|
|
background: #000;
|
|
|
width: 120px;
|
|
|
height: 100px;
|
|
|
}
|
|
|
+
|
|
|
.video-preview .ant-btn-link {
|
|
|
padding: 0;
|
|
|
font-size: 14px;
|
|
|
color: #ff4d4f;
|
|
|
}
|
|
|
+
|
|
|
.image-row {
|
|
|
display: flex;
|
|
|
gap: 32px;
|
|
|
align-items: flex-start;
|
|
|
margin-bottom: 16px;
|
|
|
}
|
|
|
+
|
|
|
.image-form-item {
|
|
|
flex: 1;
|
|
|
margin-bottom: 0 !important;
|
|
|
}
|
|
|
+
|
|
|
.image-form-item .ant-upload-picture-card-wrapper {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
align-items: flex-start;
|
|
|
}
|
|
|
+
|
|
|
.derivation-item {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
@@ -1422,6 +1422,7 @@ function handleDerivation() {
|
|
|
border-radius: 4px;
|
|
|
border: 1px solid #e8e8e8;
|
|
|
}
|
|
|
+
|
|
|
.derivation-label {
|
|
|
font-weight: 500;
|
|
|
color: #222;
|
|
|
@@ -1429,18 +1430,21 @@ function handleDerivation() {
|
|
|
white-space: nowrap;
|
|
|
font-size: 13px;
|
|
|
}
|
|
|
+
|
|
|
.derivation-content {
|
|
|
color: #555;
|
|
|
font-size: 13px;
|
|
|
flex: 1;
|
|
|
word-break: break-all;
|
|
|
}
|
|
|
+
|
|
|
.derivation-container {
|
|
|
display: flex;
|
|
|
flex-wrap: wrap;
|
|
|
gap: 16px;
|
|
|
align-items: flex-start;
|
|
|
}
|
|
|
+
|
|
|
.video-upload-wrapper {
|
|
|
display: flex;
|
|
|
align-items: flex-start;
|