gaoshp
2024-06-23 f40836bbcd74b931b332a1c262e6776af1e4cc14
src/views/dnc/craft/document/index.vue
@@ -1,7 +1,7 @@
<!--
 * @Date: 2024-05-26 16:12:09
 * @LastEditors: Sneed
 * @LastEditTime: 2024-05-26 21:56:20
 * @LastEditTime: 2024-06-16 16:19:02
 * @FilePath: /belleson-frontend/Users/mache/Documents/demo/cps-web/src/views/dnc/craft/document/index.vue
-->
<!--
@@ -15,7 +15,7 @@
        <el-card shadow="never" style="height: 100%;" body-style="height: 100%">
            <el-container>
                <el-aside width="200px">
                    <el-tree ref="group" node-key="id" :props="{
                    <el-tree :expand-on-click-node="false" ref="group" node-key="id" :props="{
                        label: 'name',
                        hasChildren: 'id'
                    }" @node-click="nodeClick" highlight-current :current-node-key="selectNode.id" :load="loadNode"
@@ -23,10 +23,20 @@
                </el-aside>
                <el-container>
                    <el-header>
                        <el-button style="margin-left: 8px;margin-right: auto;" type="danger" plain
                            :disabled="!selectNode.id || selectNode.id === 0" @click="del">删除</el-button>
                        <el-button style="margin-left: 8px;" type="danger" plain :disabled="selection.length === 0"
                            @click="del">删除</el-button>
                        <el-button style="margin-left: 8px;margin-right: auto;" type="primary"
                            @click="addNew">新增</el-button>
                        <!-- <el-select v-model="params.type" style="width: 240px;margin-left: 8px;">
                            <template #prefix>
                                查询目标
                            </template>
<el-option v-for="item in options.type" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-input style="width: 240px;margin-left: 8px;" v-model="params.keyword" placeholder="请输入检索内容"></el-input>
<el-button @click="search" style="margin-left: 8px;" type="primary" icon="el-icon-search"></el-button> -->
                    </el-header>
                    <el-main>
                    <el-main v-if="selectNode.id || selectNode.id == 0">
                        <el-row :gutter="20">
                            <el-col :span="12">
                                <scTable highlight-current-row @dataChange="dataChange" @row-click="rowClick"
@@ -35,33 +45,35 @@
                                    <el-table-column type="selection" width="50"></el-table-column>
                                    <el-table-column label="工艺包名称" prop="name" width="160">
                                    </el-table-column>
                                    <el-table-column label="工艺包编号" prop="allPathName" width="160"></el-table-column>
                                    <el-table-column label="工艺包编号" prop="code" width="160"></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_edit(scope.row, scope.$index)">编辑</el-button>
                                                <el-button text type="primary" size="small"
                                                    @click="del([scope.row])">删除</el-button>
                                                    @click="openLog(scope.row)">变更日志</el-button>
                                            </el-button-group>
                                        </template>
                                    </el-table-column>
                                </scTable>
                            </el-col>
                            <el-col :span="12">
                                <h2>工艺包详情</h2>
                                <el-row>
                                <h2 style="background-color: var(--el-color-primary);color: #fff;padding: 4px 20px;">
                                    工艺包详情</h2>
                                <el-row style="margin: 14px 0;">
                                    <el-col :span="12">
                                        工艺包名称:
                                        工艺包名称:{{ info.name }}
                                    </el-col>
                                    <el-col :span="12">
                                        工艺包编号:
                                        工艺包编号:{{ info.code }}
                                    </el-col>
                                    <el-col :span="12">
                                        工艺包所在目录:
                                        工艺包所在目录:{{ info.sourcePath }}
                                    </el-col>
                                    <el-col :span="24">
                                        <Children></Children>
                                    <el-col :span="24" style="margin: 14px 0;">
                                        <Children @success="success" :list="list" @delete="searchFile" :id="info.id">
                                        </Children>
                                    </el-col>
                                </el-row>
                            </el-col>
