|
|
@@ -1,124 +1,167 @@
|
|
|
<!-- 搜索表单 -->
|
|
|
<template>
|
|
|
- <ele-card :body-style="{ paddingBottom: '8px' }">
|
|
|
- <ProSearch :columns="columns" v-model:form="form" ref="searchRef">
|
|
|
- <el-col :span="6" style="min-width: 160px">
|
|
|
- <el-button style="width: 80px" type="primary" plain @click="search"
|
|
|
- >查询</el-button
|
|
|
- >
|
|
|
- <el-button style="width: 80px" type="info" @click="reset"
|
|
|
- >重置</el-button
|
|
|
- >
|
|
|
- </el-col>
|
|
|
- </ProSearch>
|
|
|
- </ele-card>
|
|
|
+ <simple-form-modal
|
|
|
+ :title="title"
|
|
|
+ :items="formItems"
|
|
|
+ ref="editRef"
|
|
|
+ :baseUrl="baseUrl"
|
|
|
+ width="1080px"
|
|
|
+ :formProps="{ grid: 8 }"
|
|
|
+ :formatData="formatData"
|
|
|
+ @success="(data) => emit('success', data)"
|
|
|
+ ></simple-form-modal>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
- import { reactive, ref, defineEmits } from 'vue';
|
|
|
+ import { reactive, ref, defineEmits, getCurrentInstance } from 'vue';
|
|
|
import { useFormData } from '@/utils/use-form-data';
|
|
|
- import ProSearch from '@/components/CommonPage/ProSearch.vue';
|
|
|
+ import SimpleFormModal from '@/components/CommonPage/SimpleFormModal.vue';
|
|
|
+ const { proxy } = getCurrentInstance();
|
|
|
|
|
|
- const emit = defineEmits(['search']);
|
|
|
- const columns = reactive([
|
|
|
- { tag: 'el-input', label: '发件人名称', prop: 'senderName', span: 4 },
|
|
|
- { tag: 'el-input', label: '发件人电话', prop: 'senderPhone', span: 4 },
|
|
|
+ //获取省市
|
|
|
+ const provinceList = ref([]);
|
|
|
+ const cityList = ref([]);
|
|
|
+ const title = ref('新增图书');
|
|
|
+ const emit = defineEmits(['success']);
|
|
|
+
|
|
|
+ const formItems = reactive([
|
|
|
+ { type: 'input', label: '书名', prop: 'bookName', required: true },
|
|
|
+ { type: 'input', label: 'ISBN', prop: 'isbn', required: true },
|
|
|
+ { type: 'imageUpload', label: '封面', prop: 'cover', props: { limit: 1 } },
|
|
|
+ { type: 'input', label: '作者', prop: 'author', required: true },
|
|
|
+ { type: 'input', label: '定价', prop: 'price', required: true },
|
|
|
+ { type: 'input', label: '出版社', prop: 'publish', required: true },
|
|
|
{
|
|
|
- tag: 'el-input',
|
|
|
- label: '发件人地址(仅查询7天内数据)',
|
|
|
- prop: 'senderAddress',
|
|
|
- span: 5
|
|
|
+ type: 'date',
|
|
|
+ label: '出版时间',
|
|
|
+ prop: 'pubDate',
|
|
|
+ required: true,
|
|
|
+ props: {
|
|
|
+ format: 'YYYY-MM-DD',
|
|
|
+ valueFormat: 'YYYY-MM-DD'
|
|
|
+ }
|
|
|
},
|
|
|
- { tag: 'el-input', label: '用户名', prop: 'userName', span: 4 },
|
|
|
{
|
|
|
- tag: 'el-input',
|
|
|
- label: '搜索备注关键字',
|
|
|
- prop: 'searchRemarks',
|
|
|
- span: 4
|
|
|
+ type: 'dictSelect',
|
|
|
+ label: '分类标签',
|
|
|
+ prop: 'bookTag',
|
|
|
+ props: { code: 'book_tag' }
|
|
|
},
|
|
|
+ { type: 'input', label: '中图分类号', prop: 'chineCateNo' },
|
|
|
+ { type: 'input', label: '丛书提名', prop: 'bookPut' },
|
|
|
+ { type: 'input', label: '其他提名', prop: 'otherPut' },
|
|
|
+ { type: 'input', label: '主题', prop: 'bookTopic' },
|
|
|
+ { type: 'input', label: '语种', prop: 'lang' },
|
|
|
+ { type: 'input', label: '装帧', prop: 'bookFormat' },
|
|
|
+ { type: 'input', label: '开本尺寸', prop: 'bookFormat' },
|
|
|
{
|
|
|
- tag: 'el-select',
|
|
|
- label: '收货仓库',
|
|
|
- prop: 'receivingWarehouse',
|
|
|
- span: 3
|
|
|
+ type: 'dictSelect',
|
|
|
+ label: '是否套装',
|
|
|
+ prop: 'suit',
|
|
|
+ props: { code: 'is_common_yes' }
|
|
|
},
|
|
|
- { tag: 'el-select', label: '全部订单', prop: 'allOrders', span: 3 },
|
|
|
+ { type: 'input', label: '版本', prop: 'bookVersion' },
|
|
|
+ { type: 'input', label: '总页数', prop: 'pageTotal' },
|
|
|
{
|
|
|
- tag: 'el-select',
|
|
|
- label: '物流公司',
|
|
|
- prop: 'logisticsCompany',
|
|
|
- span: 3
|
|
|
+ type: 'dictSelect',
|
|
|
+ label: '人工核实',
|
|
|
+ prop: 'perCheck',
|
|
|
+ props: { code: 'is_common_yes' }
|
|
|
},
|
|
|
- { tag: 'el-select', label: '全部方式', prop: 'allMethods', span: 3 },
|
|
|
+ { type: 'input', label: '出版地', prop: 'putAddress' },
|
|
|
+ { type: 'input', label: '读者对象', prop: 'readers' },
|
|
|
+ { type: 'input', label: '印刷厂', prop: 'printHouse' },
|
|
|
{
|
|
|
- tag: 'el-date-picker',
|
|
|
- label: '建单时间(开始时间)',
|
|
|
- prop: 'orderStartTime',
|
|
|
- span: 3,
|
|
|
- tagAttrs: {
|
|
|
+ type: 'date',
|
|
|
+ label: '印刷时间',
|
|
|
+ prop: 'printTime',
|
|
|
+ props: {
|
|
|
+ format: 'YYYY-MM-DD',
|
|
|
valueFormat: 'YYYY-MM-DD'
|
|
|
}
|
|
|
},
|
|
|
+ { type: 'input', label: '印刷数量', prop: 'printNum' },
|
|
|
{
|
|
|
- tag: 'el-date-picker',
|
|
|
- label: '建单时间(结束时间)',
|
|
|
- prop: 'orderEndTime',
|
|
|
- span: 4,
|
|
|
- tagAttrs: {
|
|
|
- valueFormat: 'YYYY-MM-DD'
|
|
|
- }
|
|
|
+ type: 'textarea',
|
|
|
+ label: '图书短评',
|
|
|
+ prop: 'shortReview',
|
|
|
+ colProps: { span: 24 }
|
|
|
},
|
|
|
{
|
|
|
- tag: 'el-date-picker',
|
|
|
- label: '建单时间(开始时间)',
|
|
|
- prop: 'orderStartTime',
|
|
|
- span: 4,
|
|
|
- tagAttrs: {
|
|
|
- valueFormat: 'YYYY-MM-DD'
|
|
|
- }
|
|
|
+ type: 'editor',
|
|
|
+ label: '书嗨推荐',
|
|
|
+ prop: 'shuhiRecommend',
|
|
|
+ colProps: { span: 24 }
|
|
|
},
|
|
|
{
|
|
|
- tag: 'el-date-picker',
|
|
|
- label: '建单时间(结束时间)',
|
|
|
- prop: 'orderEndTime',
|
|
|
- span: 4,
|
|
|
- tagAttrs: {
|
|
|
- valueFormat: 'YYYY-MM-DD'
|
|
|
- }
|
|
|
+ type: 'editor',
|
|
|
+ label: '书嗨摘要',
|
|
|
+ prop: 'shuhiBlurb',
|
|
|
+ colProps: { span: 24 }
|
|
|
},
|
|
|
{
|
|
|
- tag: 'el-input',
|
|
|
- label: '订单编号(多个以中文逗号、空格或换行分割)',
|
|
|
- prop: 'orderNumber',
|
|
|
- span: 6
|
|
|
+ type: 'editor',
|
|
|
+ label: '内容简介',
|
|
|
+ prop: 'contentBlurb',
|
|
|
+ colProps: { span: 24 }
|
|
|
},
|
|
|
{
|
|
|
- tag: 'el-input',
|
|
|
- label: '物流单号(多个以中文逗号、空格或换行分割)',
|
|
|
- prop: 'logisticsNumber',
|
|
|
- span: 6
|
|
|
+ type: 'editor',
|
|
|
+ label: '作者简介',
|
|
|
+ prop: 'anthorBlurb',
|
|
|
+ colProps: { span: 24 }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'editor',
|
|
|
+ label: '图书目录',
|
|
|
+ prop: 'catalog',
|
|
|
+ colProps: { span: 24 }
|
|
|
}
|
|
|
]);
|
|
|
+ //默认值
|
|
|
+ const baseUrl = reactive({
|
|
|
+ add: '/book/bookInfo/save',
|
|
|
+ update: '/book/bookInfo/update',
|
|
|
+ detail: '/book/bookInfo/getDetail'
|
|
|
+ });
|
|
|
+ const formData = ref({ perCheck: '1', suit: '0', bookTag: '1' });
|
|
|
+ const editRef = ref(null);
|
|
|
|
|
|
- const initKeys = {};
|
|
|
- for (let i = 0; i < columns.length; i++) {
|
|
|
- initKeys[columns[i].prop] = '';
|
|
|
+ function handleOpen(data = {}) {
|
|
|
+ title.value = data && data.id ? '编辑图书' : '新增图书';
|
|
|
+ formData.value = Object.assign(formData.value, data || {});
|
|
|
+ editRef.value?.handleOpen(formData.value);
|
|
|
}
|
|
|
|
|
|
- /** 表单数据 */
|
|
|
- const [form, resetFields] = useFormData({
|
|
|
- ...initKeys
|
|
|
- });
|
|
|
+ //格式化数据
|
|
|
+ function formatData(data) {
|
|
|
+ let values = JSON.parse(JSON.stringify(data));
|
|
|
+ let bookBlurb = {
|
|
|
+ bookId: data.id,
|
|
|
+ isbn: data.isbn,
|
|
|
+ shuhiRecommend: data.shuhiRecommend,
|
|
|
+ shuhiBlurb: data.shuhiBlurb,
|
|
|
+ contentBlurb: data.contentBlurb,
|
|
|
+ anthorBlurb: data.anthorBlurb,
|
|
|
+ catalog: data.catalog
|
|
|
+ };
|
|
|
+ values.bookBlurb = bookBlurb;
|
|
|
+ return values;
|
|
|
+ }
|
|
|
+
|
|
|
+ //回填数据
|
|
|
+ function fallbackData(data) {
|
|
|
+ let values = JSON.parse(JSON.stringify(data));
|
|
|
+ if (data.bookBlurb) {
|
|
|
+ values.shuhiRecommend = data.bookBlurb.shuhiRecommend;
|
|
|
+ values.shuhiBlurb = data.bookBlurb.shuhiBlurb;
|
|
|
+ values.contentBlurb = data.bookBlurb.contentBlurb;
|
|
|
+ values.anthorBlurb = data.bookBlurb.anthorBlurb;
|
|
|
+ values.catalog = data.bookBlurb.catalog;
|
|
|
+ }
|
|
|
|
|
|
- const searchRef = ref(null);
|
|
|
- /** 搜索 */
|
|
|
- const search = () => {
|
|
|
- emit('search', { ...form });
|
|
|
- };
|
|
|
+ return values;
|
|
|
+ }
|
|
|
|
|
|
- /** 重置 */
|
|
|
- const reset = () => {
|
|
|
- resetFields();
|
|
|
- search();
|
|
|
- };
|
|
|
+ defineExpose({ handleOpen });
|
|
|
</script>
|