From c7b4b9a2f4c0f05aeb60a9e3f5fba5d9a3676f3f Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 18 八月 2025 16:22:42 +0800
Subject: [PATCH] 中强恒兴设备管理页面添加

---
 src/views/equipmentManagement/brand/index.vue |  217 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 217 insertions(+), 0 deletions(-)

diff --git a/src/views/equipmentManagement/brand/index.vue b/src/views/equipmentManagement/brand/index.vue
new file mode 100644
index 0000000..6607cc8
--- /dev/null
+++ b/src/views/equipmentManagement/brand/index.vue
@@ -0,0 +1,217 @@
+<template>
+  <div class="app-container">
+    <el-form :model="filters" :inline="true">
+      <el-form-item label="鍝佺墝鍚嶇О/鍥藉">
+        <el-input
+          v-model="filters.name"
+          style="width: 240px"
+          placeholder="璇疯緭鍏ュ叧閿瘝"
+          clearable
+          prefix-icon="Search"
+          @change="getTableData"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="getTableData">鎼滅储</el-button>
+        <el-button @click="resetFilters">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <div class="table_list">
+      <div class="actions">
+        <div></div>
+        <div>
+          <el-button type="primary" @click="openAdd" icon="Plus"> 鏂板 </el-button>
+          <el-button
+            type="danger"
+            icon="Delete"
+            :disabled="multipleSelection.length <= 0"
+            @click="handleBatchDelete"
+          >鎵归噺鍒犻櫎</el-button>
+        </div>
+      </div>
+
+      <PIMTable
+        rowKey="id"
+        isSelection
+        :column="columns"
+        :tableData="dataList"
+        :page="{
+          current: pagination.currentPage,
+          size: pagination.pageSize,
+          total: pagination.total,
+        }"
+        @selection-change="handleSelectionChange"
+        @pagination="changePage"
+      >
+      </PIMTable>
+    </div>
+
+    <el-dialog v-model="visible" :title="dialogTitle" width="520px" destroy-on-close>
+      <el-form :model="form" ref="formRef" :rules="rules" label-width="90px">
+        <el-form-item label="鍝佺墝鍚嶇О" prop="name">
+          <el-input v-model="form.name" placeholder="璇疯緭鍏ュ搧鐗屽悕绉�" />
+        </el-form-item>
+        <el-form-item label="鎵�灞炲浗瀹�" prop="country">
+          <el-input v-model="form.country" placeholder="璇疯緭鍏ュ浗瀹�/鍦板尯" />
+        </el-form-item>
+        <el-form-item label="鎻忚堪" prop="description">
+          <el-input v-model="form.description" type="textarea" :rows="3" placeholder="鍙~鍐欏搧鐗岀畝浠�" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <el-button @click="visible = false">鍙栨秷</el-button>
+        <el-button type="primary" @click="handleSubmit">纭畾</el-button>
+      </template>
+    </el-dialog>
+  </div>
+  
+</template>
+
+<script setup>
+import { ref, getCurrentInstance, onMounted } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { usePaginationApi } from '@/hooks/usePaginationApi'
+import { getBrandPage, addBrand, editBrand, delBrand } from '@/api/equipmentManagement/brand'
+
+defineOptions({ name: '璁惧鍝佺墝绠$悊' })
+
+const { proxy } = getCurrentInstance()
+
+const multipleSelection = ref([])
+const formRef = ref()
+const visible = ref(false)
+const dialogTitle = ref('鏂板鍝佺墝')
+const form = ref({ id: undefined, name: '', country: '', description: '' })
+
+const rules = {
+  name: [{ required: true, message: '璇疯緭鍏ュ搧鐗屽悕绉�', trigger: 'blur' }],
+  country: [{ required: true, message: '璇疯緭鍏ユ墍灞炲浗瀹�', trigger: 'blur' }]
+}
+
+const {
+  filters,
+  columns,
+  dataList,
+  pagination,
+  getTableData,
+  resetFilters,
+  onCurrentChange,
+} = usePaginationApi(
+  getBrandPage,
+  { name: undefined },
+  [
+    { label: '鍝佺墝鍚嶇О', align: 'center', prop: 'name' },
+    { label: '鎵�灞炲浗瀹�', align: 'center', prop: 'country' },
+    { label: '鎻忚堪', align: 'center', prop: 'description' },
+    { label: '鍒涘缓鏃堕棿', align: 'center', prop: 'createdAt' },
+    {
+      dataType: 'action',
+      label: '鎿嶄綔',
+      align: 'center',
+      fixed: 'right',
+      width: 140,
+      operation: [
+        {
+          name: '缂栬緫',
+          type: 'text',
+          clickFun: (row) => openEdit(row),
+        },
+        {
+          name: '鍒犻櫎',
+          type: 'text',
+          clickFun: (row) => handleDelete(row.id),
+        }
+      ]
+    }
+  ]
+)
+
+const handleSelectionChange = (list) => {
+  multipleSelection.value = list
+}
+
+const changePage = ({ page, limit }) => {
+  pagination.currentPage = page
+  pagination.pageSize = limit
+  onCurrentChange(page)
+}
+
+function resetForm() {
+  form.value = { id: undefined, name: '', country: '', description: '' }
+}
+
+function openAdd() {
+  resetForm()
+  dialogTitle.value = '鏂板鍝佺墝'
+  visible.value = true
+}
+
+function openEdit(row) {
+  form.value = { id: row.id, name: row.name, country: row.country, description: row.description }
+  dialogTitle.value = '缂栬緫鍝佺墝'
+  visible.value = true
+}
+
+function handleSubmit() {
+  formRef.value.validate(async (valid) => {
+    if (!valid) return
+    const isEdit = Boolean(form.value.id)
+    const api = isEdit ? editBrand : addBrand
+    const { code, msg } = await api({ ...form.value })
+    if (code === 200) {
+      ElMessage.success(isEdit ? '淇敼鎴愬姛' : '鏂板鎴愬姛')
+      visible.value = false
+      getTableData()
+    } else {
+      ElMessage.error(msg || '鎿嶄綔澶辫触')
+    }
+  })
+}
+
+function handleDelete(id) {
+  ElMessageBox.confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ュ搧鐗�, 鏄惁缁х画?', '鎻愮ず', {
+    confirmButtonText: '纭畾',
+    cancelButtonText: '鍙栨秷',
+    type: 'warning',
+  }).then(async () => {
+    const { code } = await delBrand(id)
+    if (code === 200) {
+      ElMessage.success('鍒犻櫎鎴愬姛')
+      getTableData()
+    }
+  })
+}
+
+function handleBatchDelete() {
+  if (multipleSelection.value.length === 0) return
+  ElMessageBox.confirm('灏嗗垹闄ら�変腑鐨勫搧鐗岋紝鏄惁缁х画锛�', '鎻愮ず', {
+    confirmButtonText: '纭畾',
+    cancelButtonText: '鍙栨秷',
+    type: 'warning',
+  }).then(async () => {
+    const ids = multipleSelection.value.map((i) => i.id)
+    const { code } = await delBrand(ids)
+    if (code === 200) {
+      ElMessage.success('鍒犻櫎鎴愬姛')
+      getTableData()
+    }
+  })
+}
+
+onMounted(() => {
+  getTableData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.table_list { margin-top: unset; }
+.actions {
+  display: flex;
+  justify-content: space-between;
+  margin-bottom: 10px;
+}
+</style>
+
+

--
Gitblit v1.9.3