1
lzhe
2024-06-05 dcf9c9e0410fe1186239e3f8d6f7bdc789c08010
src/views/console/tooling/Tray.vue
@@ -1,7 +1,7 @@
<!--
 * @Date: 2024-05-12 20:02:31
 * @LastEditors: Sneed
 * @LastEditTime: 2024-05-13 22:35:52
 * @LastEditTime: 2024-05-19 13:57:46
 * @FilePath: /belleson-frontend/Users/mache/Documents/demo/cps-web/src/views/console/tooling/Tray.vue
-->
<template>
@@ -14,15 +14,26 @@
                        disabled: 'isGroup'
                    }" @node-click="nodeClick">
                        <template #default="{ node, data }">
                            <span :class="data.isGroup ? 'active' : ''" class="custom-tree-node">
                                <span>{{
                                    node.label || data.code }}</span>
                            </span>
                            <div :class="data.isGroup ? 'active' : ''" class="custom-tree-node">
                                <span>{{ node.label || data.code }}</span>
                                <el-icon class="icon" @click.stop="renameArea(data)" v-if="data.id > 200"
                                    style="margin-left: auto;margin-right: 4px;">
                                    <ElIconEditPen />
                                </el-icon>
                                <el-popconfirm title="确定删除吗?" @confirm="delArea(data)">
                                    <template #reference>
                                        <el-icon class="icon" v-if="data.id > 200">
                                            <ElIconDelete />
                                        </el-icon>
                                    </template>
                                </el-popconfirm>
                            </div>
                        </template>
                    </el-tree>
                </el-main>
                <el-footer>
                    <el-button>添加托盘组</el-button>
                    <el-button type="primary" @click="addTrayGroup">添加托盘组</el-button>
                </el-footer>
            </el-container>
        </el-aside>
@@ -30,7 +41,8 @@
        <el-container v-if="selectNode.id">
            <el-header>
                <el-button @click="table_add" type="primary" icon="el-icon-plus"></el-button>
                <import-table style="margin:0 8px" :exportUrl="exportUrl" :uploadUrl="uploadUrl"></import-table>
                <import-table style="margin:0 8px" exportUrl="/api/blade-cps/tray/excel/template"
                    uploadUrl="/api/blade-cps/tray/import-tray"></import-table>
                <el-button type="danger" plain icon="el-icon-delete" @click="batchDel"></el-button>
                <el-input v-model="params.keyword" style="width: 240px;margin-left: auto;" placeholder="请输入检索内容"
                    clearable></el-input>
@@ -60,7 +72,7 @@
                            </el-table-column>
                        </scTable>
                    </el-col>
                    <el-col :span="14">
                    <el-col :span="14" v-loading="showLoading">
                        <h2>托盘信息</h2>
                        <div class="tuopan-info">
                            <el-row>
@@ -97,22 +109,21 @@
                            </el-row>
                        </div>
                        <h2 style="margin-top: 14px;">托盘面列表</h2>
                        <h2 style="margin:14px 0;">托盘面列表</h2>
                        <div>
                            <el-button type="primary">新建托盘面</el-button>
                            <el-button type="primary" size="small" @click="addTray">新建托盘面</el-button>
                        </div>
                        <el-table :data="infoList" style="width: 100%">
                        <el-table :data="infoList" style="width: 100%" stripe>
                            <el-table-column label="托盘面编号" prop="code"></el-table-column>
                            <el-table-column label="托盘面名称" prop="name"></el-table-column>
                            <el-table-column label="关联夹具" prop="type"></el-table-column>
                            <el-table-column label="便宜程序编号" prop="type"></el-table-column>
                            <el-table-column label="便宜程序编号" prop="type"></el-table-column>
                            <el-table-column label="关联夹具" prop="fixtureNum"></el-table-column>
                            <el-table-column label="偏移程序编号" prop="programCode"></el-table-column>
                            <el-table-column label="操作" fixed="right" align="right" width="160">
                                <template #default="scope">
                                    <el-button-group>
                                        <el-button text type="primary" size="small"
                                            @click="table_edit1(scope.row, scope.$index)">编辑</el-button>
                                        <el-popconfirm title="确定删除吗?" @confirm="table_del1([scope.row], '0')">
                                        <el-popconfirm title="确定删除吗?" @confirm="table_del1(scope.row, '0')">
                                            <template #reference>
                                                <el-button text type="primary" size="small">删除</el-button>
                                            </template>
