甘特图 dhtmlxGantt.js UA实例
摘要:本文介绍了一个基于AngularJS的排产资源占用甘特图系统,包含前端界面展示和后端控制逻辑。系统通过HTML模板实现甘特图展示区域、查询条件表单和数据绑定,使用JavaScript控制器处理数据查询、甘特图初始化和交互逻辑。主要功能包括:1)查询工厂、作业岛类型的排产资源占用情况;2)甘特图展示资源占用时间分布;3)数据字典加载和表单验证。系统采用只读模式展示甘特图,禁用编辑功能,确保数据安全性和稳定性。
1.SchedulingResourceOccupationGanTTScreen-list.html
<link href="Scheduling.SchedulingApp/styles/dhtmlxgantt.css" rel="stylesheet">
<style>.MainCommandActionButton {margin-top: 20px !important;}/* 启用复制功能 */.ui-grid-disable-selection {-webkit-touch-callout: default;-webkit-user-select: text;-khtml-user-select: text;-moz-user-select: text;-ms-user-select: text;user-select: text;cursor: auto;}
</style>
<div id="itemlist" class="content-area content-area-relative" style="height: calc(93% - 30px) !important"><!--查询条件与功能按钮--><div class="col-md-40" style="margin-left: 15px; margin-top: 10px;"><div class="side-panel-property-area-body"><sit-property-grid sit-id="add_form" sit-layout="Horizontal" sit-type="Fluid" sit-mode="edit"sit-columns="5"><sit-property sit-widget="sit-select" sit-value="vm.Status.value" sit-validation="{ required: true }"sit-options="vm.Status.options" sit-to-display="'ItemName'" sit-to-keep="'ItemValue'"style="max-width:200px;">查询类型:</sit-property><sit-property sit-widget="sit-select" sit-value="vm.Factory.value" sit-validation="{ required: true }"sit-options="vm.Factory.options" sit-to-display="'ItemName'" sit-to-keep="'ItemValue'"style="max-width:200px;">工厂:</sit-property><sit-property sit-widget="sit-select" sit-value="vm.OperatingIslandType.value"sit-validation="{ required: false }" sit-options="vm.OperatingIslandType.options"sit-to-display="'ItemName'" sit-to-keep="'ItemValue'" style="max-width:200px;">作业岛类型:</sit-property><sit-property sit-widget="sit-datepicker" sit-value="vm.StartDate" sit-validation="{required: true}"sit-options="vm.dateOptions" sit-format="'yyyy-MM-dd'" sit-read-only="false" style="max-width:150px;">开始日期:</sit-property><sit-property sit-widget="sit-datepicker" sit-value="vm.EndDate" sit-validation="{required: true}"sit-options="vm.dateOptions" sit-format="'yyyy-MM-dd'" sit-read-only="false" style="max-width:150px;">结束日期:</sit-property><sit-command-bar sit-type="action"><sit-command sit-icon="fa-search" sit-type="main" sit-name="com.siemens.customcommand.search"sit-tooltip="" ng-show="false" sit-label=""></sit-command> <sit-command sit-icon="fa-search" sit-type="main" sit-name="com.siemens.customcommand.search" ng-show="vm.validInputs"sit-tooltip="查询" ng-click="vm.searchButtonHandler" sit-label="查询"></sit-command></sit-command-bar></sit-property-grid></div></div><div style="width:100%;margin-top: 5px;"><!-- grid列表 --><div id="listClass" style="width:100%; height: 100%; padding:0px 16px 0 16px; margin-top: 3px;"><div id="divGantt" class="gantt-container" style="height:90vh;"></div></div></div></div>
2.SchedulingResourceOccupationGanTTScreen-list-ctrl.js
(function () {'use strict';angular.module('Scheduling.SchedulingApp.SchedulingResourceOccupationGanTT').config(ListScreenRouteConfig);ListScreenController.$inject = ['Scheduling.SchedulingApp.SchedulingResourceOccupationGanTT.SchedulingResourceOccupationGanTTScreen.service','$state', '$stateParams','$rootScope', '$scope', 'common.services.authentication', 'common.base', 'common.services.logger.service', 'common.widgets.notificationTile.globalService', 'commonService','common.widgets.busyIndicator.service', 'i18nService'];function ListScreenController(dataService, $state, $stateParams, $rootScope, $scope, auth, base, loggerService, notificationService, commonService, busyIndicatorService, i18nService) {//国际化 i18nService.setCurrentLang('zh-cn');var self = this;var logger, rootstate, messageservice, backendService, signalManager;activate();// Initialization functionfunction activate() {logger = loggerService.getModuleLogger('Scheduling.SchedulingApp.SchedulingResourceOccupationGanTT.SchedulingResourceOccupationGanTTScreen');init();registerEvents();}function init() {logger.logDebug('Initializing controller.......');rootstate = 'home.Scheduling_SchedulingApp_SchedulingResourceOccupationGanTT_SchedulingResourceOccupationGanTTScreen';messageservice = base.widgets.messageOverlay.service;backendService = base.services.runtime.backendService;signalManager = base.services.signal.service;//Initialize Model Dataself.selectedItem = null;self.isButtonVisible = false;self.validInputs = false;self.searchButtonHandler = searchButtonHandler;//查询//查询类型self.Status = {value: { 'ItemValue': '作业岛', 'ItemName': '作业岛' },options: [{ 'ItemValue': '作业岛', 'ItemName': '作业岛' },{ 'ItemValue': '班组', 'ItemName': '班组' }]};//工厂self.Factory = {value: { 'ItemValue': '', 'ItemName': '--请选择--' },options: [{ 'ItemValue': '', 'ItemName': '--请选择--' }]};//作业岛类型self.OperatingIslandType = {value: { 'ItemValue': '', 'ItemName': '--请选择--' },options: [{ 'ItemValue': '', 'ItemName': '--请选择--' }]};//作业岛编号self.OperatingIsland = {value: { 'ItemValue': '', 'ItemName': '--请选择--' },options: [{ 'ItemValue': '', 'ItemName': '--请选择--' }]};self.searchParams = {};//获取数据字典GetDectionary();GanttInit();}//查询function searchButtonHandler(clickedCommand) {initGanttData();}//甘特图初始化function GanttInit() {////汉化 gantt.i18n.setLocale("cn");// 完全禁用任务拖动// 1. 初始化配置gantt.config.date_format = "%Y/%m/%d";gantt.config.select_task = false;// 禁用所有交互事件(包括双击编辑)gantt.config.interaction = {click: false,//禁用单击dblclick: false,//禁用双击drag: false,// 禁用任务拖动resize: false 禁用调整大小};// 仅允许查看但禁止修改gantt.config.readonly = true;// 禁用任务点击选中gantt.config.subscales = [{ unit: "day", step: 1, date: "%D" }];// 初始化时禁用任务创建按钮gantt.config.show_add_button = false;gantt.config.toolbar = []; // 清空工具栏gantt.config.show_quick_info = false; // 隐藏快速操作栏gantt.config.show_grid_header = false; // 隐藏表头操作栏gantt.config.columns = [{ name: "text", label: "任务名称", width: 200, tree: true },{ name: "start_date", label: "开始时间", width: 110, align: "center" },{ name: "end_date", label: "结束时间", width: 110, align: "center" },{ name: "duration", label: "持续时间", width: 80, align: "center" }];// 2. 加载数据gantt.init("divGantt");gantt.config.work_time = true; // 必须启用工作时间模式gantt.config.split_tasks = true; // 启用任务分割gantt.config.show_unscheduled = true; // 可选:允许显示未安排的任务段// 或通过事件拦截(更灵活)gantt.attachEvent("onBeforeTaskDrag", function () {return false; // 取消拖动操作});}//甘特图数据绑定function GantData(serverData) {console.log("serverData-------------", JSON.stringify(serverData));if (serverData.length==0) {console.log("serverData-----1111111111111111111--------");//清空数据gantt.clearAll(); }else {console.log("serverData-----22222222222222222--------");gantt.parse({data: serverData,// links: [// { id: 1, source: 2, target: 3, type: "0" } // 0表示"完成-开始"依赖关系// ]});}// 刷新视图使配置生效gantt.render();}//甘特图数据查询function initGanttData() {self.searchParams.FactoryCode = self.Factory.value.ItemName;self.searchParams.OperatingIslandTypeCode = self.OperatingIslandType.value.ItemValue;self.searchParams.TypeCode = self.Status.value.ItemValue;self.searchParams.StartDate = moment(self.StartDate).format('YYYY-MM-DD HH:mm:ss');self.searchParams.EndDate = moment(self.EndDate).format('YYYY-MM-DD HH:mm:ss');dataService.getSchedulingGanttList(self.searchParams).then(function (data) {if ((data) && (data.succeeded)) {//数据绑定 GantData(data.data.ReturnValue);} else {}}, backendService.backendError);// let dd=[// // { id: 1, text: "PM01", start_date: "2025-05-1", end_date: "2025-05-15", progress: 1 },// {// id: 1,// text: "PM01",// start_date: "2025-05-01", end_date: "2025-05-10"// },// { id: 2, text: "APS000001", start_date: "2025-05-01", end_date: "2025-05-4", parent: 1 },// { id: 3, text: "APS000002", start_date: "2025-05-6 23:59:59", end_date: "2025-05-10", parent: 1 },// { id: 4, text: "PM02", start_date: "2025-05-15", duration: 10, parent: 0 },// { id: 5, text: "PM03", start_date: "2025-05-16", end_date: "2025-05-20", parent: 0 }// ];// GantData(dd);}//获取数据字典数据function GetDectionary() {var dicParamObj = {};dicParamObj.ItemCodeList = ['FactoryDic', 'OperatingIslandTypeDic', 'OperatingIslandDic', 'StatusDic'];//可以一次查询多个dataService.getDectionary(dicParamObj).then(function (data) {if ((data) && (data.succeeded)) {var resData = data.data.DictionaryDataList;//工厂var factoryDicArry = resData.filter(t => t.CategoryCode == 'FactoryDic').map(function (item) {return { 'ItemValue': item.ItemValue, 'ItemName': item.ItemName }}).sort((a, b) => a.ItemValue.localeCompare(b.ItemValue));self.Factory.options.push(...factoryDicArry);//作业岛类型var operatingIslandTypeDicArry = resData.filter(t => t.CategoryCode == 'OperatingIslandTypeDic').map(function (item) {return { 'ItemValue': item.ItemValue, 'ItemName': item.ItemName }}).sort((a, b) => a.ItemValue.localeCompare(b.ItemValue));self.OperatingIslandType.options.push(...operatingIslandTypeDicArry);// //作业岛编号// var operatingIslandDicArry = resData.filter(t => t.CategoryCode == 'OperatingIslandDic')// .map(function (item) {// return { 'ItemValue': item.ItemValue, 'ItemName': item.ItemName }// }).sort((a, b) => a.ItemValue.localeCompare(b.ItemValue));// self.OperatingIsland.options.push(...operatingIslandDicArry);} else {self.Factory.options = [];self.OperatingIslandType.options = [];self.OperatingIsland.options = [];}}, backendService.backendError);}function registerEvents() {$scope.$on('sit-property-grid.validity-changed', onPropertyGridValidityChange);}function onPropertyGridValidityChange(event, params) {self.validInputs = params.validity;}}ListScreenRouteConfig.$inject = ['$stateProvider'];function ListScreenRouteConfig($stateProvider) {var moduleStateName = 'home.Scheduling_SchedulingApp_SchedulingResourceOccupationGanTT';var moduleStateUrl = 'Scheduling_SchedulingApp_SchedulingResourceOccupationGanTT';var moduleFolder = 'Scheduling.SchedulingApp/modules/SchedulingResourceOccupationGanTT';var state = {name: moduleStateName + '_SchedulingResourceOccupationGanTTScreen',url: '/' + moduleStateUrl + '_SchedulingResourceOccupationGanTTScreen',views: {'Canvas@': {templateUrl: moduleFolder + '/SchedulingResourceOccupationGanTTScreen-list.html',controller: ListScreenController,controllerAs: 'vm'}},data: {title: '排产资源暂用甘特图'}};$stateProvider.state(state);}
}());
相关文章:
甘特图 dhtmlxGantt.js UA实例
摘要:本文介绍了一个基于AngularJS的排产资源占用甘特图系统,包含前端界面展示和后端控制逻辑。系统通过HTML模板实现甘特图展示区域、查询条件表单和数据绑定,使用JavaScript控制器处理数据查询、甘特图初始化和交互逻辑。主要功能包括&…...

Docker学习笔记:基础知识
本文是自己的学习笔记 1、什么是Docker2、Docker的架构设计2.1、镜像(Image)2.2、容器(Container)2.3、仓库(Repository)2.4、Docker使用场景案例 1、什么是Docker Docker是基于Go语言实现的云开源项目。它的角色是作…...

5.2 初识Spark Streaming
在本节实战中,我们初步探索了Spark Streaming,它是Spark的流式数据处理子框架,具备高吞吐量、可伸缩性和强容错能力。我们了解了Spark Streaming的基本概念和运行原理,并通过两个案例演示了如何利用Spark Streaming实现词频统计。…...
uv:一个现代化的 Python 依赖管理工具
在 Python 的生态系统中,依赖管理和 Python 版本管理一直是开发者关注的核心问题。传统的工具如 pip、poetry 和 pyenv 虽然功能强大,但在性能和使用体验上仍有改进空间。uv 是由 Python 核心开发者开发的 现代化依赖管理工具,旨在提供更快、…...

Python趣学篇:交互式词云生成器(jieba + Tkinter + WordCloud等)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、为什么要做词云?让文字"活"起来!二、核心…...

理解解释器架构:原理、组成与运行机制全解析
目录 前言1. 什么是解释器架构2. 解释器的基本组成2.1 被解释执行的程序2.2 解释器引擎2.3 解释器内部状态2.4 程序执行的当前状态2.5 存储器模型 3. 解释器的工作原理3.1 解析源代码3.2 初始化运行环境3.3 逐条执行语法结构3.4 维护程序状态3.5 内存管理与变量作用域 4. 举例&…...

2025华为OD机试真题+全流程解析+备考攻略+经验分享+Java/python/JavaScript/C++/C/GO六种语言最佳实现
华为OD全流程解析,备考攻略 快捷目录 华为OD全流程解析,备考攻略一、什么是华为OD?二、什么是华为OD机试?三、华为OD面试流程四、华为OD薪资待遇及职级体系五、ABCDE卷类型及特点六、题型与考点七、机试备考策略八、薪资与转正九、…...
Python应用for循环临时变量作用域
大家好!如果你刚开始学习Python,可能会对for循环中临时变量的作用域感到好奇。下面通过一个简单的练习,帮助你理解这个概念。 代码呈现: i 0 for i in range(5):print(i)print(i)代码介绍: 首先我们初始化变量i 0然后进入for循环,这里i成为…...

设计模式——桥接设计模式(结构型)
摘要 桥接设计模式是一种结构型设计模式,用于将抽象与实现解耦,使二者可以独立变化。它通过将一个类拆分为“抽象”和“实现”两部分,并通过桥接关系组合,避免了类继承层次结构过于庞大。桥接模式包含抽象类、扩充抽象类、实现类…...

LLaDa——基于 Diffusion 的大语言模型 打平 LLama 3
这里分享一篇文章《Large Language Diffusion Models》,来自人民大学高领人工智能学院,一篇尝试改变传统自回归范(预测下一个token) LLM 架构,探索扩散模型在 LLM 上的作用,通过随机掩码-预测逆向思维&…...
Apache SeaTunnel部署技术详解:模式选择、技巧与最佳实践
Apache SeaTunnel(原Waterdrop)作为高性能、分布式数据集成平台,支持海量数据的离线与实时同步。其灵活多样的部署模式可适配不同规模的生产环境需求。本文将系统解析SeaTunnel的部署架构、技术要点及最佳实践,帮助用户高效构建稳…...

2. 数据结构基本概念 (2)
本文部分ppt、视频截图来自:[青岛大学-王卓老师的个人空间-王卓老师个人主页-哔哩哔哩视频] 1. 数据结构基本概念 1.1 数据类型和抽象数据类型 (1) 数据类型(Data Type) 概念 数据类型是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称。 在使用…...
鸿蒙5.0+ 多协议设备发现与分布式软总线技术实践
一、技术演进与架构升级 1.1 多协议发现机制演进 鸿蒙5.0重构设备发现层,支持三模异构发现: 经典蓝牙(BLE 5.2):低功耗设备发现Wi-Fi Aware:高带宽设备预连接PLC࿰…...

STM32F407寄存器操作(多通道单ADC+DMA)
1.前言 又是半年没更新了,趁着端午放假有点时间,并且最近项目要用这块知识,我就顺带研究一下ADC吧。 一般来说ADC主要用法包含了1.单通道软件触发(这是最简单和最常用的用法)2.单通道多次采集(需要快速采…...

基于React和TypeScript的金融市场模拟器开发与模式分析
基于React和TypeScript的金融市场模拟器开发与模式分析 项目概述 本项目开发了一个基于React和TypeScript的金融市场模拟器,通过模拟订单流和价格发现机制,重现了真实市场的动态特性。该模拟器不仅提供了实时价格图表、订单簿和交易功能,还…...
剑指offer13_剪绳子
剪绳子 给你一根长度为 n 绳子,请把绳子剪成 m 段(m、n都是整数,2≤n≤58 并且 m≥2)。 每段的绳子的长度记为 k[1]、k[2]、……、k[m]。 k[1]k[2]…k[m] 可能的最大乘积是多少? 例如当绳子的长度是 8 时࿰…...

reverse_ssh 建立反向 SSH 连接指南 混淆AV [好东西哟]
目录 🌐 工具简介 ⚙️ 前提条件 攻击主机 (Linux) 目标主机 (Windows) 📋 详细步骤 步骤 1:安装 Go 环境 步骤 2:安装必要依赖 步骤 3:下载并编译 reverse_ssh 步骤 4:配置密钥 步骤 5ÿ…...
vue+elementUi+axios实现分页(MyBatis、Servlet)
vueelementUiaxios实现分页 文章目录 vueelementUiaxios实现分页1.代码实现【HTML】**【Servlet层】****【Service层】****【Dao层】** 2.总结步骤3.实现要点4.注意事项4.注意事项 注:此项目 前端为 html、 后端采用 mybatis、servlet实现 1.代码实现 【HTML】…...
WebBuilder数据库:企业数据管理的能力引擎
在数据成为核心生产要素的时代,企业对数据库的需求早已超越“存储与查询”的基础功能,转而追求高性能、高安全、高兼容与高效开发的综合能力。WebBuilder作为企业级快速开发平台的佼佼者,其数据库能力正式破解数据管理难题的关键钥匙。本文将…...
QtWidgets,QtCore,QtGui
目录 三者的关系示例代码主要功能模块QtCore**一、核心功能与常用类****1. 信号与槽机制(Signals and Slots)****2. 事件处理(Event Handling)****3. 定时器(Timers)****4. 线程(Threading)****5. 文件与目录操作****6. 属性系统(Property System)****二、高级特性**…...

lvs-keepalived高可用群集
目录 1.Keepalived 概述及安装 1.1 Keepalived 的热备方式 1.2 keepalived的安装与服务控制 (1)安装keep alived (2)控制 Keepalived 服务DNF 安装 keepalived 后,执行以下命令将keepalived 服务设置为开机启动。 2.使用 Keepalived 实现双机热备 …...
【Elasticsearch】suggest
在Elasticsearch中,suggest 是一个非常强大的功能,用于实现自动补全、拼写纠错和模糊搜索等功能。它可以帮助用户更快地找到他们想要的内容,同时提升搜索体验。以下是关于 suggest 的详细使用方法和常见场景。 1\. Suggest 的基本概念 sugges…...

高速收发器
一、高速收发器 1.FPGA高速收发器:GTP,GTX,GTH,GTZ 2.每个Quad有4对高速收发器GT(4个TX和4个RX)和一个COmmon 3.走差分,提高抗干扰性 4.CPLL是每个lane私有的,QPLL是整个Quad的所有通道共享的 5.每个MGT的bank有两对差分参考时钟 6.CPLL的时钟…...

webpack的安装及其后序部分
npm install原理 这个其实就是npm从registry下载项目到本地,没有什么好说的 值得一提的是npm的缓存机制,如果多个项目都需要同一个版本的axios,每一次重新从registry中拉取的成本过大,所以会有缓存,如果缓存里有这个…...

如何利用自动生成文档工具打造出色的技术文档
文章目录 每日一句正能量前言一、自动生成文档工具的优势(一)提高效率(二)保持一致性(三)实时更新 二、常见的自动生成文档工具(一)Sphinx(二)Javadoc&#x…...
读《Go语言圣经记录》(二):深入理解Go语言的程序结构
读《Go语言圣经记录》(二):深入理解Go语言的程序结构 在编程的世界里,Go语言以其简洁、高效和强大的并发能力而备受开发者青睐。今天,我将带大家深入探索Go语言的程序结构,通过详细解读《Go语言圣经》中的…...

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.7 R语言解题
本文是实验设计与分析(第6版,Montgomery著,傅珏生译) 第5章析因设计引导5.7节思考题5.7 R语言解题。主要涉及方差分析,正态假设检验,残差分析,交互作用图,等值线图。 dataframe <-data.frame…...
nacos Sentinel zipkin docker运行
服务注册发现 分布配置中⼼nacos dockerdocker pull nacos/nacos-server:1.3.2docker run -d --name nacos-server -p 8848:8848 -e MODEstandalone nacos/nacos-server:1.3.2访问 http://localhost:8848/nacos 服务限流降级:Sentinel docker docker pul…...

OpenCv高阶(二十)——dlib脸部轮廓绘制
文章目录 一、人脸面部轮廓绘制代码实现1、定义绘制直线段的函数2、定义绘制凸包轮廓的函数3、读取输入图像4、初始化dlib的人脸检测器5、使用检测器在图像中检测人脸(参数0表示不进行图像缩放)6、加载dlib的68点人脸关键点预测模型7、遍历检测到的每个人…...

pikachu靶场通关笔记08 XSS关卡04-DOM型XSS
目录 一、XSS原理 二、DOM型XSS 三、源码分析 1、进入靶场 2、XSS探测 3、源码分析 四、渗透实战 1、Payload1 2、Payload2 3、Payload3 本系列为通过《pikachu靶场通关笔记》的XSS关卡(共10关)渗透集合,通过对XSS关卡源码的代码审计找到XSS风…...