From 17e62da2a097844b0f6f7a58926e7d0a40598d2c Mon Sep 17 00:00:00 2001 From: hailin <1356886193@qq.com> Date: 星期五, 21 七月 2023 10:30:23 +0800 Subject: [PATCH] 标准库的第三次提交 --- src/permission.js | 111 ++++--- src/api/standardLibrary.js | 92 ++++++ src/views/standardLibrary/SpecificationDetails.vue | 565 +++++++++++++++++++++++++++++++++++---- src/layout/components/Sidebar/SidebarItem.vue | 13 src/router/index.js | 4 src/styles/element-ui.scss | 8 src/styles/sidebar.scss | 4 7 files changed, 673 insertions(+), 124 deletions(-) diff --git a/src/api/standardLibrary.js b/src/api/standardLibrary.js index 1123199..1d6bc27 100644 --- a/src/api/standardLibrary.js +++ b/src/api/standardLibrary.js @@ -58,3 +58,95 @@ method: 'get' }) } + +// 瑙勬牸璇︽儏椤垫帴鍙� + +// 鏍规嵁瑙勬牸id鏌ヨ鎵�鏈夌墿鏂� specificationsId +export function getMaterialList(params) { + return request({ + url: '/material/list', + method: 'get', + params + }) +} + +// 鏍规嵁鐗╂枡id锛岃幏鍙栧搴旂殑鐗╂枡璇︽儏 +export function getMaterialDetail(params) { + return request({ + url: '/material/list_id', + method: 'get', + params + }) +} + +// 娣诲姞鐗╂枡 +export function addMaterial(data) { + return request({ + url: '/material/add', + method: 'post', + data + }) +} + +// 缂栬緫鐗╂枡淇℃伅 +export function updateMaterial(data) { + return request({ + url: '/material/update', + method: 'put', + data + }) +} + +// 鍒犻櫎鐗╂枡淇℃伅 +export function deleteMaterial(data) { + return request({ + url: '/material/delete', + method: 'delete', + data + }) +} + +// 鏍规嵁鐗╂枡id鏌ヨ鎵�鏈夋爣鍑嗗垎绫� specificationsId +export function getProductList(params) { + return request({ + url: '/product/list', + method: 'get', + params + }) +} + +// 娣诲姞鏍囧噯鍒嗙被 +export function addProduct(data) { + return request({ + url: '/product/add', + method: 'post', + data + }) +} + +// 鏌ヨ鏍囧噯鍒嗙被璇︽儏锛屽搴旂殑鏍囧噯璇︽儏 +export function getProductProductId(params) { + return request({ + url: '/product/productId', + method: 'get', + params + }) +} + +// 缂栬緫瀛愰」鐩俊鎭� +export function updateProduct(data) { + return request({ + url: '/product/update', + method: 'put', + data + }) +} + +// 鍒犻櫎瀛愰」鐩俊鎭� +export function deleteProduct(data) { + return request({ + url: '/product/delete', + method: 'delete', + data + }) +} diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue index 44f67e4..a262e2c 100644 --- a/src/layout/components/Sidebar/SidebarItem.vue +++ b/src/layout/components/Sidebar/SidebarItem.vue @@ -4,10 +4,11 @@ <app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)"> <el-menu-item v-if="onlyOneChild.meta.show==false ?onlyOneChild.meta.show: true" :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}"> + <!-- <el-menu-item :style="{width:'0px',height:'0px'}" v-if="onlyOneChild.meta.show==false ?onlyOneChild.meta.show: true" :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}"> --> <!-- <template slot="title"> <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" /> </template> --> - <item :show="onlyOneChild.meta.show" :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" /> + <item :show="onlyOneChild.meta.show" :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" /> <span v-if="onlyOneChild.meta.title==='涓婚〉'">涓婚〉</span> </el-menu-item> </app-link> @@ -101,3 +102,13 @@ } } </script> +<style scoped> +/* 鏂囧瓧 */ +::v-deep.el-submenu.is-active > .el-submenu__title { + color: #409eff !important; +} +/* icon鍥炬爣涔熻窡鐫�鍙� */ +::v-deep .el-submenu.is-active > .el-submenu__title i { + color: #409eff !important; +} +</style> diff --git a/src/permission.js b/src/permission.js index 46773cb..a38fdc4 100644 --- a/src/permission.js +++ b/src/permission.js @@ -1,64 +1,65 @@ -// import router from './router' -// import store from './store' -// import { Message } from 'element-ui' -// import NProgress from 'nprogress' // progress bar -// import 'nprogress/nprogress.css' // progress bar style -// import { getToken } from '@/utils/auth' // get token from cookie -// import getPageTitle from '@/utils/get-page-title' +import router from './router' +import store from './store' +import { Message } from 'element-ui' +import NProgress from 'nprogress' // progress bar +import 'nprogress/nprogress.css' // progress bar style +import { getToken } from '@/utils/auth' // get token from cookie +import getPageTitle from '@/utils/get-page-title' -// NProgress.configure({ showSpinner: false }) // NProgress Configuration +NProgress.configure({ showSpinner: false }) // NProgress Configuration -// const whiteList = ['/login'] // no redirect whitelist +const whiteList = ['/login'] // no redirect whitelist -// router.beforeEach(async(to, from, next) => { -// // start progress bar -// NProgress.start() +router.beforeEach(async(to, from, next) => { + // start progress bar + NProgress.start() -// // set page title -// document.title = getPageTitle(to.meta.title) + // set page title + document.title = getPageTitle(to.meta.title) -// // determine whether the user has logged in -// const hasToken = getToken() + // determine whether the user has logged in + const hasToken = getToken() -// if (hasToken) { -// if (to.path === '/login') { -// // if is logged in, redirect to the home page -// next({ path: '/' }) -// NProgress.done() -// } else { -// const hasGetUserInfo = store.getters.name -// if (hasGetUserInfo) { -// next() -// } else { -// try { -// // get user info -// await store.dispatch('user/getInfo') + if (hasToken) { + if (to.path === '/login') { + // if is logged in, redirect to the home page + next({ path: '/' }) + NProgress.done() + } else { + const hasGetUserInfo = store.getters.name + if (hasGetUserInfo) { + next() + } else { + try { + // get user info + await store.dispatch('user/getInfo') -// next() -// } catch (error) { -// // remove token and go to login page to re-login -// await store.dispatch('user/resetToken') -// Message.error(error || 'Has Error') -// next(`/login?redirect=${to.path}`) -// NProgress.done() -// } -// } -// } -// } else { -// /* has no token*/ + next() + } catch (error) { + // remove token and go to login page to re-login + // 閲嶆柊鍒锋柊token + await store.dispatch('user/resetToken') + Message.error(error || 'Has Error') + next(`/login?redirect=${to.path}`) + NProgress.done() + } + } + } + } else { + /* has no token*/ -// if (whiteList.indexOf(to.path) !== -1) { -// // in the free login whitelist, go directly -// next() -// } else { -// // other pages that do not have permission to access are redirected to the login page. -// next(`/login?redirect=${to.path}`) -// NProgress.done() -// } -// } -// }) + if (whiteList.indexOf(to.path) !== -1) { + // in the free login whitelist, go directly + next() + } else { + // other pages that do not have permission to access are redirected to the login page. + next(`/login?redirect=${to.path}`) + NProgress.done() + } + } +}) -// router.afterEach(() => { -// // finish progress bar -// NProgress.done() -// }) +router.afterEach(() => { + // finish progress bar + NProgress.done() +}) diff --git a/src/router/index.js b/src/router/index.js index 5f236ab..90f985c 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -70,7 +70,7 @@ name: 'SpecificationDetails', // hidden: true, component: () => import('@/views/standardLibrary/SpecificationDetails'), - meta: { title: '浜у搧瑙勬牸璇︽儏', icon: 'form', show: false, breadcrumb: false } + meta: { title: '浜у搧瑙勬牸璇︽儏', icon: 'form', show: false } } ] }, @@ -304,7 +304,7 @@ path: 'myBusiness', name: 'MyBusiness', component: () => import('@/views/personal/myBusiness/index'), - meta: { title: '鎴戠殑浼佷笟', icon: 'tree' } + meta: { title: '鎴戠殑浼佷笟', icon: 'tree', show: false } } ] }, diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss index 0463a2a..cf79dc7 100644 --- a/src/styles/element-ui.scss +++ b/src/styles/element-ui.scss @@ -114,3 +114,11 @@ .el-popover.el-popper{ min-width: 60px !important; } +// //瀵瑰簲瀛愮骇锛岀埗绾х殑鏍峰紡 +// .el-submenu.is-active > .el-submenu__title { +// background: rgb(206, 169, 181) !important; +// } +// //褰撳墠閫変腑瀛愮骇鐨勬牱寮� +// .is-active{ +// background: red !important; +// } diff --git a/src/styles/sidebar.scss b/src/styles/sidebar.scss index 15195b5..5d56d60 100644 --- a/src/styles/sidebar.scss +++ b/src/styles/sidebar.scss @@ -95,6 +95,10 @@ .el-submenu__title{ background-color: #ffffff !important; color: $menuActiveText !important; + &:has(.is-active){ + background-color: #ffffff !important; + color: $menuActiveText !important; + } } } diff --git a/src/views/standardLibrary/SpecificationDetails.vue b/src/views/standardLibrary/SpecificationDetails.vue index 3efd266..192e63b 100644 --- a/src/views/standardLibrary/SpecificationDetails.vue +++ b/src/views/standardLibrary/SpecificationDetails.vue @@ -2,12 +2,12 @@ <div class="specificationDetail-main"> <div class="page-header-tips"> <div class="search-bar"> - <span :style="{marginRight:'12px', color:'#409EFF'}"> 浜у搧鍚嶇О锛氶挗鍖呴挗蹇冮摑缁炵嚎</span> - <el-tag type="primary"><i class="el-icon-info" :style="{marginRight:'4px', color:'#409EFF'}" />V12</el-tag> + <span :style="{marginRight:'12px', color:'#409EFF'}"> 椤圭洰鍚嶇О锛歿{ detailInfo.projectClassification }}</span> + <!-- <el-tag type="primary"><i class="el-icon-info" :style="{marginRight:'4px', color:'#409EFF'}" />V12</el-tag> --> </div> <div class="serve-btn"> - <el-button type="primary" icon="el-icon-plus">缂栬緫</el-button> - <el-button type="primary" icon="el-icon-plus">鍒犻櫎</el-button> + <!-- <el-button type="primary" icon="el-icon-plus">缂栬緫</el-button> + <el-button type="primary" icon="el-icon-plus">鍒犻櫎</el-button> --> </div> </div> <div class="content-main"> @@ -17,23 +17,52 @@ <el-row> <el-col :span="19"> <el-input - v-model="filterText" + v-model="searchData.keyword" placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�" /> </el-col> <el-col :span="5"> - <el-button type="primary" size="small"><i class="el-icon-plus" /></el-button> + <el-button type="primary" size="small" @click="materialFormVisible = true"><i class="el-icon-plus" /></el-button> </el-col> </el-row> </div> <el-tree ref="tree" class="filter-tree" - :data="data" - :props="defaultProps" + :data="materialTree" default-expand-all :filter-node-method="filterNode" - /> + :highlight-current="true" + node-key="id" + :default-expanded-keys="materialTreeDefault" + @node-click="materialTreeClick" + > + + <span slot-scope="{ node, data }" class="custom-tree-node"> + <span>{{ node.label }}</span> + <span> + <el-popover + placement="top" + width="30" + trigger="click" + > + <div style="text-align: center; margin: 0"> + <div> + <el-button size="mini" type="text" @click="showChangeMaterial(data)">缂栬緫</el-button> + </div> + <div> + <el-button size="mini" type="text">鍒犻櫎</el-button> + </div> + </div> + <el-button + slot="reference" + type="text" + size="mini" + ><i class="el-icon-more" /></el-button> + </el-popover> + </span> + </span> + </el-tree> </div> <div class="bom-item"> <div class="bom-item-search"> @@ -45,18 +74,44 @@ </div> </el-col> <el-col :span="5"> - <el-button type="primary" size="small" plain><i class="el-icon-plus" /></el-button> + <el-button type="primary" size="small" plain @click="projectFormVisible = true"><i class="el-icon-plus" /></el-button> </el-col> </el-row> </div> <el-tree ref="tree" class="filter-tree" - :data="item" - :props="defaultProps" + :data="projectTree" default-expand-all - :filter-node-method="filterNode" - /> + :highlight-current="true" + :default-expanded-keys="projectTreeDefault" + @node-click="projectTreeClick" + > + <span slot-scope="{ node,data }" class="custom-tree-node"> + <span>{{ node.label }}</span> + <span> + <el-popover + placement="top" + width="30" + trigger="click" + > + <div style="text-align: center; margin: 0"> + <div> + <el-button size="mini" type="text" @click="showChangeProject(data)">缂栬緫</el-button> + </div> + <div> + <el-button size="mini" type="text">鍒犻櫎</el-button> + </div> + </div> + <el-button + slot="reference" + type="text" + size="mini" + ><i class="el-icon-more" /></el-button> + </el-popover> + </span> + </span> + </el-tree> </div> </div> <div class="specificationDetail-card"> @@ -66,23 +121,20 @@ <span /> <div>椤圭洰璇︽儏</div> </div> - <div class="tips-btn"> + <!-- <div class="tips-btn"> <span><i class="el-icon-edit" />鎿嶄綔锛�</span> <el-button type="text">缂栬緫</el-button> - </div> + </div> --> </div> <div class="message"> - <div class="message-item"><span><i class="el-icon-edit" />鐢ㄦ埛鍚嶏細</span>121212121212</div> + <div class="message-item"><span><i class="el-icon-edit" />璇曢獙鏂规硶锛歿{ detailInfo.method }}</span></div> <div class="message-item"> - <span><i class="el-icon-edit" />濮撳悕锛�</span> - <el-tag type="primary"><i class="el-icon-info" :style="{marginRight:'4px', color:'#409EFF'}"/>{{ 'jack' }}</el-tag> + <span><i class="el-icon-edit" />椤圭洰鍒嗙被锛歿{ detailInfo.projectClassification }}</span> </div> <div class="message-item"> - <span><i class="el-icon-edit" />鐢佃瘽鍙风爜锛�</span> - 19825217196</div> + <span><i class="el-icon-edit" />鏇存柊浜猴細{{ detailInfo.userName }}</span></div> <div class="message-item"> - <span><i class="el-icon-edit" />閭锛�</span> - 1212112</div> + <span><i class="el-icon-edit" />鏇存柊鏃堕棿锛歿{ detailInfo.updateTime }}</span></div> </div> </div> <div class="card-main"> @@ -91,84 +143,449 @@ <span /> <div>娴嬭瘯鏍囧噯</div> </div> - <div class="tips-btn"> + <!-- <div class="tips-btn"> <span><i class="el-icon-edit" />鎿嶄綔锛�</span> <el-button type="text">缂栬緫</el-button> - </div> + </div> --> </div> <div class="message"> <div class="message-item"> - <el-tag type="primary"><i class="el-icon-info" :style="{marginRight:'4px', color:'#409EFF'}"/>鍗曚綅锛氭濮�</el-tag> + 鍗曚綅锛�<el-tag type="primary">{{ detailInfo.unit }}</el-tag> </div> <div class="message-item"> - <span><i class="el-icon-edit" />鎷涙爣浜哄憳瑕佹眰锛氾紲3444</span> + <span><i class="el-icon-edit" />鎷涙爣浜哄憳瑕佹眰锛歿{ detailInfo.required }}</span> </div> <div class="message-item"> - <span><i class="el-icon-edit" />鍐呮帶鍊硷細锛�3444</span> - 1212112</div> + <span><i class="el-icon-edit" />鍐呮帶鍊硷細{{ detailInfo.internal }}</span></div> </div> </div> </div> </div> + <!-- 娣诲姞浠ュ強淇敼鐨勬ā鎬佹 --> + <el-dialog title="娣诲姞鐗╂枡" :visible.sync="materialFormVisible"> + <el-form :model="addMaterialForm"> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鐗╂枡ID锛�" label-width="100px"> + <el-input v-model="addMaterialForm.id" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鐗╂枡鍚嶇О锛�" label-width="100px"> + <el-input v-model="addMaterialForm.name" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鎵规锛�" label-width="100px"> + <el-input v-model="addMaterialForm.batch" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="瀛樻斁鍦帮細" label-width="100px"> + <el-input v-model="addMaterialForm.location" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鐩樺彿锛�" label-width="100px"> + <el-input v-model="addMaterialForm.reelNumber" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鏁伴噺锛�" label-width="100px"> + <el-input v-model="addMaterialForm.num" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <!-- <el-form-item label="鍏宠仈瑙勬牸锛�" label-width="100px"> + <el-input v-model="addMaterialForm.specificationsId" autocomplete="off" /> + </el-form-item> --> + </el-col> + <el-col :span="12"> + <el-form-item label="渚涘簲鍟嗭細" label-width="100px"> + <el-input v-model="addMaterialForm.supplier" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="addNewMaterial">纭� 瀹�</el-button> + <el-button @click="dialogFormVisible = false">鍙� 娑�</el-button> + </div> + </el-dialog> + <el-dialog title="娣诲姞瀛愰」鐩�" :visible.sync="projectFormVisible"> + <el-form :model="addProjectForm"> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鐖堕」鐩細" label-width="100px"> + <el-select + v-model="addProjectForm.father" + clearable + filterable + :allow-create="true" + placeholder="璇烽�夋嫨鎴栬緭鍏ョ埗椤圭洰" + @blur="productSelect" + > + <el-option + v-for="item in fatherOpetions" + :key="item.id" + :label="item.label" + :value="item.label" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍏宠仈鐗╂枡锛�" label-width="100px"> + <el-select + v-model="addProjectForm.materialId" + clearable + placeholder="璇烽�夋嫨鎴栬緭鍏ョ埗椤圭洰" + > + <el-option + v-for="item in materialTree" + :key="item.id" + :label="item.label" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="椤圭洰鍚嶇О锛�" label-width="100px"> + <el-input v-model="addProjectForm.name" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍗曚綅锛�" label-width="100px"> + <el-input v-model="addProjectForm.unit" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鎷涙爣浜鸿姹傚�硷細" label-width="100px"> + <el-input v-model="addProjectForm.required" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍐呮帶鍊硷細" label-width="100px"> + <el-input v-model="addProjectForm.internal" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="璇曢獙鏂规硶锛�" label-width="100px"> + <el-input v-model="addProjectForm.method" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="addNewProject">纭� 瀹�</el-button> + <el-button @click="projectFormVisible = false">鍙� 娑�</el-button> + </div> + </el-dialog> + <el-dialog title="淇敼鐗╂枡" :visible.sync="changeMaterialFormVisible"> + <el-form :model="changeMaterialForm"> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鐗╂枡鍚嶇О锛�" label-width="100px"> + <el-input v-model="changeMaterialForm.name" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="渚涘簲鍟嗭細" label-width="100px"> + <el-input v-model="changeMaterialForm.supplier" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鎵规锛�" label-width="100px"> + <el-input v-model="changeMaterialForm.batch" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="瀛樻斁鍦帮細" label-width="100px"> + <el-input v-model="changeMaterialForm.location" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鐩樺彿锛�" label-width="100px"> + <el-input v-model="changeMaterialForm.reelNumber" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鏁伴噺锛�" label-width="100px"> + <el-input v-model="changeMaterialForm.num" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="changeMaterial">纭� 瀹�</el-button> + <el-button @click="changeMaterialFormVisible = false">鍙� 娑�</el-button> + </div> + </el-dialog> + <el-dialog title="淇敼瀛愰」鐩�" :visible.sync="changeProjectFormVisible"> + <el-form :model="changeProjectForm"> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鐖堕」鐩細" label-width="100px"> + <el-select + v-model="changeProjectForm.father" + clearable + filterable + :allow-create="true" + placeholder="璇烽�夋嫨鎴栬緭鍏ョ埗椤圭洰" + @blur="productSelect" + > + <el-option + v-for="item in fatherOpetions" + :key="item.id" + :label="item.label" + :value="item.label" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="椤圭洰鍚嶇О锛�" label-width="100px"> + <el-input v-model="changeProjectForm.name" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍗曚綅锛�" label-width="100px"> + <el-input v-model="changeProjectForm.unit" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鎷涙爣浜鸿姹傚�硷細" label-width="100px"> + <el-input v-model="changeProjectForm.required" autocomplete="off" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍐呮帶鍊硷細" label-width="100px"> + <el-input v-model="changeProjectForm.internal" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="璇曢獙鏂规硶锛�" label-width="100px"> + <el-input v-model="changeProjectForm.method" autocomplete="off" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="changeProject">纭� 瀹�</el-button> + <el-button @click="projectFormVisible = false">鍙� 娑�</el-button> + </div> + </el-dialog> </div> </template> <script> +import { getMaterialList, getProductList, getProductProductId, addMaterial, addProduct, getMaterialDetail, updateMaterial, updateProduct } from '@/api/standardLibrary' export default { name: 'SpecificationDetail', data() { return { // 鏌ユ壘瀵瑰簲璇︽儏id - id: '', + specificationsId: '', // 榛樿鍊� - defaultProps: { + materialDefaultProps: { children: 'children', label: 'label' }, + // 鐗╂枡tree鏁版嵁 + materialTree: [], // 鏍囧噯璇︽儏鍒嗙被 - data: [ - { - id: 1, - label: '涓�绾� 1' - }, - { - id: 2, - label: '涓�绾� 1' - }, - { - id: 3, - label: '涓�绾� 1' - }, - { - id: 4, - label: '涓�绾� 1' - } - ], - item: [{ - id: 1, - label: '涓�绾� 1', - children: [{ - id: 4, - label: '浜岀骇 1-1', - children: [{ - id: 9, - label: '涓夌骇 1-1-1' - }, { - id: 10, - label: '涓夌骇 1-1-2' - }] - }] - }], + projectTree: [], searchData: { keyword: '' + }, + // 璇︽儏淇℃伅 + detailInfo: {}, + // 鐗╂枡tree榛樿閫変腑鍊� + materialTreeDefault: [], + projectTreeDefault: [], + materialFormVisible: false, + changeMaterialFormVisible: false, + projectFormVisible: false, + changeProjectFormVisible: false, + addMaterialForm: {}, + changeMaterialForm: {}, + addProjectForm: {}, + changeProjectForm: {}, + fatherOpetions: [] + } + }, + // 涓轰簡閫変腑绗竴灞傜骇涓嬬殑绗竴涓妭鐐� + watch: { + projectTreeDefault(newVal, oldVal) { + // console.log(newVal) + if (newVal) { + this.$nextTick(() => { + // console.log(document.querySelector('.el-tree-node__children .el-tree-node__content')) + + document + .querySelector('.el-tree-node__children .el-tree-node__content') + ?.click() + }) + } + }, + materialTreeDefault(newVal, oldVal) { + // console.log(newVal) + if (newVal) { + this.$nextTick(() => { + // console.log(document.querySelector('.el-tree-node__content')) + document + .querySelector('.el-tree-node__content') + ?.click() + }) } } }, created() { - console.log(this.$route.params) + // console.log(this.$route.params) + // 杩欓噷鍔犱竴涓牎楠岋紝濡傛灉娌℃湁params.id 杩斿洖鏍囧噯搴撻〉闈� + this.specificationsId = this.$route.params.id + this.addMaterialForm.specificationsId = this.$route.params.id + this.refreshData() }, methods: { - + productSelect(e) { + const value = e.target.value // 杈撳叆妗嗗�� + if (value) { // 浣犺緭鍏ユ墠鏈夎繖涓�� 涓嶄负绌猴紝濡傛灉浣犱笅鎷夋閫夋嫨鐨勮瘽 杩欎釜鍊间负绌� + this.addProjectForm.pcode = value + } + }, + // 鍒锋柊鎴栧垵娆¤幏寰楁暟鎹� + refreshData() { + this.getMaterialTreeData() + }, + // tree鏍戠殑杩囨护鏌ヨ + filterNode(value, data) { + if (!value) return true + return data.label.indexOf(value) !== -1 + }, + // 鑾峰彇鐗╂枡tree + async getMaterialTreeData() { + const { data } = await getMaterialList({ specificationsId: this.specificationsId }) + // console.log(data) + this.materialTree = data.map(item => ({ ...item, label: item.name })) + this.materialTreeDefault = [this.materialTree[0].id] + console.log(this.materialTree, this.materialTreeDefault) + }, + // 鑾峰彇椤圭洰tree + async getProjectTreeData(data) { + // + const { data: projectArr } = await getProductList({ materialId: data.id }) + // console.log(projectArr) + projectArr.map((item, index) => { + item.label = item.father + item.id = index + item.children = item.sonProduct.map(item => ({ ...item, label: item.name })) + }) + this.projectTree = projectArr + // 椤圭洰涓粯璁ら�変腑鐨勫瓙椤圭洰 + console.log(this.projectTree) + this.fatherOpetions = this.projectTree.map(item => ({ id: item.id, label: item.label })) + console.log(this.fatherOpetions) + this.projectTreeDefault = [this.projectTree[0]?.children[0]?.id] + }, + // 鐗╂枡搴撶殑鑺傜偣鐐瑰嚮 + materialTreeClick(data, node, element) { + // 鐐瑰嚮鐗╂枡鑺傜偣锛屾煡璇㈠搴旂殑椤圭洰tree鏁版嵁 + console.log(data) + this.getProjectTreeData(data) + }, + // 椤圭洰搴撶殑鑺傜偣鐐瑰嚮 + async projectTreeClick(data, node, element) { + // 鍏堝垽鏂偣鍑荤殑鏄埗鑺傜偣杩樻槸瀛愯妭鐐� + if (('children' in data)) return + console.log('瀛愰」鐩妭鐐�', data) + // + const { data: detailInfo } = await getProductProductId({ productId: data.id }) + // console.log('璇︽儏淇℃伅', detailInfo) + this.detailInfo = detailInfo + this.changeProjectForm = { ...detailInfo } + }, + // 鏂板鐗╂枡 + async addNewMaterial() { + // console.log('浜х湅娣诲姞鐗╂枡鍙傛暟锛�', this.addMaterialForm) + // const res = await addMaterial(this.addMaterialForm) + await addMaterial(this.addMaterialForm) + // console.log(res) + this.$message.success('娣诲姞鐗╂枡鎴愬姛') + this.materialFormVisible = false + this.refreshData() + }, + // 鏂板椤圭洰 + async addNewProject() { + console.log('鏌ョ湅娣诲姞鐨勫瓙椤圭洰鍙傛暟', this.addProjectForm) + const res = await addProduct(this.addProjectForm) + console.log(res) + this.$message.success('娣诲姞鏂伴」鐩垚鍔�') + this.projectFormVisible = false + this.refreshData() + }, + // 淇敼鐗╂枡 + async changeMaterial() { + console.log('淇敼鐗╂枡鍙傛暟', this.changeMaterialForm) + const res = await updateMaterial(this.changeMaterialForm) + this.changeMaterialFormVisible = false + this.$message.success('淇敼鎴愬姛') + this.refreshData() + console.log(res) + }, + // 淇敼椤圭洰 + async changeProject() { + console.log('淇敼椤圭洰鍙傛暟', this.changeProjectForm) + const { data } = await updateProduct(this.changeProjectForm) + console.log(data) + this.changeMaterialFormVisible = false + this.$message.success('淇敼鎴愬姛') + this.refreshData() + }, + // 鏄剧ず淇敼鐗╂枡妯℃�佹鍚屾椂鑾峰彇闇�瑕佷慨鏀圭墿鏂欎俊鎭� + async showChangeMaterial(data) { + const { data: materialInfo } = await getMaterialDetail({ materialId: data.id }) + for (const key in materialInfo) { + // console.log(key, materialInfo[key]) + if (!materialInfo[key]) { + // console.log(materialInfo[key]) + delete materialInfo[key] + } + } + console.log(materialInfo) + this.changeMaterialForm = materialInfo + this.changeMaterialFormVisible = true + }, + // 鏄剧ず淇敼椤圭洰妯℃�佹 + showChangeProject(data) { + // console.log('淇敼鍓�', this.changeProjectForm) + this.changeProjectForm.name = data.name + // console.log('淇敼鍚�', this.changeMaterialForm) + this.changeProjectFormVisible = true + } } } </script> @@ -356,4 +773,20 @@ } } } + +// 鏍戣妭鐐圭殑鏍峰紡 +.custom-tree-node { + flex: 1; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 14px; + padding-right: 8px; + &>:nth-child(2){ + display: none; + } + &:hover >:nth-child(2){ + display: block; + } + } </style> -- Gitblit v1.9.3