@@ -125,7 +136,99 @@
                </el-row>
            </el-main>
        </el-container>
        <!-- </el-main> -->
        <el-dialog v-model="visible" title="托盘面" width="500">
            <el-form :model="form" :rules="rules" ref="dialogForm" label-width="120px" label-position="center">
                <el-form-item label="托盘面编号" prop="code">
                    <el-input :disabled="form.id" v-model="form.code" />
                </el-form-item>
                <el-form-item label="托盘面名称" prop="name">
                    <el-input v-model="form.name" />
                </el-form-item>
                <el-form-item label="偏移程序编号" prop="programCode">
                    <el-input :disabled="form.id" v-model="form.programCode" />
                </el-form-item>
            </el-form>
            <template #footer>
                <div class="dialog-footer">
                    <el-button type="primary" @click="saveTray">
                        确定
                    </el-button>
                </div>
            </template>
        </el-dialog>
        <el-dialog v-model="visibleGroup" title="托盘组" width="500">
            <el-form :model="formGroup" :rules="rulesGroup" ref="dialogForm" label-width="120px"
                label-position="center">
                <el-form-item v-if="!formGroup.id" label="上级目录">
                    <el-input disabled v-model="selectNode.name" />
                </el-form-item>
                <el-form-item label="托盘组名称">
                    <el-input v-model="formGroup.name" />
                </el-form-item>
            </el-form>
            <template #footer>
                <div class="dialog-footer">
                    <el-button type="primary" @click="saveGroup">
                        确定
                    </el-button>
                </div>
            </template>
        </el-dialog>
        <el-drawer v-model="dialog" title="托盘信息" class="demo-drawer">
            <el-container>
                <el-main>
                    <el-form :model="trayForm" :rules="rulesTray" ref="trayForm" label-width="120px">
                        <el-form-item label="托盘组" prop="groupId">
                            <el-tree-select v-model="trayForm.groupId" @node-click="groupIdClick" node-key="id"
                                :data="treeData" filterable style="width: 240px" :props="{
                                    label: 'name',
                                }" />
                        </el-form-item>
                        <el-form-item v-if="trayForm.code" label="托盘编号" prop="code">
                            <el-input style="width: 240px" v-model="trayForm.code" />
                        </el-form-item>
                        <el-form-item label="托盘名称" prop="name">
                            <el-input style="width: 240px" v-model="trayForm.name" />
                        </el-form-item>
                        <el-form-item label="可用状态" prop="availability">
                            <el-select style="width: 240px" v-model="trayForm.availability" placeholder="">
                                <el-option label="激活" :value="1" />
                                <el-option label="冻结" :value="0" />
                            </el-select>
                        </el-form-item>
                        <el-form-item label="托盘描述" prop="description">
                            <el-input style="width: 240px" type="textarea" v-model="trayForm.description" />
                        </el-form-item>
                        <el-form-item label="托盘类别" prop="category">
                            <el-select style="width: 240px" v-model="trayForm.category" placeholder="">
                                <el-option v-for="item in tray_category" :key="item.value" :label="item.label"
                                    :value="item.value" />
                            </el-select>
                        </el-form-item>
                        <el-form-item label="托盘规格" prop="standardModel">
                            <el-input style="width: 240px" v-model="trayForm.standardModel" />
                        </el-form-item>
                        <el-form-item label="托盘状态" prop="trayStatus">
                            <el-select style="width: 240px" v-model="trayForm.trayStatus" placeholder="">
                                <el-option label="空载" :value="1" />
                                <el-option label="负载" :value="0" />
                            </el-select>
                        </el-form-item>
                        <el-form-item label="备注" prop="remark">
                            <el-input style="width: 240px" type="textarea" v-model="trayForm.remark" />
                        </el-form-item>
                        <el-form-item label="图片" prop="picture">
                            <scUpload v-model="form.picture" title=""></scUpload>
                        </el-form-item>
                    </el-form>
                </el-main>
                <el-footer style="text-align: right">
                    <el-button type="primary" @click="confirm">
                        确定
                    </el-button>
                </el-footer>
            </el-container>
        </el-drawer>
    </el-container>