@@ -71,23 +83,48 @@
                </el-container>
            </el-container>
        </el-card>
        <el-dialog v-model="visible" title="新建文件夹" width="500">
            <el-form :model="formEdit" :rules="rulesEdit" ref="dialogForm" label-width="120px" label-position="center">
                <el-form-item label="上级目录">
                    <el-input disabled v-model="formEdit.parentName" />
                </el-form-item>
                <el-form-item label="目录名称" prop="name">
                    <el-input v-model="formEdit.name" />
                </el-form-item>
                <el-col :span="24">
                    <el-form-item>
                        <slot>
                            <el-button type="primary" @click="submit">提交</el-button>
                        </slot>
                    </el-form-item>
                </el-col>
            </el-form>
        </el-dialog>
        <scDialog v-model="newVisible">
            <scForm ref="form" :config="config" :rules="rules" v-model="form" @submit="submit">
            </scForm>
        </scDialog>
        <scDialog v-model="logVisible">
            <el-container>
                <el-header>
                    <el-button type="primary" @click="exportExcel">导出</el-button>
                    <el-input v-model="searchParams.fileName" style="width: 240px;margin-left: 8px;" placeholder="">
                        <template #prefix>文件名称</template>
                    </el-input>
                    <el-select v-model="searchParams.fileClass" style="width: 240px;margin-left: 8px;">
                        <template #prefix>
                            文件类型
                        </template>
                        <el-option v-for="item in options.fileClass" :key="item.value" :label="item.label"
                            :value="item.value" />
                    </el-select>
                    <el-select v-model="searchParams.fileType" style="width: 240px;margin-left: 8px;">
                        <template #prefix>
                            文件属性
                        </template>
                        <el-option v-for="item in options.fileType" :key="item.value" :label="item.label"
                            :value="item.value" />
                    </el-select>
                </el-header>
                <el-main>
                    <scTable highlight-current-row ref="table1" :apiObj="apiObj1" @selection-change="selectionChange"
                        stripe>
                        <el-table-column label="文件名称" prop="fileName" width="160">
                        </el-table-column>
                        <el-table-column label="版本号" prop="version" width="160"></el-table-column>
                        <el-table-column label="文件类型" prop="suffix" width="160"></el-table-column>
                        <el-table-column label="文件属性" prop="fileType" width="160"></el-table-column>
                        <el-table-column label="操作类型" prop="operationType" width="160"></el-table-column>
                        <el-table-column label="操作人员" prop="operatorName" width="160"></el-table-column>
                        <el-table-column label="操作时间" prop="operationTime" width="160"></el-table-column>
                    </scTable>
                </el-main>
            </el-container>
        </scDialog>
    </el-main>
