From 33dd4cb476136dbcb57ac71c9bb441d3418a507f Mon Sep 17 00:00:00 2001 From: songshankun <songshankun@foxmail.com> Date: 星期四, 21 九月 2023 20:24:31 +0800 Subject: [PATCH] style: 产品管理模块样式调整,迁移搜索组件 --- src/views/productManage/product/index.vue | 84 ++++++-- package-lock.json | 10 src/components/index.js | 3 src/components/layout/components/appHeader/index.vue | 17 src/components/makepager/CommonSearch.vue | 379 +++++++++++++++++++++++++++++++++++++ src/views/productManage/index.vue | 14 public/images/download.png | 0 src/components/layout/index.vue | 2 src/components/makepager/TableCommonView.vue | 17 + src/assets/style/index.scss | 21 ++ src/assets/style/variable.scss | 2 package.json | 2 public/images/filter.png | 0 src/components/layout/components/AppMain.vue | 6 14 files changed, 510 insertions(+), 47 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2c51123..8f0335e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,8 @@ "docx-preview": "^0.1.18", "downloadjs": "^1.4.7", "element-ui": "^2.15.13", + "faker": "^5.5.3", + "lodash": "^4.17.21", "vue": "^2.6.14", "vue-router": "^3.5.1", "vuex": "^3.6.2" @@ -5826,6 +5828,11 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/faker": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/faker/-/faker-5.5.3.tgz", + "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -7396,8 +7403,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.debounce": { "version": "4.0.8", diff --git a/package.json b/package.json index c408a92..306b480 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,8 @@ "docx-preview": "^0.1.18", "downloadjs": "^1.4.7", "element-ui": "^2.15.13", + "faker": "^5.5.3", + "lodash": "^4.17.21", "vue": "^2.6.14", "vue-router": "^3.5.1", "vuex": "^3.6.2" diff --git a/public/images/download.png b/public/images/download.png new file mode 100644 index 0000000..8dd6e61 --- /dev/null +++ b/public/images/download.png Binary files differ diff --git a/public/images/filter.png b/public/images/filter.png new file mode 100644 index 0000000..ab3dd53 --- /dev/null +++ b/public/images/filter.png Binary files differ diff --git a/src/assets/style/index.scss b/src/assets/style/index.scss index d4cf06e..b5a740a 100644 --- a/src/assets/style/index.scss +++ b/src/assets/style/index.scss @@ -135,3 +135,24 @@ margin-left: auto; } } + +.border_radius_12{ + border-radius: 12px; +} + +::-webkit-scrollbar { + width: 8px !important; + height: 8px !important; + -webkit-appearance: none; + background-color: #00000040; +} +::-webkit-scrollbar-thumb { + box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.2); + background: #e1e1e1; +} +::-webkit-scrollbar-track { + box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.2); + // border-radius: 10px; + background: #ffffff; + // background:#2c60c5; +} diff --git a/src/assets/style/variable.scss b/src/assets/style/variable.scss index 3f1ad83..af239e6 100644 --- a/src/assets/style/variable.scss +++ b/src/assets/style/variable.scss @@ -20,4 +20,4 @@ $color-border-4: #f2f6fc; // 鑳屾櫙 -$color-bg: #f8f8f9; +$color-bg: #E6ECF2; diff --git a/src/components/index.js b/src/components/index.js index 14771f4..a6a8abc 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -4,8 +4,9 @@ import PagerView from "@/components/makepager/pager/PagerView" import TableCommonView from "@/components/makepager/TableCommonView" import DetailListCommonBtn from "@/components/makepager/DetailListCommonBtn" +import CommonSearch from "@/components/makepager/CommonSearch" -const components = [SearchCommonView, PublicFunctionBtnView, PagerView, TableCommonView, DetailListCommonBtn] +const components = [SearchCommonView, PublicFunctionBtnView, PagerView, TableCommonView, DetailListCommonBtn, CommonSearch] components.forEach((component) => { Vue.component(component.name, component) }) diff --git a/src/components/layout/components/AppMain.vue b/src/components/layout/components/AppMain.vue index 1572948..4c4dbb1 100644 --- a/src/components/layout/components/AppMain.vue +++ b/src/components/layout/components/AppMain.vue @@ -24,16 +24,16 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .app-main { - margin-left: 10px; box-sizing: border-box; display: flex; flex: 1; flex-direction: column; - // height: 100%; - width: calc(100% - 210px); + width: calc(100% - 200px); + .app-main-content { width: 100%; overflow-y: hidden; + height: calc(100% - 50px); } } </style> diff --git a/src/components/layout/components/appHeader/index.vue b/src/components/layout/components/appHeader/index.vue index e83742e..f918be6 100644 --- a/src/components/layout/components/appHeader/index.vue +++ b/src/components/layout/components/appHeader/index.vue @@ -37,15 +37,16 @@ <style lang="scss" scoped> .sales-lead { display: flex; - height: 55px; - line-height: 55px; - background-color: #fff; - margin-bottom: 10px; - margin-left: -10px; + height: 50px; + box-sizing: border-box; + line-height: 50px; + background-color: $color-bg; + border: 1px solid #ccc; .header-title { - margin-left: 16px; - font-size: 16px; - color: #475059; + padding-left: 16px; + font-size: 18px; + font-weight: bold; + color: #171718; } .header-user-info { margin-left: auto; diff --git a/src/components/layout/index.vue b/src/components/layout/index.vue index 9fe09d1..19cb95a 100644 --- a/src/components/layout/index.vue +++ b/src/components/layout/index.vue @@ -19,10 +19,12 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> + .app-content { display: flex; box-sizing: border-box; height: 100%; width: 100%; + background-color: $color-bg; } </style> diff --git a/src/components/makepager/CommonSearch.vue b/src/components/makepager/CommonSearch.vue new file mode 100644 index 0000000..5850cc3 --- /dev/null +++ b/src/components/makepager/CommonSearch.vue @@ -0,0 +1,379 @@ +<template> + <div class="search-list"> + <div class="search-top"> + <div class="left"> + <el-button v-if="showAdd" type="primary" size="mini" @click="addBtn">{{ + addTitle + }}</el-button> + <div + class="download" + v-if="showDownload" + @click="downloadClick" + :style="{ cursor: showDownload ? 'pointer' : 'no-drop' }" + > + <img + src="../../../public/images/download.png" + style="width: 13px" + alt="涓嬭浇" + /> + </div> + <slot name="leftButton" /> + </div> + <div v-if="amountView" class="amount"> + <div + v-if="twoTotalAmount" + class="top_left" + style="width: 8%; border: 0" + > + <dl> + <dd class="font_weight">{{ twoObject.value }}</dd> + <dd class="top_right_bottom">{{ twoObject.label }}</dd> + </dl> + </div> + <div class="top_left" style="width: 10%"> + <dl> + <dd class="font_weight">{{ totalObject.value }}</dd> + <dd class="top_right_bottom">{{ totalObject.label }}</dd> + </dl> + </div> + <div class="top_right" style="width: 50%; margin-right: 15px"> + <dl v-for="item in otherOptions" :key="item.label"> + <dd class="font_weight"> + {{ item.value }} + </dd> + <dd class="top_right_bottom"> + <span + v-if="item.status" + class="Badge" + :class="item.status" + ></span> + <span>{{ item.label }}</span> + </dd> + </dl> + </div> + </div> + <div v-else class="amount"></div> + <div class="search"> + <template v-if="isSearchForm"> + <el-input + :placeholder="placeholder" + v-model.trim="searchInput" + class="input-with-select" + style="width: 410px" + clearable + @change="searchClick" + @clear="clearClick" + > + <i + slot="suffix" + class="el-icon-search" + style="cursor: pointer" + @click="searchClick" + ></i> + </el-input> + </template> + <div class="search-Btn" v-if="showActionBtn"> + <div class="common"> + <img + src="../../../public/images/filter.png" + style="width: 10px" + alt="绛涢��" + /> + <span>绛涢��</span> + </div> + <div class="common"> + <i class="el-icon-s-fold"></i> + <span>鍒嗙粍</span> + </div> + <div class="common"> + <i class="el-icon-star-on"></i> + <span>鏀惰棌</span> + </div> + </div> + </div> + <div v-if="showSet"> + <i + class="el-icon-setting cursor_pointer font_size_30" + style="color: rgb(128,128,128)" + @click="inspectionConfigClick" + ></i> + </div> + </div> + </div> +</template> + +<script> +export default { + name: "CommonSearch", + components: {}, + props: { + showAdd: { + type: Boolean, + default: true, + }, + showDownload: { + type: Boolean, + default: false, + }, + showActionBtn: { + type: Boolean, + default: true, + }, + placeholder: { + type: String, + default: "璇疯緭鍏ュ唴瀹�", + }, + addTitle: { + type: String, + default: "娣诲姞", + }, + totalObject: { + type: Object, + default: () => { + return { + value: 0, + label: "鍏ㄩ儴鐗╂枡", + }; + }, + }, + otherOptions: { + type: Array, + default: () => [ + { + value: 2, + label: "瀹夊叏搴撳瓨", + status: "success", + }, + { + value: 12, + label: "娆犳枡", + status: "error", + }, + { + value: 2, + label: "瀹夊叏搴撳瓨", + status: "success", + }, + { + value: 12, + label: "娆犳枡", + status: "error", + }, + ], + }, + searchSel: { + type: Object, + default: () => { + return { + value: "name", + label: "", + }; + }, + }, + twoTotalAmount: { + type: Boolean, + default: false, + }, + twoObject: { + type: Object, + default: () => { + return { + value: 0, + label: "杞﹂棿鎬婚噺", + }; + }, + }, + amountView: { + type: Boolean, + default: true, + }, + isSearchForm: { + type: Boolean, + default: true, + }, + showSet: { + type: Boolean, + default: false, + }, + inputName: { + type: String, + default: "", + }, + }, + watch: { + inputName(val) { + this.searchInput = val; + }, + }, + data() { + return { + searchInput: "", + searchSelValue: this.searchSel, + }; + }, + methods: { + // 鎼滅储 + searchClick() { + this.$emit("searchClick", this.searchInput); + }, + // 娓呴櫎 + clearClick() { + this.$emit("clearClick", 1); + }, + // 娣诲姞 + addBtn() { + this.$emit("addCommonClick"); + }, + // 涓嬭浇 + downloadClick() { + this.$emit("downloadClick"); + }, + // 妯″叿-妫�鏌ラ厤缃� + inspectionConfigClick() { + this.$emit("inspectionConfigClick"); + }, + }, +}; +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.search-list { + font-size: 13px; + color: #333; + width: 100%; + .search-top { + width: 100%; + display: flex; + align-items: center; + .left { + display: flex; + width: 150px; + .download { + width: 30px; + height: 30px; + line-height: 35px; + text-align: center; + border: 1px solid #b1b1b1; + border-radius: 4px; + cursor: pointer; + } + } + .amount { + flex: 1; + display: flex; + justify-content: right; + .top_left { + width: 10%; + border-right: 1px solid #ccc; + display: flex; + padding-right: 2%; + flex-wrap: nowrap; + flex-direction: row; + align-content: center; + justify-content: center; + align-items: center; + text-align: center; + .font_weight { + font-weight: 500; + font-size: 18px; + font-family: "DIN Alternate",serif; + } + .top_right_bottom { + font-size: 12px; + } + } + .top_right { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-content: center; + align-items: center; + justify-content: space-around; + width: calc(90% - 197px); + text-align: center; + color: #666; + margin-left: 10px; + .font_weight { + font-weight: 500; + font-size: 18px; + font-family: "DIN Alternate",serif; + } + .top_right_bottom { + font-size: 12px; + } + } + } + .search { + display: flex; + align-items: center; + width: auto; + height: 60px; + line-height: 60px; + margin-right: 20px; + margin-left: 20px; + .el-icon-search { + margin-top: 22px; + } + .search-Btn { + display: flex; + margin-left: 40px; + background: #f3f3f3; + height: 30px; + border-radius: 4px; + align-items: center; + .common { + width: 50px; + text-align: center; + cursor: no-drop; + } + } + } + } + .success { + background: #06c062; + } + .yellow { + background: #e6a23c; + } +} + +::v-deep { + .el-input__inner { + height: 30px; + color: #2765e1; + } + .el-input__prefix, + .el-input__suffix { + height: 30px; + } + .el-input__icon { + line-height: 30px; + } + .search { + .el-select .el-input { + width: 130px; + } + .input-with-select .el-input-group__prepend { + background-color: #da2323; + } + // .el-input__suffix { + // // 澶勭悊鍓嶇紑鍥炬爣涓嶅瀭鐩村眳涓殑闂 + // height: auto; + // font-size: 15px; + // &-inner { + // flex-direction: row-reverse; + // -webkit-flex-direction: row-reverse; + // display: flex; + // } + // } + .el-input--suffix .el-input__inner { + padding-right: 45px; + } + .search-sel .el-input--suffix .el-input__inner { + padding-left: 5px; + padding-right: 20px; + } + } +} +</style> diff --git a/src/components/makepager/TableCommonView.vue b/src/components/makepager/TableCommonView.vue index ad1f787..fbf5c69 100644 --- a/src/components/makepager/TableCommonView.vue +++ b/src/components/makepager/TableCommonView.vue @@ -9,8 +9,9 @@ :height="'calc(100% - 0px)'" :max-height="tableList.maxHeight" :lazy="tableList.lazy" + size="mini" @selection-change="handleSelectionChange" - :header-cell-style="{ background: '#f1f3f8', color: '#000009' }" + :header-cell-style="{ background: '#f1f3f8', color: '#000009' , 'font-size': '14px'}" :highlight-current-row="tableList.highlight" :row-class-name="tableRowClassName" @row-click="tableRowClick" @@ -18,9 +19,9 @@ :default-expand-all="tableList.isDefaultExpandAll" :tree-props="{ children: 'child', hasChildren: 'hasChildren' }" > - <el-table-column v-if="tableList.selectBox" type="selection" width="40"> </el-table-column> - <el-table-column v-if="tableList.selectIndex" type="index" label="搴忓彿" width="50"> </el-table-column> - <el-table-column + <el-table-column align="center" v-if="tableList.selectBox" type="selection" width="40"> </el-table-column> + <el-table-column align="center" v-if="tableList.selectIndex" type="index" label="搴忓彿" width="50"> </el-table-column> + <el-table-column align="center" v-for="(item, i) in tableList.tableColumn" :key="i" :prop="item.prop" @@ -344,4 +345,12 @@ // } } } + +::v-deep { + .el-table { + border-top-left-radius: 12px; + border-top-right-radius: 12px; + overflow: auto; + } +} </style> diff --git a/src/views/productManage/index.vue b/src/views/productManage/index.vue index adc8766..08dd95e 100644 --- a/src/views/productManage/index.vue +++ b/src/views/productManage/index.vue @@ -1,7 +1,5 @@ <template> - <div class="content"> - <router-view /> - </div> + <router-view /> </template> <script> @@ -13,9 +11,9 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> -.content { - width: 100%; - background-color: #fff; - height: calc(100vh - 70px); -} +//.content { +// width: 100%; +// background-color: #fff; +// height: calc(100vh - 70px); +//} </style> diff --git a/src/views/productManage/product/index.vue b/src/views/productManage/product/index.vue index 60844cb..d6a3029 100644 --- a/src/views/productManage/product/index.vue +++ b/src/views/productManage/product/index.vue @@ -1,18 +1,30 @@ <template> - <div class="rightContent"> - <div class="top"> - <div class="supplier-search"> - <SearchCommonView - ref="searchCommonView" - :search-options="searchOptions" - @searchClick="searchClick" - @resetClick="resetClick" + <div class="product-manage"> + <div class="filter"> + <div class="filter-card"> +<!-- <SearchCommonView--> +<!-- ref="searchCommonView"--> +<!-- :search-options="searchOptions"--> +<!-- @searchClick="searchClick"--> +<!-- @resetClick="resetClick"--> +<!-- />--> + + <CommonSearch + :show-add="false" + :show-download="false" + :amount-view="false" + :show-action-btn="false" + :placeholder="'璇疯緭鍏ヤ骇鍝佸悕绉�/渚涘簲鍟�'" + @searchClick="onFilterSearch" /> + <div class="add-view"> - <!-- <el-button type="primary" size="mini" @click="addBtnClick">鏂板缓</el-button> --> + <!-- <el-button type="primary" size="mini" @click="addBtnClick">鏂板缓</el-button>--> </div> </div> - <template> + </div> + <div class="body"> + <div class="body-card"> <div class="list-view"> <TableCommonView ref="tableListRef" :table-list="tableList" @selCommonClick="selCommonClick"> <!-- <template slot="tableButton"> @@ -25,11 +37,11 @@ </template> --> </TableCommonView> </div> - <div class="btn-pager"> <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> </div> - </template> + </div> + </div> <!-- 鏂板缓/缂栬緫浜у搧 --> <AddProduct v-if="editConfig.visible" :add-common-config="editConfig" /> @@ -52,6 +64,7 @@ computed: {}, data() { return { + searchText:'', tableList: {}, searchOptions: [], commonDetail: { @@ -119,6 +132,15 @@ console.log(val, content) this.getData(val.value, content) }, + + onFilterSearch(val){ + this.searchText = val ?? '' + console.log(this.searchText) + + // TODO: 闇�瑕佹帴鍙f敮鎸� + throw new Error("鍔熻兘鏈疄鐜�") + }, + resetClick() { this.getData() }, @@ -165,14 +187,35 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> -.rightContent { +.product-manage{ height: 100%; - background: #f0f2f5; - padding: 10px; - .top { - margin-bottom: 20px; - height: calc(100% - 30px); - background: #fff; + overflow: hidden; + .filter{ + height: 80px; + display: flex; + align-items: center; + padding: 12px 20px 0 20px; + &-card{ + height: 80px; + display: flex; + align-items: center; + flex: 1; + border-radius: 12px; + background-color: #fff; + } + } + .body{ + box-sizing: border-box; + padding: 10px 20px; + border-radius: 12px; + height: calc(100% - 92px); + .body-card { + background-color: #fff; + border-radius: 12px; + height: 100%; + overflow: hidden; + } + .supplier-search { display: flex; align-items: center; @@ -182,7 +225,8 @@ } } .list-view { - height: calc(100% - 120px); + height: calc(100% - 60px); + overflow: hidden; } .btn-pager { display: flex; -- Gitblit v1.8.0