From fcfd8688b635646f08880082a59a26b56dab540d Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 16 三月 2026 18:01:21 +0800
Subject: [PATCH] 军泰伟业 1.发货台账逻辑改为可分批发货
---
src/views/basicData/product/index.vue | 654 ++++++++++++++++++++++-------------------------------------
1 files changed, 245 insertions(+), 409 deletions(-)
diff --git a/src/views/basicData/product/index.vue b/src/views/basicData/product/index.vue
index cc1e1b5..24a4659 100644
--- a/src/views/basicData/product/index.vue
+++ b/src/views/basicData/product/index.vue
@@ -1,93 +1,60 @@
<template>
<div class="app-container product-view">
- <div class="left">
- <div class="left-header">
- <el-input
- v-model="search"
- style="width: 210px"
- placeholder="杈撳叆鍏抽敭瀛楄繘琛屾悳绱�"
- @change="searchFilter"
- @clear="searchFilter"
- clearable
- prefix-icon="Search"
- />
- <div class="button-group">
- <el-button
- type="primary"
- @click="openProDia('addOne')"
- >鏂板浜у搧澶х被</el-button>
- <el-button
- type="success"
- @click="handleImport"
- icon="Upload"
- >瀵煎叆</el-button>
+ <div class="main-content">
+ <div class="search-section">
+ <el-form :inline="true" :model="queryForm" class="search-form">
+ <el-form-item label="浜у搧鍚嶇О">
+ <el-input
+ v-model="queryForm.productName"
+ placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�"
+ clearable
+ style="width: 200px"
+ @keyup.enter="handleSearch"
+ />
+ </el-form-item>
+ <el-form-item label="鍥剧焊缂栧彿">
+ <el-input
+ v-model="queryForm.model"
+ placeholder="璇疯緭鍏ュ浘绾哥紪鍙�"
+ clearable
+ style="width: 200px"
+ @keyup.enter="handleSearch"
+ />
+ </el-form-item>
+ <el-form-item label="浜у搧灞炴��">
+ <el-select
+ v-model="queryForm.productType"
+ placeholder="璇烽�夋嫨浜у搧灞炴��"
+ clearable
+ style="width: 150px"
+ >
+ <el-option label="鑷埗" :value="1" />
+ <el-option label="澶栬喘" :value="2" />
+ <el-option label="濮斿" :value="3" />
+ </el-select>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" @click="handleSearch" icon="Search">
+ 鎼滅储
+ </el-button>
+ <el-button @click="handleReset" icon="Refresh">
+ 閲嶇疆
+ </el-button>
+ </el-form-item>
+ </el-form>
+ <div class="action-buttons">
+ <el-button type="primary" @click="openModelDia('add')" icon="Plus">
+ 鏂板浜у搧
+ </el-button>
+ <el-button type="success" @click="handleImport" icon="Upload">
+ 瀵煎叆
+ </el-button>
+ <el-button type="danger" @click="handleDelete" icon="Delete" plain>
+ 鍒犻櫎
+ </el-button>
</div>
</div>
- <div ref="containerRef">
- <el-tree
- ref="tree"
- v-loading="treeLoad"
- :data="list"
- @node-click="handleNodeClick"
- :expand-on-click-node="false"
- :default-expanded-keys="expandedKeys"
- :filter-node-method="filterNode"
- :props="{ children: 'children', label: 'label' }"
- highlight-current
- node-key="id"
- class="product-tree-scroll"
- style="height: calc(100vh - 190px); overflow-y: auto"
- >
- <template #default="{ node, data }">
- <div class="custom-tree-node">
- <span class="tree-node-content">
- <el-icon class="orange-icon">
- <component :is="data.children && data.children.length > 0
- ? node.expanded ? 'FolderOpened' : 'Folder' : 'Tickets'" />
- </el-icon>
- <span class="tree-node-label">{{ data.label }}</span>
- </span>
- <div>
- <el-button
- type="primary"
- link
- @click="openProDia('edit', data)"
- >
- 缂栬緫
- </el-button>
- <el-button type="primary" link @click="openProDia('add', data)" :disabled="node.level >= 3">
- 娣诲姞浜у搧
- </el-button>
- <el-button
- v-if="!node.childNodes.length"
- style="margin-left: 4px"
- type="danger"
- link
- @click="remove(node, data)"
- >
- 鍒犻櫎
- </el-button>
- </div>
- </div>
- </template>
- </el-tree>
- </div>
- </div>
- <div class="right">
- <div style="margin-bottom: 10px" v-if="isShowButton">
- <el-button type="primary" @click="openModelDia('add')">
- 鏂板瑙勬牸鍨嬪彿
- </el-button>
- <ImportExcel @uploadSuccess="getModelList" />
- <el-button
- type="danger"
- @click="handleDelete"
- style="margin-left: 10px"
- plain
- >
- 鍒犻櫎
- </el-button>
- </div>
+
<PIMTable
rowKey="id"
:column="tableColumn"
@@ -99,94 +66,72 @@
@pagination="pagination"
></PIMTable>
</div>
- <el-dialog v-model="productDia" title="浜у搧" width="400px" @keydown.enter.prevent>
- <el-form
- :model="form"
- label-width="140px"
- label-position="top"
- :rules="rules"
- ref="formRef"
- >
- <el-row :gutter="30">
- <el-col :span="24">
- <el-form-item label="浜у搧鍚嶇О锛�" prop="productName">
- <el-input
- v-model="form.productName"
- placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�"
- maxlength="20"
- show-word-limit
- clearable
- @keydown.enter.prevent
- />
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <template #footer>
- <div class="dialog-footer">
- <el-button type="primary" @click="submitForm">纭</el-button>
- <el-button @click="closeProDia">鍙栨秷</el-button>
- </div>
- </template>
- </el-dialog>
- <el-dialog v-model="modelDia"
- title="瑙勬牸鍨嬪彿"
- width="400px"
+
+ <FormDialog
+ v-model="modelDia"
+ title="浜у搧淇℃伅"
+ width="500px"
@close="closeModelDia"
- @keydown.enter.prevent
+ @confirm="submitModelForm"
>
<el-form
:model="modelForm"
- label-width="140px"
- label-position="top"
+ label-width="100px"
:rules="modelRules"
ref="modelFormRef"
>
- <el-row>
- <el-col :span="24">
- <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="model">
- <el-input
- v-model="modelForm.model"
- placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
- clearable
- @keydown.enter.prevent
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="24">
- <el-form-item label="鍥剧焊缂栧彿锛�" prop="unit">
- <el-input
- v-model="modelForm.drawingNumber"
- placeholder="璇疯緭鍏ュ浘绾哥紪鍙�"
- clearable
- @keydown.enter.prevent
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="24">
- <el-form-item label="鍗曚綅锛�" prop="unit">
- <el-input
- v-model="modelForm.unit"
- placeholder="璇疯緭鍏ュ崟浣�"
- clearable
- @keydown.enter.prevent
- />
- </el-form-item>
- </el-col>
- </el-row>
+ <el-form-item label="浜у搧鍚嶇О" prop="productName">
+ <el-input
+ v-model="modelForm.productName"
+ placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�"
+ clearable
+ maxlength="50"
+ show-word-limit
+ />
+ </el-form-item>
+ <el-form-item label="鍥剧焊缂栧彿" prop="model">
+ <el-input
+ v-model="modelForm.model"
+ placeholder="璇疯緭鍏ュ浘绾哥紪鍙�"
+ clearable
+ />
+ </el-form-item>
+ <el-form-item label="瑙勬牸鍨嬪彿" prop="drawingNumber">
+ <el-input
+ v-model="modelForm.drawingNumber"
+ placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
+ clearable
+ />
+ </el-form-item>
+ <el-form-item label="鍗曚綅" prop="unit">
+ <el-input
+ v-model="modelForm.unit"
+ placeholder="璇疯緭鍏ュ崟浣�"
+ clearable
+ />
+ </el-form-item>
+ <el-form-item label="浜у搧灞炴��" prop="productType">
+ <el-select
+ v-model="modelForm.productType"
+ placeholder="璇烽�夋嫨浜у搧灞炴��"
+ clearable
+ style="width: 100%"
+ >
+ <el-option label="鑷埗" :value="1" />
+ <el-option label="澶栬喘" :value="2" />
+ <el-option label="濮斿" :value="3" />
+ </el-select>
+ </el-form-item>
</el-form>
- <template #footer>
- <div class="dialog-footer">
- <el-button type="primary" @click="submitModelForm">纭</el-button>
- <el-button @click="closeModelDia">鍙栨秷</el-button>
- </div>
- </template>
- </el-dialog>
- <el-dialog v-model="importDia" title="浜у搧瀵煎叆" width="600px">
+ </FormDialog>
+
+ <FormDialog
+ v-model="importDia"
+ title="浜у搧瀵煎叆"
+ width="600px"
+ @cancel="importDia = false"
+ @confirm="submitImport"
+ >
<el-upload
ref="importUploadRef"
:limit="1"
@@ -212,65 +157,84 @@
</div>
</template>
</el-upload>
- <template #footer>
- <div class="dialog-footer">
- <el-button type="primary" @click="submitImport">纭瀵煎叆</el-button>
- <el-button @click="importDia = false">鍙栨秷</el-button>
- </div>
- </template>
- </el-dialog>
+ </FormDialog>
</div>
</template>
<script setup>
-import { ref } from "vue";
+import { ref, reactive } from "vue";
import { ElMessageBox } from "element-plus";
import { getToken } from "@/utils/auth.js";
import { FileUpload } from "@/components/Upload";
+import FormDialog from "@/components/Dialog/FormDialog.vue";
import {
- addOrEditProduct,
addOrEditProductModel,
delProduct,
- delProductModel,
- modelListPage,
- productTreeList,
+ productListPage,
downloadTemplate,
} from "@/api/basicData/product.js";
import ImportExcel from "./ImportExcel/index.vue";
const { proxy } = getCurrentInstance();
-const tree = ref(null);
-const containerRef = ref(null);
const importUploadRef = ref(null);
-const productDia = ref(false);
const modelDia = ref(false);
const importDia = ref(false);
const modelOperationType = ref("");
-const search = ref("");
-const currentId = ref("");
-const currentParentId = ref("");
-const operationType = ref("");
-const treeLoad = ref(false);
-const list = ref([]);
-const expandedKeys = ref([]);
+const tableData = ref([]);
+const tableLoading = ref(false);
+const selectedRows = ref([]);
+const modelFormRef = ref();
+
+const queryForm = reactive({
+ productName: "",
+ model: "",
+ productType: null,
+});
+
+const page = reactive({
+ current: 1,
+ size: 50,
+ total: 0,
+});
+
const tableColumn = ref([
{
- label: "瑙勬牸鍨嬪彿",
- prop: "model",
+ label: "浜у搧鍚嶇О",
+ prop: "productName",
+ minWidth: 200,
},
{
label: "鍥剧焊缂栧彿",
+ prop: "model",
+ minWidth: 150,
+ },
+ {
+ label: "瑙勬牸鍨嬪彿",
prop: "drawingNumber",
+ minWidth: 150,
},
{
label: "鍗曚綅",
prop: "unit",
+ minWidth: 100,
+ },
+ {
+ label: "浜у搧灞炴��",
+ prop: "productType",
+ width: 100,
+ dataType: "tag",
+ formatData: (v) => ({ "1": "鑷埗", "2": "澶栬喘", "3": "濮斿" }[String(v)] ?? v),
+ formatType: (v) => {
+ const typeMap = { "1": "success", "2": "warning", "3": "info" };
+ return typeMap[String(v)] || "info";
+ },
},
{
dataType: "action",
label: "鎿嶄綔",
align: "center",
+ width: 100,
operation: [
{
name: "缂栬緫",
@@ -282,37 +246,27 @@
],
},
]);
-const tableData = ref([]);
-const tableLoading = ref(false);
-const isShowButton = ref(false);
-const selectedRows = ref([]);
-const page = reactive({
- current: 1,
- size: 10,
- total: 0,
-});
+
const data = reactive({
- form: {
- productName: "",
- },
- rules: {
- productName: [
- { required: true, message: "璇疯緭鍏�", trigger: "blur" },
- { max: 20, message: "浜у搧鍚嶇О涓嶈兘瓒呰繃20涓瓧绗�", trigger: "blur" },
- ],
- },
modelForm: {
+ productName: "",
model: "",
unit: "",
drawingNumber: "",
+ productType: null,
},
modelRules: {
- model: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- unit: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- drawingNumber: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+ productName: [
+ { required: true, message: "璇疯緭鍏ヤ骇鍝佸悕绉�", trigger: "blur" },
+ { max: 50, message: "浜у搧鍚嶇О涓嶈兘瓒呰繃50涓瓧绗�", trigger: "blur" },
+ ],
+ model: [{ required: true, message: "璇疯緭鍏ュ浘绾哥紪鍙�", trigger: "blur" }],
+ unit: [{ required: true, message: "璇疯緭鍏ュ崟浣�", trigger: "blur" }],
+ drawingNumber: [],
+ productType: [{ required: true, message: "璇烽�夋嫨浜у搧灞炴��", trigger: "change" }],
},
});
-const { form, rules, modelForm, modelRules } = toRefs(data);
+const { modelForm, modelRules } = toRefs(data);
const importUpload = reactive({
title: "浜у搧瀵煎叆",
@@ -348,7 +302,7 @@
if (importUploadRef.value) {
importUploadRef.value.clearFiles();
}
- getProductTreeList();
+ getModelList();
} else {
proxy.$modal.msgError(response.msg || "瀵煎叆澶辫触");
}
@@ -360,111 +314,36 @@
}
});
-// 鏌ヨ浜у搧鏍�
-const getProductTreeList = () => {
- treeLoad.value = true;
- productTreeList()
- .then((res) => {
- list.value = res;
- list.value.forEach((a) => {
- expandedKeys.value.push(a.label);
- });
- treeLoad.value = false;
- })
- .catch((err) => {
- treeLoad.value = false;
- });
+const handleSearch = () => {
+ page.current = 1;
+ getModelList();
};
-// 杩囨护浜у搧鏍�
-const searchFilter = () => {
- proxy.$refs.tree.filter(search.value);
+
+const handleReset = () => {
+ queryForm.productName = "";
+ queryForm.model = "";
+ queryForm.productType = null;
+ page.current = 1;
+ getModelList();
};
-// 鎵撳紑浜у搧寮规
-const openProDia = (type, data) => {
- operationType.value = type;
- productDia.value = true;
- form.value.productName = "";
- if (type === "edit") {
- form.value.productName = data.productName;
- }
-};
-// 鎵撳紑瑙勬牸鍨嬪彿寮规
+
const openModelDia = (type, data) => {
modelOperationType.value = type;
modelDia.value = true;
+ modelForm.value.productName = "";
modelForm.value.model = "";
modelForm.value.id = "";
+ modelForm.value.unit = "";
+ modelForm.value.drawingNumber = "";
+ modelForm.value.productType = null;
if (type === "edit") {
modelForm.value = { ...data };
}
};
-// 鎻愪氦浜у搧鍚嶇О淇敼
-const submitForm = () => {
- proxy.$refs.formRef.validate((valid) => {
- if (valid) {
- if (operationType.value === "add") {
- form.value.parentId = currentId.value;
- form.value.id = "";
- } else if (operationType.value === "addOne") {
- form.value.id = "";
- form.value.parentId = "";
- } else {
- form.value.id = currentId.value;
- form.value.parentId = "";
- }
- addOrEditProduct(form.value).then((res) => {
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- closeProDia();
- getProductTreeList();
- });
- }
- });
-};
-// 鍏抽棴浜у搧寮规
-const closeProDia = () => {
- proxy.$refs.formRef.resetFields();
- productDia.value = false;
-};
-// 鍒犻櫎浜у搧
-const remove = (node, data) => {
- let ids = [];
- ids.push(data.id);
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- tableLoading.value = true;
- delProduct(ids)
- .then((res) => {
- proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- getProductTreeList();
- })
- .finally(() => {
- tableLoading.value = false;
- });
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-// 閫夋嫨浜у搧
-const handleNodeClick = (val, node, el) => {
- // 鍒ゆ柇鏄惁涓哄彾瀛愯妭鐐�
- isShowButton.value = !(val.children && val.children.length > 0);
- // 鍙湁鍙跺瓙鑺傜偣鎵嶆墽琛屼互涓嬮�昏緫
- currentId.value = val.id;
- currentParentId.value = val.parentId;
- getModelList();
-};
-
-// 鎻愪氦瑙勬牸鍨嬪彿淇敼
const submitModelForm = () => {
- proxy.$refs.modelFormRef.validate((valid) => {
+ modelFormRef.value.validate((valid) => {
if (valid) {
- modelForm.value.productId = currentId.value;
addOrEditProductModel(modelForm.value).then((res) => {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
closeModelDia();
@@ -473,36 +352,39 @@
}
});
};
-// 鍏抽棴鍨嬪彿寮规
+
const closeModelDia = () => {
- proxy.$refs.modelFormRef.resetFields();
+ modelFormRef.value.resetFields();
modelDia.value = false;
};
-// 琛ㄦ牸閫夋嫨鏁版嵁
+
const handleSelectionChange = (selection) => {
selectedRows.value = selection;
};
-// 鏌ヨ瑙勬牸鍨嬪彿
const pagination = (obj) => {
page.current = obj.page;
page.size = obj.limit;
getModelList();
};
+
const getModelList = () => {
tableLoading.value = true;
- modelListPage({
- id: currentId.value,
+ productListPage({
+ productName: queryForm.productName.trim(),
+ model: queryForm.model.trim(),
+ productType: queryForm.productType,
current: page.current,
size: page.size,
}).then((res) => {
- console.log("res", res);
- tableData.value = res.records;
- page.total = res.total;
+ tableData.value = res.data.records;
+ page.total = res.data.total;
+ tableLoading.value = false;
+ }).catch(() => {
tableLoading.value = false;
});
};
-// 鍒犻櫎瑙勬牸鍨嬪彿
+
const handleDelete = () => {
let ids = [];
if (selectedRows.value.length > 0) {
@@ -518,7 +400,7 @@
})
.then(() => {
tableLoading.value = true;
- delProductModel(ids)
+ delProduct(ids)
.then((res) => {
proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
getModelList();
@@ -530,42 +412,6 @@
.catch(() => {
proxy.$modal.msg("宸插彇娑�");
});
-};
-// 璋冪敤tree杩囨护鏂规硶 涓枃鑻辫繃婊�
-const filterNode = (value, data, node) => {
- if (!value) {
- //濡傛灉鏁版嵁涓虹┖锛屽垯杩斿洖true,鏄剧ず鎵�鏈夌殑鏁版嵁椤�
- return true;
- }
- // 鏌ヨ鍒楄〃鏄惁鏈夊尮閰嶆暟鎹紝灏嗗�煎皬鍐欙紝鍖归厤鑻辨枃鏁版嵁
- let val = value.toLowerCase();
- return chooseNode(val, data, node); // 璋冪敤杩囨护浜屽眰鏂规硶
-};
-// 杩囨护鐖惰妭鐐� / 瀛愯妭鐐� (濡傛灉杈撳叆鐨勫弬鏁版槸鐖惰妭鐐逛笖鑳藉尮閰嶏紝鍒欒繑鍥炶鑺傜偣浠ュ強鍏朵笅鐨勬墍鏈夊瓙鑺傜偣锛涘鏋滃弬鏁版槸瀛愯妭鐐癸紝鍒欒繑鍥炶鑺傜偣鐨勭埗鑺傜偣銆俷ame鏄腑鏂囧瓧绗︼紝enName鏄嫳鏂囧瓧绗�.
-const chooseNode = (value, data, node) => {
- if (data.label.indexOf(value) !== -1) {
- return true;
- }
- const level = node.level;
- // 濡傛灉浼犲叆鐨勮妭鐐规湰韬氨鏄竴绾ц妭鐐瑰氨涓嶇敤鏍¢獙浜�
- if (level === 1) {
- return false;
- }
- // 鍏堝彇褰撳墠鑺傜偣鐨勭埗鑺傜偣
- let parentData = node.parent;
- // 閬嶅巻褰撳墠鑺傜偣鐨勭埗鑺傜偣
- let index = 0;
- while (index < level - 1) {
- // 濡傛灉鍖归厤鍒扮洿鎺ヨ繑鍥烇紝姝ゅname鍊兼槸涓枃瀛楃锛宔nName鏄嫳鏂囧瓧绗︺�傚垽鏂尮閰嶄腑鑻辨枃杩囨护
- if (parentData.data.label.indexOf(value) !== -1) {
- return true;
- }
- // 鍚﹀垯鐨勮瘽鍐嶅線涓婁竴灞傚仛鍖归厤
- parentData = parentData.parent;
- index++;
- }
- // 娌″尮閰嶅埌杩斿洖false
- return false;
};
const handleImport = () => {
@@ -583,82 +429,72 @@
proxy.download("/basic/product/downloadTemplate", {}, "浜у搧瀵煎叆妯℃澘.xlsx");
};
-getProductTreeList();
+getModelList();
</script>
<style scoped>
.product-view {
- display: flex;
+ padding: 20px;
+ background: #f5f7fa;
+ min-height: 100vh;
}
-.left {
- width: 450px;
- min-width: 450px;
- padding: 16px;
+
+.main-content {
background: #ffffff;
+ border-radius: 8px;
+ padding: 24px;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
}
-.left-header {
+
+.search-section {
+ margin-bottom: 20px;
+ padding-bottom: 20px;
+ border-bottom: 1px solid #e4e7ed;
+}
+
+.search-form {
display: flex;
+ flex-wrap: wrap;
+ gap: 12px;
align-items: center;
- justify-content: space-between;
- margin-bottom: 16px;
}
-.button-group {
+
+.search-form :deep(.el-form-item) {
+ margin-bottom: 12px;
+}
+
+.action-buttons {
display: flex;
gap: 10px;
+ margin-top: 16px;
}
-.right {
- flex: 1;
- min-width: 0;
- padding: 16px;
- margin-left: 20px;
- background: #ffffff;
+
+:deep(.el-dialog__body) {
+ padding: 20px 24px;
}
-.custom-tree-node {
- flex: 1;
- min-width: 0;
- display: flex;
- align-items: center;
- justify-content: space-between;
- font-size: 14px;
- padding-right: 8px;
+
+:deep(.el-form-item__label) {
+ font-weight: 500;
+ color: #303133;
}
-.tree-node-content {
- flex: 1;
- min-width: 0;
- display: flex;
- align-items: center;
- height: 100%;
- overflow: hidden;
-}
-.tree-node-content .orange-icon {
- flex-shrink: 0;
-}
-.tree-node-label {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.orange-icon {
- color: orange;
- font-size: 18px;
- margin-right: 8px; /* 鍥炬爣涓庢枃瀛椾箣闂村姞鐐归棿璺� */
-}
-.product-tree-scroll {
- scrollbar-width: thin;
- scrollbar-color: #c0c4cc #f5f7fa;
-}
-.product-tree-scroll::-webkit-scrollbar {
- width: 8px;
-}
-.product-tree-scroll::-webkit-scrollbar-track {
- background: #f5f7fa;
+
+:deep(.el-input__inner) {
border-radius: 4px;
}
-.product-tree-scroll::-webkit-scrollbar-thumb {
- background: #c0c4cc;
+
+:deep(.el-button) {
border-radius: 4px;
+ font-weight: 500;
}
-.product-tree-scroll::-webkit-scrollbar-thumb:hover {
- background: #909399;
+
+:deep(.el-upload-dragger) {
+ border-radius: 8px;
+ border: 2px dashed #dcdfe6;
+ transition: all 0.3s;
+}
+
+:deep(.el-upload-dragger:hover) {
+ border-color: #409eff;
+ background-color: #f5f7fa;
}
</style>
--
Gitblit v1.9.3