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