kllay 16 часов назад
Родитель
Сommit
afbe75fbc5

+ 0 - 6
src/views/system/borrow/index.vue

@@ -86,12 +86,6 @@ onMounted(() => {
 	window.addEventListener('borrow-view', handleView);
 	window.addEventListener('borrow-edit', handleEdit);
 	window.addEventListener('borrow-remove', handleRemove);
-	// 动态覆盖 actionbar.add 的 onClick
-	// if (crudBinding.value.actionbar?.buttons?.add) {
-	// 	crudBinding.value.actionbar.buttons.add.onClick = () => {
-	// 		showBorrowTypeDialog.value = true;
-	// 	};
-	// }
 	// 创建借用单按钮
 	function insertButton() {
 		const fsActionbar = document.querySelector('.borrow-page .fs-actionbar');

+ 33 - 0
src/views/system/screenconsole/component/InboundOrders.vue

@@ -0,0 +1,33 @@
+<template>
+    <div class="table-section">
+      <div class="table-title">待入库订单</div>
+      <el-table :data="orders" border style="width: 100%">
+        <el-table-column prop="order_no" label="订单编号" />
+        <el-table-column prop="warehouse" label="仓库名称" />
+        <el-table-column prop="created_at" label="下单时间" />
+      </el-table>
+    </div>
+  </template>
+  
+  <script setup lang="ts" name="InboundOrders">
+  const orders = [
+    { order_no: 'ORD001', warehouse: '教学楼A仓库', created_at: '2025-07-18 09:00' },
+    { order_no: 'ORD002', warehouse: '教学楼B仓库', created_at: '2025-07-18 10:30' },
+    { order_no: 'ORD003', warehouse: '实验楼仓库', created_at: '2025-07-18 11:15' },
+    { order_no: 'ORD004', warehouse: '图书馆仓库', created_at: '2025-07-18 13:00' },
+    { order_no: 'ORD005', warehouse: '主楼仓库', created_at: '2025-07-18 14:45' },
+    { order_no: 'ORD006', warehouse: '教学楼A仓库', created_at: '2025-07-18 15:30' },
+  ];
+  </script>
+  
+  <style scoped>
+  .table-section {
+    margin-top: 20px;
+  }
+  .table-title {
+    font-size: 16px;
+    font-weight: bold;
+    margin-bottom: 10px;
+  }
+  </style>
+  

+ 95 - 0
src/views/system/screenconsole/component/InfoCards.vue

@@ -0,0 +1,95 @@
+<template>
+  <div class="info-cards">
+    <div class="info-title">
+      数据简报
+    </div>
+    <div class="custom-line"></div>
+    <div class="card-grid">
+      
+      <div
+        v-for="(item, index) in infoList"
+        :key="index"
+        class="card"
+        @click="handleClick(item)"
+      >
+      <el-icon :size="40" class="card-icon">
+        <component :is="item.icon" />
+      </el-icon>
+
+        <div class="card-value">{{ item.value }}</div>
+        <div class="card-label">{{ item.label }}</div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts"  name="InfoCards">
+import {
+  Coin, Box, Document, Avatar, Folder,
+  Monitor, ShoppingCart, User, Setting, Tools
+} from '@element-plus/icons-vue'
+
+const infoList = [
+  { label: '借用数', value: 195, icon: Coin },
+  { label: '设备柜', value: 15, icon: Box },
+  { label: '审核数', value: 14, icon: Document },
+  { label: '学生数', value: 114, icon: Avatar },
+  { label: '盘点数', value: 3, icon: Folder },
+  { label: '设备数', value: 95, icon: Monitor },
+  { label: '仓库数', value: 3, icon: ShoppingCart },
+  { label: '库位数', value: 5, icon: Setting },
+  { label: '管理员', value: 10, icon: User },
+  { label: '维修数', value: 10, icon: Tools },
+];
+function handleClick(item: any) {
+  console.log('点击信息卡片:', item.label);
+}
+</script>
+
+<style scoped>
+.custom-line {
+  height: 1px;
+  background-color: #ccc;
+  width: 100%;
+  margin: 10px 0;
+}
+
+.info-title{
+  padding-left: 10%;
+  padding-top:10px;
+  font-size: 30px;
+}
+.info-cards{
+  background: #fff;
+  height: 400px;
+}
+.card-grid {
+  padding:30px;
+  display: flex;
+  flex-wrap: wrap;
+  gap: 15px;
+}
+.card {
+  width: calc(20% - 12px); 
+  align-items: center;
+  text-align: center;
+  padding: 10px;
+  cursor: pointer;
+  box-sizing: border-box;
+}
+.card-icon {
+  width: 40px;
+  height: 40px;
+  margin-bottom: 8px;
+}
+.card-value {
+  font-size: 20px;
+  font-weight: bold;
+  color: #67C23A;
+}
+.card-label {
+  font-size: 14px;
+  color: #666;
+  margin-top: 4px;
+}
+</style>

+ 95 - 0
src/views/system/screenconsole/component/StatusCards.vue

@@ -0,0 +1,95 @@
+<template>
+    <div class="status-cards">
+     <div class="info-title">
+      待处理
+    </div>
+    <div class="custom-line"></div>
+
+    <div class="card-grid">
+        
+      <el-row :gutter="15">
+        <el-col
+          v-for="(item, index) in statusList"
+          :key="index"
+          :xs="24"
+          :sm="8"
+          :md="8"
+          :lg="8"
+        >
+          <div class="card" @click="handleClick(item)">
+            <el-icon :size="40" class="card-icon">
+            <component :is="item.icon" />
+          </el-icon>
+            <div class="card-value">{{ item.value }}</div>
+            <div class="card-label">{{ item.label }}</div>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    </div>
+  </template>
+  
+  <script setup lang="ts" name="StatusCards">
+import {
+  Edit, Refresh, Tools, Box, Folder, Monitor
+} from '@element-plus/icons-vue'
+
+const statusList = [
+  { label: '待审核', value: 2, icon: Edit },
+  { label: '待归还', value: 5, icon: Refresh },
+  { label: '待维修', value: 5, icon: Tools },
+  { label: '待补货', value: 5, icon: Box },
+  { label: '待入库', value: 5, icon: Folder },
+  { label: '待盘点', value: 5, icon: Monitor },
+];
+  
+  function handleClick(item: any) {
+    console.log('点击状态卡片:', item.label);
+  }
+  </script>
+  
+  <style scoped>
+  .custom-line {
+  height: 1px;
+  background-color: #ccc;
+  width: 100%;
+  margin: 10px 0;
+}
+.info-title{
+  padding-left: 10%;
+  padding-top:10px;
+  font-size: 30px;
+}
+  .status-cards{
+    background: #fff;
+    /* padding:30px; */
+    height: 400px;
+  }
+  .card-grid{
+    padding:30px;
+  }
+  .card {
+    align-items: center;
+    text-align: center;
+    padding: 10px;
+    cursor: pointer;
+    box-sizing: border-box;
+    margin-bottom: 10px;
+  }
+  .card-icon {
+    width: 40px;
+    height: 40px;
+    margin-bottom: 8px;
+  }
+  .card-value {
+    font-size: 20px;
+    font-weight: bold;
+    color: #409EFF;
+  }
+  .card-label {
+    font-size: 14px;
+    color: #666;
+    margin-top: 4px;
+  }
+  </style>
+  

+ 30 - 0
src/views/system/screenconsole/component/StockAlerts.vue

@@ -0,0 +1,30 @@
+<template>
+    <div class="table-section">
+      <div class="table-title">库存预警</div>
+      <el-table :data="alerts" border style="width: 100%">
+        <el-table-column prop="product_id" label="商品编号" />
+        <el-table-column prop="product_name" label="商品名称" />
+        <el-table-column prop="stock" label="库存数量" />
+        <el-table-column prop="location" label="库位号" />
+      </el-table>
+    </div>
+  </template>
+  
+  <script setup lang="ts" name="StockAlerts">
+  const alerts = [
+    { product_id: 'P001', product_name: '镜头A', stock: 2, location: 'B-1-01' },
+    { product_id: 'P002', product_name: '三脚架B', stock: 1, location: 'B-1-02' },
+  ];
+  </script>
+  
+  <style scoped>
+  .table-section {
+    margin-top: 20px;
+  }
+  .table-title {
+    font-size: 16px;
+    font-weight: bold;
+    margin-bottom: 10px;
+  }
+  </style>
+  

Разница между файлами не показана из-за своего большого размера
+ 92 - 213
src/views/system/screenconsole/index.vue


+ 1 - 18
src/views/system/storelist/crud.tsx

@@ -6,28 +6,11 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 	const pageRequest = async (query: UserPageQuery) => {
 		return await api.GetList(query);
 	};
-	// const editRequest = async ({ form, row }: EditReq) => {
-	// 	form.id = row.id;
-	// 	return await api.UpdateObj(form);
-	// };
-	// const delRequest = async ({ row }: DelReq) => {
-	// 	return await api.DelObj(row.id);
-	// };
+
 	const addRequest = async ({ form }: AddReq) => {
 		return await api.AddObj(form);
 	};
 
-	/**
-	 * 懒加载
-	 * @param row
-	 * @returns {Promise<unknown>}
-	 */
-	// const loadContentMethod = (tree: any, treeNode: any, resolve: Function) => {
-	// 	pageRequest({ pcode: tree.code }).then((res: APIResponseData) => {
-	// 		resolve(res.data);
-	// 	});
-	// };
-
 	return {
 		crudOptions: {
 			request: {

+ 1 - 33
src/views/system/timetablemanage/crud.tsx

@@ -10,36 +10,13 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 		return await api.GetObj(row.id);
 	};
 
-	
-	// const savekebiao = async ({ form }) => {
-    //     await api.saveCourse(form)
-    //     return { success: true }
-    //   };
 
-	// const editRequest = async ({ form, row }: EditReq) => {
-	// 	form.id = row.id;
-	// 	return await api.UpdateObj(form);
-	// };
-	// const delRequest = async ({ row }: DelReq) => {
-	// 	return await api.DelObj(row.id);
-	// };
 	const addRequest = async ({ form }: AddReq) => {
 		return await api.AddObj(form);
 	};
 
 	let a="test";
 
-	/**
-	 * 懒加载
-	 * @param row
-	 * @returns {Promise<unknown>}
-	 */
-	// const loadContentMethod = (tree: any, treeNode: any, resolve: Function) => {
-	// 	pageRequest({ pcode: tree.code }).then((res: APIResponseData) => {
-	// 		resolve(res.data);
-	// 	});
-	// };
-
 	return {
 		crudOptions: {
 			request: {
@@ -72,16 +49,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 				show: false,
 			},		
 			columns: {
-				// _index: {
-				// 	title: '序号',
-				// 	form: { show: false },
-				// 	column: {
-				// 		type: 'index',
-				// 		align: 'center',
-				// 		width: '70px',
-				// 		columnSetDisabled: true, //禁止在列设置中选择
-				// 	},
-				// },
+
 				classroom:{
 					title:'教室',
 					type:'input',

+ 0 - 13
src/views/system/timetablemanage/index.vue

@@ -141,19 +141,6 @@ function editCourse(course: any) {
 }
 
 
-// function openDialogEdit(course?: any) {
-// 	// eslint-disable-next-line no-console
-// 	console.log('course:::::', course);
-// 	if (!course) {
-// 		dialogRef.value.open({
-// 		class_date: dayjs().format('YYYY-MM-DD'),
-// 		time: 1,
-// 		class_number: 1
-// 		});
-// 	} else {	
-// 		dialogRef.value.open(course);
-// 	}
-// }
 
 function openDialogEdit(course?: any, timeLabel?: string, dayIndex?: number) {
   const courseName = course?.classdetail || '';

Некоторые файлы не были показаны из-за большого количества измененных файлов