wangzhibo
6 天以前 da0230346106bc810664488a2b152bc24f853a44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<template>
    <cl-crud ref="Crud">
        <cl-row>
            <!-- 刷新按钮 -->
            <cl-refresh-btn />
            <!-- 新增按钮 -->
            <cl-add-btn />
            <!-- 删除按钮 -->
            <cl-multi-delete-btn />
 
            <cl-flex1 />
        </cl-row>
 
        <cl-row>
            <!-- 数据表格 -->
            <cl-table ref="Table" />
        </cl-row>
 
        <cl-row>
            <cl-flex1 />
            <!-- 分页控件 -->
            <cl-pagination />
        </cl-row>
 
        <!-- 新增、编辑 -->
        <cl-upsert ref="Upsert">
            <template #slot-path="{ scope }">
                <el-row>
                    <el-input
                        v-model="scope.path"
                        placeholder="如:/pages/goods/detail?id="
                        :style="{ marginRight: '10px', flex: 1 }"
                    />
 
                    <goods-select
                        :ref="setRefs('goodsSelect')"
                        :multiple="false"
                        @change="onGoodsSelectChange"
                    >
                        <el-button @click="refs.goodsSelect?.open">选择商品</el-button>
                    </goods-select>
                </el-row>
            </template>
        </cl-upsert>
    </cl-crud>
</template>
 
<script lang="ts" name="info-banner" setup>
import { useCrud, useTable, useUpsert } from "@cool-vue/crud";
import { useCool } from "/@/cool";
import GoodsSelect from "/$/goods/components/select.vue";
 
const { service, refs, setRefs } = useCool();
 
// cl-upsert
const Upsert = useUpsert({
    items: [
        {
            label: "图片",
            prop: "pic",
            component: {
                name: "cl-upload",
                props: {
                    size: [120, 230]
                }
            },
            required: true
        },
        {
            label: "描述",
            prop: "description",
            component: { name: "el-input", props: { clearable: true } }
        },
        {
            label: "跳转路径",
            prop: "path",
            component: { name: "slot-path" }
        },
        {
            label: "排序",
            prop: "sortNum",
            hook: "number",
            component: { name: "el-input-number" }
        },
        {
            label: "状态",
            prop: "status",
            flex: false,
            value: 1,
            component: { name: "cl-switch" }
        }
    ]
});
 
// cl-table
const Table = useTable<Eps.InfoBannerEntity>({
    columns: [
        { type: "selection" },
        {
            label: "图片",
            prop: "pic",
            minWidth: 160,
            component: { name: "cl-image", props: { size: [60, 115] } }
        },
        { label: "描述", prop: "description", minWidth: 160 },
        { label: "跳转路径", prop: "path", minWidth: 160 },
        { label: "排序", prop: "sortNum", minWidth: 100, sortable: "desc" },
        { label: "状态", prop: "status", minWidth: 100, component: { name: "cl-switch" } },
        {
            label: "创建时间",
            prop: "createTime",
            minWidth: 160
        },
        {
            label: "更新时间",
            prop: "updateTime",
            minWidth: 160
        },
        { type: "op", buttons: ["edit", "delete"] }
    ]
});
 
// cl-crud
const Crud = useCrud(
    {
        service: service.info.banner
    },
    (app) => {
        app.refresh();
    }
);
 
// 选择商品后
function onGoodsSelectChange(id: number) {
    Upsert.value?.setForm("path", `/pages/goods/detail?id=${id}`);
}
</script>