</template>
@@ -97,29 +134,135 @@
    components: {
        Children
    },
    watch: {
        searchParams: {
            handler() {
                this.$refs?.table1?.reload()
            },
            deep: true
        }
    },
    data() {
        return {
            treeData: [],
            selection: [],
            params: {
                type: 'BAG_OR_PROCESS'
            },
            selectNode: {
                id: 0
                // id: 0
            },
            visible: false,
            formEdit: {
                parentId: '',
                parentName: '',
                name: ''
            apiObj: {
                get: async (data) => {
                    let params = {
                        ...data,
                        catalogueId: this.selectNode.id,
                        // ...this.params
                    }
                    return await this.$HTTP.get(`/api/blade-dnc/dnc-art-bag/cur-sub-page`, {}, { params }).then(res => {
                        return res
                    })
                }
            },
            rulesEdit: {
                name: [
                    { required: true, message: '必填' }
            apiObj1: {
                get: async (data) => {
                    let params = {
                        ...data,
                        catalogueId: this.selectNode.id,
                        // ...this.params
                    }
                    return await this.$HTTP.post(`/api/blade-dnc/dnc-art-bag-log/page`, {}, { params, data: { ...this.searchParams } }).then(res => {
                        return res
                    })
                }
            },
            newVisible: false,
            config: {
                labelWidth: 120,
                formItems: [
                    {
                        component: 'input',
                        label: '工艺包名称',
                        name: 'name',
                        options: {
                            placeholder: '',
                            maxlength: 100,
                        }
                    },
                    {
                        component: 'input',
                        label: '工艺包编号',
                        name: 'code',
                        options: {
                            multiple: false,
                            data: []
                        },
                        disabled: false
                    }
                ]
            },
            form: {
            },
            rules: {
                name: [
                    { required: true, message: '请输入' },
                ],
                code: [
                    { required: true, message: '请输入' },
                ]
            },
            selection: [],
            logVisible: false,
            row: {},
            options: {
                type: [
                    {
                        value: 'BAG_OR_PROCESS',
                        label: '工艺包和程序文档'
                    },
                    {
                        value: 'ONLY_BAG',
                        label: '仅工艺包'
                    },
                    {
                        value: 'ONLY_PROCESS',
                        label: '仅程序文档'
                    },
                ],
                fileType: [
                    {
                        value: 1,
                        label: '程序'
                    },
                    {
                        value: 2,
                        label: '文档'
                    },
                ]
            },
            searchParams: {
                fileName: '',
                fileClass: '',
                fileType: '',
            },
            info: {},
            list: []
        }
    },
    created() {
        this.init()
    },
    methods: {
        init() {
            this.$HTTP.get(`/api/blade-system/param/detail?paramKey=dnc.support.file.suffix.list`).then(res => {
                this.options.fileClass = res.data.paramValue.split(',').map(v => {
                    return {
                        value: v,
                        label: v
                    }
                })
            })
        },
        loadNode(node, resolve) {
            console.log(node, '>>>>>>')
            let id = node.level === 0 ? '' : node.data.id
@@ -132,10 +275,62 @@
                resolve(res.data)
            })
        },
        del() {
            this.$HTTP.delete(`/api/blade-dnc/dnc-process-catalogue/remove`, {}, { data: [this.selectNode.id] }).then(res => {
                this.$message.success("操作成功");
        addNew() {
            this.$refs?.form?.resetFields()
            this.form = {
                name: '',
                code: ''
            }
            this.config.formItems[1].disabled = false
            this.newVisible = true
        },
        submit() {
            if (this.form.id) {
                return this.$HTTP.put(`/api/blade-dnc/dnc-art-bag/update?id=${this.form.id}&name=${this.form.name}`).then(res => {
                    if (res.success) {
                        this.newVisible = false
                        this.$refs.table.reload()
                    }
                })
            }
            this.$HTTP.post(`/api/blade-dnc/dnc-art-bag/insert`, {
                catalogueId: this.selectNode.id,
                ...this.form
            }).then(res => {
                if (res.success) {
                    this.newVisible = false
                    this.$refs.table.reload()
                } else {
                    this.$message.error(res.msg)
                }
            })
        },
        table_edit(row) {
            this.$refs?.form?.resetFields()
            this.form = {
                name: row.name,
                code: row.code,
                id: row.id,
            }
            this.config.formItems[1].disabled = true
            this.newVisible = true
        },
        selectionChange(selection) {
            this.selection = selection
        },
        del() {
            this.$confirm(`是否确认删除?`, '提示', {
                type: 'warning',
            }).then(() => {
                this.$HTTP.delete(`/api/blade-dnc/dnc-art-bag/remove`, {}, { data: this.selection.map(v => v.id) }).then(res => {
                    this.$message.success("操作成功");
                    this.$refs.table.reload()
                })
            }).catch(() => {
                return false
            })
        },
        nodeClick(node, treeNode) {
            console.log(node, treeNode)
@@ -143,6 +338,43 @@
                ...node,
                parentName: treeNode?.parent?.data?.name || '-'
            }
            this.$refs?.table?.reload()
        },
        openLog(row) {
            this.logVisible = true
            this.row = row
        },
        dataChange(data) {
            console.log(data, '>>>>>>>>dataChange')
            this.rowClick(data.data.records[0])
        },
        rowClick(row) {
            if (!row) return this.info = {}
            this.$HTTP.get(`/api/blade-dnc/dnc-art-bag/get/${row.id}`).then(res => {
                if (res.success) {
                    this.info = res.data
                    this.searchFile()
                } else {
                    this.info = {}
                }
            })
        },
        searchFile() {
            this.$HTTP.get(`/api/blade-dnc/dnc-art-file/list?artBagId=${this.info.id}`).then(res => {
                if (res.success) {
                    this.list = res.data
                }
            })
        },
        exportExcel() {
        },
        search() {
        },
        success() {
            this.searchFile()
        }
    }
}