|
@@ -1,135 +1,185 @@
|
|
|
<template>
|
|
|
- <el-form :model="formDataForm" label-width="120px" ref="form" v-loading="loading" class="pr-4">
|
|
|
- <el-form-item label="合作模式" prop="settlement_type"
|
|
|
- :rules="[{ required: false, message: '请选择合作模式', trigger: 'change' }]">
|
|
|
- <el-select v-model="formDataForm.settlement_type" filterable placeholder="选择合作模式">
|
|
|
- <el-option v-for="(item, index) in cooperations" :key="index" :label="item.name" :value="item.value" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item v-if="formDataForm.settlement_type == 'bottomline'" label="保底金额" prop="bottomline"
|
|
|
- :rules="[{ required: true, message: '保底金额必须填写' }]">
|
|
|
- <el-input v-model="formDataForm.bottomline" name="bottomline" clearable />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="合作期限" prop="time" :rules="[{ required: false, message: '请选择合作期限', trigger: 'change' }]">
|
|
|
- <el-date-picker format="YYYY/MM/DD" value-format="YYYY-MM-DD" @change="timeChange" unlink-panels
|
|
|
- v-model="formDataForm.time" type="daterange" :shortcuts="shortcuts" range-separator="To" start-placeholder="开始时间"
|
|
|
- end-placeholder="结束时间" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="连载状态">
|
|
|
- <el-radio-group v-model="formDataForm.status">
|
|
|
- <el-radio :label="0">连载</el-radio>
|
|
|
- <el-radio :label="1">完本</el-radio>
|
|
|
- </el-radio-group>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="分库权限" v-if="ismulSet">
|
|
|
- <el-checkbox-group v-model="extraForm.distribution_privilege">
|
|
|
- <el-checkbox :checked="Boolean(item.is_enabled)" @change="depotsChange($event, item)" :label="item"
|
|
|
- v-for="item in dataObj" :key="item.channel_id">
|
|
|
- {{ item.remark }}
|
|
|
- </el-checkbox>
|
|
|
- </el-checkbox-group>
|
|
|
- </el-form-item>
|
|
|
+ <el-form :model="formData" label-width="120px" ref="ruleForm" :rules="rules" v-loading="loading" class="pr-4">
|
|
|
+ <div class="flex flex-row justify-between">
|
|
|
+ <div class="w-full">
|
|
|
+ <el-form-item label="短剧名称" prop="email">
|
|
|
+ <el-input v-model="formData.email" placeholder="请输入短剧名称" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="集数" prop="username">
|
|
|
+ <el-input v-model="formData.username" placeholder="请输入集数" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="完结状态" prop="miniProgramIds">
|
|
|
+ <el-select class="w-full" v-model="formData.miniProgramIds" remote filterable multiple
|
|
|
+ :remote-method="remoteMethod" clearable placeholder="选择类型">
|
|
|
+ <el-option v-for="item in cpList" :key="item.cp_id" :label="item.cp_name" :value="item.cp_name" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="频道" prop="miniProgramIds">
|
|
|
+ <el-select class="w-full" v-model="formData.miniProgramIds" remote filterable multiple
|
|
|
+ :remote-method="remoteMethod" clearable placeholder="选择类型">
|
|
|
+ <el-option v-for="item in cpList" :key="item.cp_id" :label="item.cp_name" :value="item.cp_name" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="上架" prop="status">
|
|
|
+ <el-radio-group v-model="formData.radio">
|
|
|
+ <el-radio :label="3">Option A</el-radio>
|
|
|
+ <el-radio :label="6">Option B</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="起始集" prop="password">
|
|
|
+ <el-input v-model="formData.password" clearable type="password" autocomplete="new-password" size="large"
|
|
|
+ placeholder="请输入起始集" show-password class="h-12 text-base" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="默认定价" prop="repassword">
|
|
|
+ <div class="flex items-center w-full">
|
|
|
+ <el-input v-model="formData.username" placeholder="请输入集数" />
|
|
|
+ <el-tooltip placement="top">
|
|
|
+ <template #content> multiple lines<br />second line </template>
|
|
|
+ <el-icon>
|
|
|
+ <InfoFilled />
|
|
|
+ </el-icon>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="所属CP方" prop="miniProgramIds">
|
|
|
+ <el-select class="w-full" v-model="formData.miniProgramIds" remote filterable multiple
|
|
|
+ :remote-method="remoteMethod" clearable placeholder="选择类型">
|
|
|
+ <el-option v-for="item in cpList" :key="item.cp_id" :label="item.cp_name" :value="item.cp_name" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="分成模式" prop="miniProgramIds">
|
|
|
+ <el-select class="w-full" v-model="formData.miniProgramIds" remote filterable multiple
|
|
|
+ :remote-method="remoteMethod" clearable placeholder="选择类型">
|
|
|
+ <el-option v-for="item in cpList" :key="item.cp_id" :label="item.cp_name" :value="item.cp_name" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="备注" prop="remark">
|
|
|
+ <my-upload></my-upload>
|
|
|
+ <el-input v-model="formData.remark" placeholder="请填写备注" type="textarea" />
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<div class="flex justify-end">
|
|
|
- <el-button type="primary" @click="submitForm(form)">{{
|
|
|
- $t('system.confirm')
|
|
|
- }}</el-button>
|
|
|
+ <el-button type="primary" @click="submitForm(ruleForm)">{{ $t('system.confirm') }}</el-button>
|
|
|
</div>
|
|
|
</el-form>
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
+import { InfoFilled } from '@element-plus/icons-vue';
|
|
|
import { useCreate } from '@/hook/curd/useCreate';
|
|
|
import { useShow } from '@/hook/curd/useShow';
|
|
|
-
|
|
|
-import { onMounted } from 'vue';
|
|
|
-import { shortcuts } from '@/utils/shortcuts'
|
|
|
-import { bookSettlementypes, bookEditAuthor, bookDistribute, bookDistributeSave } from '@/api/bookManage/index';
|
|
|
-import { FormInstance } from 'element-plus';
|
|
|
-
|
|
|
+import { cpManageCpList, cpOptions } from '@/api/cp/index'
|
|
|
+import { advertiserGetAdvertiser, advertiserAdd, advertiserUpdateAdvertiser } from '@/api/advertiser/index'
|
|
|
+import type { FormInstance, FormRules } from 'element-plus'
|
|
|
+const ruleForm = ref<FormInstance>()
|
|
|
+import { onMounted, ref } from 'vue';
|
|
|
const props = defineProps({
|
|
|
primary: String | Number,
|
|
|
- addapi: String,
|
|
|
- eidapi: String,
|
|
|
- ismulSet: Boolean
|
|
|
});
|
|
|
+const formData = ref({ status: 2, miniProgramIds: [] })
|
|
|
+//自定义校验规则
|
|
|
+const validatePasswordConfirmation = (
|
|
|
+ rule: any,
|
|
|
+ value: any,
|
|
|
+ callback: any
|
|
|
+) => {
|
|
|
+ if (value === '') {
|
|
|
+ callback(new Error('请再次输入密码'));
|
|
|
+ } else if (value !== ruleForm.password) {
|
|
|
+ callback(new Error('两次密码不匹配'));
|
|
|
+ } else {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+};
|
|
|
+const rules = reactive({
|
|
|
+ miniProgramIds: [{ required: true, message: '请选择小程序' }],
|
|
|
+ email: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入登录账号',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'email',
|
|
|
+ message: '邮箱格式不正确',
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ remark: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入备注',
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ username: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入用户名',
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ password: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入密码',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ pattern: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$/,
|
|
|
+ message:
|
|
|
+ '必须包含大小写字母和数字的组合,可以使用特殊字符,长度在6-20之间'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ repassword: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请再次输入密码',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ { validator: validatePasswordConfirmation, trigger: 'blur' }
|
|
|
+ ]
|
|
|
+});
|
|
|
+const loading = ref(false)
|
|
|
|
|
|
-const cooperations = ref([]);
|
|
|
-
|
|
|
-const formDataForm = ref({})
|
|
|
-const extraForm = ref({})
|
|
|
-const dataObj = ref([])
|
|
|
-
|
|
|
-const { formData, form, loading, close } = useCreate(
|
|
|
- props.addapi,
|
|
|
- props.primary,
|
|
|
- true,
|
|
|
- "post"
|
|
|
-);
|
|
|
-// 分库权限
|
|
|
-const depotsChange = (e, item) => {
|
|
|
- console.log(e, item);
|
|
|
- item.is_enabled = Number(e)
|
|
|
-}
|
|
|
-
|
|
|
-let ismulSet = ref(false)
|
|
|
-if (Array.isArray(props.primary)) {
|
|
|
- ismulSet.value = true
|
|
|
-} else {
|
|
|
- ismulSet.value = false
|
|
|
-}
|
|
|
-
|
|
|
-if (ismulSet.value) {
|
|
|
- formDataForm.value = {}
|
|
|
-}
|
|
|
-
|
|
|
-const timeChange = (e) => {
|
|
|
- const timeArr = toRaw(e);
|
|
|
- // console.log(timeArr, 'timeArrtimeArrtimeArr');
|
|
|
- if (Array.isArray(timeArr)) {
|
|
|
- formDataForm.value.start_date = timeArr[0]
|
|
|
- formDataForm.value.end_date = timeArr[1]
|
|
|
+const remoteMethod = (query: string) => {
|
|
|
+ if (query) {
|
|
|
+ initCpOtion({ cp_name: query })
|
|
|
} else {
|
|
|
- formDataForm.value.start_date = ''
|
|
|
- formDataForm.value.end_date = ''
|
|
|
+ initCpOtion({})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-if (props.primary) {
|
|
|
- const { afterShow } = useShow(props.eidapi, props.primary, formData);
|
|
|
- if (!ismulSet.value) {
|
|
|
- afterShow.value = formData => {
|
|
|
- const data = unref(formData);
|
|
|
- formDataForm.value = {
|
|
|
- settlement_type: data.settlement_type,
|
|
|
- bottomline: data.bottomline,
|
|
|
- time: data.time,
|
|
|
- status: data.status,
|
|
|
- start_date: data.start_date,
|
|
|
- end_date: data.end_date
|
|
|
- }
|
|
|
- formDataForm.value.bid = "" + props.primary
|
|
|
- formDataForm.value.time = [data.start_date, data.end_date]
|
|
|
- };
|
|
|
- }
|
|
|
+const initCpOtion = (params: object) => {
|
|
|
+ cpOptions(params).then(res => {
|
|
|
+ cpList.value = res.data;
|
|
|
+ })
|
|
|
}
|
|
|
-const emit = defineEmits(['close', 'mulSetclose']);
|
|
|
|
|
|
+const passwordRules = [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '密码必须填写'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ pattern: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$/,
|
|
|
+ message: '必须包含大小写字母和数字的组合,可以使用特殊字符,长度在6-20之间'
|
|
|
+ }
|
|
|
+];
|
|
|
const submitForm = (formEl: FormInstance | undefined) => {
|
|
|
- formDataForm.value.bid = "" + props.primary
|
|
|
- // console.log(formEl,'formElformEl');
|
|
|
+ console.log(formData.value, 'formData.valueformData.value');
|
|
|
if (!formEl) return;
|
|
|
formEl
|
|
|
.validate(valid => {
|
|
|
if (valid) {
|
|
|
- let channels = toRaw(dataObj.value).map(el => {
|
|
|
- return {
|
|
|
- channel_id: el.channel_id,
|
|
|
- is_enabled: el.is_enabled
|
|
|
- }
|
|
|
- })
|
|
|
- formDataForm.value.distribution_privilege = channels;
|
|
|
- console.log({ ...formDataForm.value });
|
|
|
- bookEditAuthor({ ...formDataForm.value }).then(res => {
|
|
|
+ let api;
|
|
|
+ if (props.primary) {
|
|
|
+ api = advertiserUpdateAdvertiser
|
|
|
+ } else {
|
|
|
+ api = advertiserAdd
|
|
|
+ }
|
|
|
+ api({ ...formData.value }).then(res => {
|
|
|
console.log(res);
|
|
|
ElMessage.success(res.message)
|
|
|
emit('close')
|
|
@@ -141,13 +191,16 @@ const submitForm = (formEl: FormInstance | undefined) => {
|
|
|
.then(() => { });
|
|
|
}
|
|
|
|
|
|
-onMounted(async () => {
|
|
|
- bookSettlementypes().then(res => {
|
|
|
- cooperations.value = res.data
|
|
|
+if (props.primary) {
|
|
|
+ advertiserGetAdvertiser({ id: props.primary }).then(res => {
|
|
|
+ console.log(res, 'props.primary');
|
|
|
+ formData.value = res.data
|
|
|
})
|
|
|
- close(() => emit('close'));
|
|
|
+}
|
|
|
|
|
|
- let { data } = await bookDistribute(-1);
|
|
|
- dataObj.value = data
|
|
|
+const emit = defineEmits(['close']);
|
|
|
+const cpList = ref();
|
|
|
+onMounted(() => {
|
|
|
+ initCpOtion({})
|
|
|
});
|
|
|
</script>
|