</template>
@@ -138,6 +241,13 @@
    data() {
        return {
            treeData: [],
            visibleGroup: false,
            formGroup: {},
            rulesGroup: {
                name: [
                    { required: true, message: '必填' }
                ],
            },
            params: {
                keyword: ''
            },
@@ -155,26 +265,121 @@
                    })
                }
            },
            showLoading: false,
            visible: false,
            form: {},
            rules: {
                code: [
                    { required: true, message: '必填' }
                ],
                name: [
                    { required: true, message: '必填' }
                ],
                programCode: [
                    { required: true, message: '必填' }
                ],
            },
            dialog: false,
            trayForm: {},
            rulesTray: {
                groupId: [
                    { required: true, message: '必填' }
                ],
                availability: [
                    { required: true, message: '必填' }
                ],
            },
            tray_category: []
        }
    },
    watch: {
        'selectNode.id': {
            handler(val) {
                this.info = {}
                this.infoList = []
                if (val) {
                    this.queryInfo()
                } else {
                    this.info = {}
                    this.infoList = []
                }
            }
        }
    },
    created() {
        this.init()
        this.$HTTP.get(`/api/blade-system/dict/dictionary?code=tray_category`).then(res => {
            this.tray_category = res.data.map(v => ({
                label: v.dictValue,
                value: v.dictKey
            }))
        })
    },
    methods: {
        addTrayGroup() {
            console.log(this.selectNode)
            this.formGroup = {}
            this.visibleGroup = true
        },
        renameArea(data) {
            this.formGroup = {
                ...data
            }
            this.visibleGroup = true
        },
        delArea(data) {
            this.$HTTP.delete(`/api/blade-cps/tray/remove-tree?id=${data.id}`).then(res => {
                this.init()
            })
        },
        saveGroup() {
            if (!this.formGroup.id) {
                this.$HTTP.post(`/api/blade-cps/group`, {
                    groupCategory: 1,
                    groupType: "group_tray",
                    parentId: this.selectNode.id,
                    ...this.formGroup
                }).then(res => {
                    this.visibleGroup = false
                    this.init()
                })
            } else {
                this.$HTTP.put(`/api/blade-cps/group`, {
                    groupCategory: 1,
                    groupType: "group_tray",
                    parentId: this.selectNode.id,
                    ...this.formGroup
                }).then(res => {
                    this.visibleGroup = false
                    this.init()
                })
            }
        },
        search() {
            this.$refs.table.reload(this.params)
        },
        table_add() {
            this.trayForm = {
                groupId: this.selectNode.id,
                availability: 1,
                trayStatus: 1,
            }
            this.dialog = true
        },
        table_edit(row) {
            this.trayForm = {
                ...row
            }
            this.dialog = true
        },
        groupIdClick(node) {
            this.trayForm.groupId = node.id
        },
        confirm() {
            this.$HTTP.post(`/api/blade-cps/tray/save`, {
                ...this.trayForm
            }).then(res => {
                this.dialog = false
                this.queryInfo()
            })
        },
        init() {
            this.$HTTP.post(`/api/blade-cps/tray/tooling-tree`, {
@@ -196,23 +401,55 @@
            // })
        },
        dataChange(res, data) {
            this.rowClick(data?.[0])
            data?.[0] && this.rowClick(data?.[0])
        },
        rowClick(row) {
            console.log(row.id)
            this.queryChildInfo(row.id)
        },
        queryChildInfo(id) {
        async queryChildInfo(id) {
            if (!id) return
            this.$HTTP.get(`/api/blade-cps/tray/${id}`).then(res => {
            this.showLoading = true
            await this.$HTTP.get(`/api/blade-cps/tray/${id}`).then(res => {
                this.info = res.data
            })
            this.$HTTP.get(`/api/blade-cps/tray-surface/list/${id}`).then(res => {
            await this.$HTTP.get(`/api/blade-cps/tray-surface/list/${id}`).then(res => {
                this.infoList = res.data
            })
            this.showLoading = false
        },
        nodeClick(node) {
            this.selectNode = node
        },
        addTray() {
            this.form = {
                trayId: this.info.id
            }
            this.visible = true
        },
        table_edit1(row) {
            this.form = {
                ...row
            }
            this.visible = true
        },
        table_del1(row) {
            this.$HTTP.delete(`/api/blade-cps/tray-surface/remove-face/${this.info.id}?faceId=${row.id}`).then(res => {
                this.$message.success('操作成功')
                this.queryChildInfo(this.info.id)
            })
        },
        saveTray() {
            if (this.form.id) {
                return this.$HTTP.put(`/api/blade-cps/tray-surface/update`, this.form).then(res => {
                    this.visible = false
                    this.queryChildInfo(this.info.id)
                })
            }
            this.$HTTP.post(`/api/blade-cps/tray-surface/save`, this.form).then(res => {
                this.visible = false
                this.queryChildInfo(this.info.id)
            })
        }
    }
}
@@ -223,6 +460,21 @@
    color: #ccc;
}
.custom-tree-node {
    width: 100%;
    display: flex;
    .icon {
        visibility: hidden;
    }
}
.custom-tree-node:hover {
    .icon {
        visibility: visible;
    }
}
.empty {
    justify-content: center;
}