cgft 发表于 2015-12-1 12:08:24

发布新规和编辑修订界面,基本相同,后台程序是同一个文件。
使用中发现textarea控件在页面相互跳转时,value值的正确显示,处理起来十分棘手,且显示效果也不好。当初用textarea,就是嫌百度富文本编辑器占界面空间太大了,最后权衡,还是改为使用百度富文本编辑器。
本来,还想把两个编辑器横着并排放置以缩短操作界面高度,但发现通达提供的Editor类调用好像有点缺陷,并排放置后,在IE内核下,所有单行文本控件input,都不能显示(在WebKit内核下正常)。
这样一来,操作界面如图所示,确实显得过大了。


cgft 发表于 2015-12-3 16:00:49

本帖最后由 cgft 于 2015-12-3 16:06 编辑

主要部分,都调试得差不多了。还差改版升级模块没写。
试验了一下,发布或修订文档,实在是简捷多了。傻瓜型操作!正遇上科工集团的规章制度拉网大检查,生逢其时。通达的文件管理这一块,做得确实很成功,权限和功能,也很严密。
新文档,填完如上的表单后,用户即可收到事务提醒或公告通知提醒。
如果选公告通知全体部门,则自动在公告通知栏中生成“关于颁发《xxxx》的通告”,格式是超级链接格式,URL指向文档的发文单(见一楼图示)的阅读地址。也就是说,点击公告通知标题,立即签阅文档的发文单;在发文单里点击正文,即可阅读文档正文。同样,(如果有权限)也可以通过发文单阅读批文原件。
如果选提醒全部有权限人员,则向全员发布事务提醒,接收提醒则直接进入发文单。
如果是改版文档或废弃文档,可在前期版本和后续版本中看到相应文档的文件编号,点击则直接阅读相应文档的发文单。这也构成了规章制度版本更替的完整的升级链。

考虑到实际应用场景,做了如下简化:规章制度的阅览范围是全局性的,所以公告通知和事务提醒的范围也是全局性的;在这里只是规章制度已审议通过后的发布环节,所以文档发布和公告通知发布,都不必设置审批环节。

改版升级模块,重点考虑旧文档的自动归位、新文档的代码编号继承和升级链的自动生成三点。

cgft 发表于 2015-12-3 16:20:34

再唠点闲嗑。
18楼的new_edit.php程序表格,不知有人看出问题没有。
当初调试,组合字段就是保存不了。折腾了几个小时简直要崩溃了,逐条语句排查也找不出问题所在,最后只得逐条调试,才发现错在“后续版本”的变量名,使用的是$FOLLOW-UP,下划线写成减号,等到字符串组合时,结果就可想而知了。
这哪是18楼,真真是18层地狱。:'(

cgft 发表于 2015-12-10 21:47:37

本帖最后由 cgft 于 2015-12-11 14:39 编辑

规章制度修订后的版本更替,还有规章制度因故需要中止执行或暂缓实施,都应该向大家公示。





执行版本更替或中止施行的操作后,在无人工干预的时候,会自动生成如下图内容的公告通知。版面随窗口自动调整,文风、字体按公文标准设定。



如果文字不合意,则可以在发布前在线编辑公告通知的文本内容,然后再发布。由于日期、文件名、文件编号等内容由程序自动提取,使得工作变得很轻松。



“已废止文档”目录,与有效文档的目录,自动生成镜像。废止的文档,放在对应目录下。发文单记载了废止日期。批准栏内的链接,指向该文档发布的批文;前期版本栏内的链接,指向前期版本的发文单;后续版本栏内的链接,指向上图的公告通知。
各链接的内容的自动生成,无须人工干预,保证了数据无误。

附:建镜像路径代码

