|
@@ -0,0 +1,203 @@
|
|
|
+<template>
|
|
|
+ <a-spin :spinning="confirmLoading">
|
|
|
+ <JFormContainer :disabled="disabled">
|
|
|
+ <template #detail>
|
|
|
+ <a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
|
|
+ <a-row>
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="站点code" v-bind="validateInfos.siteCode">
|
|
|
+ <a-input v-model:value="formData.siteCode" placeholder="请输入站点code" allow-clear ></a-input>
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="mq生产时间" v-bind="validateInfos.requestTime">
|
|
|
+ <a-input v-model:value="formData.requestTime" placeholder="请输入mq生产时间" allow-clear ></a-input>
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="wp产品ID" v-bind="validateInfos.productId">
|
|
|
+ <a-input-number v-model:value="formData.productId" placeholder="请输入wp产品ID" style="width: 100%" />
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="wp产品类型,adwebpro or woocommerce" v-bind="validateInfos.productType">
|
|
|
+ <a-input v-model:value="formData.productType" placeholder="请输入wp产品类型,adwebpro or woocommerce" allow-clear ></a-input>
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="wp产品操作类型, add, edit, delete" v-bind="validateInfos.actionType">
|
|
|
+ <a-input v-model:value="formData.actionType" placeholder="请输入wp产品操作类型, add, edit, delete" allow-clear ></a-input>
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="wp产品名称" v-bind="validateInfos.productName">
|
|
|
+ <a-input v-model:value="formData.productName" placeholder="请输入wp产品名称" allow-clear ></a-input>
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="wp产品中文名称" v-bind="validateInfos.productsNameZh">
|
|
|
+ <a-input v-model:value="formData.productsNameZh" placeholder="请输入wp产品中文名称" allow-clear ></a-input>
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="wp产品封面图" v-bind="validateInfos.productImage">
|
|
|
+ <a-input v-model:value="formData.productImage" placeholder="请输入wp产品封面图" allow-clear ></a-input>
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="wp产品图库" v-bind="validateInfos.productGalleryImage">
|
|
|
+ <a-input v-model:value="formData.productGalleryImage" placeholder="请输入wp产品图库" allow-clear ></a-input>
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="wp产品分类" v-bind="validateInfos.categoryName">
|
|
|
+ <a-input v-model:value="formData.categoryName" placeholder="请输入wp产品分类" allow-clear ></a-input>
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="24">
|
|
|
+ <a-form-item label="wp产品作者" v-bind="validateInfos.authorName">
|
|
|
+ <a-input v-model:value="formData.authorName" placeholder="请输入wp产品作者" allow-clear ></a-input>
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ </a-form>
|
|
|
+ </template>
|
|
|
+ </JFormContainer>
|
|
|
+ </a-spin>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script lang="ts" setup>
|
|
|
+ import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted } from 'vue';
|
|
|
+ import { defHttp } from '/@/utils/http/axios';
|
|
|
+ import { useMessage } from '/@/hooks/web/useMessage';
|
|
|
+ import { getValueType } from '/@/utils';
|
|
|
+ import { saveOrUpdate } from '../AdwebProduct.api';
|
|
|
+ import { Form } from 'ant-design-vue';
|
|
|
+ import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
|
|
|
+
|
|
|
+ const props = defineProps({
|
|
|
+ formDisabled: { type: Boolean, default: false },
|
|
|
+ formData: { type: Object, default: () => ({})},
|
|
|
+ formBpm: { type: Boolean, default: true }
|
|
|
+ });
|
|
|
+ const formRef = ref();
|
|
|
+ const useForm = Form.useForm;
|
|
|
+ const emit = defineEmits(['register', 'ok']);
|
|
|
+ const formData = reactive<Record<string, any>>({
|
|
|
+ id: '',
|
|
|
+ siteCode: '',
|
|
|
+ requestTime: '',
|
|
|
+ productId: undefined,
|
|
|
+ productType: '',
|
|
|
+ actionType: '',
|
|
|
+ productName: '',
|
|
|
+ productsNameZh: '',
|
|
|
+ productImage: '',
|
|
|
+ productGalleryImage: '',
|
|
|
+ categoryName: '',
|
|
|
+ authorName: '',
|
|
|
+ });
|
|
|
+ const { createMessage } = useMessage();
|
|
|
+ const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
|
|
|
+ const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
|
|
|
+ const confirmLoading = ref<boolean>(false);
|
|
|
+ //表单验证
|
|
|
+ const validatorRules = reactive({
|
|
|
+ siteCode: [{ required: true, message: '请输入站点code!'},],
|
|
|
+ requestTime: [{ required: true, message: '请输入mq生产时间!'},],
|
|
|
+ productId: [{ required: true, message: '请输入wp产品ID!'},],
|
|
|
+ productType: [{ required: true, message: '请输入wp产品类型,adwebpro or woocommerce!'},],
|
|
|
+ actionType: [{ required: true, message: '请输入wp产品操作类型, add, edit, delete!'},],
|
|
|
+ productName: [{ required: true, message: '请输入wp产品名称!'},],
|
|
|
+ categoryName: [{ required: true, message: '请输入wp产品分类!'},],
|
|
|
+ });
|
|
|
+ const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
|
|
|
+
|
|
|
+ // 表单禁用
|
|
|
+ const disabled = computed(()=>{
|
|
|
+ if(props.formBpm === true){
|
|
|
+ if(props.formData.disabled === false){
|
|
|
+ return false;
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return props.formDisabled;
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增
|
|
|
+ */
|
|
|
+ function add() {
|
|
|
+ edit({});
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 编辑
|
|
|
+ */
|
|
|
+ function edit(record) {
|
|
|
+ nextTick(() => {
|
|
|
+ resetFields();
|
|
|
+ const tmpData = {};
|
|
|
+ Object.keys(formData).forEach((key) => {
|
|
|
+ if(record.hasOwnProperty(key)){
|
|
|
+ tmpData[key] = record[key]
|
|
|
+ }
|
|
|
+ })
|
|
|
+ //赋值
|
|
|
+ Object.assign(formData, tmpData);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 提交数据
|
|
|
+ */
|
|
|
+ async function submitForm() {
|
|
|
+ // 触发表单验证
|
|
|
+ await validate();
|
|
|
+ confirmLoading.value = true;
|
|
|
+ const isUpdate = ref<boolean>(false);
|
|
|
+ //时间格式化
|
|
|
+ let model = formData;
|
|
|
+ if (model.id) {
|
|
|
+ isUpdate.value = true;
|
|
|
+ }
|
|
|
+ //循环数据
|
|
|
+ for (let data in model) {
|
|
|
+ //如果该数据是数组并且是字符串类型
|
|
|
+ if (model[data] instanceof Array) {
|
|
|
+ let valueType = getValueType(formRef.value.getProps, data);
|
|
|
+ //如果是字符串类型的需要变成以逗号分割的字符串
|
|
|
+ if (valueType === 'string') {
|
|
|
+ model[data] = model[data].join(',');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ await saveOrUpdate(model, isUpdate.value)
|
|
|
+ .then((res) => {
|
|
|
+ if (res.success) {
|
|
|
+ createMessage.success(res.message);
|
|
|
+ emit('ok');
|
|
|
+ } else {
|
|
|
+ createMessage.warning(res.message);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ confirmLoading.value = false;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ defineExpose({
|
|
|
+ add,
|
|
|
+ edit,
|
|
|
+ submitForm,
|
|
|
+ });
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="less" scoped>
|
|
|
+ .antd-modal-form {
|
|
|
+ padding: 14px;
|
|
|
+ }
|
|
|
+</style>
|