// ------------ $SORT_ID,欲更替或废止的在用文档的当前目录ID
function GET_ABORT_DIR($SORT_ID) {
      $i= 0;
      $ABORT_SORT_NAME= array();
      $SORT_PARENT= $SORT_ID;
      while($SORT_PARENT!=0) {
                $query= "SELECT SORT_ID,SORT_PARENT,SORT_NO,SORT_NAME FROM file_sort WHERE SORT_ID='".$SORT_PARENT."'";
                $cursor= exequery(TD::conn(), $query);
                $ROW= mysql_fetch_array($cursor);
                $SORT_PARENT= $ROW['SORT_PARENT'];
                $ABORT_SORT_NAME[$i]['0']= $ROW['SORT_NAME'];
                $ABORT_SORT_NAME[$i]['1']= $ROW['SORT_NO'];
                ++$i;
      }
      // ------------ 在废止库中查询或建立镜像路径
      $ABORT_SORT_ID= $ROW['SORT_ID'];
      $CountArr= count($ABORT_SORT_NAME)-1;
      $ABORT_SORT_NAME[$CountArr]['0']= '已废止文档';
      $i= 0;
      for(; $i<=$CountArr; ++$i) {
                $query= "SELECT SORT_ID FROM file_sort
               WHERE SORT_PARENT='".$ABORT_SORT_ID."' AND SORT_NAME='".$ABORT_SORT_NAME[$CountArr-$i]['0']."'";
                $cursor= exequery(TD::conn(), $query);
                if($ROW= mysql_fetch_array($cursor)) {
                        $ABORT_SORT_ID= $ROW['SORT_ID'];
                } else {      // ------------ 在废止库中建镜像路径
                        $query= "SELECT * FROM file_sort WHERE SORT_ID='".$ABORT_SORT_ID."'";
                        $cursor= exequery(TD::conn(), $query);
                        $ROW= mysql_fetch_array($cursor);
                        $USER_ID= $ROW['USER_ID'];
                        if($USER_ID== '|1,|')
                              $USER_ID= 'ALL_DEPT||';
                        $NEW_USER= $ROW['NEW_USER'];
                        $MANAGE_USER= $ROW['MANAGE_USER'];
                        $DEL_USER= $ROW['DEL_USER'];
                        $DOWN_USER= $ROW['DOWN_USER'];
                        $OWNER= $ROW['OWNER'];
                        $SIGN_USER= $ROW['SIGN_USER'];
                        $query= "INSERT INTO file_sort
                         (SORT_PARENT,SORT_NO,SORT_NAME,SORT_TYPE,USER_ID,NEW_USER,MANAGE_USER,DEL_USER,DOWN_USER,OWNER,SIGN_USER)
                         values (".$ABORT_SORT_ID.",'{$ABORT_SORT_NAME[$CountArr-$i]['1']}','{$ABORT_SORT_NAME[$CountArr-$i]['0']}','5',"
                              ."'{$USER_ID}','{$NEW_USER}','{$MANAGE_USER}','{$DEL_USER}','{$DOWN_USER}','{$OWNER}','{$SIGN_USER}')";
                        exequery(TD::conn(), $query);
                        $ABORT_SORT_ID= mysql_insert_id();
      }      }
      return $ABORT_SORT_ID;
}

cgft 发表于 2015-12-11 12:04:57

本帖最后由 cgft 于 2015-12-11 19:52 编辑

所有文档,应该能导出一个EXCEL表,内中包含文档全部管理信息。这样,就不必为各种不同应用而在OA服务器中生成报表了。
我的观点,服务器尽量避免做报表工作,一来报表格式难能满足不同口味,二来徒耗服务器资源,大的报表做起来,大量的数据查询和运算,再加上SQL语句没有优化,使得CPU负荷瞬间爆满。服务器只要把基本数据提供给用户就OK了,就如提供食材,如何烹制,就由用户个人决定吧。

21楼那两个上下排列的富文本编辑器,怎么看怎么不舒服。正确使用nowrap,今天终于搞定了。界面结构,紧凑多了。


cgft 发表于 2015-12-21 15:11:14

OA管理员的界面


文档资料员的界面


由于内部也有权限验证,所以界面菜单可设置为向所有人开放。

锁定/解锁文件夹:解锁后,借用文件管理模块的文件夹操作功能,对规章制度文件夹进行新建、增加、删除、剪切粘贴操作。此时由于文件管理模块的文件操作功能,也能操作规章制度文件,这是不需要的。所以在规章制度文件夹操作结束后,应该锁定文件夹。锁定之后,规章制度体系正常操作,但在文件管理模块中,就不会看到规章制度文件夹了。

关闭/开放已废止:关闭后,在规章制度体系目录里,不显示“已废止”文件夹。但发文单中的版本更替链接,依然有效。也就是说不让普通用户一次性地看到已废止文档目录的所有文件,但能让有权限的用户通过某个文档的版本更替链,看到该单个文档的所有已废止(前期)版本。

导出选定范围的全部文档的发文单内容:名称、编号、版本号、制定部门、撰稿人、批准机关、批文URL、生效日期、废止日期、文档摘要、适用范围、前期版本编号及URL、后续版本编号及URL、归档人、归档日期等。

规章制度的颁布、废止和版本升级都可以由程序自动地发布规范化的公告通知予以公示。公告通知发布到哪个分类,在这里由系统管理员设定。公告通知用词,已(由xxxx)审议通过,也在这里组词,即使留空不填写,组成的语句依然顺畅。

能想到的,大概就这些?

cgft 发表于 2015-12-21 15:28:15

如果不需要特殊处理(如另行添加文字说明),那么颁布新规,在4楼所示的界面里,填好内容。剩下的所有工作(包括发布公告通知,发出提醒短信)全由程序完成;
废止、中止规章制度,只要点击一个按钮,就全部搞定。
版本升级,只要把新版本的正文上传,剩下的所有工作(形成新版本的编号、版本号,旧版本移动到“已废止文档”文件夹,新文档和旧文档相互间的版本更替链URL的写入)也不用人工干预。
以前上述工作,公司资料员做起来慢不说,还经常做错。

cjun_5 发表于 2015-12-28 21:53:00

:lol 不简单!了不起!

cqzdchg 发表于 2015-12-30 17:18:09

支持二开!

wenfu76 发表于 2016-1-11 08:06:40

BUG不可怕,只要有信心,感谢你的付出!:$
页: 1 2 [3] 4 5 6
查看完整版本: 规章制度管理平台安装包(含源码)【二开组件】