diff --git a/README.md b/README.md index 9c1c0fee7211cdfc49fb6f0f1a74d1e928eaaab8..3462442aeb1c41fe8c20fd2b82e2625e4f7aa8f3 100644 --- a/README.md +++ b/README.md @@ -44,11 +44,11 @@ iBizPMS是一个刚刚起步的项目,它与其它项目有所不同的是, ## 整体流程 -![flow](https://images.gitee.com/uploads/images/2020/0601/222221_f000799e_5049745.png) +![flow](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/flow.png) ## 与禅道关系 -![flow2](https://images.gitee.com/uploads/images/2020/0601/222221_8a5eaec8_5049745.png) +![flow2](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/flow2.png) ## 增强特性 @@ -68,7 +68,7 @@ iBizPMS是一个刚刚起步的项目,它与其它项目有所不同的是, - 支持接入生产体系(系统)数据,自动完成日常管理数据填充。 - ![ywt](https://images.gitee.com/uploads/images/2020/0601/222221_c18a529c_5049745.png) + ![ywt](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/ywt.png) ## 开源参与 @@ -79,7 +79,7 @@ iBizPMS是一个刚刚起步的项目,它与其它项目有所不同的是, - 欢迎加入iBizPMS交流QQ群:1067434627 - ![QQ](https://images.gitee.com/uploads/images/2020/0601/222221_065de9c8_5049745.jpeg) + ![QQ](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/QQ.jpg) ## 技术框架 @@ -133,51 +133,51 @@ iBizPMS是一个刚刚起步的项目,它与其它项目有所不同的是, 演示Demo地址:http://pms.ibizlab.cn -演示账号:guest +演示账号:gitee -演示密码:123456 +演示密码:gitee@123 ## 系统展示 产品概况 -![show1](https://images.gitee.com/uploads/images/2020/0601/222221_7edfcd15_5049745.png) +![show1](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/show1.png) 甘特图 -![show2](https://images.gitee.com/uploads/images/2020/0601/222221_6486301d_5049745.png) +![show2](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/show2.png) 项目主页 -![show3](https://images.gitee.com/uploads/images/2020/0601/222221_0d9e0d65_5049745.png) +![show3](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/show3.png) 产品路线图 -![show4](https://images.gitee.com/uploads/images/2020/0601/222222_46a9e965_5049745.png) +![show4](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/show4.png) 产品动态 -![show4](https://images.gitee.com/uploads/images/2020/0601/222222_56389603_5049745.png) +![show4](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/show5.png) 产品主页 -![show4](https://images.gitee.com/uploads/images/2020/0601/222222_6b4771b4_5049745.png) +![show4](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/show6.png) 需求 -![show4](https://images.gitee.com/uploads/images/2020/0601/222222_c333e578_5049745.png) +![show4](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/show7.png) 接口列表 -![swagger1](https://images.gitee.com/uploads/images/2020/0601/222222_98ff731b_5049745.png) +![swagger1](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/swagger1.png) 产品接口 -![swagger2](https://images.gitee.com/uploads/images/2020/0601/222222_b5a05e60_5049745.png) +![swagger2](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/swagger2.png) 新建产品接口 -![swagger3](https://images.gitee.com/uploads/images/2020/0601/222222_bf90d171_5049745.png) +![swagger3](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/swagger3.png) ## 附录 @@ -187,24 +187,25 @@ iBizPMS是一个刚刚起步的项目,它与其它项目有所不同的是, | 序号 | 时间 | 事件 | 备注 | | ---- | ---------- | ------------------------ | ------------------------------------ | -| 1 | 2020-05-06 | 选型预研。 | 国内外项目管理软件整理很对比。 | +| 1 | 2020-05-06 | 选型预研。 | 国内外项目管理软件整理和对比。 | | 2 | 2020-05-11 | 禅道业务分析、技术预研。 | | | 3 | 2020-05-18 | 项目启动。 | | | 4 | 2020-05-18 | 禅道模型整理。 | 梳理禅道的业务数据模型以及模型关系。 | | 5 | 2020-05-18 | 禅道界面、组件整理。 | 梳理禅道界面表现和组件模型。 | | 6 | 2020-05-25 | 禅道API整理。 | 梳理禅道API,抽象共通性。 | | 7 | 2020-06-01 | 联通iBizPMS与禅道。 | iBizPMS与禅道API和数据库联通。 | +| 8 | 2020-06-08 | 功能持续完善。 | 产品、项目、测试功能逐步完善中。 | ### 快速建立issue 在运行系统的任意一个界面上,敲下“Ctrl+F12”或者点击右下角“显示Debug栏”,便会呈现“新建issues”的操作,点击便可以快速建立issue。 -![issue1](https://images.gitee.com/uploads/images/2020/0601/222222_0f5f47e3_5049745.png) +![issue1](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/issue1.png) -![issue2](https://images.gitee.com/uploads/images/2020/0601/222222_281c74a4_5049745.png) +![issue2](https://xtemplcdn.oss-cn-shanghai.aliyuncs.com/pms/issue2.png) ### 感谢 最后对以下参与的小伙伴发出衷心的感谢。 -@Unidentified、@Yuzuriha_Inori、@crimson777、前端模板团队、后端模板团队、CI/CD团队 \ No newline at end of file +@Unidentified、@Yuzuriha_Inori、@crimson777、前端模板团队、后端模板团队、CI/CD团队 diff --git a/app_Web/package.json b/app_Web/package.json index 40030d239e6dbc0cc2119190cd2e078acfc01410..ea302f42dc6e4f36dd3d5bee6d0bd27ec1359341 100644 --- a/app_Web/package.json +++ b/app_Web/package.json @@ -25,8 +25,9 @@ "element-ui": "^2.13.0", "file-saver": "^2.0.2", "font-awesome": "^4.7.0", - "ibiz-gantt-elastic": "^1.0.15", - "ibiz-vue-lib": "^0.1.9", + "ibiz-gantt-elastic": "^1.0.16", + "ibiz-vue-lib": "^0.1.10", + "ibiz-vue-pivottable": "^1.0.6", "interactjs": "1.9.10", "moment": "^2.24.0", "path-to-regexp": "^6.1.0", diff --git a/app_Web/public/assets/icons/iconfont/demo.css b/app_Web/public/assets/icons/iconfont/demo.css new file mode 100644 index 0000000000000000000000000000000000000000..a67054a0a030993643b8cbe9f344b34706efa134 --- /dev/null +++ b/app_Web/public/assets/icons/iconfont/demo.css @@ -0,0 +1,539 @@ +/* Logo 字体 */ +@font-face { + font-family: "iconfont logo"; + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); +} + +.logo { + font-family: "iconfont logo"; + font-size: 160px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* tabs */ +.nav-tabs { + position: relative; +} + +.nav-tabs .nav-more { + position: absolute; + right: 0; + bottom: 0; + height: 42px; + line-height: 42px; + color: #666; +} + +#tabs { + border-bottom: 1px solid #eee; +} + +#tabs li { + cursor: pointer; + width: 100px; + height: 40px; + line-height: 40px; + text-align: center; + font-size: 16px; + border-bottom: 2px solid transparent; + position: relative; + z-index: 1; + margin-bottom: -1px; + color: #666; +} + + +#tabs .active { + border-bottom-color: #f00; + color: #222; +} + +.tab-container .content { + display: none; +} + +/* 页面布局 */ +.main { + padding: 30px 100px; + width: 960px; + margin: 0 auto; +} + +.main .logo { + color: #333; + text-align: left; + margin-bottom: 30px; + line-height: 1; + height: 110px; + margin-top: -50px; + overflow: hidden; + *zoom: 1; +} + +.main .logo a { + font-size: 160px; + color: #333; +} + +.helps { + margin-top: 40px; +} + +.helps pre { + padding: 20px; + margin: 10px 0; + border: solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists { + width: 100% !important; + overflow: hidden; + *zoom: 1; +} + +.icon_lists li { + width: 100px; + margin-bottom: 10px; + margin-right: 20px; + text-align: center; + list-style: none !important; + cursor: default; +} + +.icon_lists li .code-name { + line-height: 1.2; +} + +.icon_lists .icon { + display: block; + height: 100px; + line-height: 100px; + font-size: 42px; + margin: 10px auto; + color: #333; + -webkit-transition: font-size 0.25s linear, width 0.25s linear; + -moz-transition: font-size 0.25s linear, width 0.25s linear; + transition: font-size 0.25s linear, width 0.25s linear; +} + +.icon_lists .icon:hover { + font-size: 100px; +} + +.icon_lists .svg-icon { + /* 通过设置 font-size 来改变图标大小 */ + width: 1em; + /* 图标和文字相邻时,垂直对齐 */ + vertical-align: -0.15em; + /* 通过设置 color 来改变 SVG 的颜色/fill */ + fill: currentColor; + /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 + normalize.css 中也包含这行 */ + overflow: hidden; +} + +.icon_lists li .name, +.icon_lists li .code-name { + color: #666; +} + +/* markdown 样式 */ +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p { + margin: 1em 0; +} + +.markdown>p, +.markdown>blockquote, +.markdown>.highlight, +.markdown>ol, +.markdown>ul { + width: 80%; +} + +.markdown ul>li { + list-style: circle; +} + +.markdown>ul li, +.markdown blockquote ul>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown>ul li p, +.markdown>ol li p { + margin: 0.6em 0; +} + +.markdown ol>li { + list-style: decimal; +} + +.markdown>ol li, +.markdown blockquote ol>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown>table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown>table th { + white-space: nowrap; + color: #333; + font-weight: 600; +} + +.markdown>table th, +.markdown>table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown>table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown>br, +.markdown>p>br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +/* 代码高亮 */ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/app_Web/public/assets/icons/iconfont/demo_index.html b/app_Web/public/assets/icons/iconfont/demo_index.html new file mode 100644 index 0000000000000000000000000000000000000000..808322b80f2276075b83f0f7490f46820fc21e08 --- /dev/null +++ b/app_Web/public/assets/icons/iconfont/demo_index.html @@ -0,0 +1,193 @@ + + + + + IconFont Demo + + + + + + + + + + + +
+

+ +
+
+
    + +
  • + +
    subnets
    +
    
    +
  • + +
+
+

Unicode 引用

+
+ +

Unicode 是字体在网页端最原始的应用方式,特点是:

+
    +
  • 兼容性最好,支持 IE6+,及所有现代浏览器。
  • +
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • +
  • 但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。
  • +
+
+

注意:新版 iconfont 支持多色图标,这些多色图标在 Unicode 模式下将不能使用,如果有需求建议使用symbol 的引用方式

+
+

Unicode 使用步骤如下:

+

第一步:拷贝项目下面生成的 @font-face

+
@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.eot');
+  src: url('iconfont.eot?#iefix') format('embedded-opentype'),
+      url('iconfont.woff2') format('woff2'),
+      url('iconfont.woff') format('woff'),
+      url('iconfont.ttf') format('truetype'),
+      url('iconfont.svg#iconfont') format('svg');
+}
+
+

第二步:定义使用 iconfont 的样式

+
.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+

第三步:挑选相应图标并获取字体编码,应用于页面

+
+<span class="iconfont">&#x33;</span>
+
+
+

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    + subnets +
    +
    .studio-icon-subnets +
    +
  • + +
+
+

font-class 引用

+
+ +

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

+

与 Unicode 使用方式相比,具有如下特点:

+
    +
  • 兼容性良好,支持 IE8+,及所有现代浏览器。
  • +
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • +
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • +
  • 不过因为本质上还是使用的字体,所以多色图标还是不支持的。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 fontclass 代码:

+
<link rel="stylesheet" href="./iconfont.css">
+
+

第二步:挑选相应图标并获取类名,应用于页面:

+
<span class="iconfont studio-icon-xxx"></span>
+
+
+

" + iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    subnets
    +
    #studio-icon-subnets
    +
  • + +
+
+

Symbol 引用

+
+ +

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 + 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

+
    +
  • 支持多色图标了,不再受单色限制。
  • +
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • +
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • +
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 symbol 代码:

+
<script src="./iconfont.js"></script>
+
+

第二步:加入通用 CSS 代码(引入一次就行):

+
<style>
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+</style>
+
+

第三步:挑选相应图标并获取类名,应用于页面:

+
<svg class="icon" aria-hidden="true">
+  <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+ +
+
+ + + diff --git a/app_Web/public/assets/icons/iconfont/iconfont.css b/app_Web/public/assets/icons/iconfont/iconfont.css new file mode 100644 index 0000000000000000000000000000000000000000..fcc0b77061d46cae24eedc38b2140953bc37cc24 --- /dev/null +++ b/app_Web/public/assets/icons/iconfont/iconfont.css @@ -0,0 +1,21 @@ +@font-face {font-family: "iconfont"; + src: url('iconfont.eot?t=1591350784537'); /* IE9 */ + src: url('iconfont.eot?t=1591350784537#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAALoAAsAAAAABrAAAAKaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCCcAqBOIE2ATYCJAMICwYABCAFhG0HMRvdBRHVk0lkPwtjN9pmGESkqlGiscij+Th0MMv1Y+N+PwTPf2uv9+3M/kyAwRGxioqKJWqrWg0AjoCOJ9K7tZa5B3YvTB7L6ADIHWQPOJsSON/x1cndkps3TzTSb6kH3jxKrADwiXunfwUUyHxAgaS+9qZJXUBdHEgB7oVRZEWWUN4wdoFLuA8BPIghC6nZPb4Gg8ZaJoBM+a4JJhdGo1nOILhq9mpkCzbG2mQ9BDaHn5ev82LAwlZYDR2TOw5UfKm2C9SvUyM+QQQEdNgGFJAFaJCe2nQbCmFshUdakwD7qhX4Eo7jW5G9mhD211nVXgBEQfE9SVzpreYsgNsaSwlQO+o7gJTMiGX835C9r+tuvsTFa7lMsP84O57lnnkRu3QyxejPivT+2K3X8xb3/cn2LD+VXm08yPPDg+rYqfLH4sKfm2ivC1dPt1f0Y+16nnxLl6Nbx65e/WP0E924399f9hHhdeH01Qv0FSoAcFYdVCkIIPD1Tp+M+27+N00NwAeshEFnNf28YE7nEfhtkp49WpdZFkurktpBi5LbafLAA3CA/QF8HqsPvkenYHKyEV43ojUoDEmkZmXBxpMcuDCUw4NM6g97Esg0CtHuQAZrAIIfp2DhwxUo/HhEatYn2ITwHS78RMGDPmmf6UmKcH5ji8kUctB6Q99OE+XYpBHVXpL7FJmclYWcW2Ltx3BueraY26OEeI4N+tmdF1GoOI1xFzxGUZRixmlAtkx7Itn6zIyqe9G0ncbQgGAyhRy03tC300T5w6VRev8luU+RyS1dNeFbYu1PjnPTsz3IPXXSq+tentHP7ryIQsVpjLtgFkVRiln9rIBsmfZGJLP1Gbuf6queXl8bf90RABpgGQqGPbUIpp+shEQDAAAA') format('woff2'), + url('iconfont.woff?t=1591350784537') format('woff'), + url('iconfont.ttf?t=1591350784537') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1591350784537#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.studio-icon-subnets:before { + content: "\ea43"; +} + diff --git a/app_Web/public/assets/icons/iconfont/iconfont.eot b/app_Web/public/assets/icons/iconfont/iconfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..94fa9c02dd9f235824ff47780ae55985f799dddd Binary files /dev/null and b/app_Web/public/assets/icons/iconfont/iconfont.eot differ diff --git a/app_Web/public/assets/icons/iconfont/iconfont.js b/app_Web/public/assets/icons/iconfont/iconfont.js new file mode 100644 index 0000000000000000000000000000000000000000..8101383abd16d459d1f100474651640407ef5caf --- /dev/null +++ b/app_Web/public/assets/icons/iconfont/iconfont.js @@ -0,0 +1 @@ +!function(e){var t,n,o,i,c,d,s,l='',a=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss");if(a&&!e.__iconfont__svg__cssinject__){e.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(e){console&&console.log(e)}}function r(){d||(d=!0,i())}n=function(){var e,t,n,o,i,c=document.createElement("div");c.innerHTML=l,l=null,(e=c.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",t=e,(n=document.body).firstChild?(o=t,(i=n.firstChild).parentNode.insertBefore(o,i)):n.appendChild(t))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(n,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),n()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=n,c=e.document,d=!1,(s=function(){try{c.documentElement.doScroll("left")}catch(e){return void setTimeout(s,50)}r()})(),c.onreadystatechange=function(){"complete"==c.readyState&&(c.onreadystatechange=null,r())})}(window); \ No newline at end of file diff --git a/app_Web/public/assets/icons/iconfont/iconfont.json b/app_Web/public/assets/icons/iconfont/iconfont.json new file mode 100644 index 0000000000000000000000000000000000000000..c3cf382b382c2a043aba34425614e6fc32669a1c --- /dev/null +++ b/app_Web/public/assets/icons/iconfont/iconfont.json @@ -0,0 +1,16 @@ +{ + "id": "1866280", + "name": "Studio模板图标", + "font_family": "iconfont", + "css_prefix_text": "studio-icon-", + "description": "Studio模板专增图标", + "glyphs": [ + { + "icon_id": "212786", + "name": "subnets ", + "font_class": "subnets", + "unicode": "ea43", + "unicode_decimal": 59971 + } + ] +} diff --git a/app_Web/public/assets/icons/iconfont/iconfont.svg b/app_Web/public/assets/icons/iconfont/iconfont.svg new file mode 100644 index 0000000000000000000000000000000000000000..1e275da47781600b037a21bfb5c904b907d7d157 --- /dev/null +++ b/app_Web/public/assets/icons/iconfont/iconfont.svg @@ -0,0 +1,29 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + diff --git a/app_Web/public/assets/icons/iconfont/iconfont.ttf b/app_Web/public/assets/icons/iconfont/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..87a27c466136cf632b1efdd87230400cd80afd96 Binary files /dev/null and b/app_Web/public/assets/icons/iconfont/iconfont.ttf differ diff --git a/app_Web/public/assets/icons/iconfont/iconfont.woff b/app_Web/public/assets/icons/iconfont/iconfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..5028dee043935bb44f32834ab7df7120cf031a0d Binary files /dev/null and b/app_Web/public/assets/icons/iconfont/iconfont.woff differ diff --git a/app_Web/public/assets/icons/iconfont/iconfont.woff2 b/app_Web/public/assets/icons/iconfont/iconfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a2785ce379bb3b30117fa7c2ba75c022154550a5 Binary files /dev/null and b/app_Web/public/assets/icons/iconfont/iconfont.woff2 differ diff --git a/app_Web/public/assets/json/data-dictionary.json b/app_Web/public/assets/json/data-dictionary.json index 0d6e0b9e9e279dd1e622569b623d30b26fb6f50d..61fc6c7002c69d3854bdb3f8725cde850cab24eb 100644 --- a/app_Web/public/assets/json/data-dictionary.json +++ b/app_Web/public/assets/json/data-dictionary.json @@ -38,6 +38,7 @@ "text": "激活", "data":"", "codename":"Active", + "color": "rgba(0, 157, 255, 1)", "value": "active", "disabled": false @@ -48,6 +49,7 @@ "text": "已解决", "data":"", "codename":"Resolved", + "color": "rgba(1, 217, 19, 1)", "value": "resolved", "disabled": false @@ -58,6 +60,7 @@ "text": "已关闭", "data":"", "codename":"Closed", + "color": "rgba(151, 152, 141, 1)", "value": "closed", "disabled": false @@ -276,6 +279,130 @@ } ] }, + { + "srfkey": "ProjectTimeType", + "emptytext": "", + "codelisttype":"static", + "items": [ + { + "id": "CONSUMED", + "label": "消耗时间", + "text": "消耗时间", + "data":"", + "codename":"Consumed", + "value": "CONSUMED", + + "disabled": false + } + , { + "id": "LEFT", + "label": "剩余时间", + "text": "剩余时间", + "data":"", + "codename":"Left", + "value": "LEFT", + + "disabled": false + } + ] + }, + { + "srfkey": "Bug__type", + "emptytext": "未定义", + "codelisttype":"static", + "items": [ + { + "id": "codeerror", + "label": "代码错误", + "text": "代码错误", + "data":"", + "codename":"Codeerror", + "value": "codeerror", + + "disabled": false + } + , { + "id": "config", + "label": "配置相关", + "text": "配置相关", + "data":"", + "codename":"Config", + "value": "config", + + "disabled": false + } + , { + "id": "install", + "label": "安装部署", + "text": "安装部署", + "data":"", + "codename":"Install", + "value": "install", + + "disabled": false + } + , { + "id": "security", + "label": "安全相关", + "text": "安全相关", + "data":"", + "codename":"Security", + "value": "security", + + "disabled": false + } + , { + "id": "performance", + "label": "性能问题", + "text": "性能问题", + "data":"", + "codename":"Performance", + "value": "performance", + + "disabled": false + } + , { + "id": "standard", + "label": "标准规范", + "text": "标准规范", + "data":"", + "codename":"Standard", + "value": "standard", + + "disabled": false + } + , { + "id": "automation", + "label": "测试脚本", + "text": "测试脚本", + "data":"", + "codename":"Automation", + "value": "automation", + + "disabled": false + } + , { + "id": "designdefect", + "label": "设计缺陷", + "text": "设计缺陷", + "data":"", + "codename":"Designdefect", + "value": "designdefect", + + "disabled": false + } + , { + "id": "others", + "label": "其他", + "text": "其他", + "data":"", + "codename":"Others", + "value": "others", + + "disabled": false + } + ] + }, { "srfkey": "Product__acl", "emptytext": "未定义", @@ -1040,6 +1167,33 @@ } ] }, + { + "srfkey": "User__gender", + "emptytext": "未定义", + "codelisttype":"static", + "items": [ + { + "id": "f", + "label": "女", + "text": "女", + "data":"", + "codename":"F", + "value": "f", + + "disabled": false + } + , { + "id": "m", + "label": "男", + "text": "男", + "data":"", + "codename":"M", + "value": "m", + + "disabled": false + } + ] + }, { "srfkey": "Action__object_type", "emptytext": "未定义", @@ -1408,137 +1562,134 @@ ] }, { - "srfkey": "Task__closed_reason", + "srfkey": "Task_quickpacket", "emptytext": "未定义", "codelisttype":"static", "items": [ { - "id": "done", - "label": "已完成", - "text": "已完成", - "data":"", - "codename":"Done", - "value": "done", + "id": "All", + "label": "所有", + "text": "所有", + "data":{}, + "codename":"All", + "value": "All", "disabled": false } , { - "id": "cancel", - "label": "已取消", - "text": "已取消", - "data":"", - "codename":"Cancel", - "value": "cancel", + "id": "UNCLOSED", + "label": "未关闭", + "text": "未关闭", + "data":{"n_status_noteq":"closed"}, + "codename":"Unclosed", + "value": "UNCLOSED", "disabled": false } - ] - }, - { - "srfkey": "UserRealName", - "emptytext": "未定义", - "codelisttype":"dynamic", - "appdataentity":"User", - "appdedataset":"FetchDefault", - "items": [] - }, - { - "srfkey": "Product__type", - "emptytext": "未定义", - "codelisttype":"static", - "items": [ - { - "id": "normal", - "label": "正常", - "text": "正常", - "data":"", - "codename":"Normal", - "color": "blue", - "value": "normal", + , { + "id": "TOME", + "label": "指派给我", + "text": "指派给我", + "data":{"n_assignedto_eq":"%srfloginname%"}, + "codename":"Tome", + "value": "TOME", "disabled": false } , { - "id": "branch", - "label": "多分支", - "text": "多分支", + "id": "MORE", + "label": "更多", + "text": "更多", "data":"", - "codename":"Branch", - "value": "branch", + "codename":"More", + "value": "MORE", "disabled": false } , { - "id": "platform", - "label": "多平台", - "text": "多平台", - "data":"", - "codename":"Platform", - "value": "platform", - + "id": "NOTSTARTED", + "label": "未开始", + "text": "未开始", + "data":{"n_status_eq":"wait"}, + "codename":"Notstarted", + "value": "NOTSTARTED", + "pvalue": "MORE", "disabled": false } - ] - }, - { - "srfkey": "Testcase__status", - "emptytext": "未定义", - "codelisttype":"static", - "items": [ - { - "id": "wait", - "label": "待评审", - "text": "待评审", - "data":"", - "codename":"Wait", - "value": "wait", - + , { + "id": "INPROGRESS", + "label": "进行中", + "text": "进行中", + "data":{"n_status_eq":"doing"}, + "codename":"Inprogress", + "value": "INPROGRESS", + "pvalue": "MORE", "disabled": false } , { - "id": "normal", - "label": "正常", - "text": "正常", - "data":"", - "codename":"Normal", - "value": "normal", - + "id": "UNACCOMPLISHED", + "label": "未完成", + "text": "未完成", + "data":{"n_status_noteq":"done"}, + "codename":"Unaccomplished", + "value": "UNACCOMPLISHED", + "pvalue": "MORE", "disabled": false } , { - "id": "blocked", - "label": "被阻塞", - "text": "被阻塞", - "data":"", - "codename":"Blocked", - "value": "blocked", - + "id": "IFINISHED", + "label": "我完成", + "text": "我完成", + "data":{"n_finishedby_eq":"%srfloginname%"}, + "codename":"Ifinished", + "value": "IFINISHED", + "pvalue": "MORE", "disabled": false } , { - "id": "investigate", - "label": "研究中", - "text": "研究中", - "data":"", - "codename":"Investigate", - "value": "investigate", - + "id": "COMPLETED", + "label": "已完成", + "text": "已完成", + "data":{"n_status_eq":"done"}, + "codename":"Completed", + "value": "COMPLETED", + "pvalue": "MORE", + "disabled": false + } + , { + "id": "CLOSED", + "label": "已关闭", + "text": "已关闭", + "data":{"n_status_eq":"closed"}, + "codename":"Closed", + "value": "CLOSED", + "pvalue": "MORE", + "disabled": false + } + , { + "id": "CANCELLED", + "label": "已取消", + "text": "已取消", + "data":{"n_status_eq":"cancel"}, + "codename":"Cancelled", + "value": "CANCELLED", + "pvalue": "MORE", "disabled": false } ] }, { - "srfkey": "Story__quickpacket", + "srfkey": "Bug__quickpacket", "emptytext": "未定义", "codelisttype":"static", "items": [ { - "id": "ALL", + "id": "All", "label": "所有", "text": "所有", - "data":"", + "data":{}, "codename":"All", - "value": "ALL", + "value": "All", "disabled": false } @@ -1546,16 +1697,26 @@ "id": "UNCLOSED", "label": "未关闭", "text": "未关闭", - "data":{"n_stage_noteq":"closed"}, + "data":{"n_status_noteq":"closed"}, "codename":"Unclosed", "value": "UNCLOSED", "disabled": false } + , { + "id": "ICREATE", + "label": "由我创建", + "text": "由我创建", + "data":{"n_openedby_eq":"%SRFUSERID%"}, + "codename":"Icreate", + "value": "ICREATE", + + "disabled": false + } , { "id": "TOME", - "label": "指给我", - "text": "指给我", + "label": "指派给我", + "text": "指派给我", "data":{"n_assignedto_eq":"%SRFUSERID%"}, "codename":"Tome", "value": "TOME", @@ -1563,32 +1724,32 @@ "disabled": false } , { - "id": "ICREATE", - "label": "我创建", - "text": "我创建", - "data":{"n_openedby_eq":"%SRFUSERID%"}, - "codename":"Icreate", - "value": "ICREATE", + "id": "BYME", + "label": "由我解决", + "text": "由我解决", + "data":{"n_resolvedby_eq":"%SRFUSERID%"}, + "codename":"Byme", + "value": "BYME", "disabled": false } , { - "id": "IREVIEW", - "label": "我评审", - "text": "我评审", - "data":{"n_reviewedby_eq":"%SRFUSERID%"}, - "codename":"Ireview", - "value": "IREVIEW", + "id": "WAITCLOSED", + "label": "待关闭", + "text": "待关闭", + "data":{"n_status_eq":"closed"}, + "codename":"Waitclosed", + "value": "WAITCLOSED", "disabled": false } , { - "id": "DRAFT", - "label": "草稿", - "text": "草稿", - "data":{"n_status_eq":"draft"}, - "codename":"Draft", - "value": "DRAFT", + "id": "UNRESOLVED", + "label": "未解决", + "text": "未解决", + "data":{"n_status_eq":"resolved"}, + "codename":"Unresolved", + "value": "UNRESOLVED", "disabled": false } @@ -1603,17 +1764,595 @@ "disabled": false } , { - "id": "ICLOSE", - "label": "我关闭", - "text": "我关闭", - "data":{"n_closedby_eq":"%SRFUSERID%"}, - "codename":"Iclose", - "value": "ICLOSE", + "id": "UNCONFIRMED", + "label": "未确认", + "text": "未确认", + "data":{"n_confirmed_eq": 0}, + "codename":"Unconfirmed", + "value": "UNCONFIRMED", "pvalue": "MORE", "disabled": false } , { - "id": "ACTIVED", + "id": "UNASSIGNED", + "label": "未指派", + "text": "未指派", + "data":{"n_assignedto_eq":""}, + "codename":"Unassigned", + "value": "UNASSIGNED", + "pvalue": "MORE", + "disabled": false + } + , { + "id": "EXPIREDBUG", + "label": "过期Bug", + "text": "过期Bug", + "data":{"n_deadline_lt": "%srfcurdate%"}, + "codename":"Expiredbug", + "value": "EXPIREDBUG", + "pvalue": "MORE", + "disabled": false + } + ] + }, + { + "srfkey": "Task__closed_reason", + "emptytext": "未定义", + "codelisttype":"static", + "items": [ + { + "id": "done", + "label": "已完成", + "text": "已完成", + "data":"", + "codename":"Done", + "value": "done", + + "disabled": false + } + , { + "id": "cancel", + "label": "已取消", + "text": "已取消", + "data":"", + "codename":"Cancel", + "value": "cancel", + + "disabled": false + } + ] + }, + { + "srfkey": "Bug__os", + "emptytext": "未定义", + "codelisttype":"static", + "items": [ + { + "id": "all", + "label": "全部", + "text": "全部", + "data":"", + "codename":"All", + "value": "all", + + "disabled": false + } + , { + "id": "windows", + "label": "Windows", + "text": "Windows", + "data":"", + "codename":"Windows", + "value": "windows", + + "disabled": false + } + , { + "id": "win10", + "label": "Windows 10", + "text": "Windows 10", + "data":"", + "codename":"Win10", + "value": "win10", + + "disabled": false + } + , { + "id": "win8", + "label": "Windows 8", + "text": "Windows 8", + "data":"", + "codename":"Win8", + "value": "win8", + + "disabled": false + } + , { + "id": "win7", + "label": "Windows 7", + "text": "Windows 7", + "data":"", + "codename":"Win7", + "value": "win7", + + "disabled": false + } + , { + "id": "vista", + "label": "Windows Vista", + "text": "Windows Vista", + "data":"", + "codename":"Vista", + "value": "vista", + + "disabled": false + } + , { + "id": "winxp", + "label": "Windows XP", + "text": "Windows XP", + "data":"", + "codename":"Winxp", + "value": "winxp", + + "disabled": false + } + , { + "id": "win2012", + "label": "Windows 2012", + "text": "Windows 2012", + "data":"", + "codename":"Win2012", + "value": "win2012", + + "disabled": false + } + , { + "id": "win2008", + "label": "Windows 2008", + "text": "Windows 2008", + "data":"", + "codename":"Win2008", + "value": "win2008", + + "disabled": false + } + , { + "id": "win2003", + "label": "Windows 2003", + "text": "Windows 2003", + "data":"", + "codename":"Win2003", + "value": "win2003", + + "disabled": false + } + , { + "id": "win2000", + "label": "Windows 2000", + "text": "Windows 2000", + "data":"", + "codename":"Win2000", + "value": "win2000", + + "disabled": false + } + , { + "id": "android", + "label": "Android", + "text": "Android", + "data":"", + "codename":"Android", + "value": "android", + + "disabled": false + } + , { + "id": "ios", + "label": "IOS", + "text": "IOS", + "data":"", + "codename":"Ios", + "value": "ios", + + "disabled": false + } + , { + "id": "wp8", + "label": "WP8", + "text": "WP8", + "data":"", + "codename":"Wp8", + "value": "wp8", + + "disabled": false + } + , { + "id": "wp7", + "label": "WP7", + "text": "WP7", + "data":"", + "codename":"Wp7", + "value": "wp7", + + "disabled": false + } + , { + "id": "symbian", + "label": "Symbian", + "text": "Symbian", + "data":"", + "codename":"Symbian", + "value": "symbian", + + "disabled": false + } + , { + "id": "linux", + "label": "Linux", + "text": "Linux", + "data":"", + "codename":"Linux", + "value": "linux", + + "disabled": false + } + , { + "id": "freebsd", + "label": "FreeBSD", + "text": "FreeBSD", + "data":"", + "codename":"Freebsd", + "value": "freebsd", + + "disabled": false + } + , { + "id": "osx", + "label": "OS X", + "text": "OS X", + "data":"", + "codename":"Osx", + "value": "osx", + + "disabled": false + } + , { + "id": "unix", + "label": "Unix", + "text": "Unix", + "data":"", + "codename":"Unix", + "value": "unix", + + "disabled": false + } + , { + "id": "others", + "label": "其他", + "text": "其他", + "data":"", + "codename":"Others", + "value": "others", + + "disabled": false + } + ] + }, + { + "srfkey": "UserRealName", + "emptytext": "未定义", + "codelisttype":"dynamic", + "appdataentity":"User", + "appdedataset":"FetchDefault", + "items": [] + }, + { + "srfkey": "Product__type", + "emptytext": "未定义", + "codelisttype":"static", + "items": [ + { + "id": "normal", + "label": "正常", + "text": "正常", + "data":"", + "codename":"Normal", + "color": "blue", + "value": "normal", + + "disabled": false + } + , { + "id": "branch", + "label": "多分支", + "text": "多分支", + "data":"", + "codename":"Branch", + "value": "branch", + + "disabled": false + } + , { + "id": "platform", + "label": "多平台", + "text": "多平台", + "data":"", + "codename":"Platform", + "value": "platform", + + "disabled": false + } + ] + }, + { + "srfkey": "Testcase__type", + "emptytext": "未定义", + "codelisttype":"static", + "items": [ + { + "id": "feature", + "label": "功能测试", + "text": "功能测试", + "data":"", + "codename":"Feature", + "value": "feature", + + "disabled": false + } + , { + "id": "performance", + "label": "性能测试", + "text": "性能测试", + "data":"", + "codename":"Performance", + "value": "performance", + + "disabled": false + } + , { + "id": "config", + "label": "配置相关", + "text": "配置相关", + "data":"", + "codename":"Config", + "value": "config", + + "disabled": false + } + , { + "id": "install", + "label": "安装部署", + "text": "安装部署", + "data":"", + "codename":"Install", + "value": "install", + + "disabled": false + } + , { + "id": "security", + "label": "安全相关", + "text": "安全相关", + "data":"", + "codename":"Security", + "value": "security", + + "disabled": false + } + , { + "id": "interface", + "label": "接口测试", + "text": "接口测试", + "data":"", + "codename":"Interface", + "value": "interface", + + "disabled": false + } + , { + "id": "unit", + "label": "单元测试", + "text": "单元测试", + "data":"", + "codename":"Unit", + "value": "unit", + + "disabled": false + } + , { + "id": "other", + "label": "其他", + "text": "其他", + "data":"", + "codename":"Other", + "value": "other", + + "disabled": false + } + ] + }, + { + "srfkey": "Bug__severity", + "emptytext": "未定义", + "codelisttype":"static", + "items": [ + { + "id": "1", + "label": "1", + "text": "1", + "data":"", + "codename":"Item_1", + "value": 1, + + "disabled": false + } + , { + "id": "2", + "label": "2", + "text": "2", + "data":"", + "codename":"Item_2", + "value": 2, + + "disabled": false + } + , { + "id": "3", + "label": "3", + "text": "3", + "data":"", + "codename":"Item_3", + "value": 3, + + "disabled": false + } + , { + "id": "4", + "label": "4", + "text": "4", + "data":"", + "codename":"Item_4", + "value": 4, + + "disabled": false + } + ] + }, + { + "srfkey": "Testcase__status", + "emptytext": "未定义", + "codelisttype":"static", + "items": [ + { + "id": "wait", + "label": "待评审", + "text": "待评审", + "data":"", + "codename":"Wait", + "value": "wait", + + "disabled": false + } + , { + "id": "normal", + "label": "正常", + "text": "正常", + "data":"", + "codename":"Normal", + "value": "normal", + + "disabled": false + } + , { + "id": "blocked", + "label": "被阻塞", + "text": "被阻塞", + "data":"", + "codename":"Blocked", + "value": "blocked", + + "disabled": false + } + , { + "id": "investigate", + "label": "研究中", + "text": "研究中", + "data":"", + "codename":"Investigate", + "value": "investigate", + + "disabled": false + } + ] + }, + { + "srfkey": "Story__quickpacket", + "emptytext": "未定义", + "codelisttype":"static", + "items": [ + { + "id": "ALL", + "label": "所有", + "text": "所有", + "data":"", + "codename":"All", + "value": "ALL", + + "disabled": false + } + , { + "id": "UNCLOSED", + "label": "未关闭", + "text": "未关闭", + "data":{"n_stage_noteq":"closed"}, + "codename":"Unclosed", + "value": "UNCLOSED", + + "disabled": false + } + , { + "id": "TOME", + "label": "指给我", + "text": "指给我", + "data":{"n_assignedto_eq":"%SRFUSERID%"}, + "codename":"Tome", + "value": "TOME", + + "disabled": false + } + , { + "id": "ICREATE", + "label": "我创建", + "text": "我创建", + "data":{"n_openedby_eq":"%SRFUSERID%"}, + "codename":"Icreate", + "value": "ICREATE", + + "disabled": false + } + , { + "id": "IREVIEW", + "label": "我评审", + "text": "我评审", + "data":{"n_reviewedby_eq":"%SRFUSERID%"}, + "codename":"Ireview", + "value": "IREVIEW", + + "disabled": false + } + , { + "id": "DRAFT", + "label": "草稿", + "text": "草稿", + "data":{"n_status_eq":"draft"}, + "codename":"Draft", + "value": "DRAFT", + + "disabled": false + } + , { + "id": "MORE", + "label": "更多", + "text": "更多", + "data":"", + "codename":"More", + "value": "MORE", + + "disabled": false + } + , { + "id": "ICLOSE", + "label": "我关闭", + "text": "我关闭", + "data":{"n_closedby_eq":"%SRFUSERID%"}, + "codename":"Iclose", + "value": "ICLOSE", + "pvalue": "MORE", + "disabled": false + } + , { + "id": "ACTIVED", "label": "激活", "text": "激活", "data":{"n_status_eq":"active"}, @@ -1654,6 +2393,223 @@ } ] }, + { + "srfkey": "Bug__browser", + "emptytext": "未定义", + "codelisttype":"static", + "items": [ + { + "id": "all", + "label": "全部", + "text": "全部", + "data":"", + "codename":"All", + "value": "all", + + "disabled": false + } + , { + "id": "ie", + "label": "IE系列", + "text": "IE系列", + "data":"", + "codename":"Ie", + "value": "ie", + + "disabled": false + } + , { + "id": "ie11", + "label": "IE11", + "text": "IE11", + "data":"", + "codename":"Ie11", + "value": "ie11", + + "disabled": false + } + , { + "id": "ie10", + "label": "IE10", + "text": "IE10", + "data":"", + "codename":"Ie10", + "value": "ie10", + + "disabled": false + } + , { + "id": "ie9", + "label": "IE9", + "text": "IE9", + "data":"", + "codename":"Ie9", + "value": "ie9", + + "disabled": false + } + , { + "id": "ie8", + "label": "IE8", + "text": "IE8", + "data":"", + "codename":"Ie8", + "value": "ie8", + + "disabled": false + } + , { + "id": "ie7", + "label": "IE7", + "text": "IE7", + "data":"", + "codename":"Ie7", + "value": "ie7", + + "disabled": false + } + , { + "id": "ie6", + "label": "IE6", + "text": "IE6", + "data":"", + "codename":"Ie6", + "value": "ie6", + + "disabled": false + } + , { + "id": "chrome", + "label": "chrome", + "text": "chrome", + "data":"", + "codename":"Chrome", + "value": "chrome", + + "disabled": false + } + , { + "id": "firefox", + "label": "firefox系列", + "text": "firefox系列", + "data":"", + "codename":"Firefox", + "value": "firefox", + + "disabled": false + } + , { + "id": "firefox4", + "label": "firefox4", + "text": "firefox4", + "data":"", + "codename":"Firefox4", + "value": "firefox4", + + "disabled": false + } + , { + "id": "firefox3", + "label": "firefox3", + "text": "firefox3", + "data":"", + "codename":"Firefox3", + "value": "firefox3", + + "disabled": false + } + , { + "id": "firefox2", + "label": "firefox2", + "text": "firefox2", + "data":"", + "codename":"Firefox2", + "value": "firefox2", + + "disabled": false + } + , { + "id": "opera", + "label": "opera系列", + "text": "opera系列", + "data":"", + "codename":"Opera", + "value": "opera", + + "disabled": false + } + , { + "id": "opera11", + "label": "opera11", + "text": "opera11", + "data":"", + "codename":"Opera11", + "value": "opera11", + + "disabled": false + } + , { + "id": "oprea10", + "label": "oprea10", + "text": "oprea10", + "data":"", + "codename":"Oprea10", + "value": "oprea10", + + "disabled": false + } + , { + "id": "opera9", + "label": "opera9", + "text": "opera9", + "data":"", + "codename":"Opera9", + "value": "opera9", + + "disabled": false + } + , { + "id": "safari", + "label": "safari", + "text": "safari", + "data":"", + "codename":"Safari", + "value": "safari", + + "disabled": false + } + , { + "id": "maxthon", + "label": "傲游", + "text": "傲游", + "data":"", + "codename":"Maxthon", + "value": "maxthon", + + "disabled": false + } + , { + "id": "uc", + "label": "UC", + "text": "UC", + "data":"", + "codename":"Uc", + "value": "uc", + + "disabled": false + } + , { + "id": "others", + "label": "其他", + "text": "其他", + "data":"", + "codename":"Others", + "value": "others", + + "disabled": false + } + ] + }, { "srfkey": "Project__type", "emptytext": "未定义", @@ -1798,6 +2754,33 @@ } ] }, + { + "srfkey": "Company__guest", + "emptytext": "未定义", + "codelisttype":"static", + "items": [ + { + "id": "1", + "label": "允许", + "text": "允许", + "data":"", + "codename":"Item_1", + "value": "1", + + "disabled": false + } + , { + "id": "0", + "label": "不允许", + "text": "不允许", + "data":"", + "codename":"Item_0", + "value": "0", + + "disabled": false + } + ] + }, { "srfkey": "Story__status", "emptytext": "未定义", @@ -2057,6 +3040,7 @@ "text": "未开始", "data":"", "codename":"Wait", + "color": "rgba(131, 138, 157, 1)", "value": "wait", "disabled": false @@ -2067,6 +3051,7 @@ "text": "进行中", "data":"", "codename":"Doing", + "color": "rgba(255, 93, 93, 1)", "value": "doing", "disabled": false @@ -2077,6 +3062,7 @@ "text": "已完成", "data":"", "codename":"Done", + "color": "rgba(67, 160, 71, 1)", "value": "done", "disabled": false @@ -2087,6 +3073,7 @@ "text": "已暂停", "data":"", "codename":"Pause", + "color": "rgba(255, 152, 0, 1)", "value": "pause", "disabled": false @@ -2097,6 +3084,7 @@ "text": "已取消", "data":"", "codename":"Cancel", + "color": "rgba(131, 138, 157, 1)", "value": "cancel", "disabled": false @@ -2107,6 +3095,7 @@ "text": "已关闭", "data":"", "codename":"Closed", + "color": "rgba(131, 138, 157, 1)", "value": "closed", "disabled": false @@ -2187,6 +3176,61 @@ } ] }, + { + "srfkey": "Role", + "emptytext": "未定义", + "codelisttype":"dynamic", + "appdataentity":"Group", + "appdedataset":"FetchDefault", + "items": [] + }, + { + "srfkey": "Testcase__result", + "emptytext": "未定义", + "codelisttype":"static", + "items": [ + { + "id": "n/a", + "label": "忽略", + "text": "忽略", + "data":"", + "codename":"N_a", + "value": "n/a", + + "disabled": false + } + , { + "id": "pass", + "label": "通过", + "text": "通过", + "data":"", + "codename":"Pass", + "value": "pass", + + "disabled": false + } + , { + "id": "fail", + "label": "失败", + "text": "失败", + "data":"", + "codename":"Fail", + "value": "fail", + + "disabled": false + } + , { + "id": "blocked", + "label": "阻塞", + "text": "阻塞", + "data":"", + "codename":"Blocked", + "value": "blocked", + + "disabled": false + } + ] + }, { "srfkey": "Bug__pri", "emptytext": "未定义", @@ -2230,6 +3274,93 @@ "codename":"Item_4", "value": 4, + "disabled": false + } + ] + }, + { + "srfkey": "Bug__resolution", + "emptytext": "未定义", + "codelisttype":"static", + "items": [ + { + "id": "bydesign", + "label": "设计如此", + "text": "设计如此", + "data":"", + "codename":"Bydesign", + "value": "bydesign", + + "disabled": false + } + , { + "id": "duplicate", + "label": "重复Bug", + "text": "重复Bug", + "data":"", + "codename":"Duplicate", + "value": "duplicate", + + "disabled": false + } + , { + "id": "external", + "label": "外部原因", + "text": "外部原因", + "data":"", + "codename":"External", + "value": "external", + + "disabled": false + } + , { + "id": "fixed", + "label": "已解决", + "text": "已解决", + "data":"", + "codename":"Fixed", + "value": "fixed", + + "disabled": false + } + , { + "id": "notrepro", + "label": "无法重现", + "text": "无法重现", + "data":"", + "codename":"Notrepro", + "value": "notrepro", + + "disabled": false + } + , { + "id": "postponed", + "label": "延期处理", + "text": "延期处理", + "data":"", + "codename":"Postponed", + "value": "postponed", + + "disabled": false + } + , { + "id": "willnotfix", + "label": "不予解决", + "text": "不予解决", + "data":"", + "codename":"Willnotfix", + "value": "willnotfix", + + "disabled": false + } + , { + "id": "tostory", + "label": "转为需求", + "text": "转为需求", + "data":"", + "codename":"Tostory", + "value": "tostory", + "disabled": false } ] diff --git a/app_Web/public/assets/json/view-config.json b/app_Web/public/assets/json/view-config.json index ffd61b2fd9a7f0c6f2ad2de5ac78187f58b7b0cd..378e65269d6a8ea5420fc1138503a39445a6cb8f 100644 --- a/app_Web/public/assets/json/view-config.json +++ b/app_Web/public/assets/json/view-config.json @@ -19,6 +19,16 @@ "viewtag": "00ac056d598228619b6c0dbfcd603e4c", "memo": "" }, + "companydepttreeexpview": { + "title": "组织部门树导航视图", + "caption": "公司", + "viewtype": "DETREEEXPVIEW", + "viewmodule": "zentao", + "viewname": "CompanyDeptTreeExpView", + "viewfilename": "company-dept-tree-exp-view", + "viewtag": "025443fdc6ac693e261108fbdf1b40ab", + "memo": "" + }, "caseeditview": { "title": "case编辑视图", "caption": "测试用例", @@ -89,6 +99,26 @@ "viewtag": "103bc77ad54de2476db1d4e9c788cd4e", "memo": "" }, + "bugmaineditview": { + "title": "Bug编辑", + "caption": "Bug编辑", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "BugMainEditView", + "viewfilename": "bug-main-edit-view", + "viewtag": "122af527bf38b47ddc53c882847b490e", + "memo": "主信息编辑" + }, + "taskassigntaskview": { + "title": "指派任务", + "caption": "指派任务", + "viewtype": "DEOPTVIEW", + "viewmodule": "zentao", + "viewname": "TaskAssignTaskView", + "viewfilename": "task-assign-task-view", + "viewtag": "12661bdb476cd339554799b417c6ea48", + "memo": "" + }, "bugmaindashboardview": { "title": "Bug数据看板视图", "caption": "Bug", @@ -99,6 +129,16 @@ "viewtag": "1540523a668e920d831510cfbec2c5e2", "memo": "" }, + "deptpickupview": { + "title": "dept数据选择视图", + "caption": "部门", + "viewtype": "DEPICKUPVIEW", + "viewmodule": "zentao", + "viewname": "DeptPickupView", + "viewfilename": "dept-pickup-view", + "viewtag": "16b54862dad958907853dc7eb084a0c0", + "memo": "" + }, "productplansubplancreateview": { "title": "计划", "caption": "产品计划", @@ -169,6 +209,16 @@ "viewtag": "21d716ac12c793af54b112a5a3599674", "memo": "" }, + "taskmaineditview": { + "title": "任务", + "caption": "任务", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "TaskMainEditView", + "viewfilename": "task-main-edit-view", + "viewtag": "21e00a7239d9737bbfda5c1608b4129c", + "memo": "" + }, "moduleeditview": { "title": "模块", "caption": "模块", @@ -219,6 +269,26 @@ "viewtag": "321ab2e4e87a29fef8eed086e951a006", "memo": "" }, + "tasksubtasknewview": { + "title": "子任务", + "caption": "子任务", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "TaskSubTaskNewView", + "viewfilename": "task-sub-task-new-view", + "viewtag": "35ba93bac795e0deb7297d2d471b7180", + "memo": "" + }, + "projectstatsmaindashboardview": { + "title": "项目统计数据看板视图", + "caption": "项目统计", + "viewtype": "DEPORTALVIEW", + "viewmodule": "ibiz", + "viewname": "ProjectStatsMainDashboardView", + "viewfilename": "project-stats-main-dashboard-view", + "viewtag": "37df93bfc6d8126c9303eab0c5363df8", + "memo": "" + }, "projectburndownchartview": { "title": "燃尽图", "caption": "项目", @@ -239,6 +309,16 @@ "viewtag": "3aafb12bb0db2be013c0f5ced8c7dc50", "memo": "" }, + "projectpickupgridview": { + "title": "project选择表格视图", + "caption": "项目", + "viewtype": "DEPICKUPGRIDVIEW", + "viewmodule": "zentao", + "viewname": "ProjectPickupGridView", + "viewfilename": "project-pickup-grid-view", + "viewtag": "3b346aee2b79b7b6b59bc870b4c67f72", + "memo": "" + }, "storymainview": { "title": "需求数据看板视图", "caption": "需求", @@ -249,8 +329,28 @@ "viewtag": "3f2ca3e560d9082bb56fbf7667a57a66", "memo": "" }, + "casemaingridview": { + "title": "功能测试", + "caption": "测试用例", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "CaseMainGridView", + "viewfilename": "case-main-grid-view", + "viewtag": "417541fa331fc089b84936b8359403fa", + "memo": "" + }, + "bugbuglifeeditview9": { + "title": "Bug的一生", + "caption": "Bug", + "viewtype": "DEEDITVIEW9", + "viewmodule": "zentao", + "viewname": "BugBugLifeEditView9", + "viewfilename": "bug-bug-life-edit-view9", + "viewtag": "443935a0b9d0fa8daf3131956a8bacc9", + "memo": "" + }, "bugeditview": { - "title": "bug编辑视图", + "title": "Bug", "caption": "Bug", "viewtype": "DEEDITVIEW", "viewmodule": "zentao", @@ -269,6 +369,16 @@ "viewtag": "4863a523ac490ebce771717756f0c6a8", "memo": "" }, + "taskgridview": { + "title": "task表格视图", + "caption": "任务", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "TaskGridView", + "viewfilename": "task-grid-view", + "viewtag": "4b01c8ae7e7e23b9c67dbca2ee90e41b", + "memo": "" + }, "storygridview9_assignedtome": { "title": "需求表格视图", "caption": "需求", @@ -279,6 +389,16 @@ "viewtag": "4b82e9acf6c784b138b365d6011b296b", "memo": "视图参数中指定了过滤条件" }, + "companydeptusertreeexpview": { + "title": "组织部门人员树导航视图", + "caption": "公司", + "viewtype": "DETREEEXPVIEW", + "viewmodule": "zentao", + "viewname": "CompanyDeptUserTreeExpView", + "viewfilename": "company-dept-user-tree-exp-view", + "viewtag": "4cb497e84dfabd873bc62d5386d5551f", + "memo": "" + }, "productplansubplangridview": { "title": "子计划", "caption": "产品计划", @@ -359,6 +479,16 @@ "viewtag": "54c7ba4afb6222c4c0af04a78a0592df", "memo": "" }, + "companymaintabexpview": { + "title": "组织权限", + "caption": "组织权限", + "viewtype": "DETABEXPVIEW", + "viewmodule": "zentao", + "viewname": "CompanyMainTabExpView", + "viewfilename": "company-main-tab-exp-view", + "viewtag": "56084e37dc061358abd4a3f5340b27e9", + "memo": "" + }, "storypickupgridview": { "title": "需求", "caption": "需求", @@ -379,6 +509,26 @@ "viewtag": "575fecad655143bbd28f17c581725a4e", "memo": "" }, + "userpickupview": { + "title": "user数据选择视图", + "caption": "用户", + "viewtype": "DEPICKUPVIEW", + "viewmodule": "zentao", + "viewname": "UserPickupView", + "viewfilename": "user-pickup-view", + "viewtag": "57e77f1cea8cff268fbd744f326867fb", + "memo": "" + }, + "casemainnewview": { + "title": "功能测试", + "caption": "功能测试", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "CaseMainNewView", + "viewfilename": "case-main-new-view", + "viewtag": "5890a810365fec51e801d2cffce44fde", + "memo": "" + }, "productstorytreeexpview": { "title": "产品需求导航视图", "caption": "产品", @@ -389,6 +539,16 @@ "viewtag": "58a943454a652d4f4ce2702d6447c079", "memo": "" }, + "projectpickupview": { + "title": "project数据选择视图", + "caption": "项目", + "viewtype": "DEPICKUPVIEW", + "viewmodule": "zentao", + "viewname": "ProjectPickupView", + "viewfilename": "project-pickup-view", + "viewtag": "5a8a29268a7563b62fc0160233958830", + "memo": "" + }, "testtaskeditview": { "title": "testtask编辑视图", "caption": "测试版本", @@ -399,6 +559,26 @@ "viewtag": "5b139a407fa34f386f3f784f33841184", "memo": "" }, + "deptmaingridview": { + "title": "dept表格视图", + "caption": "部门", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "DeptMainGridView", + "viewfilename": "dept-main-grid-view", + "viewtag": "5c2b20935d511794aeca60376bd81fef", + "memo": "" + }, + "productstatseditview9": { + "title": "产品统计编辑视图", + "caption": "产品统计", + "viewtype": "DEEDITVIEW9", + "viewmodule": "ibiz", + "viewname": "ProductStatsEditView9", + "viewfilename": "product-stats-edit-view9", + "viewtag": "5d468f620cc30181773d875b3bb8be6e", + "memo": "" + }, "tasktasktypeganttview": { "title": "任务甘特视图", "caption": "任务", @@ -419,6 +599,46 @@ "viewtag": "61f32b2b422e8f1a9825e1f704464a8c", "memo": "" }, + "productcasetreeexpview": { + "title": "产品需求导航视图", + "caption": "产品", + "viewtype": "DETREEEXPVIEW", + "viewmodule": "zentao", + "viewname": "ProductCaseTreeExpView", + "viewfilename": "product-case-tree-exp-view", + "viewtag": "63b82c8ee288130faca83833ec1f837c", + "memo": "" + }, + "taskpivottableview": { + "title": "任务表格视图", + "caption": "任务", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "TaskPivotTableView", + "viewfilename": "task-pivot-table-view", + "viewtag": "64204774cc4b97f20aa3becb41b184d5", + "memo": "" + }, + "bugstepsinfoeditview": { + "title": "Bug编辑视图", + "caption": "重现步骤", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "BugStepsInfoEditView", + "viewfilename": "bug-steps-info-edit-view", + "viewtag": "6558930042f15c2297572f51d7e77df5", + "memo": "" + }, + "casebatchnewgridview": { + "title": "测试用例", + "caption": "测试用例", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "CaseBatchNewGridView", + "viewfilename": "case-batch-new-grid-view", + "viewtag": "66769499a681f12bd2ebff8859f1d4ea", + "memo": "" + }, "productmaintabexpview": { "title": "产品", "caption": "产品", @@ -429,6 +649,16 @@ "viewtag": "6c7b582273d0726bcf77214807cfe40c", "memo": "" }, + "casemaindashboardview": { + "title": "功能测试", + "caption": "功能测试", + "viewtype": "DEPORTALVIEW", + "viewmodule": "zentao", + "viewname": "CaseMainDashboardView", + "viewfilename": "case-main-dashboard-view", + "viewtag": "6f78b25e86923ab600a2141d50fe49fd", + "memo": "" + }, "actionhistroylistview": { "title": "历史记录", "caption": "系统日志", @@ -509,6 +739,16 @@ "viewtag": "7d34636d1c24d613abf8d3fdc64ec7ba", "memo": "" }, + "productpickupview": { + "title": "product数据选择视图", + "caption": "产品", + "viewtype": "DEPICKUPVIEW", + "viewmodule": "zentao", + "viewname": "ProductPickupView", + "viewfilename": "product-pickup-view", + "viewtag": "7df0f0deee91304e0350f00baa8a92d6", + "memo": "" + }, "storymainview_editmode": { "title": "需求数据看板视图", "caption": "需求", @@ -549,6 +789,26 @@ "viewtag": "81b0cee2fedff8f4902c0d735714e5af", "memo": "" }, + "groupmaingridview": { + "title": "group表格视图", + "caption": "群组", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "GroupMainGridView", + "viewfilename": "group-main-grid-view", + "viewtag": "8399a93b13ffd4ecea6c65e7804a1353", + "memo": "" + }, + "usereditview": { + "title": "user编辑视图", + "caption": "用户信息", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "UserEditView", + "viewfilename": "user-edit-view", + "viewtag": "83b1f6c353e9383e36b8d58eec845267", + "memo": "" + }, "projectgridview": { "title": "项目", "caption": "项目", @@ -569,6 +829,16 @@ "viewtag": "85ee867b09a2d6303c061d91374ec975", "memo": "" }, + "taskworkinfoeditview9": { + "title": "工时信息", + "caption": "工时信息", + "viewtype": "DEEDITVIEW9", + "viewmodule": "zentao", + "viewname": "TaskWorkInfoEditView9", + "viewfilename": "task-work-info-edit-view9", + "viewtag": "8ca35f54383cecb05da77cdb1a6588fd", + "memo": "" + }, "productleftsidebarlistview": { "title": "所有产品", "caption": "产品", @@ -579,6 +849,16 @@ "viewtag": "8ca39819b87c5e3e8669fcd7409cf9a2", "memo": "" }, + "productpickupgridview": { + "title": "product选择表格视图", + "caption": "产品", + "viewtype": "DEPICKUPGRIDVIEW", + "viewmodule": "zentao", + "viewname": "ProductPickupGridView", + "viewfilename": "product-pickup-grid-view", + "viewtag": "8d53a973712c13f448efb8e2182ccc0b", + "memo": "" + }, "storymainview9": { "title": "需求编辑视图", "caption": "需求", @@ -719,6 +999,36 @@ "viewtag": "aae1ade339fe6a2ebe367489f6393db1", "memo": "" }, + "companymainview": { + "title": "公司数据看板视图", + "caption": "公司信息", + "viewtype": "DEPORTALVIEW", + "viewmodule": "zentao", + "viewname": "CompanyMainView", + "viewfilename": "company-main-view", + "viewtag": "abc58a7e8f6c6860ef5ea3ead20e5ffd", + "memo": "" + }, + "taskopentaskview": { + "title": "开始任务", + "caption": "开始任务", + "viewtype": "DEOPTVIEW", + "viewmodule": "zentao", + "viewname": "TaskOpenTaskView", + "viewfilename": "task-open-task-view", + "viewtag": "abca63015fc84466991c6479f955f6d0", + "memo": "" + }, + "companyeditview": { + "title": "company编辑视图", + "caption": "公司信息", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "CompanyEditView", + "viewfilename": "company-edit-view", + "viewtag": "b39a7a76c2175803831235ae3aeef05b", + "memo": "" + }, "productdashboardinfomainview9": { "title": "产品信息", "caption": "产品", @@ -729,6 +1039,16 @@ "viewtag": "b5d2389c0dd12ae614b319090ecc2361", "memo": "" }, + "taskclosepausecancelview": { + "title": "任务选项操作视图", + "caption": "任务", + "viewtype": "DEOPTVIEW", + "viewmodule": "zentao", + "viewname": "TaskClosePauseCancelView", + "viewfilename": "task-close-pause-cancel-view", + "viewtag": "b78229d8342c2c13ddd8e403a7d853bc", + "memo": "" + }, "storympickupview": { "title": "关联需求", "caption": "关联需求", @@ -749,6 +1069,16 @@ "viewtag": "b9e94e3713c82ebab002631bda872b94", "memo": "" }, + "depteditview": { + "title": "dept编辑视图", + "caption": "部门信息", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "DeptEditView", + "viewfilename": "dept-edit-view", + "viewtag": "bae11f9447355ecc9e2cdff2490e6d11", + "memo": "" + }, "productmaindashboardview": { "title": "产品数据看板视图", "caption": "产品", @@ -759,6 +1089,16 @@ "viewtag": "bc36be2ee4a78e69c13665a8ad03ab6a", "memo": "" }, + "userpickupgridview": { + "title": "user选择表格视图", + "caption": "用户", + "viewtype": "DEPICKUPGRIDVIEW", + "viewmodule": "zentao", + "viewname": "UserPickupGridView", + "viewfilename": "user-pickup-grid-view", + "viewtag": "bd3043a0eb4bed8abd005228a4e729af", + "memo": "" + }, "modulepickupgridview": { "title": "模块选择", "caption": "模块", @@ -779,6 +1119,16 @@ "viewtag": "c9410c9f72535adf1fff569d5243edd1", "memo": "" }, + "taskdoneview": { + "title": "完成任务", + "caption": "完成任务", + "viewtype": "DEOPTVIEW", + "viewmodule": "zentao", + "viewname": "TaskDoneView", + "viewfilename": "task-done-view", + "viewtag": "c9c256aef78723e1bf9ddc1d38667c3f", + "memo": "" + }, "modulepickupview": { "title": "模块选择", "caption": "模块", @@ -829,6 +1179,26 @@ "viewtag": "D1283E46-401A-4CFD-A7A1-BF5B90197463", "memo": "" }, + "groupeditview": { + "title": "group编辑视图", + "caption": "分组信息", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "GroupEditView", + "viewfilename": "group-edit-view", + "viewtag": "d2de1e2449f8c1cf2e0310f5477eef4b", + "memo": "" + }, + "usermaingridview": { + "title": "user表格视图", + "caption": "用户", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "UserMainGridView", + "viewfilename": "user-main-grid-view", + "viewtag": "d364bfbf7092ee45cd0acae49fac77ab", + "memo": "" + }, "branchpmeditview": { "title": "平台管理", "caption": "产品的分支和平台信息", @@ -839,6 +1209,16 @@ "viewtag": "d4cb26555e6d81a172652580cf7d9f7f", "memo": "" }, + "companymainview9": { + "title": "公司编辑视图", + "caption": "公司", + "viewtype": "DEEDITVIEW9", + "viewmodule": "zentao", + "viewname": "CompanyMainView9", + "viewfilename": "company-main-view9", + "viewtag": "d7f401156de51eb49cdb10a6fb9263ee", + "memo": "" + }, "storymain2gridview": { "title": "story表格视图", "caption": "需求", @@ -849,6 +1229,16 @@ "viewtag": "dea346284a2fbb66467c4838c1b3f577", "memo": "" }, + "actionalltrendslistview": { + "title": "系统日志列表视图", + "caption": "系统日志", + "viewtype": "DELISTVIEW", + "viewmodule": "zentao", + "viewname": "ActionAllTrendsListView", + "viewfilename": "action-all-trends-list-view", + "viewtag": "df57be69540a2e80fee7f3575162b93a", + "memo": "" + }, "producteditview": { "title": "product编辑视图", "caption": "产品", @@ -869,6 +1259,36 @@ "viewtag": "e396b6f39451e3bf963aec602106adf0", "memo": "" }, + "projectstatseditview9": { + "title": "项目统计编辑视图", + "caption": "项目统计", + "viewtype": "DEEDITVIEW9", + "viewmodule": "ibiz", + "viewname": "ProjectStatsEditView9", + "viewfilename": "project-stats-edit-view9", + "viewtag": "e444135470a806822b9b950e15c42a3e", + "memo": "" + }, + "storyeditview_storychange": { + "title": "需求编辑视图", + "caption": "变更", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "StoryEditView_StoryChange", + "viewfilename": "story-edit-view-story-change", + "viewtag": "e54598b1e6d38d7c6ce8231b531b46bd", + "memo": "" + }, + "deptpickupgridview": { + "title": "dept选择表格视图", + "caption": "部门", + "viewtype": "DEPICKUPGRIDVIEW", + "viewmodule": "zentao", + "viewname": "DeptPickupGridView", + "viewfilename": "dept-pickup-grid-view", + "viewtag": "e644f7976b08c3d7f14fd7e1d5329da8", + "memo": "" + }, "taskeditview": { "title": "task编辑视图", "caption": "任务", @@ -879,6 +1299,16 @@ "viewtag": "ea141fddc78fd1af4d06e494baf12cc1", "memo": "" }, + "bugdashboardmaineditview9": { + "title": "主信息", + "caption": "Bug", + "viewtype": "DEEDITVIEW9", + "viewmodule": "zentao", + "viewname": "BugDashboardMainEditView9", + "viewfilename": "bug-dashboard-main-edit-view9", + "viewtag": "ec9a5987de12c718961f243f4034efea", + "memo": "" + }, "casestepgridview": { "title": "casestep表格视图", "caption": "用例步骤", diff --git a/app_Web/src/app-register.ts b/app_Web/src/app-register.ts index 9fd99db26c682d4e6b4067f439a3433f12500141..b90abce86d382116ed9eeacb88131f518a8e4021 100644 --- a/app_Web/src/app-register.ts +++ b/app_Web/src/app-register.ts @@ -76,6 +76,7 @@ import AppDepartmentSelect from './components/app-department-select/app-departme import IBizGroupSelect from './components/ibiz-group-select/ibiz-group-select.vue' import IBizGroupPicker from './components/ibiz-group-picker/ibiz-group-picker.vue' import AppWFApproval from './components/app-wf-approval/app-wf-approval.vue' +import Breadcrumb from './components/app-breadcrumb/app-breadcrumb.vue'; // 全局挂载UI实体服务注册中心 window['uiServiceRegister'] = uiServiceRegister; @@ -161,5 +162,6 @@ export const AppComponents = { v.component('ibiz-group-select',IBizGroupSelect); v.component('ibiz-group-picker',IBizGroupPicker); v.component('app-wf-approval',AppWFApproval); + v.component('app-breadcrumb',Breadcrumb); }, }; \ No newline at end of file diff --git a/app_Web/src/codelist/role.ts b/app_Web/src/codelist/role.ts new file mode 100644 index 0000000000000000000000000000000000000000..d8194adbdc6db182b5ba58d94dfe9c0673a1c2d0 --- /dev/null +++ b/app_Web/src/codelist/role.ts @@ -0,0 +1,149 @@ +import GroupService from '@service/group/group-service'; +/** + * 代码表--群组(动态) + * + * @export + * @class Role + */ +export default class Role { + + /** + * 是否启用缓存 + * + * @type boolean + * @memberof Role + */ + public isEnableCache:boolean = true; + + /** + * 过期时间 + * + * @type any + * @memberof Role + */ + public expirationTime:any; + + /** + * 缓存超长时长 + * + * @type any + * @memberof Role + */ + public cacheTimeout:any = -1; + + /** + * 代码表模型对象 + * + * @type any + * @memberof Role + */ + public codelistModel:any = { + codelistid:"Role" + }; + + /** + * 自定义参数集合 + * + * @type any + * @memberof Role + */ + public userParamNames:any ={ + } + + /** + * 查询参数集合 + * + * @type any + * @memberof Role + */ + public queryParamNames:any ={ + } + + /** + * 群组应用实体服务对象 + * + * @type {GroupService} + * @memberof Role + */ + public groupService: GroupService = new GroupService(); + + + /** + * 处理数据 + * + * @public + * @param {any[]} items + * @returns {any[]} + * @memberof Role + */ + public doItems(items: any[]): any[] { + let _items: any[] = []; + items.forEach((item: any) => { + let itemdata:any = {}; + Object.assign(itemdata,{id:item.id}); + Object.assign(itemdata,{value:item.id}); + Object.assign(itemdata,{text:item.name}); + + _items.push(itemdata); + }); + return _items; + } + + /** + * 获取数据项 + * + * @param {*} context + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof Role + */ + public getItems(context: any={}, data: any={}, isloading?: boolean): Promise { + return new Promise((resolve, reject) => { + data = this.handleQueryParam(data); + const promise: Promise = this.groupService.FetchDefault(context, data, isloading); + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + resolve(this.doItems(data)); + } else { + resolve([]); + } + }).catch((response: any) => { + console.error(response); + reject(response); + }); + }); + } + + /** + * 处理查询参数 + * @param data 传入data + * @memberof Role + */ + public handleQueryParam(data:any){ + let tempData:any = data?JSON.parse(JSON.stringify(data)):{}; + if(this.userParamNames && Object.keys(this.userParamNames).length >0){ + Object.keys(this.userParamNames).forEach((name: string) => { + if (!name) { + return; + } + let value: string | null = this.userParamNames[name]; + if (value && value.startsWith('%') && value.endsWith('%')) { + const key = value.substring(1, value.length - 1); + if (this.codelistModel && this.codelistModel.hasOwnProperty(key)) { + value = (this.codelistModel[key] !== null && this.codelistModel[key] !== undefined) ? this.codelistModel[key] : null; + } else { + value = null; + } + } + Object.assign(tempData, { [name]: value }); + }); + } + Object.assign(tempData,{page: 0, size: 1000}); + if(this.queryParamNames && Object.keys(this.queryParamNames).length > 0){ + Object.assign(tempData,this.queryParamNames); + } + return tempData; + } +} diff --git a/app_Web/src/components/app-actionbar/app-actionbar.less b/app_Web/src/components/app-actionbar/app-actionbar.less index 16b3c63a27b4be6adc150ba9e99d06764419e64a..217cd483f17929164152ff31a08b04a06943020d 100644 --- a/app_Web/src/components/app-actionbar/app-actionbar.less +++ b/app_Web/src/components/app-actionbar/app-actionbar.less @@ -6,6 +6,17 @@ background: var(--view-button-background-color); border-radius: 5px; + .app-actionbar-item { + + >.ivu-btn.ivu-btn-text { + color: var(--view-button-color); + } + + >.ivu-btn.ivu-btn-text:hover { + color: var(--view-button-background-color-active); + } + } + .app-actionbar-item:nth-child(n + 2) { border-left: 1px solid var(--app-dividing-line-color-bright); } diff --git a/app_Web/src/components/app-autocomplete/app-autocomplete.vue b/app_Web/src/components/app-autocomplete/app-autocomplete.vue index a9ab48de6e78b9da79a8d25a9b3fd38ffd9a3139..97641ff0f56acb5cd210d2207295033139b7f4df 100644 --- a/app_Web/src/components/app-autocomplete/app-autocomplete.vue +++ b/app_Web/src/components/app-autocomplete/app-autocomplete.vue @@ -173,29 +173,22 @@ export default class AppAutocomplete extends Vue { * @param callback */ public onSearch(query: any, callback: any): void { + // 公共参数处理 + let data: any = {}; + const bcancel: boolean = this.handlePublicParams(data); + if (!bcancel) { + return; + } + // 参数处理 + let _context = data.context; + let _param = data.param; // 处理搜索参数 query = !query ? '' : query; if (!this.inputState && Object.is(query, this.value)) { query = ''; } this.inputState = false; - // 合并视图上下文参数和视图参数 - let param: any = JSON.parse(JSON.stringify(this.viewparams)); - let context: any = JSON.parse(JSON.stringify(this.context)); - Object.assign(param, { query: query }); - // 附加参数处理 - if (this.itemParam.context) { - let _context = this.$util.formatData(this.data,this.itemParam.context); - Object.assign(context,_context); - } - if (this.itemParam.param) { - let _param = this.$util.formatData(this.data,this.itemParam.param); - Object.assign(param,_param); - } - if (this.itemParam.parentdata) { - let _parentdata = this.$util.formatData(this.data,this.itemParam.parentdata); - Object.assign(param,_parentdata); - } + Object.assign(_param, { query: query }); // 错误信息国际化 let error: string = (this.$t('components.appAutocomplete.error') as any); let miss: string = (this.$t('components.appAutocomplete.miss') as any); @@ -208,7 +201,7 @@ export default class AppAutocomplete extends Vue { } else if(!this.acParams.interfaceName) { this.$Notice.error({ title: error, desc: miss+'interfaceName' }); } else { - this.service.getItems(this.acParams.serviceName,this.acParams.interfaceName, context, param).then((response: any) => { + this.service.getItems(this.acParams.serviceName,this.acParams.interfaceName, _context, _param).then((response: any) => { if (!response) { this.$Notice.error({ title: error, desc: requestException }); } else { @@ -274,6 +267,34 @@ export default class AppAutocomplete extends Vue { this.$forceUpdate(); } + + /** + * 公共参数处理 + * + * @param {*} arg + * @returns + * @memberof AppAutocomplete + */ + public handlePublicParams(arg: any): boolean { + if (!this.data) { + this.$Notice.error({ title: (this.$t('components.appPicker.error') as any), desc: (this.$t('components.appPicker.formdataException') as any) }); + return false; + } + // 合并表单参数 + arg.param = this.viewparams ? JSON.parse(JSON.stringify(this.viewparams)) : {}; + arg.context = this.context ? JSON.parse(JSON.stringify(this.context)) : {}; + // 附加参数处理 + if (this.itemParam && this.itemParam.context) { + let _context = this.$util.formatData(this.data,arg.context,this.itemParam.context); + Object.assign(arg.context,_context); + } + if (this.itemParam && this.itemParam.param) { + let _param = this.$util.formatData(this.data,arg.param,this.itemParam.param); + Object.assign(arg.param,_param); + } + return true; + } + } diff --git a/app_Web/src/components/app-breadcrumb/app-breadcrumb.less b/app_Web/src/components/app-breadcrumb/app-breadcrumb.less new file mode 100644 index 0000000000000000000000000000000000000000..e8ba311b9ffcf598a2e17e88f650f4005e6b723f --- /dev/null +++ b/app_Web/src/components/app-breadcrumb/app-breadcrumb.less @@ -0,0 +1,17 @@ + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.app-breadcrumb.el-breadcrumb { + display: inline-block; + font-size: 14px; + line-height: 50px; + margin-left: 8px; + + .no-redirect { + color: #97a8be; + cursor: text; + } +} \ No newline at end of file diff --git a/app_Web/src/components/app-breadcrumb/app-breadcrumb.vue b/app_Web/src/components/app-breadcrumb/app-breadcrumb.vue new file mode 100644 index 0000000000000000000000000000000000000000..7bdb7a03c7b3acf4196a81807736025dafde4cd3 --- /dev/null +++ b/app_Web/src/components/app-breadcrumb/app-breadcrumb.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/components/app-checkbox-list/app-checkbox-list.vue b/app_Web/src/components/app-checkbox-list/app-checkbox-list.vue index 321be2c7527080ee08228976116488a65e76afe8..6d8caf3e905f258ba1d89871de081b375e5a0999 100644 --- a/app_Web/src/components/app-checkbox-list/app-checkbox-list.vue +++ b/app_Web/src/components/app-checkbox-list/app-checkbox-list.vue @@ -7,7 +7,7 @@ diff --git a/app_Web/src/components/app-column-link/app-column-link.vue b/app_Web/src/components/app-column-link/app-column-link.vue index 0d1ac2ab63cb8bd88d21591d5ae7fa88ffa25f74..5a8426443cf5c883e797afe2ef5765dc9f8549bb 100644 --- a/app_Web/src/components/app-column-link/app-column-link.vue +++ b/app_Web/src/components/app-column-link/app-column-link.vue @@ -279,8 +279,8 @@ export default class AppColumnLink extends Vue { return false; } // 合并表单参数 - arg.param = JSON.parse(JSON.stringify(this.viewparams)); - arg.context = JSON.parse(JSON.stringify(this.context)); + arg.param = this.viewparams ? JSON.parse(JSON.stringify(this.viewparams)) : {}; + arg.context = this.context ? JSON.parse(JSON.stringify(this.context)) : {}; return true; } diff --git a/app_Web/src/components/app-embed-picker/app-embed-picker.vue b/app_Web/src/components/app-embed-picker/app-embed-picker.vue index 730f0586294507c5c22d31143caf3c14d5e8d92e..96ed7021af7a27fe93b8fb4404a694da92579d10 100644 --- a/app_Web/src/components/app-embed-picker/app-embed-picker.vue +++ b/app_Web/src/components/app-embed-picker/app-embed-picker.vue @@ -170,15 +170,15 @@ export default class AppEmbedPicker extends Vue { let context: any = JSON.parse(JSON.stringify(this.context)); // 附加参数处理 if (this.itemParam.context) { - let _context = this.$util.formatData(activeData,this.itemParam.context); + let _context = this.$util.formatData(activeData,context,this.itemParam.context); Object.assign(context,_context); } if (this.itemParam.param) { - let _param = this.$util.formatData(activeData,this.itemParam.param); + let _param = this.$util.formatData(activeData,param,this.itemParam.param); Object.assign(param,_param); } if (this.itemParam.parentdata) { - let _parentdata = this.$util.formatData(activeData,this.itemParam.parentdata); + let _parentdata = this.$util.formatData(activeData,param,this.itemParam.parentdata); Object.assign(param,_parentdata); } this.viewdata = JSON.stringify(context); diff --git a/app_Web/src/components/app-mpicker/app-mpicker.vue b/app_Web/src/components/app-mpicker/app-mpicker.vue index f3086877921cae6a26e00abadca5a03584187463..942544aeb60078424bac2fd4450b3696453063f9 100644 --- a/app_Web/src/components/app-mpicker/app-mpicker.vue +++ b/app_Web/src/components/app-mpicker/app-mpicker.vue @@ -44,6 +44,14 @@ export default class AppMpicker extends Vue { */ @Prop() curvalue?: any; + /** + * 表单项参数 + * + * @type {any} + * @memberof AppPicker + */ + @Prop() public itemParam: any; + /** * 表单项名称 */ @@ -147,9 +155,18 @@ export default class AppMpicker extends Vue { * @memberof AppMpicker */ public onSearch(query: any) { - let param: any = { query: query }; + // 公共参数处理 + let data: any = {}; + const bcancel: boolean = this.handlePublicParams(data); + if (!bcancel) { + return; + } + // 参数处理 + let _context = data.context; + let _param = data.param; + Object.assign(_param ,{ query: query }); if (this.activeData) { - Object.assign(param, { srfreferdata: this.activeData }); + Object.assign(_param, { srfreferdata: this.activeData }); } // 错误信息国际化 let error: string = (this.$t('components.appMpicker.error') as any); @@ -162,7 +179,7 @@ export default class AppMpicker extends Vue { } else if(!this.acParams.interfaceName) { this.$Notice.error({ title: error, desc: miss+'interfaceName' }); } else { - this.service.getItems(this.acParams.serviceName,this.acParams.interfaceName, param).then((response: any) => { + this.service.getItems(this.acParams.serviceName,this.acParams.interfaceName, _context, _param).then((response: any) => { if (!response) { this.$Notice.error({ title: error, desc: requestException }); } else { @@ -216,6 +233,33 @@ export default class AppMpicker extends Vue { } } + /** + * 公共参数处理 + * + * @param {*} arg + * @returns + * @memberof AppMpicker + */ + public handlePublicParams(arg: any): boolean { + if (!this.activeData) { + this.$Notice.error({ title: (this.$t('components.appPicker.error') as any), desc: (this.$t('components.appPicker.formdataException') as any) }); + return false; + } + // 合并表单参数 + arg.param = this.viewparams ? JSON.parse(JSON.stringify(this.viewparams)) : {}; + arg.context = this.context ? JSON.parse(JSON.stringify(this.context)) : {}; + // 附加参数处理 + if (this.itemParam && this.itemParam.context) { + let _context = this.$util.formatData(this.activeData,arg.context,this.itemParam.context); + Object.assign(arg.context,_context); + } + if (this.itemParam && this.itemParam.param) { + let _param = this.$util.formatData(this.activeData,arg.param,this.itemParam.param); + Object.assign(arg.param,_param); + } + return true; + } + /** * 打开视图 * @@ -229,8 +273,15 @@ export default class AppMpicker extends Vue { if (this.pickupView && Object.keys(this.pickupView).length > 0) { // 参数处理 const view = { ...this.pickupView }; - let _viewparams = JSON.parse(JSON.stringify(this.viewparams)); - let _context = JSON.parse(JSON.stringify(this.context)); + // 公共参数处理 + let data: any = {}; + const bcancel: boolean = this.handlePublicParams(data); + if (!bcancel) { + return; + } + // 参数处理 + let _context = data.context; + let _viewparams = data.param; let _selectItems = JSON.parse(JSON.stringify(this.selectItems)); if(!Object.is(this.deKeyField,"srfkey")){ _selectItems.forEach((item:any, index:number)=>{ diff --git a/app_Web/src/components/app-picker-select-view/app-picker-select-view.less b/app_Web/src/components/app-picker-select-view/app-picker-select-view.less index 57233e0e4902e0d1d80926dc40073d0abd1d1fae..615cfab87e817af57b82ba413b4b95da56fa3ed6 100644 --- a/app_Web/src/components/app-picker-select-view/app-picker-select-view.less +++ b/app_Web/src/components/app-picker-select-view/app-picker-select-view.less @@ -22,6 +22,14 @@ .ivu-select-dropdown{ max-height: 200px; overflow: scroll; + margin: 0; + padding: 0; + .ivu-dropdown-menu{ + .view-container{ + margin: 0; + padding: 0; + } + } .tree-contant{ overflow:inherit; } diff --git a/app_Web/src/components/app-picker-select-view/app-picker-select-view.vue b/app_Web/src/components/app-picker-select-view/app-picker-select-view.vue index 3c83be111488f266caa674b5d1bbb375aca1c897..bbc960ff17f5e7986fba17469a5bd509a516dfad 100644 --- a/app_Web/src/components/app-picker-select-view/app-picker-select-view.vue +++ b/app_Web/src/components/app-picker-select-view/app-picker-select-view.vue @@ -255,21 +255,17 @@ export default class AppPickerSelectView extends Vue { return false; } // 合并表单参数 - arg.param = JSON.parse(JSON.stringify(this.viewparams)); - arg.context = JSON.parse(JSON.stringify(this.context)); + arg.param = this.viewparams ? JSON.parse(JSON.stringify(this.viewparams)) : {}; + arg.context = this.context ? JSON.parse(JSON.stringify(this.context)) : {}; // 附加参数处理 if (this.itemParam.context) { - let _context = this.$util.formatData(this.data,this.itemParam.context); + let _context = this.$util.formatData(this.data,arg.context,this.itemParam.context); Object.assign(arg.context,_context); } if (this.itemParam.param) { - let _param = this.$util.formatData(this.data,this.itemParam.param); + let _param = this.$util.formatData(this.data,arg.param,this.itemParam.param); Object.assign(arg.param,_param); } - if (this.itemParam.parentdata) { - let _parentdata = this.$util.formatData(this.data,this.itemParam.parentdata); - Object.assign(arg.param,_parentdata); - } return true; } diff --git a/app_Web/src/components/app-picker/app-picker.vue b/app_Web/src/components/app-picker/app-picker.vue index 2f32ba8336bb31a53bfb2942529a0ca11de9993c..1709a7ecd992cc80c6a6e30ad5ac4163f1a481be 100644 --- a/app_Web/src/components/app-picker/app-picker.vue +++ b/app_Web/src/components/app-picker/app-picker.vue @@ -410,9 +410,9 @@ export default class AppPicker extends Vue { // 判断打开方式 if (view.placement && !Object.is(view.placement, '')) { if (Object.is(view.placement, 'POPOVER')) { - this.openPopOver($event, view, _context, data); + this.openPopOver($event, view, _context, _param); } else { - this.openDrawer(view, _context, data); + this.openDrawer(view, _context, _param); } } else { this.openPopupModal(view, _context, _param); @@ -647,21 +647,17 @@ export default class AppPicker extends Vue { return false; } // 合并表单参数 - arg.param = JSON.parse(JSON.stringify(this.viewparams)); - arg.context = JSON.parse(JSON.stringify(this.context)); + arg.param = this.viewparams ? JSON.parse(JSON.stringify(this.viewparams)) : {}; + arg.context = this.context ? JSON.parse(JSON.stringify(this.context)) : {}; // 附加参数处理 - if (this.itemParam.context) { - let _context = this.$util.formatData(this.data,this.itemParam.context); + if (this.itemParam && this.itemParam.context) { + let _context = this.$util.formatData(this.data,arg.context,this.itemParam.context); Object.assign(arg.context,_context); } - if (this.itemParam.param) { - let _param = this.$util.formatData(this.data,this.itemParam.param); + if (this.itemParam && this.itemParam.param) { + let _param = this.$util.formatData(this.data,arg.param,this.itemParam.param); Object.assign(arg.param,_param); } - if (this.itemParam.parentdata) { - let _parentdata = this.$util.formatData(this.data,this.itemParam.parentdata); - Object.assign(arg.param,_parentdata); - } return true; } @@ -691,9 +687,9 @@ export default class AppPicker extends Vue { // 判断打开方式 if (view.placement && !Object.is(view.placement, '')) { if (Object.is(view.placement, 'POPOVER')) { - this.openPopOver($event, view, _context, data); + this.openPopOver($event, view, _context, _param); } else { - this.openDrawer(view, _context, data); + this.openDrawer(view, _context, _param); } } else { this.openPopupModal(view, _context, _param); diff --git a/app_Web/src/components/app-radio-group/app-radio-group.vue b/app_Web/src/components/app-radio-group/app-radio-group.vue index 5616296c2a539fe56114728278a8db42b9574201..3df0ab185148ebd826a3b3e07831ed3e3800edd5 100644 --- a/app_Web/src/components/app-radio-group/app-radio-group.vue +++ b/app_Web/src/components/app-radio-group/app-radio-group.vue @@ -6,7 +6,7 @@ + + \ No newline at end of file diff --git a/app_Web/src/components/codelist/codelist.vue b/app_Web/src/components/codelist/codelist.vue index 5bbe204d9c14b06ad668a3e0193c659e6ff9a98f..8a0f244b639028414ce11ac15ab6226a2481ab2e 100644 --- a/app_Web/src/components/codelist/codelist.vue +++ b/app_Web/src/components/codelist/codelist.vue @@ -37,14 +37,14 @@ export default class CodeList extends Vue { * 代码表类型 * * @type {string} - * @memberof AppCheckBox + * @memberof CodeList */ @Prop() public codelistType?: string; /** * 当前值 * @type {any} - * @memberof SelectPicker + * @memberof CodeList * */ @Prop() public value?: string; @@ -52,24 +52,56 @@ export default class CodeList extends Vue { /** * 获取或模式 * @type {boolean} - * @memberof SelectPicker + * @memberof CodeList */ @Prop({default:"STR"}) public renderMode?: string; /** * 文本分隔符 * @type {boolean} - * @memberof SelectPicker + * @memberof CodeList */ @Prop({default:'、'}) public textSeparator?: string; /** * 值分隔符 * @type {boolean} - * @memberof SelectPicker + * @memberof CodeList */ @Prop({default:','}) public valueSeparator?: string; + /** + * 传入表单数据 + * + * @type {*} + * @memberof CodeList + */ + @Prop() public data?: any; + + /** + * 传入额外参数 + * + * @type {*} + * @memberof CodeList + */ + @Prop() public itemParam?: any; + + /** + * 视图上下文 + * + * @type {*} + * @memberof CodeList + */ + @Prop() public context!: any; + + /** + * 视图参数 + * + * @type {*} + * @memberof CodeList + */ + @Prop() public viewparams!: any; + /** * 是否为空 * @@ -101,7 +133,7 @@ export default class CodeList extends Vue { */ public isUseLangres:boolean = false; - /** + /** * 数据值变化 * * @param {*} newval @@ -112,7 +144,18 @@ export default class CodeList extends Vue { @Watch('value') public onValueChange(newVal: any, oldVal: any) { this.dataHandle(); + } + /** + * 监听表单数据变化 + * + * @memberof CodeList + */ + @Watch('data',{immediate:true,deep:true}) + onDataChange(newVal: any, oldVal: any) { + if(newVal){ + this.dataHandle(); + } } /** @@ -131,7 +174,13 @@ export default class CodeList extends Vue { this.ifEmpty = false; // 动态代码表处理 if (Object.is(this.codelistType, "DYNAMIC")) { - this.codeListService.getItems(this.tag).then((res: any) => { + // 公共参数处理 + let data: any = {}; + this.handlePublicParams(data); + // 参数处理 + let _context = data.context; + let _param = data.param; + this.codeListService.getItems(this.tag,_context,_param).then((res:any) => { let items = res; _this.setItems(items, _this); }).catch((error: any) => { @@ -209,6 +258,28 @@ export default class CodeList extends Vue { } } + /** + * 公共参数处理 + * + * @param {*} arg + * @returns + * @memberof CodeList + */ + public handlePublicParams(arg: any) { + // 合并表单参数 + arg.param = this.viewparams ? JSON.parse(JSON.stringify(this.viewparams)) : {}; + arg.context = this.context ? JSON.parse(JSON.stringify(this.context)) : {}; + // 附加参数处理 + if (this.itemParam && this.itemParam.context) { + let _context = this.$util.formatData(this.data,arg.context,this.itemParam.context); + Object.assign(arg.context,_context); + } + if (this.itemParam && this.itemParam.param) { + let _param = this.$util.formatData(this.data,arg.param,this.itemParam.param); + Object.assign(arg.param,_param); + } + } + } diff --git a/app_Web/src/components/context-menu/context-menu.less b/app_Web/src/components/context-menu/context-menu.less index d72fa7a7fc7af34037238bd047d7cc263eea688b..6adfa5fc566cd7ffd863c03c23adb38e826648cd 100644 --- a/app_Web/src/components/context-menu/context-menu.less +++ b/app_Web/src/components/context-menu/context-menu.less @@ -1,52 +1,56 @@ .context-menu-container { - // width: 100vw; - // height: 100vh; - // z-index: -10000; - // position: absolute; - // top: 0; - // left: 0; - line-height: 1; + // width: 100vw; + // height: 100vh; + // z-index: -10000; + // position: absolute; + // top: 0; + // left: 0; + // line-height: 1; + z-index: 10001; - .context-menu-content { - z-index: 10001; - position: absolute; - background: #FFF; - // border: 1px solid #e3e3e3; - } + .context-menu-content { + position: absolute; + background: #FFF; + // border: 1px solid #e3e3e3; + .ivu-divider{ + width: 100%; + } - .context-menus { + } - .context-menus-item { - list-style: none; - line-height: 36px; - padding: 0 13px; - margin: 0; - font-size: 14px; - color: #606266; - cursor: pointer; - outline: none; - display: flex; - - .icon { - display: flex; - justify-content: center; - align-items: center; - font-size: 16px; - width: 20px; - margin-right: 8px; - } - } - - .context-menus-item:hover { - background-color: #ecf5ff; - color: #66b1ff; - } - } + .context-menus { + + .context-menus-item { + list-style: none; + line-height: 36px; + padding: 0 13px; + margin: 0; + font-size: 14px; + color: #606266; + cursor: pointer; + outline: none; + display: flex; + + .icon { + display: flex; + justify-content: center; + align-items: center; + font-size: 16px; + width: 20px; + margin-right: 8px; + } + } + + .context-menus-item:hover { + background-color: #ecf5ff; + color: #66b1ff; + } + } } .context-menu { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; } \ No newline at end of file diff --git a/app_Web/src/components/dropdown-list-dynamic/dropdown-list-dynamic.vue b/app_Web/src/components/dropdown-list-dynamic/dropdown-list-dynamic.vue index 2346928e325a1b4963d4ec8edd49c137a87c9bac..c5e7d4b944aba7a101c01a90785c55c3bb2f4be3 100644 --- a/app_Web/src/components/dropdown-list-dynamic/dropdown-list-dynamic.vue +++ b/app_Web/src/components/dropdown-list-dynamic/dropdown-list-dynamic.vue @@ -81,7 +81,7 @@ export default class DropDownListDynamic extends Vue { @Watch('data',{ deep: true }) onDataChange(newVal: any, val: any){ if(newVal){ - this.handleOtherParam(); + } } @@ -145,26 +145,40 @@ export default class DropDownListDynamic extends Vue { public items: any[] = []; /** - * 处理额外参数 - */ - public handleOtherParam(){ - if(this.itemParam){ - this.queryParam = {}; - this.otherParam = this.itemParam.parentdata; - if(this.otherParam && Object.keys(this.otherParam).length >0){ - Object.keys(this.otherParam).forEach((item:any) =>{ - let value: string | null = this.otherParam[item]; - if (value && value.startsWith('%') && value.endsWith('%')) { - const key = value.substring(1, value.length - 1); - if (this.data && this.data.hasOwnProperty(key)) { - value = (this.data[key] !== null && this.data[key] !== undefined) ? this.data[key] : null; - } else { - value = null; - } - } - Object.assign(this.queryParam,{[item]:value}); - }) - } + * 视图上下文 + * + * @type {*} + * @memberof AppAutocomplete + */ + @Prop() public context!: any; + + /** + * 视图参数 + * + * @type {*} + * @memberof AppFormDRUIPart + */ + @Prop() public viewparams!: any; + + /** + * 公共参数处理 + * + * @param {*} arg + * @returns + * @memberof DropDownListDynamic + */ + public handlePublicParams(arg: any) { + // 合并表单参数 + arg.param = this.viewparams ? JSON.parse(JSON.stringify(this.viewparams)) : {}; + arg.context = this.context ? JSON.parse(JSON.stringify(this.context)) : {}; + // 附加参数处理 + if (this.itemParam.context) { + let _context = this.$util.formatData(this.data,arg.context,this.itemParam.context); + Object.assign(arg.context,_context); + } + if (this.itemParam.param) { + let _param = this.$util.formatData(this.data,arg.param,this.itemParam.param); + Object.assign(arg.param,_param); } } @@ -182,7 +196,13 @@ export default class DropDownListDynamic extends Vue { console.log(`----${this.tag}----代码表不存在`); } }else if(this.tag && Object.is(this.codelistType,"DYNAMIC")){ - this.codeListService.getItems(this.tag,{},this.queryParam).then((res:any) => { + // 公共参数处理 + let data: any = {}; + this.handlePublicParams(data); + // 参数处理 + let _context = data.context; + let _param = data.param; + this.codeListService.getItems(this.tag,_context,_param).then((res:any) => { this.items = res; }).catch((error:any) => { console.log(`----${this.tag}----代码表不存在`); @@ -199,7 +219,13 @@ export default class DropDownListDynamic extends Vue { public onClick($event:any){ if($event){ if(this.tag && Object.is(this.codelistType,"DYNAMIC")){ - this.codeListService.getItems(this.tag,{},this.queryParam).then((res:any) => { + // 公共参数处理 + let data: any = {}; + this.handlePublicParams(data); + // 参数处理 + let _context = data.context; + let _param = data.param; + this.codeListService.getItems(this.tag,_context,_param).then((res:any) => { this.items = res; }).catch((error:any) => { console.log(`----${this.tag}----代码表不存在`); diff --git a/app_Web/src/components/dropdown-list-mpicker/dropdown-list-mpicker.vue b/app_Web/src/components/dropdown-list-mpicker/dropdown-list-mpicker.vue index a9a1cbf66f0edd628b1e3e2ed59eed0d9a6e5d46..de6bd027108295a5f217e85095508fcebd8549fe 100644 --- a/app_Web/src/components/dropdown-list-mpicker/dropdown-list-mpicker.vue +++ b/app_Web/src/components/dropdown-list-mpicker/dropdown-list-mpicker.vue @@ -84,6 +84,38 @@ export default class DropDownListMpicker extends Vue { */ @Prop() public placeholder?: string; + /** + * 传入额外参数 + * + * @type {*} + * @memberof DropDownListMpicker + */ + @Prop() public itemParam?: any; + + /** + * 视图上下文 + * + * @type {*} + * @memberof DropDownListMpicker + */ + @Prop() public context!: any; + + /** + * 视图参数 + * + * @type {*} + * @memberof DropDownListMpicker + */ + @Prop() public viewparams!: any; + + /** + * 传入表单数据 + * + * @type {*} + * @memberof DropDownListMpicker + */ + @Prop() public data?: any; + /** * 计算属性(当前值) * @type {any} @@ -113,6 +145,28 @@ export default class DropDownListMpicker extends Vue { */ public items: any[] = []; + /** + * 公共参数处理 + * + * @param {*} arg + * @returns + * @memberof DropDownList + */ + public handlePublicParams(arg: any) { + // 合并表单参数 + arg.param = this.viewparams ? JSON.parse(JSON.stringify(this.viewparams)) : {}; + arg.context = this.context ? JSON.parse(JSON.stringify(this.context)) : {}; + // 附加参数处理 + if (this.itemParam.context) { + let _context = this.$util.formatData(this.data,arg.context,this.itemParam.context); + Object.assign(arg.context,_context); + } + if (this.itemParam.param) { + let _param = this.$util.formatData(this.data,arg.param,this.itemParam.param); + Object.assign(arg.param,_param); + } + } + /** * vue 生命周期 * @@ -127,7 +181,13 @@ export default class DropDownListMpicker extends Vue { console.log(`----${this.tag}----代码表不存在`); } }else if(this.tag && Object.is(this.codelistType,"DYNAMIC")){ - this.codeListService.getItems(this.tag).then((res:any) => { + // 公共参数处理 + let data: any = {}; + this.handlePublicParams(data); + // 参数处理 + let _context = data.context; + let _param = data.param; + this.codeListService.getItems(this.tag,_context,_param).then((res:any) => { this.items = res; }).catch((error:any) => { console.log(`----${this.tag}----代码表不存在`); @@ -143,7 +203,13 @@ export default class DropDownListMpicker extends Vue { */ public onClick($event:any){ if(this.tag && Object.is(this.codelistType,"DYNAMIC")){ - this.codeListService.getItems(this.tag).then((res:any) => { + // 公共参数处理 + let data: any = {}; + this.handlePublicParams(data); + // 参数处理 + let _context = data.context; + let _param = data.param; + this.codeListService.getItems(this.tag,_context,_param).then((res:any) => { this.items = res; }).catch((error:any) => { console.log(`----${this.tag}----代码表不存在`); diff --git a/app_Web/src/components/dropdown-list/dropdown-list.vue b/app_Web/src/components/dropdown-list/dropdown-list.vue index 3472e8532f6601386281cebcf7af76d699e12641..dcc055caabc93c1ce34520aa1c8a0022355a1e7b 100644 --- a/app_Web/src/components/dropdown-list/dropdown-list.vue +++ b/app_Web/src/components/dropdown-list/dropdown-list.vue @@ -81,7 +81,7 @@ export default class DropDownList extends Vue { @Watch('data',{ deep: true }) onDataChange(newVal: any, val: any){ if(newVal){ - this.handleOtherParam(); + } } @@ -93,6 +93,22 @@ export default class DropDownList extends Vue { */ @Prop() public itemParam?: any; + /** + * 视图上下文 + * + * @type {*} + * @memberof AppAutocomplete + */ + @Prop() public context!: any; + + /** + * 视图参数 + * + * @type {*} + * @memberof AppFormDRUIPart + */ + @Prop() public viewparams!: any; + /** * 是否禁用 * @type {any} @@ -145,26 +161,24 @@ export default class DropDownList extends Vue { public items: any[] = []; /** - * 处理额外参数 - */ - public handleOtherParam(){ - if(this.itemParam){ - this.queryParam = {}; - this.otherParam = this.itemParam.parentdata; - if(this.otherParam && Object.keys(this.otherParam).length >0){ - Object.keys(this.otherParam).forEach((item:any) =>{ - let value: string | null = this.otherParam[item]; - if (value && value.startsWith('%') && value.endsWith('%')) { - const key = value.substring(1, value.length - 1); - if (this.data && this.data.hasOwnProperty(key)) { - value = (this.data[key] !== null && this.data[key] !== undefined) ? this.data[key] : null; - } else { - value = null; - } - } - Object.assign(this.queryParam,{[item]:value}); - }) - } + * 公共参数处理 + * + * @param {*} arg + * @returns + * @memberof DropDownList + */ + public handlePublicParams(arg: any) { + // 合并表单参数 + arg.param = this.viewparams ? JSON.parse(JSON.stringify(this.viewparams)) : {}; + arg.context = this.context ? JSON.parse(JSON.stringify(this.context)) : {}; + // 附加参数处理 + if (this.itemParam && this.itemParam.context) { + let _context = this.$util.formatData(this.data,arg.context,this.itemParam.context); + Object.assign(arg.context,_context); + } + if (this.itemParam && this.itemParam.param) { + let _param = this.$util.formatData(this.data,arg.param,this.itemParam.param); + Object.assign(arg.param,_param); } } @@ -182,7 +196,13 @@ export default class DropDownList extends Vue { console.log(`----${this.tag}----代码表不存在`); } }else if(this.tag && Object.is(this.codelistType,"DYNAMIC")){ - this.codeListService.getItems(this.tag,{},this.queryParam).then((res:any) => { + // 公共参数处理 + let data: any = {}; + this.handlePublicParams(data); + // 参数处理 + let _context = data.context; + let _param = data.param; + this.codeListService.getItems(this.tag,_context,_param).then((res:any) => { this.items = res; }).catch((error:any) => { console.log(`----${this.tag}----代码表不存在`); @@ -199,7 +219,13 @@ export default class DropDownList extends Vue { public onClick($event:any){ if($event){ if(this.tag && Object.is(this.codelistType,"DYNAMIC")){ - this.codeListService.getItems(this.tag,{},this.queryParam).then((res:any) => { + // 公共参数处理 + let data: any = {}; + this.handlePublicParams(data); + // 参数处理 + let _context = data.context; + let _param = data.param; + this.codeListService.getItems(this.tag,_context,_param).then((res:any) => { this.items = res; }).catch((error:any) => { console.log(`----${this.tag}----代码表不存在`); diff --git a/app_Web/src/components/ibiz-group-picker/ibiz-group-picker.vue b/app_Web/src/components/ibiz-group-picker/ibiz-group-picker.vue index 5f76da24d0b793d0cfcd100760b3b2b6ace0d0c2..b392912b06a5df80d2dc784083a670a6451614a7 100644 --- a/app_Web/src/components/ibiz-group-picker/ibiz-group-picker.vue +++ b/app_Web/src/components/ibiz-group-picker/ibiz-group-picker.vue @@ -275,26 +275,30 @@ export default class IBizGroupPicker extends Vue { \ No newline at end of file diff --git a/app_Web/src/engine/view/edit-view-engine.ts b/app_Web/src/engine/view/edit-view-engine.ts index cf159ec9981b4e63a1405777d77f053b92afbf80..88aaa365e40b533d661c6bd2aa45d3babccd0205 100644 --- a/app_Web/src/engine/view/edit-view-engine.ts +++ b/app_Web/src/engine/view/edit-view-engine.ts @@ -250,6 +250,7 @@ export default class EditViewEngine extends ViewEngine { if (viewdata && info && !Object.is(info, '') && this.view.$tabPageExp && (viewdata.srfTitle.indexOf(" - ") === -1)) { this.view.$tabPageExp.setCurPageCaption(viewdata.srfCaption, viewdata.srfTitle, info); this.view.model.srfTitle = `${this.view.$t(viewdata.srfTitle)} - ${viewdata.dataInfo}`; + this.view.$emit('viewModelChange', this.view.model.srfTitle); } } diff --git a/app_Web/src/environments/environment.ts b/app_Web/src/environments/environment.ts index 4aabf46c6d3f5bc84dd18735fdb3052d59790b67..5df63775825b02a670e18cb259b791017f24a1db 100644 --- a/app_Web/src/environments/environment.ts +++ b/app_Web/src/environments/environment.ts @@ -19,6 +19,8 @@ export const Environment = { isAppMode: true, //统一地址 uniteAddress: "http://172.16.100.202:8114", + // 是否开启权限认证 + enablePermissionValid:false, // 是否为开发模式 devMode: true, // 项目模板地址 diff --git a/app_Web/src/ibiz-project-core/components/action-history/action-history.less b/app_Web/src/ibiz-project-core/components/action-history/action-history.less index 409d034c9f95a99e3cbe3deb0f265124ec3e16b1..14c73de6ee31ecd2fafd6fc79f5e3aa83de416cf 100644 --- a/app_Web/src/ibiz-project-core/components/action-history/action-history.less +++ b/app_Web/src/ibiz-project-core/components/action-history/action-history.less @@ -2,7 +2,19 @@ height: 100%; margin-bottom: 6px; + >.action-history-header { + height: 35px; + padding: 6px 0px; + border-bottom: 1px solid var(--view-dividing-line-color-bright); + + >.title { + font-size: 16px; + font-weight: 700; + } + } + >.action-wrapper { + height: calc(100% - 36px); >.action-item { min-height: 22px; diff --git a/app_Web/src/ibiz-project-core/components/action-history/action-history.tsx b/app_Web/src/ibiz-project-core/components/action-history/action-history.tsx index fca36b3b506c86e8070902cc557aed529dc010f7..7a01fa5412f2bd63dab99fa61f8480fe01cdce48 100644 --- a/app_Web/src/ibiz-project-core/components/action-history/action-history.tsx +++ b/app_Web/src/ibiz-project-core/components/action-history/action-history.tsx @@ -26,7 +26,7 @@ export class ActionHistory extends Vue { * * @memberof ActionHistory */ - @Watch('items') + @Watch('items', { immediate: true }) public itemsWatch(): void { this.formatData(); } @@ -48,18 +48,6 @@ export class ActionHistory extends Vue { */ protected actionType: any[] = []; - /** - * 组件加载完毕 - * - * @memberof ActionHistory - */ - public created(): void { - const codeList2 = this.$store.getters.getCodeList('Action__type'); - if (codeList2) { - this.actionType.push(...codeList2.items); - } - } - /** * 格式化数据 * @@ -67,6 +55,12 @@ export class ActionHistory extends Vue { * @memberof ActionHistory */ protected formatData(): void { + if (this.actionType.length === 0) { + const codeList2 = this.$store.getters.getCodeList('Action__type'); + if (codeList2) { + this.actionType.push(...codeList2.items); + } + } this.items.forEach((item: ActionItem) => { const data = this.actionType.find(code => Object.is(code.value, item.action)); if (data) { @@ -82,7 +76,6 @@ export class ActionHistory extends Vue { * @memberof ActionHistory */ public async loadChildren(item: ActionItem): Promise { - this.$store.getters.getCodeList('key'); if (item && item.isLoadedChildren === true) { item.expand = !item.expand; this.$forceUpdate(); @@ -153,7 +146,7 @@ export class ActionHistory extends Vue { return
{item.date},由 {item.actor} {item.actionText}
{Object.is(item.action, 'edited') && this.load ?
- this.loadChildren(item)}/> + this.loadChildren(item)} />
: null}
; } @@ -184,6 +177,9 @@ export class ActionHistory extends Vue { */ public render(): any { return
+
+ 历史记录 +
{this.renderAction()}
; } diff --git a/app_Web/src/ibiz-project-core/components/product-list/product-list.tsx b/app_Web/src/ibiz-project-core/components/product-list/product-list.tsx index 39f166cac5fa9a0c9540cf61024b3cd3f0ac075f..95824d3820241d3248267680e76a7eefabc54da1 100644 --- a/app_Web/src/ibiz-project-core/components/product-list/product-list.tsx +++ b/app_Web/src/ibiz-project-core/components/product-list/product-list.tsx @@ -69,16 +69,16 @@ export class ProductList extends Vue { ; diff --git a/app_Web/src/ibiz-project-core/components/project-list/project-list.tsx b/app_Web/src/ibiz-project-core/components/project-list/project-list.tsx index f97e401be5a5fb2c02f6650c5abab1dbcc1a9fbb..1545c32b6a687a9c8810dd5feabbf42e37a9579b 100644 --- a/app_Web/src/ibiz-project-core/components/project-list/project-list.tsx +++ b/app_Web/src/ibiz-project-core/components/project-list/project-list.tsx @@ -69,13 +69,13 @@ export class ProjectList extends Vue { ; diff --git a/app_Web/src/interface/entity/bug.ts b/app_Web/src/interface/entity/bug.ts index 27ebb1aff763cb722ce02df02c8b42a9c0fc10c1..d0a1c8c15eed584432eb30e1484f49d0b8252371 100644 --- a/app_Web/src/interface/entity/bug.ts +++ b/app_Web/src/interface/entity/bug.ts @@ -270,6 +270,14 @@ export interface Bug { */ resolvedby?: any; + /** + * 解决版本 + * + * @returns {*} + * @memberof Bug + */ + resolvedbuild?: any; + /** * 优先级 * @@ -461,12 +469,4 @@ export interface Bug { * @memberof Bug */ testtask?: any; - - /** - * 解决版本 - * - * @returns {*} - * @memberof Bug - */ - resolvedbuild?: any; } \ No newline at end of file diff --git a/app_Web/src/interface/entity/case.ts b/app_Web/src/interface/entity/case.ts index 2730f0d97338b2a3ea44259afbc4b1db6779346d..1f7cff1aecb5be880e2949753b74635ef6c91f4d 100644 --- a/app_Web/src/interface/entity/case.ts +++ b/app_Web/src/interface/entity/case.ts @@ -333,4 +333,28 @@ export interface Case { * @memberof Case */ module?: any; + + /** + * 模块名称 + * + * @returns {*} + * @memberof Case + */ + modulename?: any; + + /** + * 需求名称 + * + * @returns {*} + * @memberof Case + */ + storyname?: any; + + /** + * 产品名称 + * + * @returns {*} + * @memberof Case + */ + productname?: any; } \ No newline at end of file diff --git a/app_Web/src/interface/entity/company.ts b/app_Web/src/interface/entity/company.ts new file mode 100644 index 0000000000000000000000000000000000000000..14561a03f334152744e312ee69c075f8b3c99462 --- /dev/null +++ b/app_Web/src/interface/entity/company.ts @@ -0,0 +1,96 @@ +/** + * 公司 + * + * @export + * @interface Company + */ +export interface Company { + + /** + * admins + * + * @returns {*} + * @memberof Company + */ + admins?: any; + + /** + * 传真 + * + * @returns {*} + * @memberof Company + */ + fax?: any; + + /** + * 逻辑删除标志 + * + * @returns {*} + * @memberof Company + */ + deleted?: any; + + /** + * 官网 + * + * @returns {*} + * @memberof Company + */ + website?: any; + + /** + * id + * + * @returns {*} + * @memberof Company + */ + id?: any; + + /** + * 邮政编码 + * + * @returns {*} + * @memberof Company + */ + zipcode?: any; + + /** + * 通讯地址 + * + * @returns {*} + * @memberof Company + */ + address?: any; + + /** + * 内网 + * + * @returns {*} + * @memberof Company + */ + backyard?: any; + + /** + * 公司名称 + * + * @returns {*} + * @memberof Company + */ + name?: any; + + /** + * 匿名登陆 + * + * @returns {*} + * @memberof Company + */ + guest?: any; + + /** + * 联系电话 + * + * @returns {*} + * @memberof Company + */ + phone?: any; +} \ No newline at end of file diff --git a/app_Web/src/interface/entity/dept.ts b/app_Web/src/interface/entity/dept.ts new file mode 100644 index 0000000000000000000000000000000000000000..26494e4c49abf4d378c2705415da083c362e9d4f --- /dev/null +++ b/app_Web/src/interface/entity/dept.ts @@ -0,0 +1,96 @@ +/** + * 部门 + * + * @export + * @interface Dept + */ +export interface Dept { + + /** + * 负责人 + * + * @returns {*} + * @memberof Dept + */ + manager?: any; + + /** + * grade + * + * @returns {*} + * @memberof Dept + */ + grade?: any; + + /** + * function + * + * @returns {*} + * @memberof Dept + */ + function?: any; + + /** + * order + * + * @returns {*} + * @memberof Dept + */ + order?: any; + + /** + * path + * + * @returns {*} + * @memberof Dept + */ + path?: any; + + /** + * position + * + * @returns {*} + * @memberof Dept + */ + position?: any; + + /** + * id + * + * @returns {*} + * @memberof Dept + */ + id?: any; + + /** + * 部门名称 + * + * @returns {*} + * @memberof Dept + */ + name?: any; + + /** + * 上级部门 + * + * @returns {*} + * @memberof Dept + */ + parentname?: any; + + /** + * parent + * + * @returns {*} + * @memberof Dept + */ + parent?: any; + + /** + * 无子部门 + * + * @returns {*} + * @memberof Dept + */ + isleaf?: any; +} \ No newline at end of file diff --git a/app_Web/src/interface/entity/group.ts b/app_Web/src/interface/entity/group.ts new file mode 100644 index 0000000000000000000000000000000000000000..bd9ba57a6eb6b7b2b24469c5ddfd9c064c4bd104 --- /dev/null +++ b/app_Web/src/interface/entity/group.ts @@ -0,0 +1,48 @@ +/** + * 群组 + * + * @export + * @interface Group + */ +export interface Group { + + /** + * acl + * + * @returns {*} + * @memberof Group + */ + acl?: any; + + /** + * 分组描述 + * + * @returns {*} + * @memberof Group + */ + desc?: any; + + /** + * ID + * + * @returns {*} + * @memberof Group + */ + id?: any; + + /** + * 分组名称 + * + * @returns {*} + * @memberof Group + */ + name?: any; + + /** + * role + * + * @returns {*} + * @memberof Group + */ + role?: any; +} \ No newline at end of file diff --git a/app_Web/src/interface/entity/ibz-subtask.ts b/app_Web/src/interface/entity/ibz-subtask.ts new file mode 100644 index 0000000000000000000000000000000000000000..ec98c6f666a644236c1058b6db4c1c7762dbebdc --- /dev/null +++ b/app_Web/src/interface/entity/ibz-subtask.ts @@ -0,0 +1,352 @@ +/** + * 子任务 + * + * @export + * @interface IBZ_SUBTASK + */ +export interface IBZ_SUBTASK { + + /** + * 由谁取消 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + canceledby?: any; + + /** + * 预计剩余 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + left?: any; + + /** + * 创建日期 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + openeddate?: any; + + /** + * 标题颜色 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + color?: any; + + /** + * 编号 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + id?: any; + + /** + * 由谁完成 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + finishedby?: any; + + /** + * 完成者列表 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + finishedlist?: any; + + /** + * 实际开始 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + realstarted?: any; + + /** + * 由谁关闭 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + closedby?: any; + + /** + * 子状态 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + substatus?: any; + + /** + * 关闭原因 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + closedreason?: any; + + /** + * 最后修改日期 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + lastediteddate?: any; + + /** + * 指派日期 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + assigneddate?: any; + + /** + * 优先级 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + pri?: any; + + /** + * 最后修改 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + lasteditedby?: any; + + /** + * 任务状态 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + status?: any; + + /** + * 任务名称 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + name?: any; + + /** + * 关闭时间 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + closeddate?: any; + + /** + * 任务类型 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + type?: any; + + /** + * 指派给 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + assignedto?: any; + + /** + * 任务描述 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + desc?: any; + + /** + * 预计开始 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + eststarted?: any; + + /** + * 截止日期 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + deadline?: any; + + /** + * 已删除 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + deleted?: any; + + /** + * 抄送给 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + mailto?: any; + + /** + * 总计消耗 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + consumed?: any; + + /** + * 最初预计 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + estimate?: any; + + /** + * 由谁创建 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + openedby?: any; + + /** + * 取消时间 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + canceleddate?: any; + + /** + * 实际完成 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + finisheddate?: any; + + /** + * 所属模块 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + modulename?: any; + + /** + * 相关需求 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + storyname?: any; + + /** + * 所属项目 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + projectname?: any; + + /** + * 产品 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + product?: any; + + /** + * 需求版本 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + storyversion?: any; + + /** + * 产品 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + productname?: any; + + /** + * 父任务 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + parentname?: any; + + /** + * 所属项目 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + project?: any; + + /** + * 所属模块 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + module?: any; + + /** + * 相关需求 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + story?: any; + + /** + * 父任务 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + parent?: any; + + /** + * 来源Bug + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + frombug?: any; + + /** + * 持续时间 + * + * @returns {*} + * @memberof IBZ_SUBTASK + */ + duration?: any; +} \ No newline at end of file diff --git a/app_Web/src/interface/entity/product-stats.ts b/app_Web/src/interface/entity/product-stats.ts new file mode 100644 index 0000000000000000000000000000000000000000..dc2bce47abf3756caf6a4646a976fd8984cc156f --- /dev/null +++ b/app_Web/src/interface/entity/product-stats.ts @@ -0,0 +1,160 @@ +/** + * 产品统计 + * + * @export + * @interface ProductStats + */ +export interface ProductStats { + + /** + * 产品编号 + * + * @returns {*} + * @memberof ProductStats + */ + id?: any; + + /** + * 已删除 + * + * @returns {*} + * @memberof ProductStats + */ + deleted?: any; + + /** + * 需求总数 + * + * @returns {*} + * @memberof ProductStats + */ + storycnt?: any; + + /** + * 计划总数 + * + * @returns {*} + * @memberof ProductStats + */ + productplancnt?: any; + + /** + * 发布总数 + * + * @returns {*} + * @memberof ProductStats + */ + releasecnt?: any; + + /** + * 未开始需求数 + * + * @returns {*} + * @memberof ProductStats + */ + waitstorycnt?: any; + + /** + * 已计划需求数 + * + * @returns {*} + * @memberof ProductStats + */ + plannedstorycnt?: any; + + /** + * 开发中需求数 + * + * @returns {*} + * @memberof ProductStats + */ + developingstorycnt?: any; + + /** + * 测试中需求数 + * + * @returns {*} + * @memberof ProductStats + */ + testingstorycnt?: any; + + /** + * 已发布需求数 + * + * @returns {*} + * @memberof ProductStats + */ + releasedstorycnt?: any; + + /** + * 未过期计划数 + * + * @returns {*} + * @memberof ProductStats + */ + unendproductplancnt?: any; + + /** + * 剩余计划率 + * + * @returns {*} + * @memberof ProductStats + */ + unendproductplanrate?: any; + + /** + * 关联项目数 + * + * @returns {*} + * @memberof ProductStats + */ + resprojectcnt?: any; + + /** + * 未完成关联项目数 + * + * @returns {*} + * @memberof ProductStats + */ + undoneresprojectcnt?: any; + + /** + * 进行项目率 + * + * @returns {*} + * @memberof ProductStats + */ + undoneresprojectrate?: any; + + /** + * 维护中发布数 + * + * @returns {*} + * @memberof ProductStats + */ + normalreleasecnt?: any; + + /** + * 维护发布率 + * + * @returns {*} + * @memberof ProductStats + */ + normalreleaserate?: any; + + /** + * 激活需求数 + * + * @returns {*} + * @memberof ProductStats + */ + activestorycnt?: any; + + /** + * 未解决Bug数 + * + * @returns {*} + * @memberof ProductStats + */ + activebugcnt?: any; +} \ No newline at end of file diff --git a/app_Web/src/interface/entity/product.ts b/app_Web/src/interface/entity/product.ts index 303d0db81a262bc8f85e17d14ef7cc63e8b39229..d07f7334df2a1a518391d27c89d8a578949e6ecf 100644 --- a/app_Web/src/interface/entity/product.ts +++ b/app_Web/src/interface/entity/product.ts @@ -157,4 +157,36 @@ export interface Product { * @memberof Product */ line?: any; + + /** + * 未解决Bug数 + * + * @returns {*} + * @memberof Product + */ + activebugcnt?: any; + + /** + * 计划总数 + * + * @returns {*} + * @memberof Product + */ + productplancnt?: any; + + /** + * 发布总数 + * + * @returns {*} + * @memberof Product + */ + releasecnt?: any; + + /** + * 激活需求数 + * + * @returns {*} + * @memberof Product + */ + activestorycnt?: any; } \ No newline at end of file diff --git a/app_Web/src/interface/entity/project-stats.ts b/app_Web/src/interface/entity/project-stats.ts new file mode 100644 index 0000000000000000000000000000000000000000..de720e2941a4f0014109dccfa99d6a982c5d11e2 --- /dev/null +++ b/app_Web/src/interface/entity/project-stats.ts @@ -0,0 +1,160 @@ +/** + * 项目统计 + * + * @export + * @interface ProjectStats + */ +export interface ProjectStats { + + /** + * 项目编号 + * + * @returns {*} + * @memberof ProjectStats + */ + id?: any; + + /** + * 需求总数 + * + * @returns {*} + * @memberof ProjectStats + */ + storycnt?: any; + + /** + * 任务总数 + * + * @returns {*} + * @memberof ProjectStats + */ + taskcnt?: any; + + /** + * 任务最初预计总工时 + * + * @returns {*} + * @memberof ProjectStats + */ + totalestimate?: any; + + /** + * 任务消耗总工时 + * + * @returns {*} + * @memberof ProjectStats + */ + totalconsumed?: any; + + /** + * 任务预计剩余总工时 + * + * @returns {*} + * @memberof ProjectStats + */ + totalleft?: any; + + /** + * 未完成任务总数 + * + * @returns {*} + * @memberof ProjectStats + */ + undonetaskcnt?: any; + + /** + * 关闭需求总数 + * + * @returns {*} + * @memberof ProjectStats + */ + closedstorycnt?: any; + + /** + * Bug总数 + * + * @returns {*} + * @memberof ProjectStats + */ + bugcnt?: any; + + /** + * 未解决Bug总数 + * + * @returns {*} + * @memberof ProjectStats + */ + activebugcnt?: any; + + /** + * 未关闭需求总数 + * + * @returns {*} + * @memberof ProjectStats + */ + unclosedstorycnt?: any; + + /** + * 已结束任务总数 + * + * @returns {*} + * @memberof ProjectStats + */ + finishtaskcnt?: any; + + /** + * 已解决Bug总数 + * + * @returns {*} + * @memberof ProjectStats + */ + finishbugcnt?: any; + + /** + * 完成任务率 + * + * @returns {*} + * @memberof ProjectStats + */ + donetaskrate?: any; + + /** + * 关闭需求率 + * + * @returns {*} + * @memberof ProjectStats + */ + closedstoryrate?: any; + + /** + * 解决Bug率 + * + * @returns {*} + * @memberof ProjectStats + */ + finishbugrate?: any; + + /** + * 已删除 + * + * @returns {*} + * @memberof ProjectStats + */ + deleted?: any; + + /** + * 工时 + * + * @returns {*} + * @memberof ProjectStats + */ + time?: any; + + /** + * 工时类型 + * + * @returns {*} + * @memberof ProjectStats + */ + type?: any; +} \ No newline at end of file diff --git a/app_Web/src/interface/entity/project.ts b/app_Web/src/interface/entity/project.ts index 03b8df0f14562864fe4452c880797dcd817970c5..ce7eff6a4ce72abfa0e56e972b1231ff403b7ce5 100644 --- a/app_Web/src/interface/entity/project.ts +++ b/app_Web/src/interface/entity/project.ts @@ -261,4 +261,28 @@ export interface Project { * @memberof Project */ parent?: any; + + /** + * 任务总数 + * + * @returns {*} + * @memberof Project + */ + taskcnt?: any; + + /** + * Bug总数 + * + * @returns {*} + * @memberof Project + */ + bugcnt?: any; + + /** + * 需求总数 + * + * @returns {*} + * @memberof Project + */ + storycnt?: any; } \ No newline at end of file diff --git a/app_Web/src/interface/entity/sub-task.ts b/app_Web/src/interface/entity/sub-task.ts new file mode 100644 index 0000000000000000000000000000000000000000..209bc5197615018ef629b43a58d70e73ad5518d9 --- /dev/null +++ b/app_Web/src/interface/entity/sub-task.ts @@ -0,0 +1,352 @@ +/** + * 子任务 + * + * @export + * @interface SubTask + */ +export interface SubTask { + + /** + * 由谁取消 + * + * @returns {*} + * @memberof SubTask + */ + canceledby?: any; + + /** + * 预计剩余 + * + * @returns {*} + * @memberof SubTask + */ + left?: any; + + /** + * 创建日期 + * + * @returns {*} + * @memberof SubTask + */ + openeddate?: any; + + /** + * 标题颜色 + * + * @returns {*} + * @memberof SubTask + */ + color?: any; + + /** + * 编号 + * + * @returns {*} + * @memberof SubTask + */ + id?: any; + + /** + * 由谁完成 + * + * @returns {*} + * @memberof SubTask + */ + finishedby?: any; + + /** + * 完成者列表 + * + * @returns {*} + * @memberof SubTask + */ + finishedlist?: any; + + /** + * 实际开始 + * + * @returns {*} + * @memberof SubTask + */ + realstarted?: any; + + /** + * 由谁关闭 + * + * @returns {*} + * @memberof SubTask + */ + closedby?: any; + + /** + * 子状态 + * + * @returns {*} + * @memberof SubTask + */ + substatus?: any; + + /** + * 关闭原因 + * + * @returns {*} + * @memberof SubTask + */ + closedreason?: any; + + /** + * 最后修改日期 + * + * @returns {*} + * @memberof SubTask + */ + lastediteddate?: any; + + /** + * 指派日期 + * + * @returns {*} + * @memberof SubTask + */ + assigneddate?: any; + + /** + * 优先级 + * + * @returns {*} + * @memberof SubTask + */ + pri?: any; + + /** + * 最后修改 + * + * @returns {*} + * @memberof SubTask + */ + lasteditedby?: any; + + /** + * 任务状态 + * + * @returns {*} + * @memberof SubTask + */ + status?: any; + + /** + * 任务名称 + * + * @returns {*} + * @memberof SubTask + */ + name?: any; + + /** + * 关闭时间 + * + * @returns {*} + * @memberof SubTask + */ + closeddate?: any; + + /** + * 任务类型 + * + * @returns {*} + * @memberof SubTask + */ + type?: any; + + /** + * 指派给 + * + * @returns {*} + * @memberof SubTask + */ + assignedto?: any; + + /** + * 任务描述 + * + * @returns {*} + * @memberof SubTask + */ + desc?: any; + + /** + * 预计开始 + * + * @returns {*} + * @memberof SubTask + */ + eststarted?: any; + + /** + * 截止日期 + * + * @returns {*} + * @memberof SubTask + */ + deadline?: any; + + /** + * 已删除 + * + * @returns {*} + * @memberof SubTask + */ + deleted?: any; + + /** + * 抄送给 + * + * @returns {*} + * @memberof SubTask + */ + mailto?: any; + + /** + * 总计消耗 + * + * @returns {*} + * @memberof SubTask + */ + consumed?: any; + + /** + * 最初预计 + * + * @returns {*} + * @memberof SubTask + */ + estimate?: any; + + /** + * 由谁创建 + * + * @returns {*} + * @memberof SubTask + */ + openedby?: any; + + /** + * 取消时间 + * + * @returns {*} + * @memberof SubTask + */ + canceleddate?: any; + + /** + * 实际完成 + * + * @returns {*} + * @memberof SubTask + */ + finisheddate?: any; + + /** + * 所属模块 + * + * @returns {*} + * @memberof SubTask + */ + modulename?: any; + + /** + * 相关需求 + * + * @returns {*} + * @memberof SubTask + */ + storyname?: any; + + /** + * 所属项目 + * + * @returns {*} + * @memberof SubTask + */ + projectname?: any; + + /** + * 产品 + * + * @returns {*} + * @memberof SubTask + */ + product?: any; + + /** + * 需求版本 + * + * @returns {*} + * @memberof SubTask + */ + storyversion?: any; + + /** + * 产品 + * + * @returns {*} + * @memberof SubTask + */ + productname?: any; + + /** + * 父任务 + * + * @returns {*} + * @memberof SubTask + */ + parentname?: any; + + /** + * 所属项目 + * + * @returns {*} + * @memberof SubTask + */ + project?: any; + + /** + * 所属模块 + * + * @returns {*} + * @memberof SubTask + */ + module?: any; + + /** + * 相关需求 + * + * @returns {*} + * @memberof SubTask + */ + story?: any; + + /** + * 父任务 + * + * @returns {*} + * @memberof SubTask + */ + parent?: any; + + /** + * 来源Bug + * + * @returns {*} + * @memberof SubTask + */ + frombug?: any; + + /** + * 持续时间 + * + * @returns {*} + * @memberof SubTask + */ + duration?: any; +} \ No newline at end of file diff --git a/app_Web/src/interface/entity/user.ts b/app_Web/src/interface/entity/user.ts index 11579b149101b00280c2be2a43a5ccf076e1210e..188e303a17944dffe666a9ac23d2cd412b721afd 100644 --- a/app_Web/src/interface/entity/user.ts +++ b/app_Web/src/interface/entity/user.ts @@ -7,7 +7,7 @@ export interface User { /** - * password + * 密码 * * @returns {*} * @memberof User @@ -15,7 +15,7 @@ export interface User { password?: any; /** - * address + * 通讯地址 * * @returns {*} * @memberof User @@ -23,7 +23,7 @@ export interface User { address?: any; /** - * weixin + * 微信 * * @returns {*} * @memberof User @@ -31,7 +31,7 @@ export interface User { weixin?: any; /** - * dingding + * 钉钉 * * @returns {*} * @memberof User @@ -63,7 +63,7 @@ export interface User { ranzhi?: any; /** - * account + * 账户 * * @returns {*} * @memberof User @@ -95,7 +95,7 @@ export interface User { scorelevel?: any; /** - * realname + * 真实姓名 * * @returns {*} * @memberof User @@ -111,7 +111,7 @@ export interface User { zipcode?: any; /** - * dept + * 所属部门 * * @returns {*} * @memberof User @@ -127,7 +127,7 @@ export interface User { commiter?: any; /** - * role + * 职位 * * @returns {*} * @memberof User @@ -143,7 +143,7 @@ export interface User { deleted?: any; /** - * last + * 最后登录 * * @returns {*} * @memberof User @@ -183,7 +183,7 @@ export interface User { score?: any; /** - * gender + * 性别 * * @returns {*} * @memberof User @@ -191,7 +191,7 @@ export interface User { gender?: any; /** - * mobile + * 手机 * * @returns {*} * @memberof User @@ -207,7 +207,7 @@ export interface User { clientlang?: any; /** - * visits + * 访问次数 * * @returns {*} * @memberof User @@ -215,7 +215,7 @@ export interface User { visits?: any; /** - * join + * 入职日期 * * @returns {*} * @memberof User @@ -223,7 +223,7 @@ export interface User { join?: any; /** - * email + * 邮箱 * * @returns {*} * @memberof User @@ -255,7 +255,7 @@ export interface User { nickname?: any; /** - * phone + * 电话 * * @returns {*} * @memberof User @@ -263,7 +263,7 @@ export interface User { phone?: any; /** - * id + * ID * * @returns {*} * @memberof User @@ -271,7 +271,7 @@ export interface User { id?: any; /** - * qq + * QQ * * @returns {*} * @memberof User diff --git a/app_Web/src/locale/lang/en-US.ts b/app_Web/src/locale/lang/en-US.ts index 3cfbeebff2687536f4d2b3430505a7ec1074fc9d..305aeff7541efb29db3c9273108d447e149062ea 100644 --- a/app_Web/src/locale/lang/en-US.ts +++ b/app_Web/src/locale/lang/en-US.ts @@ -1,25 +1,31 @@ -import productplan_en_US from '@locale/lanres/product-plan/product-plan_en_US'; -import projectproduct_en_US from '@locale/lanres/project-product/project-product_en_US'; -import case_en_US from '@locale/lanres/case/case_en_US'; -import product_en_US from '@locale/lanres/product/product_en_US'; -import subproductplan_en_US from '@locale/lanres/sub-product-plan/sub-product-plan_en_US'; -import storyspec_en_US from '@locale/lanres/story-spec/story-spec_en_US'; -import branch_en_US from '@locale/lanres/branch/branch_en_US'; -import action_en_US from '@locale/lanres/action/action_en_US'; -import casestep_en_US from '@locale/lanres/case-step/case-step_en_US'; -import story_en_US from '@locale/lanres/story/story_en_US'; -import project_en_US from '@locale/lanres/project/project_en_US'; -import history_en_US from '@locale/lanres/history/history_en_US'; -import user_en_US from '@locale/lanres/user/user_en_US'; -import productmodule_en_US from '@locale/lanres/product-module/product-module_en_US'; -import module_en_US from '@locale/lanres/module/module_en_US'; -import productlife_en_US from '@locale/lanres/product-life/product-life_en_US'; -import task_en_US from '@locale/lanres/task/task_en_US'; -import build_en_US from '@locale/lanres/build/build_en_US'; -import testtask_en_US from '@locale/lanres/test-task/test-task_en_US'; -import bug_en_US from '@locale/lanres/bug/bug_en_US'; -import ibzdoc_en_US from '@locale/lanres/ibz-doc/ibz-doc_en_US'; -import release_en_US from '@locale/lanres/release/release_en_US'; +import productplan_en_US from '@locale/lanres/entities/product-plan/product-plan_en_US'; +import projectproduct_en_US from '@locale/lanres/entities/project-product/project-product_en_US'; +import case_en_US from '@locale/lanres/entities/case/case_en_US'; +import product_en_US from '@locale/lanres/entities/product/product_en_US'; +import subproductplan_en_US from '@locale/lanres/entities/sub-product-plan/sub-product-plan_en_US'; +import storyspec_en_US from '@locale/lanres/entities/story-spec/story-spec_en_US'; +import branch_en_US from '@locale/lanres/entities/branch/branch_en_US'; +import productstats_en_US from '@locale/lanres/entities/product-stats/product-stats_en_US'; +import action_en_US from '@locale/lanres/entities/action/action_en_US'; +import group_en_US from '@locale/lanres/entities/group/group_en_US'; +import casestep_en_US from '@locale/lanres/entities/case-step/case-step_en_US'; +import dept_en_US from '@locale/lanres/entities/dept/dept_en_US'; +import company_en_US from '@locale/lanres/entities/company/company_en_US'; +import story_en_US from '@locale/lanres/entities/story/story_en_US'; +import subtask_en_US from '@locale/lanres/entities/sub-task/sub-task_en_US'; +import project_en_US from '@locale/lanres/entities/project/project_en_US'; +import history_en_US from '@locale/lanres/entities/history/history_en_US'; +import user_en_US from '@locale/lanres/entities/user/user_en_US'; +import productmodule_en_US from '@locale/lanres/entities/product-module/product-module_en_US'; +import module_en_US from '@locale/lanres/entities/module/module_en_US'; +import productlife_en_US from '@locale/lanres/entities/product-life/product-life_en_US'; +import task_en_US from '@locale/lanres/entities/task/task_en_US'; +import build_en_US from '@locale/lanres/entities/build/build_en_US'; +import testtask_en_US from '@locale/lanres/entities/test-task/test-task_en_US'; +import projectstats_en_US from '@locale/lanres/entities/project-stats/project-stats_en_US'; +import bug_en_US from '@locale/lanres/entities/bug/bug_en_US'; +import ibzdoc_en_US from '@locale/lanres/entities/ibz-doc/ibz-doc_en_US'; +import release_en_US from '@locale/lanres/entities/release/release_en_US'; import components_en_US from '@locale/lanres/components/components_en_US'; import codelist_en_US from '@locale/lanres/codelist/codelist_en_US'; import userCustom_en_US from '@locale/lanres/userCustom/userCustom_en_US'; @@ -111,9 +117,14 @@ export default { subproductplan: subproductplan_en_US, storyspec: storyspec_en_US, branch: branch_en_US, + productstats: productstats_en_US, action: action_en_US, + group: group_en_US, casestep: casestep_en_US, + dept: dept_en_US, + company: company_en_US, story: story_en_US, + subtask: subtask_en_US, project: project_en_US, history: history_en_US, user: user_en_US, @@ -123,6 +134,7 @@ export default { task: task_en_US, build: build_en_US, testtask: testtask_en_US, + projectstats: projectstats_en_US, bug: bug_en_US, ibzdoc: ibzdoc_en_US, release: release_en_US, diff --git a/app_Web/src/locale/lang/zh-CN.ts b/app_Web/src/locale/lang/zh-CN.ts index efb763dbbf10d1885c827af67d479fdc50129184..dd1aa7c805c8b50a0cf09602183ff97f40a0778c 100644 --- a/app_Web/src/locale/lang/zh-CN.ts +++ b/app_Web/src/locale/lang/zh-CN.ts @@ -1,25 +1,31 @@ -import productplan_zh_CN from '@locale/lanres/product-plan/product-plan_zh_CN'; -import projectproduct_zh_CN from '@locale/lanres/project-product/project-product_zh_CN'; -import case_zh_CN from '@locale/lanres/case/case_zh_CN'; -import product_zh_CN from '@locale/lanres/product/product_zh_CN'; -import subproductplan_zh_CN from '@locale/lanres/sub-product-plan/sub-product-plan_zh_CN'; -import storyspec_zh_CN from '@locale/lanres/story-spec/story-spec_zh_CN'; -import branch_zh_CN from '@locale/lanres/branch/branch_zh_CN'; -import action_zh_CN from '@locale/lanres/action/action_zh_CN'; -import casestep_zh_CN from '@locale/lanres/case-step/case-step_zh_CN'; -import story_zh_CN from '@locale/lanres/story/story_zh_CN'; -import project_zh_CN from '@locale/lanres/project/project_zh_CN'; -import history_zh_CN from '@locale/lanres/history/history_zh_CN'; -import user_zh_CN from '@locale/lanres/user/user_zh_CN'; -import productmodule_zh_CN from '@locale/lanres/product-module/product-module_zh_CN'; -import module_zh_CN from '@locale/lanres/module/module_zh_CN'; -import productlife_zh_CN from '@locale/lanres/product-life/product-life_zh_CN'; -import task_zh_CN from '@locale/lanres/task/task_zh_CN'; -import build_zh_CN from '@locale/lanres/build/build_zh_CN'; -import testtask_zh_CN from '@locale/lanres/test-task/test-task_zh_CN'; -import bug_zh_CN from '@locale/lanres/bug/bug_zh_CN'; -import ibzdoc_zh_CN from '@locale/lanres/ibz-doc/ibz-doc_zh_CN'; -import release_zh_CN from '@locale/lanres/release/release_zh_CN'; +import productplan_zh_CN from '@locale/lanres/entities/product-plan/product-plan_zh_CN'; +import projectproduct_zh_CN from '@locale/lanres/entities/project-product/project-product_zh_CN'; +import case_zh_CN from '@locale/lanres/entities/case/case_zh_CN'; +import product_zh_CN from '@locale/lanres/entities/product/product_zh_CN'; +import subproductplan_zh_CN from '@locale/lanres/entities/sub-product-plan/sub-product-plan_zh_CN'; +import storyspec_zh_CN from '@locale/lanres/entities/story-spec/story-spec_zh_CN'; +import branch_zh_CN from '@locale/lanres/entities/branch/branch_zh_CN'; +import productstats_zh_CN from '@locale/lanres/entities/product-stats/product-stats_zh_CN'; +import action_zh_CN from '@locale/lanres/entities/action/action_zh_CN'; +import group_zh_CN from '@locale/lanres/entities/group/group_zh_CN'; +import casestep_zh_CN from '@locale/lanres/entities/case-step/case-step_zh_CN'; +import dept_zh_CN from '@locale/lanres/entities/dept/dept_zh_CN'; +import company_zh_CN from '@locale/lanres/entities/company/company_zh_CN'; +import story_zh_CN from '@locale/lanres/entities/story/story_zh_CN'; +import subtask_zh_CN from '@locale/lanres/entities/sub-task/sub-task_zh_CN'; +import project_zh_CN from '@locale/lanres/entities/project/project_zh_CN'; +import history_zh_CN from '@locale/lanres/entities/history/history_zh_CN'; +import user_zh_CN from '@locale/lanres/entities/user/user_zh_CN'; +import productmodule_zh_CN from '@locale/lanres/entities/product-module/product-module_zh_CN'; +import module_zh_CN from '@locale/lanres/entities/module/module_zh_CN'; +import productlife_zh_CN from '@locale/lanres/entities/product-life/product-life_zh_CN'; +import task_zh_CN from '@locale/lanres/entities/task/task_zh_CN'; +import build_zh_CN from '@locale/lanres/entities/build/build_zh_CN'; +import testtask_zh_CN from '@locale/lanres/entities/test-task/test-task_zh_CN'; +import projectstats_zh_CN from '@locale/lanres/entities/project-stats/project-stats_zh_CN'; +import bug_zh_CN from '@locale/lanres/entities/bug/bug_zh_CN'; +import ibzdoc_zh_CN from '@locale/lanres/entities/ibz-doc/ibz-doc_zh_CN'; +import release_zh_CN from '@locale/lanres/entities/release/release_zh_CN'; import components_zh_CN from '@locale/lanres/components/components_zh_CN'; import codelist_zh_CN from '@locale/lanres/codelist/codelist_zh_CN'; import userCustom_zh_CN from '@locale/lanres/userCustom/userCustom_zh_CN'; @@ -111,9 +117,14 @@ export default { subproductplan: subproductplan_zh_CN, storyspec: storyspec_zh_CN, branch: branch_zh_CN, + productstats: productstats_zh_CN, action: action_zh_CN, + group: group_zh_CN, casestep: casestep_zh_CN, + dept: dept_zh_CN, + company: company_zh_CN, story: story_zh_CN, + subtask: subtask_zh_CN, project: project_zh_CN, history: history_zh_CN, user: user_zh_CN, @@ -123,6 +134,7 @@ export default { task: task_zh_CN, build: build_zh_CN, testtask: testtask_zh_CN, + projectstats: projectstats_zh_CN, bug: bug_zh_CN, ibzdoc: ibzdoc_zh_CN, release: release_zh_CN, diff --git a/app_Web/src/locale/lanres/action/action_en_US.ts b/app_Web/src/locale/lanres/action/action_en_US.ts index 06f88637497b5d6a32a71e613552abb2f7b32b54..5ff7ac38c46de5c31acf06103b100dc4b5c480ae 100644 --- a/app_Web/src/locale/lanres/action/action_en_US.ts +++ b/app_Web/src/locale/lanres/action/action_en_US.ts @@ -28,6 +28,10 @@ export default { }, producttrendslistview9: { caption: "系统日志", + title: '系统日志', + }, + alltrendslistview: { + caption: "系统日志", title: '系统日志', }, producttrendslistview: { diff --git a/app_Web/src/locale/lanres/action/action_zh_CN.ts b/app_Web/src/locale/lanres/action/action_zh_CN.ts index 98b2cdd5117a5e9f5f4d19a153843a0a300808c8..f6958590187073563d44d0cc9631852b18ce0825 100644 --- a/app_Web/src/locale/lanres/action/action_zh_CN.ts +++ b/app_Web/src/locale/lanres/action/action_zh_CN.ts @@ -27,6 +27,10 @@ export default { }, producttrendslistview9: { caption: '系统日志', + title: '系统日志', + }, + alltrendslistview: { + caption: '系统日志', title: '系统日志', }, producttrendslistview: { @@ -74,8 +78,8 @@ export default { tip: '', }, tbitem7: { - caption: '删除并关闭', - tip: '删除并关闭', + caption: '删除', + tip: '删除', }, tbitem8: { caption: '-', diff --git a/app_Web/src/locale/lanres/bug/bug_en_US.ts b/app_Web/src/locale/lanres/bug/bug_en_US.ts index 374a248bf50849465900e33c8fbed828624cc7cd..b4ebf7d70e496f063b25bdaec81a8048e2824098 100644 --- a/app_Web/src/locale/lanres/bug/bug_en_US.ts +++ b/app_Web/src/locale/lanres/bug/bug_en_US.ts @@ -64,6 +64,10 @@ export default { plansubgridview: { caption: "Bug", title: 'Bug', + }, + maineditview: { + caption: "Bug编辑", + title: 'Bug编辑', }, maindashboardview: { caption: "Bug", @@ -76,10 +80,18 @@ export default { mpickupview: { caption: "关联Bug", title: '关联Bug', + }, + buglifeeditview9: { + caption: "Bug", + title: 'Bug', }, editview: { caption: "Bug", title: 'Bug', + }, + stepsinfoeditview: { + caption: "重现步骤", + title: '重现步骤', }, gridview9_assignedtome: { caption: "Bug", @@ -87,15 +99,37 @@ export default { }, gridview: { caption: "Bug", + title: 'Bug', + }, + dashboardmaineditview9: { + caption: "Bug", title: 'Bug', }, }, + stepsinfo_form: { + details: { + group1: "Bug基本信息", + formpage1: "基本信息", + srfupdatedate: "修改日期", + srforikey: "", + srfkey: "Bug编号", + srfmajortext: "Bug标题", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + steps: "", + id: "Bug编号", + }, + uiactions: { + }, + }, main_form: { details: { + grouppanel1: "分组面板", + grouppanel2: "分组面板", group1: "bug基本信息", formpage1: "基本信息", - group2: "操作信息", - formpage2: "其它", srfupdatedate: "修改日期", srforikey: "", srfkey: "Bug编号", @@ -104,13 +138,153 @@ export default { srfuf: "", srfdeid: "", srfsourcekey: "", + productname: "产品", + product: "所属产品", + module: "所属模块", + project: "所属项目", + projectname: "项目", + openedbuild: "影响版本", + assignedto: "指派给", + deadline: "截止日期", + type: "Bug类型", + os: "操作系统", + browser: "浏览器", title: "Bug标题", + severity: "严重程度", + pri: "优先级", + steps: "重现步骤", + story: "相关需求", + task: "相关任务", + mailto: "抄送给", + keywords: "关键词", id: "Bug编号", }, uiactions: { }, }, - main_grid: { + dashboardmainedit_form: { + details: { + druipart1: "", + grouppanel6: "历史记录", + grouppanel1: "分组面板", + grouppanel3: "基本信息", + grouppanel4: "项目/需求/任务", + grouppanel5: "Bug的一生", + grouppanel2: "分组面板", + group1: "Bug基本信息", + formpage1: "基本信息", + srfupdatedate: "修改日期", + srforikey: "", + srfkey: "Bug编号", + srfmajortext: "Bug标题", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + title: "Bug标题", + steps: "重现步骤", + product: "所属产品", + productname: "产品", + module: "所属模块", + plan: "所属计划", + type: "Bug类型", + severity: "严重程度", + pri: "优先级", + status: "Bug状态", + activatedcount: "激活次数", + activateddate: "激活日期", + confirmed: "是否确认", + assignedto: "当前指派", + deadline: "截止日期", + os: "操作系统", + browser: "浏览器", + keywords: "关键词", + mailto: "抄送给", + project: "所属项目", + projectname: "项目", + story: "相关需求", + task: "相关任务", + openedby: "由谁创建", + openedbuild: "影响版本", + resolvedby: "由谁解决", + resolvedbuild: "解决版本", + resolution: "解决方案", + closedby: "由谁关闭", + lasteditedby: "最后修改者", + id: "Bug编号", + }, + uiactions: { + }, + }, + dashboardmain_form: { + details: { + maingroup1: "Bug基本信息", + formpage1: "基本信息", + grouppanel1: "分组面板", + formpage2: "项目/需求/任务", + srfupdatedate: "修改日期", + srforikey: "", + srfkey: "Bug编号", + srfmajortext: "Bug标题", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + product: "所属产品", + title: "Bug标题", + productname: "产品", + module: "所属模块", + plan: "所属计划", + type: "Bug类型", + severity: "严重程度", + pri: "优先级", + status: "Bug状态", + activatedcount: "激活次数", + activateddate: "激活日期", + confirmed: "是否确认", + assignedto: "当前指派", + deadline: "截止日期", + os: "操作系统", + browser: "浏览器", + keywords: "关键词", + mailto: "抄送给", + project: "所属项目", + projectname: "项目", + story: "相关需求", + task: "相关任务", + id: "Bug编号", + }, + uiactions: { + }, + }, + dashboardbuglife_form: { + details: { + buggroup1: "Bug基本信息", + formpage1: "Bug的一生", + grouppanel1: "分组面板", + formpage2: "其他相关", + srfupdatedate: "修改日期", + srforikey: "", + srfkey: "Bug编号", + srfmajortext: "Bug标题", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + openedby: "由谁创建", + openedbuild: "影响版本", + resolvedby: "由谁解决", + resolvedbuild: "解决版本", + resolution: "解决方案", + closedby: "由谁关闭", + lasteditedby: "最后修改者", + linkbug: "相关Bug", + id: "Bug编号", + }, + uiactions: { + }, + }, + pickupgird_grid: { columns: { id: "Bug编号", pri: "P", @@ -138,7 +312,7 @@ export default { uiactions: { }, }, - pickupgird_grid: { + main_grid: { columns: { id: "Bug编号", pri: "P", @@ -148,8 +322,11 @@ export default { openedby: "由谁创建", openeddate: "创建日期", assignedto: "指派给", + resolution: "方案", + uagridcolumn1: "操作", }, uiactions: { + mainedit: "编辑", }, }, main2_grid: { @@ -162,77 +339,27 @@ export default { uiactions: { }, }, - editviewtoolbar_toolbar: { - tbitem3: { - caption: "Save", - tip: "Save", - }, - tbitem4: { - caption: "Save And New", - tip: "Save And New", - }, - tbitem5: { + maineditviewtoolbar_toolbar: { + deuiaction1: { caption: "Save And Close", tip: "Save And Close Window", }, - tbitem6: { - caption: "-", - tip: "", - }, - tbitem7: { - caption: "Remove And Close", - tip: "Remove And Close Window", - }, - tbitem8: { - caption: "-", - tip: "", - }, - tbitem12: { - caption: "New", - tip: "New", - }, - tbitem13: { - caption: "-", - tip: "", - }, - tbitem14: { - caption: "Copy", - tip: "Copy {0}", - }, - tbitem16: { - caption: "-", - tip: "", - }, - tbitem23: { - caption: "第一个记录", - tip: "第一个记录", - }, - tbitem24: { - caption: "上一个记录", - tip: "上一个记录", - }, - tbitem25: { - caption: "下一个记录", - tip: "下一个记录", + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", }, - tbitem26: { - caption: "最后一个记录", - tip: "最后一个记录", + }, + plansubgridviewtoolbar_toolbar: { + deuiaction3_planrelationbug: { + caption: "关联Bug", + tip: "关联Bug", }, - tbitem21: { - caption: "-", + seperator2: { + caption: "", tip: "", }, - tbitem22: { - caption: "Help", - tip: "Help", - }, - }, - gridviewtoolbar_toolbar: { - deuiaction1: { - caption: "New", - tip: "New", - }, deuiaction4: { caption: "Remove", tip: "Remove {0}", @@ -246,14 +373,10 @@ export default { tip: "刷新", }, }, - plansubgridviewtoolbar_toolbar: { - deuiaction3_planrelationbug: { - caption: "关联Bug", - tip: "关联Bug", - }, - seperator2: { - caption: "", - tip: "", + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", }, deuiaction4: { caption: "Remove", diff --git a/app_Web/src/locale/lanres/bug/bug_zh_CN.ts b/app_Web/src/locale/lanres/bug/bug_zh_CN.ts index e05e1968b3ef5c8553993fd14e191d8272166fed..f897cd54e4d0ae92eb3615dbf6a1d655b18ba8e7 100644 --- a/app_Web/src/locale/lanres/bug/bug_zh_CN.ts +++ b/app_Web/src/locale/lanres/bug/bug_zh_CN.ts @@ -63,6 +63,10 @@ export default { plansubgridview: { caption: 'Bug', title: 'Bug', + }, + maineditview: { + caption: 'Bug编辑', + title: 'Bug编辑', }, maindashboardview: { caption: 'Bug', @@ -75,10 +79,18 @@ export default { mpickupview: { caption: '关联Bug', title: '关联Bug', + }, + buglifeeditview9: { + caption: 'Bug', + title: 'Bug', }, editview: { caption: 'Bug', title: 'Bug', + }, + stepsinfoeditview: { + caption: '重现步骤', + title: '重现步骤', }, gridview9_assignedtome: { caption: 'Bug', @@ -86,15 +98,37 @@ export default { }, gridview: { caption: 'Bug', + title: 'Bug', + }, + dashboardmaineditview9: { + caption: 'Bug', title: 'Bug', }, }, + stepsinfo_form: { + details: { + group1: 'Bug基本信息', + formpage1: '基本信息', + srfupdatedate: '修改日期', + srforikey: '', + srfkey: 'Bug编号', + srfmajortext: 'Bug标题', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + steps: '', + id: 'Bug编号', + }, + uiactions: { + }, + }, main_form: { details: { + grouppanel1: '分组面板', + grouppanel2: '分组面板', group1: 'bug基本信息', formpage1: '基本信息', - group2: '操作信息', - formpage2: '其它', srfupdatedate: '修改日期', srforikey: '', srfkey: 'Bug编号', @@ -103,13 +137,153 @@ export default { srfuf: '', srfdeid: '', srfsourcekey: '', + productname: '产品', + product: '所属产品', + module: '所属模块', + project: '所属项目', + projectname: '项目', + openedbuild: '影响版本', + assignedto: '指派给', + deadline: '截止日期', + type: 'Bug类型', + os: '操作系统', + browser: '浏览器', title: 'Bug标题', + severity: '严重程度', + pri: '优先级', + steps: '重现步骤', + story: '相关需求', + task: '相关任务', + mailto: '抄送给', + keywords: '关键词', id: 'Bug编号', }, uiactions: { }, }, - main_grid: { + dashboardmainedit_form: { + details: { + druipart1: '', + grouppanel6: '历史记录', + grouppanel1: '分组面板', + grouppanel3: '基本信息', + grouppanel4: '项目/需求/任务', + grouppanel5: 'Bug的一生', + grouppanel2: '分组面板', + group1: 'Bug基本信息', + formpage1: '基本信息', + srfupdatedate: '修改日期', + srforikey: '', + srfkey: 'Bug编号', + srfmajortext: 'Bug标题', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + title: 'Bug标题', + steps: '重现步骤', + product: '所属产品', + productname: '产品', + module: '所属模块', + plan: '所属计划', + type: 'Bug类型', + severity: '严重程度', + pri: '优先级', + status: 'Bug状态', + activatedcount: '激活次数', + activateddate: '激活日期', + confirmed: '是否确认', + assignedto: '当前指派', + deadline: '截止日期', + os: '操作系统', + browser: '浏览器', + keywords: '关键词', + mailto: '抄送给', + project: '所属项目', + projectname: '项目', + story: '相关需求', + task: '相关任务', + openedby: '由谁创建', + openedbuild: '影响版本', + resolvedby: '由谁解决', + resolvedbuild: '解决版本', + resolution: '解决方案', + closedby: '由谁关闭', + lasteditedby: '最后修改者', + id: 'Bug编号', + }, + uiactions: { + }, + }, + dashboardmain_form: { + details: { + maingroup1: 'Bug基本信息', + formpage1: '基本信息', + grouppanel1: '分组面板', + formpage2: '项目/需求/任务', + srfupdatedate: '修改日期', + srforikey: '', + srfkey: 'Bug编号', + srfmajortext: 'Bug标题', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + product: '所属产品', + title: 'Bug标题', + productname: '产品', + module: '所属模块', + plan: '所属计划', + type: 'Bug类型', + severity: '严重程度', + pri: '优先级', + status: 'Bug状态', + activatedcount: '激活次数', + activateddate: '激活日期', + confirmed: '是否确认', + assignedto: '当前指派', + deadline: '截止日期', + os: '操作系统', + browser: '浏览器', + keywords: '关键词', + mailto: '抄送给', + project: '所属项目', + projectname: '项目', + story: '相关需求', + task: '相关任务', + id: 'Bug编号', + }, + uiactions: { + }, + }, + dashboardbuglife_form: { + details: { + buggroup1: 'Bug基本信息', + formpage1: 'Bug的一生', + grouppanel1: '分组面板', + formpage2: '其他相关', + srfupdatedate: '修改日期', + srforikey: '', + srfkey: 'Bug编号', + srfmajortext: 'Bug标题', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + openedby: '由谁创建', + openedbuild: '影响版本', + resolvedby: '由谁解决', + resolvedbuild: '解决版本', + resolution: '解决方案', + closedby: '由谁关闭', + lasteditedby: '最后修改者', + linkbug: '相关Bug', + id: 'Bug编号', + }, + uiactions: { + }, + }, + pickupgird_grid: { columns: { id: 'Bug编号', pri: 'P', @@ -137,7 +311,7 @@ export default { uiactions: { }, }, - pickupgird_grid: { + main_grid: { columns: { id: 'Bug编号', pri: 'P', @@ -147,8 +321,11 @@ export default { openedby: '由谁创建', openeddate: '创建日期', assignedto: '指派给', + resolution: '方案', + uagridcolumn1: '操作', }, uiactions: { + mainedit: '编辑', }, }, main2_grid: { @@ -161,77 +338,27 @@ export default { uiactions: { }, }, - editviewtoolbar_toolbar: { - tbitem3: { - caption: '保存', - tip: '保存', - }, - tbitem4: { - caption: '保存并新建', - tip: '保存并新建', - }, - tbitem5: { + maineditviewtoolbar_toolbar: { + deuiaction1: { caption: '保存并关闭', tip: '保存并关闭', }, - tbitem6: { - caption: '-', - tip: '', - }, - tbitem7: { - caption: '删除并关闭', - tip: '删除并关闭', - }, - tbitem8: { - caption: '-', - tip: '', - }, - tbitem12: { - caption: '新建', - tip: '新建', - }, - tbitem13: { - caption: '-', - tip: '', - }, - tbitem14: { - caption: '拷贝', - tip: '拷贝', - }, - tbitem16: { - caption: '-', - tip: '', - }, - tbitem23: { - caption: '第一个记录', - tip: '第一个记录', - }, - tbitem24: { - caption: '上一个记录', - tip: '上一个记录', - }, - tbitem25: { - caption: '下一个记录', - tip: '下一个记录', + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', }, - tbitem26: { - caption: '最后一个记录', - tip: '最后一个记录', + }, + plansubgridviewtoolbar_toolbar: { + deuiaction3_planrelationbug: { + caption: '关联Bug', + tip: '关联Bug', }, - tbitem21: { - caption: '-', + seperator2: { + caption: '', tip: '', }, - tbitem22: { - caption: '帮助', - tip: '帮助', - }, - }, - gridviewtoolbar_toolbar: { - deuiaction1: { - caption: '新建', - tip: '新建', - }, deuiaction4: { caption: '删除', tip: '删除', @@ -245,14 +372,10 @@ export default { tip: '刷新', }, }, - plansubgridviewtoolbar_toolbar: { - deuiaction3_planrelationbug: { - caption: '关联Bug', - tip: '关联Bug', - }, - seperator2: { - caption: '', - tip: '', + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', }, deuiaction4: { caption: '删除', diff --git a/app_Web/src/locale/lanres/case-step/case-step_zh_CN.ts b/app_Web/src/locale/lanres/case-step/case-step_zh_CN.ts index 96fda035fc792be9cd3ae88aa8927eb379442988..e9810f9e8bd4ab96af605e4edbb6b35a4a3fb3ef 100644 --- a/app_Web/src/locale/lanres/case-step/case-step_zh_CN.ts +++ b/app_Web/src/locale/lanres/case-step/case-step_zh_CN.ts @@ -66,8 +66,8 @@ export default { tip: '', }, tbitem7: { - caption: '删除并关闭', - tip: '删除并关闭', + caption: '删除', + tip: '删除', }, tbitem8: { caption: '-', diff --git a/app_Web/src/locale/lanres/case/case_en_US.ts b/app_Web/src/locale/lanres/case/case_en_US.ts index f91240b6dd0b7cfdc11824b754fd7e8885f4c759..b7d7c719a9517d52be402dcd07464bdc359fa101 100644 --- a/app_Web/src/locale/lanres/case/case_en_US.ts +++ b/app_Web/src/locale/lanres/case/case_en_US.ts @@ -94,24 +94,6 @@ export default { uiactions: { }, }, - gridviewtoolbar_toolbar: { - deuiaction1: { - caption: "New", - tip: "New", - }, - deuiaction4: { - caption: "Remove", - tip: "Remove {0}", - }, - seperator1: { - caption: "", - tip: "", - }, - deuiaction2: { - caption: "刷新", - tip: "刷新", - }, - }, editviewtoolbar_toolbar: { tbitem3: { caption: "Save", @@ -178,4 +160,22 @@ export default { tip: "Help", }, }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, }; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/case/case_zh_CN.ts b/app_Web/src/locale/lanres/case/case_zh_CN.ts index 756f5587de24a2301fb8992c5f8e45a4538e0373..43d4a74fb5789ceba11f28ab00445ddf394dfa15 100644 --- a/app_Web/src/locale/lanres/case/case_zh_CN.ts +++ b/app_Web/src/locale/lanres/case/case_zh_CN.ts @@ -93,24 +93,6 @@ export default { uiactions: { }, }, - gridviewtoolbar_toolbar: { - deuiaction1: { - caption: '新建', - tip: '新建', - }, - deuiaction4: { - caption: '删除', - tip: '删除', - }, - seperator1: { - caption: '', - tip: '', - }, - deuiaction2: { - caption: '刷新', - tip: '刷新', - }, - }, editviewtoolbar_toolbar: { tbitem3: { caption: '保存', @@ -129,8 +111,8 @@ export default { tip: '', }, tbitem7: { - caption: '删除并关闭', - tip: '删除并关闭', + caption: '删除', + tip: '删除', }, tbitem8: { caption: '-', @@ -177,4 +159,22 @@ export default { tip: '帮助', }, }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, }; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/codelist/codelist_en_US.ts b/app_Web/src/locale/lanres/codelist/codelist_en_US.ts index 111f07ab2d01485c6bb17b1385fe81a0bbf1ad2f..90a7f0444fd9ec9ccc94a727209e5d1d16221d8a 100644 --- a/app_Web/src/locale/lanres/codelist/codelist_en_US.ts +++ b/app_Web/src/locale/lanres/codelist/codelist_en_US.ts @@ -1,287 +1,429 @@ export default { Product__status: { - 'normal': '正常', - 'closed': '结束', + 'normal': '正常', + 'closed': '结束', empty: '', }, Bug__status: { - 'active': '激活', - 'resolved': '已解决', - 'closed': '已关闭', + 'active': '激活', + 'resolved': '已解决', + 'closed': '已关闭', empty: '', }, Story__closed_reason: { - 'done': '已完成', - 'subdivided': '已细分', - 'duplicate': '重复', - 'postponed': '延期', - 'willnotdo': '不做', - 'cancel': '已取消', - 'bydesign': '设计如此', + 'done': '已完成', + 'subdivided': '已细分', + 'duplicate': '重复', + 'postponed': '延期', + 'willnotdo': '不做', + 'cancel': '已取消', + 'bydesign': '设计如此', empty: '', }, Task__type: { - 'design': '设计', - 'devel': '开发', - 'test': '测试', - 'study': '研究', - 'discuss': '讨论', - 'ui': '界面', - 'affair': '事务', - 'misc': '其他', + 'design': '设计', + 'devel': '开发', + 'test': '测试', + 'study': '研究', + 'discuss': '讨论', + 'ui': '界面', + 'affair': '事务', + 'misc': '其他', empty: '', }, Story__pri: { - 1: '1', - 2: '2', - 3: '3', - 4: '4', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + empty: '', + }, + ProjectTimeType: { + 'CONSUMED': '消耗时间', + 'LEFT': '剩余时间', + empty: '', + }, + Bug__type: { + 'codeerror': '代码错误', + 'config': '配置相关', + 'install': '安装部署', + 'security': '安全相关', + 'performance': '性能问题', + 'standard': '标准规范', + 'automation': '测试脚本', + 'designdefect': '设计缺陷', + 'others': '其他', empty: '', }, Product__acl: { - 'open': '默认设置(有产品视图权限,即可访问)', - 'private': '私有产品相关负责人和项目团队成员才能访问)', - 'custom': '自定义白名单(团队成员和白名单的成员可以访问)', + 'open': '默认设置(有产品视图权限,即可访问)', + 'private': '私有产品相关负责人和项目团队成员才能访问)', + 'custom': '自定义白名单(团队成员和白名单的成员可以访问)', empty: '', }, Action__type: { - 'created': '创建', - 'opened': '创建', - 'changed': '变更了', - 'edited': '编辑了', - 'assigned': '指派了', - 'closed': '关闭了', - 'deleted': '删除了', - 'deletedfile': '删除附件', - 'editfile': '编辑附件', - 'erased': '删除了', - 'undeleted': '还原了', - 'hidden': '隐藏了', - 'commented': '评论了', - 'activated': '激活了', - 'blocked': '阻塞了', - 'resolved': '解决了', - 'reviewed': '评审了', - 'moved': '移动了', - 'confirmed': '确认了需求', - 'bugconfirmed': '确认了', - 'tostory': '转需求', - 'frombug': '转需求', - 'fromlib': '从用例库导入', - 'totask': '转任务', - 'svncommited': '提交代码', - 'gitcommited': '提交代码', - 'linked2plan': '关联计划', - 'unlinkedfromplan': '移除计划', - 'changestatus': '修改状态', - 'marked': '编辑了', - 'linked2project': '关联项目', - 'unlinkedfromproject': '移除项目', - 'unlinkedfrombuild': '移除版本', - 'linked2release': '关联发布', - 'unlinkedfromrelease': '移除发布', - 'linkrelatedbug': '关联了相关Bug', - 'unlinkrelatedbug': '移除了相关Bug', - 'linkrelatedcase': '关联了相关用例', - 'unlinkrelatedcase': '移除了相关用例', - 'linkrelatedstory': '关联了相关需求', - 'unlinkrelatedstory': '移除了相关需求', - 'subdividestory': '细分了需求', - 'unlinkchildstory': '移除了细分需求', - 'started': '开始了', - 'restarted': '继续了', - 'recordestimate': '记录了工时', - 'editestimate': '编辑了工时', - 'canceled': '取消了', - 'finished': '完成了', - 'paused': '暂停了', - 'verified': '验收了', - 'delayed': '延期', - 'suspended': '挂起', - 'login': '登录系统', - 'logout': '退出登录', - 'deleteestimate': '删除了工时', - 'linked2build': '关联了', - 'linked2bug': '关联了', - 'linkchildtask': '关联子任务', - 'unlinkchildrentask': '取消关联子任务', - 'linkparenttask': '关联到父任务', - 'unlinkparenttask': '从父任务取消关联', - 'batchcreate': '批量创建任务', - 'createchildren': '创建子任务', - 'managed': '维护', - 'deletechildrentask': '删除子任务', - 'createchildrenstory': '创建子需求', - 'linkchildstory': '关联子需求', - 'unlinkchildrenstory': '取消关联子需求', - 'linkparentstory': '关联到父需求', - 'unlinkparentstory': '从父需求取消关联', - 'deletechildrenstory': '删除子需求', + 'created': '创建', + 'opened': '创建', + 'changed': '变更了', + 'edited': '编辑了', + 'assigned': '指派了', + 'closed': '关闭了', + 'deleted': '删除了', + 'deletedfile': '删除附件', + 'editfile': '编辑附件', + 'erased': '删除了', + 'undeleted': '还原了', + 'hidden': '隐藏了', + 'commented': '评论了', + 'activated': '激活了', + 'blocked': '阻塞了', + 'resolved': '解决了', + 'reviewed': '评审了', + 'moved': '移动了', + 'confirmed': '确认了需求', + 'bugconfirmed': '确认了', + 'tostory': '转需求', + 'frombug': '转需求', + 'fromlib': '从用例库导入', + 'totask': '转任务', + 'svncommited': '提交代码', + 'gitcommited': '提交代码', + 'linked2plan': '关联计划', + 'unlinkedfromplan': '移除计划', + 'changestatus': '修改状态', + 'marked': '编辑了', + 'linked2project': '关联项目', + 'unlinkedfromproject': '移除项目', + 'unlinkedfrombuild': '移除版本', + 'linked2release': '关联发布', + 'unlinkedfromrelease': '移除发布', + 'linkrelatedbug': '关联了相关Bug', + 'unlinkrelatedbug': '移除了相关Bug', + 'linkrelatedcase': '关联了相关用例', + 'unlinkrelatedcase': '移除了相关用例', + 'linkrelatedstory': '关联了相关需求', + 'unlinkrelatedstory': '移除了相关需求', + 'subdividestory': '细分了需求', + 'unlinkchildstory': '移除了细分需求', + 'started': '开始了', + 'restarted': '继续了', + 'recordestimate': '记录了工时', + 'editestimate': '编辑了工时', + 'canceled': '取消了', + 'finished': '完成了', + 'paused': '暂停了', + 'verified': '验收了', + 'delayed': '延期', + 'suspended': '挂起', + 'login': '登录系统', + 'logout': '退出登录', + 'deleteestimate': '删除了工时', + 'linked2build': '关联了', + 'linked2bug': '关联了', + 'linkchildtask': '关联子任务', + 'unlinkchildrentask': '取消关联子任务', + 'linkparenttask': '关联到父任务', + 'unlinkparenttask': '从父任务取消关联', + 'batchcreate': '批量创建任务', + 'createchildren': '创建子任务', + 'managed': '维护', + 'deletechildrentask': '删除子任务', + 'createchildrenstory': '创建子需求', + 'linkchildstory': '关联子需求', + 'unlinkchildrenstory': '取消关联子需求', + 'linkparentstory': '关联到父需求', + 'unlinkparentstory': '从父需求取消关联', + 'deletechildrenstory': '删除子需求', + empty: '', + }, + User__gender: { + 'f': '女', + 'm': '男', empty: '', }, Action__object_type: { - 'product': '产品', - 'story': '需求', - 'productplan': '计划', - 'release': '发布', - 'project': '项目', - 'task': '任务', - 'build': '版本', - 'bug': 'Bug', - 'case': '用例', - 'caseresult': '用例结果', - 'stepresult': '用例步骤', - 'testtask': '测试单', - 'user': '用户', - 'doc': '文档', - 'doclib': '文档库', - 'todo': '待办', - 'branch': '分支', - 'module': '模块', - 'testsuite': '套件', - 'caselib': '用例库', - 'testreport': '报告', - 'entry': '应用', - 'webhook': 'Webhook', + 'product': '产品', + 'story': '需求', + 'productplan': '计划', + 'release': '发布', + 'project': '项目', + 'task': '任务', + 'build': '版本', + 'bug': 'Bug', + 'case': '用例', + 'caseresult': '用例结果', + 'stepresult': '用例步骤', + 'testtask': '测试单', + 'user': '用户', + 'doc': '文档', + 'doclib': '文档库', + 'todo': '待办', + 'branch': '分支', + 'module': '模块', + 'testsuite': '套件', + 'caselib': '用例库', + 'testreport': '报告', + 'entry': '应用', + 'webhook': 'Webhook', empty: '', }, CurProductPlan: { empty: '', }, Task__pri: { - 1: '1', - 2: '2', - 3: '3', - 4: '4', + 1: '1', + 2: '2', + 3: '3', + 4: '4', empty: '', }, Project__status: { - 'wait': '未开始', - 'doing': '进行中', - 'suspended': '已挂起', - 'closed': '已关闭', + 'wait': '未开始', + 'doing': '进行中', + 'suspended': '已挂起', + 'closed': '已关闭', empty: '', }, Release__status: { - 'normal': '正常', - 'terminate': '停止维护', + 'normal': '正常', + 'terminate': '停止维护', + empty: '', + }, + Task_quickpacket: { + 'All': '所有', + 'UNCLOSED': '未关闭', + 'TOME': '指派给我', + 'MORE': '更多', + 'NOTSTARTED': '未开始', + 'INPROGRESS': '进行中', + 'UNACCOMPLISHED': '未完成', + 'IFINISHED': '我完成', + 'COMPLETED': '已完成', + 'CLOSED': '已关闭', + 'CANCELLED': '已取消', + empty: '', + }, + Bug__quickpacket: { + 'All': '所有', + 'UNCLOSED': '未关闭', + 'ICREATE': '由我创建', + 'TOME': '指派给我', + 'BYME': '由我解决', + 'WAITCLOSED': '待关闭', + 'UNRESOLVED': '未解决', + 'MORE': '更多', + 'UNCONFIRMED': '未确认', + 'UNASSIGNED': '未指派', + 'EXPIREDBUG': '过期Bug', empty: '', }, Task__closed_reason: { - 'done': '已完成', - 'cancel': '已取消', + 'done': '已完成', + 'cancel': '已取消', + empty: '', + }, + Bug__os: { + 'all': '全部', + 'windows': 'Windows', + 'win10': 'Windows 10', + 'win8': 'Windows 8', + 'win7': 'Windows 7', + 'vista': 'Windows Vista', + 'winxp': 'Windows XP', + 'win2012': 'Windows 2012', + 'win2008': 'Windows 2008', + 'win2003': 'Windows 2003', + 'win2000': 'Windows 2000', + 'android': 'Android', + 'ios': 'IOS', + 'wp8': 'WP8', + 'wp7': 'WP7', + 'symbian': 'Symbian', + 'linux': 'Linux', + 'freebsd': 'FreeBSD', + 'osx': 'OS X', + 'unix': 'Unix', + 'others': '其他', empty: '', }, UserRealName: { empty: '', }, Product__type: { - 'normal': '正常', - 'branch': '多分支', - 'platform': '多平台', + 'normal': '正常', + 'branch': '多分支', + 'platform': '多平台', + empty: '', + }, + Testcase__type: { + 'feature': '功能测试', + 'performance': '性能测试', + 'config': '配置相关', + 'install': '安装部署', + 'security': '安全相关', + 'interface': '接口测试', + 'unit': '单元测试', + 'other': '其他', + empty: '', + }, + Bug__severity: { + 1: '1', + 2: '2', + 3: '3', + 4: '4', empty: '', }, Testcase__status: { - 'wait': '待评审', - 'normal': '正常', - 'blocked': '被阻塞', - 'investigate': '研究中', + 'wait': '待评审', + 'normal': '正常', + 'blocked': '被阻塞', + 'investigate': '研究中', empty: '', }, Story__quickpacket: { - 'ALL': '所有', - 'UNCLOSED': '未关闭', - 'TOME': '指给我', - 'ICREATE': '我创建', - 'IREVIEW': '我评审', - 'DRAFT': '草稿', - 'MORE': '更多', - 'ICLOSE': '我关闭', - 'ACTIVED': '激活', - 'CHANGED': '已变更', - 'TOBECLOSED': '待关闭', - 'CLOSED': '已关闭', + 'ALL': '所有', + 'UNCLOSED': '未关闭', + 'TOME': '指给我', + 'ICREATE': '我创建', + 'IREVIEW': '我评审', + 'DRAFT': '草稿', + 'MORE': '更多', + 'ICLOSE': '我关闭', + 'ACTIVED': '激活', + 'CHANGED': '已变更', + 'TOBECLOSED': '待关闭', + 'CLOSED': '已关闭', + empty: '', + }, + Bug__browser: { + 'all': '全部', + 'ie': 'IE系列', + 'ie11': 'IE11', + 'ie10': 'IE10', + 'ie9': 'IE9', + 'ie8': 'IE8', + 'ie7': 'IE7', + 'ie6': 'IE6', + 'chrome': 'chrome', + 'firefox': 'firefox系列', + 'firefox4': 'firefox4', + 'firefox3': 'firefox3', + 'firefox2': 'firefox2', + 'opera': 'opera系列', + 'opera11': 'opera11', + 'oprea10': 'oprea10', + 'opera9': 'opera9', + 'safari': 'safari', + 'maxthon': '傲游', + 'uc': 'UC', + 'others': '其他', empty: '', }, Project__type: { - 'sprint': '短期项目', - 'waterfall': '长期项目', - 'ops': '运维项目', + 'sprint': '短期项目', + 'waterfall': '长期项目', + 'ops': '运维项目', empty: '', }, Story__stage: { - 'wait': '未开始', - 'planned': '已计划', - 'projected': '已立项', - 'developing': '研发中', - 'developed': '研发完毕', - 'testing': '测试中', - 'tested': '测试完毕', - 'verified': '已验收', - 'released': '已发布', - 'closed': '已关闭', + 'wait': '未开始', + 'planned': '已计划', + 'projected': '已立项', + 'developing': '研发中', + 'developed': '研发完毕', + 'testing': '测试中', + 'tested': '测试完毕', + 'verified': '已验收', + 'released': '已发布', + 'closed': '已关闭', + empty: '', + }, + Company__guest: { + '1': '允许', + '0': '不允许', empty: '', }, Story__status: { - 'draft': '草稿', - 'active': '激活', - 'closed': '已关闭', - 'changed': '已变更', + 'draft': '草稿', + 'active': '激活', + 'closed': '已关闭', + 'changed': '已变更', empty: '', }, Action__read: { - '0': '0', - '1': '1', + '0': '0', + '1': '1', empty: '', }, YesNo3: { - 'yes': '是', - 'no': '否', + 'yes': '是', + 'no': '否', empty: '', }, Story__source: { - 'customer': '客户', - 'user': '用户', - 'po': '产品经理', - 'market': '市场', - 'service': '客服', - 'operation': '运营', - 'support': '技术支持', - 'competitor': '竞争对手', - 'partner': '合作伙伴', - 'dev': '开发人员', - 'tester': '测试人员', - 'bug': 'Bug', - 'forum': '论坛', - 'other': '其它', + 'customer': '客户', + 'user': '用户', + 'po': '产品经理', + 'market': '市场', + 'service': '客服', + 'operation': '运营', + 'support': '技术支持', + 'competitor': '竞争对手', + 'partner': '合作伙伴', + 'dev': '开发人员', + 'tester': '测试人员', + 'bug': 'Bug', + 'forum': '论坛', + 'other': '其它', empty: '', }, Task__status: { - 'wait': '未开始', - 'doing': '进行中', - 'done': '已完成', - 'pause': '已暂停', - 'cancel': '已取消', - 'closed': '已关闭', + 'wait': '未开始', + 'doing': '进行中', + 'done': '已完成', + 'pause': '已暂停', + 'cancel': '已取消', + 'closed': '已关闭', empty: '', }, Testcase__pri: { - 1: '1', - 2: '2', - 3: '3', - 4: '4', + 1: '1', + 2: '2', + 3: '3', + 4: '4', empty: '', }, YesNo2: { - 1: '是', - 0: '否', + 1: '是', + 0: '否', + empty: '', + }, + Role: { + empty: '', + }, + Testcase__result: { + 'n/a': '忽略', + 'pass': '通过', + 'fail': '失败', + 'blocked': '阻塞', empty: '', }, Bug__pri: { - 1: '1', - 2: '2', - 3: '3', - 4: '4', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + empty: '', + }, + Bug__resolution: { + 'bydesign': '设计如此', + 'duplicate': '重复Bug', + 'external': '外部原因', + 'fixed': '已解决', + 'notrepro': '无法重现', + 'postponed': '延期处理', + 'willnotfix': '不予解决', + 'tostory': '转为需求', empty: '', }, }; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/codelist/codelist_zh_CN.ts b/app_Web/src/locale/lanres/codelist/codelist_zh_CN.ts index 111f07ab2d01485c6bb17b1385fe81a0bbf1ad2f..90a7f0444fd9ec9ccc94a727209e5d1d16221d8a 100644 --- a/app_Web/src/locale/lanres/codelist/codelist_zh_CN.ts +++ b/app_Web/src/locale/lanres/codelist/codelist_zh_CN.ts @@ -1,287 +1,429 @@ export default { Product__status: { - 'normal': '正常', - 'closed': '结束', + 'normal': '正常', + 'closed': '结束', empty: '', }, Bug__status: { - 'active': '激活', - 'resolved': '已解决', - 'closed': '已关闭', + 'active': '激活', + 'resolved': '已解决', + 'closed': '已关闭', empty: '', }, Story__closed_reason: { - 'done': '已完成', - 'subdivided': '已细分', - 'duplicate': '重复', - 'postponed': '延期', - 'willnotdo': '不做', - 'cancel': '已取消', - 'bydesign': '设计如此', + 'done': '已完成', + 'subdivided': '已细分', + 'duplicate': '重复', + 'postponed': '延期', + 'willnotdo': '不做', + 'cancel': '已取消', + 'bydesign': '设计如此', empty: '', }, Task__type: { - 'design': '设计', - 'devel': '开发', - 'test': '测试', - 'study': '研究', - 'discuss': '讨论', - 'ui': '界面', - 'affair': '事务', - 'misc': '其他', + 'design': '设计', + 'devel': '开发', + 'test': '测试', + 'study': '研究', + 'discuss': '讨论', + 'ui': '界面', + 'affair': '事务', + 'misc': '其他', empty: '', }, Story__pri: { - 1: '1', - 2: '2', - 3: '3', - 4: '4', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + empty: '', + }, + ProjectTimeType: { + 'CONSUMED': '消耗时间', + 'LEFT': '剩余时间', + empty: '', + }, + Bug__type: { + 'codeerror': '代码错误', + 'config': '配置相关', + 'install': '安装部署', + 'security': '安全相关', + 'performance': '性能问题', + 'standard': '标准规范', + 'automation': '测试脚本', + 'designdefect': '设计缺陷', + 'others': '其他', empty: '', }, Product__acl: { - 'open': '默认设置(有产品视图权限,即可访问)', - 'private': '私有产品相关负责人和项目团队成员才能访问)', - 'custom': '自定义白名单(团队成员和白名单的成员可以访问)', + 'open': '默认设置(有产品视图权限,即可访问)', + 'private': '私有产品相关负责人和项目团队成员才能访问)', + 'custom': '自定义白名单(团队成员和白名单的成员可以访问)', empty: '', }, Action__type: { - 'created': '创建', - 'opened': '创建', - 'changed': '变更了', - 'edited': '编辑了', - 'assigned': '指派了', - 'closed': '关闭了', - 'deleted': '删除了', - 'deletedfile': '删除附件', - 'editfile': '编辑附件', - 'erased': '删除了', - 'undeleted': '还原了', - 'hidden': '隐藏了', - 'commented': '评论了', - 'activated': '激活了', - 'blocked': '阻塞了', - 'resolved': '解决了', - 'reviewed': '评审了', - 'moved': '移动了', - 'confirmed': '确认了需求', - 'bugconfirmed': '确认了', - 'tostory': '转需求', - 'frombug': '转需求', - 'fromlib': '从用例库导入', - 'totask': '转任务', - 'svncommited': '提交代码', - 'gitcommited': '提交代码', - 'linked2plan': '关联计划', - 'unlinkedfromplan': '移除计划', - 'changestatus': '修改状态', - 'marked': '编辑了', - 'linked2project': '关联项目', - 'unlinkedfromproject': '移除项目', - 'unlinkedfrombuild': '移除版本', - 'linked2release': '关联发布', - 'unlinkedfromrelease': '移除发布', - 'linkrelatedbug': '关联了相关Bug', - 'unlinkrelatedbug': '移除了相关Bug', - 'linkrelatedcase': '关联了相关用例', - 'unlinkrelatedcase': '移除了相关用例', - 'linkrelatedstory': '关联了相关需求', - 'unlinkrelatedstory': '移除了相关需求', - 'subdividestory': '细分了需求', - 'unlinkchildstory': '移除了细分需求', - 'started': '开始了', - 'restarted': '继续了', - 'recordestimate': '记录了工时', - 'editestimate': '编辑了工时', - 'canceled': '取消了', - 'finished': '完成了', - 'paused': '暂停了', - 'verified': '验收了', - 'delayed': '延期', - 'suspended': '挂起', - 'login': '登录系统', - 'logout': '退出登录', - 'deleteestimate': '删除了工时', - 'linked2build': '关联了', - 'linked2bug': '关联了', - 'linkchildtask': '关联子任务', - 'unlinkchildrentask': '取消关联子任务', - 'linkparenttask': '关联到父任务', - 'unlinkparenttask': '从父任务取消关联', - 'batchcreate': '批量创建任务', - 'createchildren': '创建子任务', - 'managed': '维护', - 'deletechildrentask': '删除子任务', - 'createchildrenstory': '创建子需求', - 'linkchildstory': '关联子需求', - 'unlinkchildrenstory': '取消关联子需求', - 'linkparentstory': '关联到父需求', - 'unlinkparentstory': '从父需求取消关联', - 'deletechildrenstory': '删除子需求', + 'created': '创建', + 'opened': '创建', + 'changed': '变更了', + 'edited': '编辑了', + 'assigned': '指派了', + 'closed': '关闭了', + 'deleted': '删除了', + 'deletedfile': '删除附件', + 'editfile': '编辑附件', + 'erased': '删除了', + 'undeleted': '还原了', + 'hidden': '隐藏了', + 'commented': '评论了', + 'activated': '激活了', + 'blocked': '阻塞了', + 'resolved': '解决了', + 'reviewed': '评审了', + 'moved': '移动了', + 'confirmed': '确认了需求', + 'bugconfirmed': '确认了', + 'tostory': '转需求', + 'frombug': '转需求', + 'fromlib': '从用例库导入', + 'totask': '转任务', + 'svncommited': '提交代码', + 'gitcommited': '提交代码', + 'linked2plan': '关联计划', + 'unlinkedfromplan': '移除计划', + 'changestatus': '修改状态', + 'marked': '编辑了', + 'linked2project': '关联项目', + 'unlinkedfromproject': '移除项目', + 'unlinkedfrombuild': '移除版本', + 'linked2release': '关联发布', + 'unlinkedfromrelease': '移除发布', + 'linkrelatedbug': '关联了相关Bug', + 'unlinkrelatedbug': '移除了相关Bug', + 'linkrelatedcase': '关联了相关用例', + 'unlinkrelatedcase': '移除了相关用例', + 'linkrelatedstory': '关联了相关需求', + 'unlinkrelatedstory': '移除了相关需求', + 'subdividestory': '细分了需求', + 'unlinkchildstory': '移除了细分需求', + 'started': '开始了', + 'restarted': '继续了', + 'recordestimate': '记录了工时', + 'editestimate': '编辑了工时', + 'canceled': '取消了', + 'finished': '完成了', + 'paused': '暂停了', + 'verified': '验收了', + 'delayed': '延期', + 'suspended': '挂起', + 'login': '登录系统', + 'logout': '退出登录', + 'deleteestimate': '删除了工时', + 'linked2build': '关联了', + 'linked2bug': '关联了', + 'linkchildtask': '关联子任务', + 'unlinkchildrentask': '取消关联子任务', + 'linkparenttask': '关联到父任务', + 'unlinkparenttask': '从父任务取消关联', + 'batchcreate': '批量创建任务', + 'createchildren': '创建子任务', + 'managed': '维护', + 'deletechildrentask': '删除子任务', + 'createchildrenstory': '创建子需求', + 'linkchildstory': '关联子需求', + 'unlinkchildrenstory': '取消关联子需求', + 'linkparentstory': '关联到父需求', + 'unlinkparentstory': '从父需求取消关联', + 'deletechildrenstory': '删除子需求', + empty: '', + }, + User__gender: { + 'f': '女', + 'm': '男', empty: '', }, Action__object_type: { - 'product': '产品', - 'story': '需求', - 'productplan': '计划', - 'release': '发布', - 'project': '项目', - 'task': '任务', - 'build': '版本', - 'bug': 'Bug', - 'case': '用例', - 'caseresult': '用例结果', - 'stepresult': '用例步骤', - 'testtask': '测试单', - 'user': '用户', - 'doc': '文档', - 'doclib': '文档库', - 'todo': '待办', - 'branch': '分支', - 'module': '模块', - 'testsuite': '套件', - 'caselib': '用例库', - 'testreport': '报告', - 'entry': '应用', - 'webhook': 'Webhook', + 'product': '产品', + 'story': '需求', + 'productplan': '计划', + 'release': '发布', + 'project': '项目', + 'task': '任务', + 'build': '版本', + 'bug': 'Bug', + 'case': '用例', + 'caseresult': '用例结果', + 'stepresult': '用例步骤', + 'testtask': '测试单', + 'user': '用户', + 'doc': '文档', + 'doclib': '文档库', + 'todo': '待办', + 'branch': '分支', + 'module': '模块', + 'testsuite': '套件', + 'caselib': '用例库', + 'testreport': '报告', + 'entry': '应用', + 'webhook': 'Webhook', empty: '', }, CurProductPlan: { empty: '', }, Task__pri: { - 1: '1', - 2: '2', - 3: '3', - 4: '4', + 1: '1', + 2: '2', + 3: '3', + 4: '4', empty: '', }, Project__status: { - 'wait': '未开始', - 'doing': '进行中', - 'suspended': '已挂起', - 'closed': '已关闭', + 'wait': '未开始', + 'doing': '进行中', + 'suspended': '已挂起', + 'closed': '已关闭', empty: '', }, Release__status: { - 'normal': '正常', - 'terminate': '停止维护', + 'normal': '正常', + 'terminate': '停止维护', + empty: '', + }, + Task_quickpacket: { + 'All': '所有', + 'UNCLOSED': '未关闭', + 'TOME': '指派给我', + 'MORE': '更多', + 'NOTSTARTED': '未开始', + 'INPROGRESS': '进行中', + 'UNACCOMPLISHED': '未完成', + 'IFINISHED': '我完成', + 'COMPLETED': '已完成', + 'CLOSED': '已关闭', + 'CANCELLED': '已取消', + empty: '', + }, + Bug__quickpacket: { + 'All': '所有', + 'UNCLOSED': '未关闭', + 'ICREATE': '由我创建', + 'TOME': '指派给我', + 'BYME': '由我解决', + 'WAITCLOSED': '待关闭', + 'UNRESOLVED': '未解决', + 'MORE': '更多', + 'UNCONFIRMED': '未确认', + 'UNASSIGNED': '未指派', + 'EXPIREDBUG': '过期Bug', empty: '', }, Task__closed_reason: { - 'done': '已完成', - 'cancel': '已取消', + 'done': '已完成', + 'cancel': '已取消', + empty: '', + }, + Bug__os: { + 'all': '全部', + 'windows': 'Windows', + 'win10': 'Windows 10', + 'win8': 'Windows 8', + 'win7': 'Windows 7', + 'vista': 'Windows Vista', + 'winxp': 'Windows XP', + 'win2012': 'Windows 2012', + 'win2008': 'Windows 2008', + 'win2003': 'Windows 2003', + 'win2000': 'Windows 2000', + 'android': 'Android', + 'ios': 'IOS', + 'wp8': 'WP8', + 'wp7': 'WP7', + 'symbian': 'Symbian', + 'linux': 'Linux', + 'freebsd': 'FreeBSD', + 'osx': 'OS X', + 'unix': 'Unix', + 'others': '其他', empty: '', }, UserRealName: { empty: '', }, Product__type: { - 'normal': '正常', - 'branch': '多分支', - 'platform': '多平台', + 'normal': '正常', + 'branch': '多分支', + 'platform': '多平台', + empty: '', + }, + Testcase__type: { + 'feature': '功能测试', + 'performance': '性能测试', + 'config': '配置相关', + 'install': '安装部署', + 'security': '安全相关', + 'interface': '接口测试', + 'unit': '单元测试', + 'other': '其他', + empty: '', + }, + Bug__severity: { + 1: '1', + 2: '2', + 3: '3', + 4: '4', empty: '', }, Testcase__status: { - 'wait': '待评审', - 'normal': '正常', - 'blocked': '被阻塞', - 'investigate': '研究中', + 'wait': '待评审', + 'normal': '正常', + 'blocked': '被阻塞', + 'investigate': '研究中', empty: '', }, Story__quickpacket: { - 'ALL': '所有', - 'UNCLOSED': '未关闭', - 'TOME': '指给我', - 'ICREATE': '我创建', - 'IREVIEW': '我评审', - 'DRAFT': '草稿', - 'MORE': '更多', - 'ICLOSE': '我关闭', - 'ACTIVED': '激活', - 'CHANGED': '已变更', - 'TOBECLOSED': '待关闭', - 'CLOSED': '已关闭', + 'ALL': '所有', + 'UNCLOSED': '未关闭', + 'TOME': '指给我', + 'ICREATE': '我创建', + 'IREVIEW': '我评审', + 'DRAFT': '草稿', + 'MORE': '更多', + 'ICLOSE': '我关闭', + 'ACTIVED': '激活', + 'CHANGED': '已变更', + 'TOBECLOSED': '待关闭', + 'CLOSED': '已关闭', + empty: '', + }, + Bug__browser: { + 'all': '全部', + 'ie': 'IE系列', + 'ie11': 'IE11', + 'ie10': 'IE10', + 'ie9': 'IE9', + 'ie8': 'IE8', + 'ie7': 'IE7', + 'ie6': 'IE6', + 'chrome': 'chrome', + 'firefox': 'firefox系列', + 'firefox4': 'firefox4', + 'firefox3': 'firefox3', + 'firefox2': 'firefox2', + 'opera': 'opera系列', + 'opera11': 'opera11', + 'oprea10': 'oprea10', + 'opera9': 'opera9', + 'safari': 'safari', + 'maxthon': '傲游', + 'uc': 'UC', + 'others': '其他', empty: '', }, Project__type: { - 'sprint': '短期项目', - 'waterfall': '长期项目', - 'ops': '运维项目', + 'sprint': '短期项目', + 'waterfall': '长期项目', + 'ops': '运维项目', empty: '', }, Story__stage: { - 'wait': '未开始', - 'planned': '已计划', - 'projected': '已立项', - 'developing': '研发中', - 'developed': '研发完毕', - 'testing': '测试中', - 'tested': '测试完毕', - 'verified': '已验收', - 'released': '已发布', - 'closed': '已关闭', + 'wait': '未开始', + 'planned': '已计划', + 'projected': '已立项', + 'developing': '研发中', + 'developed': '研发完毕', + 'testing': '测试中', + 'tested': '测试完毕', + 'verified': '已验收', + 'released': '已发布', + 'closed': '已关闭', + empty: '', + }, + Company__guest: { + '1': '允许', + '0': '不允许', empty: '', }, Story__status: { - 'draft': '草稿', - 'active': '激活', - 'closed': '已关闭', - 'changed': '已变更', + 'draft': '草稿', + 'active': '激活', + 'closed': '已关闭', + 'changed': '已变更', empty: '', }, Action__read: { - '0': '0', - '1': '1', + '0': '0', + '1': '1', empty: '', }, YesNo3: { - 'yes': '是', - 'no': '否', + 'yes': '是', + 'no': '否', empty: '', }, Story__source: { - 'customer': '客户', - 'user': '用户', - 'po': '产品经理', - 'market': '市场', - 'service': '客服', - 'operation': '运营', - 'support': '技术支持', - 'competitor': '竞争对手', - 'partner': '合作伙伴', - 'dev': '开发人员', - 'tester': '测试人员', - 'bug': 'Bug', - 'forum': '论坛', - 'other': '其它', + 'customer': '客户', + 'user': '用户', + 'po': '产品经理', + 'market': '市场', + 'service': '客服', + 'operation': '运营', + 'support': '技术支持', + 'competitor': '竞争对手', + 'partner': '合作伙伴', + 'dev': '开发人员', + 'tester': '测试人员', + 'bug': 'Bug', + 'forum': '论坛', + 'other': '其它', empty: '', }, Task__status: { - 'wait': '未开始', - 'doing': '进行中', - 'done': '已完成', - 'pause': '已暂停', - 'cancel': '已取消', - 'closed': '已关闭', + 'wait': '未开始', + 'doing': '进行中', + 'done': '已完成', + 'pause': '已暂停', + 'cancel': '已取消', + 'closed': '已关闭', empty: '', }, Testcase__pri: { - 1: '1', - 2: '2', - 3: '3', - 4: '4', + 1: '1', + 2: '2', + 3: '3', + 4: '4', empty: '', }, YesNo2: { - 1: '是', - 0: '否', + 1: '是', + 0: '否', + empty: '', + }, + Role: { + empty: '', + }, + Testcase__result: { + 'n/a': '忽略', + 'pass': '通过', + 'fail': '失败', + 'blocked': '阻塞', empty: '', }, Bug__pri: { - 1: '1', - 2: '2', - 3: '3', - 4: '4', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + empty: '', + }, + Bug__resolution: { + 'bydesign': '设计如此', + 'duplicate': '重复Bug', + 'external': '外部原因', + 'fixed': '已解决', + 'notrepro': '无法重现', + 'postponed': '延期处理', + 'willnotfix': '不予解决', + 'tostory': '转为需求', empty: '', }, }; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/company/company_en_US.ts b/app_Web/src/locale/lanres/company/company_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..6c73be0485e31894dd0f3909f0ee576980fe63c3 --- /dev/null +++ b/app_Web/src/locale/lanres/company/company_en_US.ts @@ -0,0 +1,106 @@ + +export default { + fields: { + admins: 'admins', + fax: '传真', + deleted: '逻辑删除标志', + website: '官网', + id: 'id', + zipcode: '邮政编码', + address: '通讯地址', + backyard: '内网', + name: '公司名称', + guest: '匿名登陆', + phone: '联系电话', + }, + views: { + depttreeexpview: { + caption: "公司", + title: '公司', + }, + deptusertreeexpview: { + caption: "公司", + title: '公司', + }, + maintabexpview: { + caption: "组织权限", + title: '组织权限', + }, + mainview: { + caption: "公司信息", + title: '公司信息', + }, + editview: { + caption: "公司信息", + title: '公司信息', + }, + mainview9: { + caption: "公司", + title: '公司', + }, + }, + main_form: { + details: { + group1: "company基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "id", + srfmajortext: "公司名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "公司名称", + phone: "联系电话", + fax: "传真", + address: "通讯地址", + zipcode: "邮政编码", + website: "官网", + backyard: "内网", + guest: "匿名登陆", + id: "id", + }, + uiactions: { + }, + }, + main_edit_form: { + details: { + group1: "company基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "id", + srfmajortext: "公司名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "公司名称", + phone: "联系电话", + fax: "传真", + address: "通讯地址", + zipcode: "邮政编码", + website: "官网", + backyard: "内网", + guest: "匿名登陆", + id: "id", + }, + uiactions: { + }, + }, + deptexp_treeview: { + nodes: { + alldept: '所有部门', + root: '默认根节点', + }, + uiactions: { + }, + }, + deptuserexp_treeview: { + nodes: { + alldept: '所有部门', + root: '默认根节点', + }, + uiactions: { + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/company/company_zh_CN.ts b/app_Web/src/locale/lanres/company/company_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..952c4b58a1a89d3dce483eb35df8ff69c1ffa1ef --- /dev/null +++ b/app_Web/src/locale/lanres/company/company_zh_CN.ts @@ -0,0 +1,105 @@ +export default { + fields: { + admins: 'admins', + fax: '传真', + deleted: '逻辑删除标志', + website: '官网', + id: 'id', + zipcode: '邮政编码', + address: '通讯地址', + backyard: '内网', + name: '公司名称', + guest: '匿名登陆', + phone: '联系电话', + }, + views: { + depttreeexpview: { + caption: '公司', + title: '公司', + }, + deptusertreeexpview: { + caption: '公司', + title: '公司', + }, + maintabexpview: { + caption: '组织权限', + title: '组织权限', + }, + mainview: { + caption: '公司信息', + title: '公司信息', + }, + editview: { + caption: '公司信息', + title: '公司信息', + }, + mainview9: { + caption: '公司', + title: '公司', + }, + }, + main_form: { + details: { + group1: 'company基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: 'id', + srfmajortext: '公司名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '公司名称', + phone: '联系电话', + fax: '传真', + address: '通讯地址', + zipcode: '邮政编码', + website: '官网', + backyard: '内网', + guest: '匿名登陆', + id: 'id', + }, + uiactions: { + }, + }, + main_edit_form: { + details: { + group1: 'company基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: 'id', + srfmajortext: '公司名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '公司名称', + phone: '联系电话', + fax: '传真', + address: '通讯地址', + zipcode: '邮政编码', + website: '官网', + backyard: '内网', + guest: '匿名登陆', + id: 'id', + }, + uiactions: { + }, + }, + deptexp_treeview: { + nodes: { + alldept: '所有部门', + root: '默认根节点', + }, + uiactions: { + }, + }, + deptuserexp_treeview: { + nodes: { + alldept: '所有部门', + root: '默认根节点', + }, + uiactions: { + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/dept/dept_en_US.ts b/app_Web/src/locale/lanres/dept/dept_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..c9721ae5a7caedf09bac1d911eae9d5d3a611f2a --- /dev/null +++ b/app_Web/src/locale/lanres/dept/dept_en_US.ts @@ -0,0 +1,156 @@ + +export default { + fields: { + manager: '负责人', + grade: 'grade', + function: 'function', + order: 'order', + path: 'path', + position: 'position', + id: 'id', + name: '部门名称', + parentname: '上级部门', + parent: 'parent', + isleaf: '无子部门', + }, + views: { + pickupview: { + caption: "部门", + title: '部门', + }, + maingridview: { + caption: "部门", + title: '部门', + }, + editview: { + caption: "部门信息", + title: '部门信息', + }, + pickupgridview: { + caption: "部门", + title: '部门', + }, + }, + main_form: { + details: { + group1: "基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "id", + srfmajortext: "部门名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "部门名称", + parentname: "上级部门", + manager: "负责人", + id: "id", + parent: "parent", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: "ID", + name: "部门", + parentname: "上级部门", + manager: "负责人", + order: "排序值", + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: "常规条件", + }, + uiactions: { + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: "Save", + tip: "Save", + }, + tbitem4: { + caption: "Save And New", + tip: "Save And New", + }, + tbitem5: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + tbitem6: { + caption: "-", + tip: "", + }, + tbitem7: { + caption: "Remove And Close", + tip: "Remove And Close Window", + }, + tbitem8: { + caption: "-", + tip: "", + }, + tbitem12: { + caption: "New", + tip: "New", + }, + tbitem13: { + caption: "-", + tip: "", + }, + tbitem14: { + caption: "Copy", + tip: "Copy {0}", + }, + tbitem16: { + caption: "-", + tip: "", + }, + tbitem23: { + caption: "第一个记录", + tip: "第一个记录", + }, + tbitem24: { + caption: "上一个记录", + tip: "上一个记录", + }, + tbitem25: { + caption: "下一个记录", + tip: "下一个记录", + }, + tbitem26: { + caption: "最后一个记录", + tip: "最后一个记录", + }, + tbitem21: { + caption: "-", + tip: "", + }, + tbitem22: { + caption: "Help", + tip: "Help", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/dept/dept_zh_CN.ts b/app_Web/src/locale/lanres/dept/dept_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..a9739be1de7a981e9fa144cd077c6de232396dda --- /dev/null +++ b/app_Web/src/locale/lanres/dept/dept_zh_CN.ts @@ -0,0 +1,155 @@ +export default { + fields: { + manager: '负责人', + grade: 'grade', + function: 'function', + order: 'order', + path: 'path', + position: 'position', + id: 'id', + name: '部门名称', + parentname: '上级部门', + parent: 'parent', + isleaf: '无子部门', + }, + views: { + pickupview: { + caption: '部门', + title: '部门', + }, + maingridview: { + caption: '部门', + title: '部门', + }, + editview: { + caption: '部门信息', + title: '部门信息', + }, + pickupgridview: { + caption: '部门', + title: '部门', + }, + }, + main_form: { + details: { + group1: '基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: 'id', + srfmajortext: '部门名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '部门名称', + parentname: '上级部门', + manager: '负责人', + id: 'id', + parent: 'parent', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: 'ID', + name: '部门', + parentname: '上级部门', + manager: '负责人', + order: '排序值', + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: '常规条件', + }, + uiactions: { + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: '保存', + tip: '保存', + }, + tbitem4: { + caption: '保存并新建', + tip: '保存并新建', + }, + tbitem5: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + tbitem6: { + caption: '-', + tip: '', + }, + tbitem7: { + caption: '删除', + tip: '删除', + }, + tbitem8: { + caption: '-', + tip: '', + }, + tbitem12: { + caption: '新建', + tip: '新建', + }, + tbitem13: { + caption: '-', + tip: '', + }, + tbitem14: { + caption: '拷贝', + tip: '拷贝', + }, + tbitem16: { + caption: '-', + tip: '', + }, + tbitem23: { + caption: '第一个记录', + tip: '第一个记录', + }, + tbitem24: { + caption: '上一个记录', + tip: '上一个记录', + }, + tbitem25: { + caption: '下一个记录', + tip: '下一个记录', + }, + tbitem26: { + caption: '最后一个记录', + tip: '最后一个记录', + }, + tbitem21: { + caption: '-', + tip: '', + }, + tbitem22: { + caption: '帮助', + tip: '帮助', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/action/action_en_US.ts b/app_Web/src/locale/lanres/entities/action/action_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..5ff7ac38c46de5c31acf06103b100dc4b5c480ae --- /dev/null +++ b/app_Web/src/locale/lanres/entities/action/action_en_US.ts @@ -0,0 +1,130 @@ + +export default { + fields: { + extra: '附加值', + objecttype: '对象类型', + id: 'id', + comment: '备注', + read: '已读', + action: '动作', + date: '日期', + product: '产品', + objectid: '对象ID', + actor: '操作者', + project: '项目', + }, + views: { + histroylistview: { + caption: "系统日志", + title: '系统日志', + }, + projecttrendslistview: { + caption: "系统日志", + title: '系统日志', + }, + projecttrendslistview9: { + caption: "系统日志", + title: '系统日志', + }, + producttrendslistview9: { + caption: "系统日志", + title: '系统日志', + }, + alltrendslistview: { + caption: "系统日志", + title: '系统日志', + }, + producttrendslistview: { + caption: "系统日志", + title: '系统日志', + }, + editview: { + caption: "系统日志", + title: '系统日志', + }, + }, + main_form: { + details: { + group1: "action基本信息", + formpage1: "基本信息", + group2: "操作信息", + formpage2: "其它", + srforikey: "", + srfkey: "id", + srfmajortext: "备注", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + id: "id", + }, + uiactions: { + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: "Save", + tip: "Save", + }, + tbitem4: { + caption: "Save And New", + tip: "Save And New", + }, + tbitem5: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + tbitem6: { + caption: "-", + tip: "", + }, + tbitem7: { + caption: "Remove And Close", + tip: "Remove And Close Window", + }, + tbitem8: { + caption: "-", + tip: "", + }, + tbitem12: { + caption: "New", + tip: "New", + }, + tbitem13: { + caption: "-", + tip: "", + }, + tbitem14: { + caption: "Copy", + tip: "Copy {0}", + }, + tbitem16: { + caption: "-", + tip: "", + }, + tbitem23: { + caption: "第一个记录", + tip: "第一个记录", + }, + tbitem24: { + caption: "上一个记录", + tip: "上一个记录", + }, + tbitem25: { + caption: "下一个记录", + tip: "下一个记录", + }, + tbitem26: { + caption: "最后一个记录", + tip: "最后一个记录", + }, + tbitem21: { + caption: "-", + tip: "", + }, + tbitem22: { + caption: "Help", + tip: "Help", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/action/action_zh_CN.ts b/app_Web/src/locale/lanres/entities/action/action_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..f6958590187073563d44d0cc9631852b18ce0825 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/action/action_zh_CN.ts @@ -0,0 +1,129 @@ +export default { + fields: { + extra: '附加值', + objecttype: '对象类型', + id: 'id', + comment: '备注', + read: '已读', + action: '动作', + date: '日期', + product: '产品', + objectid: '对象ID', + actor: '操作者', + project: '项目', + }, + views: { + histroylistview: { + caption: '系统日志', + title: '系统日志', + }, + projecttrendslistview: { + caption: '系统日志', + title: '系统日志', + }, + projecttrendslistview9: { + caption: '系统日志', + title: '系统日志', + }, + producttrendslistview9: { + caption: '系统日志', + title: '系统日志', + }, + alltrendslistview: { + caption: '系统日志', + title: '系统日志', + }, + producttrendslistview: { + caption: '系统日志', + title: '系统日志', + }, + editview: { + caption: '系统日志', + title: '系统日志', + }, + }, + main_form: { + details: { + group1: 'action基本信息', + formpage1: '基本信息', + group2: '操作信息', + formpage2: '其它', + srforikey: '', + srfkey: 'id', + srfmajortext: '备注', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + id: 'id', + }, + uiactions: { + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: '保存', + tip: '保存', + }, + tbitem4: { + caption: '保存并新建', + tip: '保存并新建', + }, + tbitem5: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + tbitem6: { + caption: '-', + tip: '', + }, + tbitem7: { + caption: '删除', + tip: '删除', + }, + tbitem8: { + caption: '-', + tip: '', + }, + tbitem12: { + caption: '新建', + tip: '新建', + }, + tbitem13: { + caption: '-', + tip: '', + }, + tbitem14: { + caption: '拷贝', + tip: '拷贝', + }, + tbitem16: { + caption: '-', + tip: '', + }, + tbitem23: { + caption: '第一个记录', + tip: '第一个记录', + }, + tbitem24: { + caption: '上一个记录', + tip: '上一个记录', + }, + tbitem25: { + caption: '下一个记录', + tip: '下一个记录', + }, + tbitem26: { + caption: '最后一个记录', + tip: '最后一个记录', + }, + tbitem21: { + caption: '-', + tip: '', + }, + tbitem22: { + caption: '帮助', + tip: '帮助', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/branch/branch_en_US.ts b/app_Web/src/locale/lanres/entities/branch/branch_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..0dd01ed0f48083bde5c45f2232579f7a554979f6 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/branch/branch_en_US.ts @@ -0,0 +1,74 @@ + +export default { + fields: { + name: '名称', + deleted: '已删除', + id: '编号', + order: '排序', + product: '所属产品', + }, + views: { + pmgridview: { + caption: "平台管理", + title: '平台管理', + }, + pmeditview: { + caption: "产品的分支和平台信息", + title: '产品的分支和平台信息', + }, + }, + platformmanagement_form: { + details: { + group1: "产品的分支和平台信息基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "编号", + srfmajortext: "名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "名称", + order: "排序", + id: "编号", + }, + uiactions: { + }, + }, + platformmanagement_grid: { + columns: { + id: "编号", + name: "名称", + order: "排序", + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: "常规条件", + }, + uiactions: { + }, + }, + pmgridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "Edit", + tip: "Edit {0}", + }, + }, + pmeditviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/branch/branch_zh_CN.ts b/app_Web/src/locale/lanres/entities/branch/branch_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..29e0a26aea8e44061bc8a3cefeaa2e65ed0219ce --- /dev/null +++ b/app_Web/src/locale/lanres/entities/branch/branch_zh_CN.ts @@ -0,0 +1,73 @@ +export default { + fields: { + name: '名称', + deleted: '已删除', + id: '编号', + order: '排序', + product: '所属产品', + }, + views: { + pmgridview: { + caption: '平台管理', + title: '平台管理', + }, + pmeditview: { + caption: '产品的分支和平台信息', + title: '产品的分支和平台信息', + }, + }, + platformmanagement_form: { + details: { + group1: '产品的分支和平台信息基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: '编号', + srfmajortext: '名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '名称', + order: '排序', + id: '编号', + }, + uiactions: { + }, + }, + platformmanagement_grid: { + columns: { + id: '编号', + name: '名称', + order: '排序', + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: '常规条件', + }, + uiactions: { + }, + }, + pmgridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '编辑', + tip: '编辑', + }, + }, + pmeditviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/bug/bug_en_US.ts b/app_Web/src/locale/lanres/entities/bug/bug_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..c75433427122e8d1809ecd6de730fdc47d801a61 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/bug/bug_en_US.ts @@ -0,0 +1,394 @@ + +export default { + fields: { + severity: '严重程度', + storyversion: '需求版本', + linkbug: '相关Bug', + activateddate: '激活日期', + assignedto: '指派给', + resolution: '解决方案', + lastediteddate: '修改日期', + result: 'result', + keywords: '关键词', + closedby: '由谁关闭', + browser: '浏览器', + steps: '重现步骤', + v2: 'v2', + confirmed: '是否确认', + openedby: '由谁创建', + activatedcount: '激活次数', + openeddate: '创建日期', + closeddate: '关闭日期', + mailto: '抄送给', + assigneddate: '指派日期', + deadline: '截止日期', + color: '标题颜色', + resolveddate: '解决日期', + type: 'Bug类型', + status: 'Bug状态', + openedbuild: '影响版本', + v1: 'v1', + deleted: '已删除', + lines: 'lines', + substatus: '子状态', + id: 'Bug编号', + found: 'found', + resolvedby: '解决者', + resolvedbuild: '解决版本', + pri: '优先级', + os: '操作系统', + hardware: 'hardware', + lasteditedby: '最后修改者', + title: 'Bug标题', + productname: '产品', + projectname: '项目', + storyname: '需求', + caseversion: '用例版本', + repotype: '代码类型', + tostory: '转需求', + entry: '应用', + product: '所属产品', + totask: '转任务', + plan: '所属计划', + module: '所属模块', + branch: '平台/分支', + duplicatebug: '重复ID', + repo: '代码', + story: '相关需求', + ibizcase: '相关用例', + project: '所属项目', + task: '相关任务', + testtask: '测试单', + }, + views: { + plansubgridview: { + caption: "Bug", + title: 'Bug', + }, + maineditview: { + caption: "Bug编辑", + title: 'Bug编辑', + }, + maindashboardview: { + caption: "Bug", + title: 'Bug', + }, + pickupgridview: { + caption: "Bug", + title: 'Bug', + }, + mpickupview: { + caption: "关联Bug", + title: '关联Bug', + }, + buglifeeditview9: { + caption: "Bug", + title: 'Bug', + }, + editview: { + caption: "Bug", + title: 'Bug', + }, + stepsinfoeditview: { + caption: "重现步骤", + title: '重现步骤', + }, + gridview9_assignedtome: { + caption: "Bug", + title: 'Bug', + }, + gridview: { + caption: "Bug", + title: 'Bug', + }, + dashboardmaineditview9: { + caption: "Bug", + title: 'Bug', + }, + }, + stepsinfo_form: { + details: { + group1: "Bug基本信息", + formpage1: "基本信息", + srfupdatedate: "修改日期", + srforikey: "", + srfkey: "Bug编号", + srfmajortext: "Bug标题", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + steps: "", + id: "Bug编号", + }, + uiactions: { + }, + }, + main_form: { + details: { + grouppanel1: "分组面板", + grouppanel2: "分组面板", + group1: "bug基本信息", + formpage1: "基本信息", + srfupdatedate: "修改日期", + srforikey: "", + srfkey: "Bug编号", + srfmajortext: "Bug标题", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + productname: "产品", + product: "所属产品", + module: "所属模块", + project: "所属项目", + projectname: "项目", + openedbuild: "影响版本", + assignedto: "指派给", + deadline: "截止日期", + type: "Bug类型", + os: "操作系统", + browser: "浏览器", + title: "Bug标题", + severity: "严重程度", + pri: "优先级", + steps: "重现步骤", + story: "相关需求", + task: "相关任务", + mailto: "抄送给", + keywords: "关键词", + id: "Bug编号", + }, + uiactions: { + }, + }, + dashboardmainedit_form: { + details: { + druipart1: "", + grouppanel6: "历史记录", + grouppanel1: "分组面板", + grouppanel3: "基本信息", + grouppanel4: "项目/需求/任务", + grouppanel5: "Bug的一生", + grouppanel2: "分组面板", + group1: "Bug基本信息", + formpage1: "基本信息", + srfupdatedate: "修改日期", + srforikey: "", + srfkey: "Bug编号", + srfmajortext: "Bug标题", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + title: "Bug标题", + steps: "重现步骤", + product: "所属产品", + productname: "产品", + module: "所属模块", + plan: "所属计划", + type: "Bug类型", + severity: "严重程度", + pri: "优先级", + status: "Bug状态", + activatedcount: "激活次数", + activateddate: "激活日期", + confirmed: "是否确认", + assignedto: "当前指派", + deadline: "截止日期", + os: "操作系统", + browser: "浏览器", + keywords: "关键词", + mailto: "抄送给", + project: "所属项目", + projectname: "项目", + story: "相关需求", + task: "相关任务", + openedby: "由谁创建", + openedbuild: "影响版本", + resolvedby: "由谁解决", + resolution: "解决方案", + resolvedbuild: "解决版本", + closedby: "由谁关闭", + lasteditedby: "最后修改者", + id: "Bug编号", + }, + uiactions: { + }, + }, + dashboardmain_form: { + details: { + maingroup1: "Bug基本信息", + formpage1: "基本信息", + grouppanel1: "分组面板", + formpage2: "项目/需求/任务", + srfupdatedate: "修改日期", + srforikey: "", + srfkey: "Bug编号", + srfmajortext: "Bug标题", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + product: "所属产品", + title: "Bug标题", + productname: "产品", + module: "所属模块", + plan: "所属计划", + type: "Bug类型", + severity: "严重程度", + pri: "优先级", + status: "Bug状态", + activatedcount: "激活次数", + activateddate: "激活日期", + confirmed: "是否确认", + assignedto: "当前指派", + deadline: "截止日期", + os: "操作系统", + browser: "浏览器", + keywords: "关键词", + mailto: "抄送给", + project: "所属项目", + projectname: "项目", + story: "相关需求", + task: "相关任务", + id: "Bug编号", + }, + uiactions: { + }, + }, + dashboardbuglife_form: { + details: { + buggroup1: "Bug基本信息", + formpage1: "Bug的一生", + grouppanel1: "分组面板", + formpage2: "其他相关", + srfupdatedate: "修改日期", + srforikey: "", + srfkey: "Bug编号", + srfmajortext: "Bug标题", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + openedby: "由谁创建", + openedbuild: "影响版本", + resolvedby: "由谁解决", + resolvedbuild: "解决版本", + resolution: "解决方案", + closedby: "由谁关闭", + lasteditedby: "最后修改者", + linkbug: "相关Bug", + id: "Bug编号", + }, + uiactions: { + }, + }, + pickupgird_grid: { + columns: { + id: "Bug编号", + pri: "P", + confirmed: "是否确认", + title: "Bug标题", + status: "Bug状态", + openedby: "由谁创建", + openeddate: "创建日期", + assignedto: "指派给", + }, + uiactions: { + }, + }, + main_plansub_grid: { + columns: { + id: "Bug编号", + pri: "P", + confirmed: "是否确认", + title: "Bug标题", + status: "Bug状态", + openedby: "由谁创建", + openeddate: "创建日期", + assignedto: "指派给", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: "Bug编号", + pri: "P", + confirmed: "是否确认", + title: "Bug标题", + status: "Bug状态", + openedby: "由谁创建", + openeddate: "创建日期", + assignedto: "指派给", + resolution: "方案", + uagridcolumn1: "操作", + }, + uiactions: { + mainedit: "编辑", + }, + }, + main2_grid: { + columns: { + id: "ID", + pri: "级别", + title: "Bug标题", + status: "状态", + }, + uiactions: { + }, + }, + maineditviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, + plansubgridviewtoolbar_toolbar: { + deuiaction3_planrelationbug: { + caption: "关联Bug", + tip: "关联Bug", + }, + seperator2: { + caption: "", + tip: "", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/bug/bug_zh_CN.ts b/app_Web/src/locale/lanres/entities/bug/bug_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..23e992ddff38a0df96db2bb1ec4f31c696267d07 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/bug/bug_zh_CN.ts @@ -0,0 +1,393 @@ +export default { + fields: { + severity: '严重程度', + storyversion: '需求版本', + linkbug: '相关Bug', + activateddate: '激活日期', + assignedto: '指派给', + resolution: '解决方案', + lastediteddate: '修改日期', + result: 'result', + keywords: '关键词', + closedby: '由谁关闭', + browser: '浏览器', + steps: '重现步骤', + v2: 'v2', + confirmed: '是否确认', + openedby: '由谁创建', + activatedcount: '激活次数', + openeddate: '创建日期', + closeddate: '关闭日期', + mailto: '抄送给', + assigneddate: '指派日期', + deadline: '截止日期', + color: '标题颜色', + resolveddate: '解决日期', + type: 'Bug类型', + status: 'Bug状态', + openedbuild: '影响版本', + v1: 'v1', + deleted: '已删除', + lines: 'lines', + substatus: '子状态', + id: 'Bug编号', + found: 'found', + resolvedby: '解决者', + resolvedbuild: '解决版本', + pri: '优先级', + os: '操作系统', + hardware: 'hardware', + lasteditedby: '最后修改者', + title: 'Bug标题', + productname: '产品', + projectname: '项目', + storyname: '需求', + caseversion: '用例版本', + repotype: '代码类型', + tostory: '转需求', + entry: '应用', + product: '所属产品', + totask: '转任务', + plan: '所属计划', + module: '所属模块', + branch: '平台/分支', + duplicatebug: '重复ID', + repo: '代码', + story: '相关需求', + ibizcase: '相关用例', + project: '所属项目', + task: '相关任务', + testtask: '测试单', + }, + views: { + plansubgridview: { + caption: 'Bug', + title: 'Bug', + }, + maineditview: { + caption: 'Bug编辑', + title: 'Bug编辑', + }, + maindashboardview: { + caption: 'Bug', + title: 'Bug', + }, + pickupgridview: { + caption: 'Bug', + title: 'Bug', + }, + mpickupview: { + caption: '关联Bug', + title: '关联Bug', + }, + buglifeeditview9: { + caption: 'Bug', + title: 'Bug', + }, + editview: { + caption: 'Bug', + title: 'Bug', + }, + stepsinfoeditview: { + caption: '重现步骤', + title: '重现步骤', + }, + gridview9_assignedtome: { + caption: 'Bug', + title: 'Bug', + }, + gridview: { + caption: 'Bug', + title: 'Bug', + }, + dashboardmaineditview9: { + caption: 'Bug', + title: 'Bug', + }, + }, + stepsinfo_form: { + details: { + group1: 'Bug基本信息', + formpage1: '基本信息', + srfupdatedate: '修改日期', + srforikey: '', + srfkey: 'Bug编号', + srfmajortext: 'Bug标题', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + steps: '', + id: 'Bug编号', + }, + uiactions: { + }, + }, + main_form: { + details: { + grouppanel1: '分组面板', + grouppanel2: '分组面板', + group1: 'bug基本信息', + formpage1: '基本信息', + srfupdatedate: '修改日期', + srforikey: '', + srfkey: 'Bug编号', + srfmajortext: 'Bug标题', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + productname: '产品', + product: '所属产品', + module: '所属模块', + project: '所属项目', + projectname: '项目', + openedbuild: '影响版本', + assignedto: '指派给', + deadline: '截止日期', + type: 'Bug类型', + os: '操作系统', + browser: '浏览器', + title: 'Bug标题', + severity: '严重程度', + pri: '优先级', + steps: '重现步骤', + story: '相关需求', + task: '相关任务', + mailto: '抄送给', + keywords: '关键词', + id: 'Bug编号', + }, + uiactions: { + }, + }, + dashboardmainedit_form: { + details: { + druipart1: '', + grouppanel6: '历史记录', + grouppanel1: '分组面板', + grouppanel3: '基本信息', + grouppanel4: '项目/需求/任务', + grouppanel5: 'Bug的一生', + grouppanel2: '分组面板', + group1: 'Bug基本信息', + formpage1: '基本信息', + srfupdatedate: '修改日期', + srforikey: '', + srfkey: 'Bug编号', + srfmajortext: 'Bug标题', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + title: 'Bug标题', + steps: '重现步骤', + product: '所属产品', + productname: '产品', + module: '所属模块', + plan: '所属计划', + type: 'Bug类型', + severity: '严重程度', + pri: '优先级', + status: 'Bug状态', + activatedcount: '激活次数', + activateddate: '激活日期', + confirmed: '是否确认', + assignedto: '当前指派', + deadline: '截止日期', + os: '操作系统', + browser: '浏览器', + keywords: '关键词', + mailto: '抄送给', + project: '所属项目', + projectname: '项目', + story: '相关需求', + task: '相关任务', + openedby: '由谁创建', + openedbuild: '影响版本', + resolvedby: '由谁解决', + resolution: '解决方案', + resolvedbuild: '解决版本', + closedby: '由谁关闭', + lasteditedby: '最后修改者', + id: 'Bug编号', + }, + uiactions: { + }, + }, + dashboardmain_form: { + details: { + maingroup1: 'Bug基本信息', + formpage1: '基本信息', + grouppanel1: '分组面板', + formpage2: '项目/需求/任务', + srfupdatedate: '修改日期', + srforikey: '', + srfkey: 'Bug编号', + srfmajortext: 'Bug标题', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + product: '所属产品', + title: 'Bug标题', + productname: '产品', + module: '所属模块', + plan: '所属计划', + type: 'Bug类型', + severity: '严重程度', + pri: '优先级', + status: 'Bug状态', + activatedcount: '激活次数', + activateddate: '激活日期', + confirmed: '是否确认', + assignedto: '当前指派', + deadline: '截止日期', + os: '操作系统', + browser: '浏览器', + keywords: '关键词', + mailto: '抄送给', + project: '所属项目', + projectname: '项目', + story: '相关需求', + task: '相关任务', + id: 'Bug编号', + }, + uiactions: { + }, + }, + dashboardbuglife_form: { + details: { + buggroup1: 'Bug基本信息', + formpage1: 'Bug的一生', + grouppanel1: '分组面板', + formpage2: '其他相关', + srfupdatedate: '修改日期', + srforikey: '', + srfkey: 'Bug编号', + srfmajortext: 'Bug标题', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + openedby: '由谁创建', + openedbuild: '影响版本', + resolvedby: '由谁解决', + resolvedbuild: '解决版本', + resolution: '解决方案', + closedby: '由谁关闭', + lasteditedby: '最后修改者', + linkbug: '相关Bug', + id: 'Bug编号', + }, + uiactions: { + }, + }, + pickupgird_grid: { + columns: { + id: 'Bug编号', + pri: 'P', + confirmed: '是否确认', + title: 'Bug标题', + status: 'Bug状态', + openedby: '由谁创建', + openeddate: '创建日期', + assignedto: '指派给', + }, + uiactions: { + }, + }, + main_plansub_grid: { + columns: { + id: 'Bug编号', + pri: 'P', + confirmed: '是否确认', + title: 'Bug标题', + status: 'Bug状态', + openedby: '由谁创建', + openeddate: '创建日期', + assignedto: '指派给', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: 'Bug编号', + pri: 'P', + confirmed: '是否确认', + title: 'Bug标题', + status: 'Bug状态', + openedby: '由谁创建', + openeddate: '创建日期', + assignedto: '指派给', + resolution: '方案', + uagridcolumn1: '操作', + }, + uiactions: { + mainedit: '编辑', + }, + }, + main2_grid: { + columns: { + id: 'ID', + pri: '级别', + title: 'Bug标题', + status: '状态', + }, + uiactions: { + }, + }, + maineditviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, + plansubgridviewtoolbar_toolbar: { + deuiaction3_planrelationbug: { + caption: '关联Bug', + tip: '关联Bug', + }, + seperator2: { + caption: '', + tip: '', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/build/build_en_US.ts b/app_Web/src/locale/lanres/entities/build/build_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..eec0e0599f467c27239c273ef36ecc9b2ae8e392 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/build/build_en_US.ts @@ -0,0 +1,18 @@ + +export default { + fields: { + name: '名称编号', + builder: '构建者', + desc: '描述', + id: 'id', + deleted: '已删除', + scmpath: '源代码地址', + filepath: '下载地址', + stories: '完成的需求', + bugs: '解决的Bug', + date: '打包日期', + product: '产品', + branch: '平台/分支', + project: '所属项目', + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/build/build_zh_CN.ts b/app_Web/src/locale/lanres/entities/build/build_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..998fa397b239ee94d6274474025d9ac56b4325ce --- /dev/null +++ b/app_Web/src/locale/lanres/entities/build/build_zh_CN.ts @@ -0,0 +1,17 @@ +export default { + fields: { + name: '名称编号', + builder: '构建者', + desc: '描述', + id: 'id', + deleted: '已删除', + scmpath: '源代码地址', + filepath: '下载地址', + stories: '完成的需求', + bugs: '解决的Bug', + date: '打包日期', + product: '产品', + branch: '平台/分支', + project: '所属项目', + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/case-step/case-step_en_US.ts b/app_Web/src/locale/lanres/entities/case-step/case-step_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..03c6ef6679426326c24df358a85543845ec3022c --- /dev/null +++ b/app_Web/src/locale/lanres/entities/case-step/case-step_en_US.ts @@ -0,0 +1,176 @@ + +export default { + fields: { + type: '用例步骤类型', + id: '编号', + desc: '步骤', + expect: '预期', + version: '用例版本', + ibizcase: '用例', + parent: '分组用例步骤的组编号', + }, + views: { + editview: { + caption: "用例步骤", + title: '用例步骤', + }, + gridview: { + caption: "用例步骤", + title: '用例步骤', + }, + }, + main_form: { + details: { + group1: "casestep基本信息", + formpage1: "基本信息", + group2: "操作信息", + formpage2: "其它", + srforikey: "", + srfkey: "编号", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + id: "编号", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: "常规条件", + }, + uiactions: { + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: "Save", + tip: "Save", + }, + tbitem4: { + caption: "Save And New", + tip: "Save And New", + }, + tbitem5: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + tbitem6: { + caption: "-", + tip: "", + }, + tbitem7: { + caption: "Remove And Close", + tip: "Remove And Close Window", + }, + tbitem8: { + caption: "-", + tip: "", + }, + tbitem12: { + caption: "New", + tip: "New", + }, + tbitem13: { + caption: "-", + tip: "", + }, + tbitem14: { + caption: "Copy", + tip: "Copy {0}", + }, + tbitem16: { + caption: "-", + tip: "", + }, + tbitem23: { + caption: "第一个记录", + tip: "第一个记录", + }, + tbitem24: { + caption: "上一个记录", + tip: "上一个记录", + }, + tbitem25: { + caption: "下一个记录", + tip: "下一个记录", + }, + tbitem26: { + caption: "最后一个记录", + tip: "最后一个记录", + }, + tbitem21: { + caption: "-", + tip: "", + }, + tbitem22: { + caption: "Help", + tip: "Help", + }, + }, + gridviewtoolbar_toolbar: { + tbitem3: { + caption: "New", + tip: "New", + }, + tbitem4: { + caption: "Edit", + tip: "Edit {0}", + }, + tbitem6: { + caption: "Copy", + tip: "Copy {0}", + }, + tbitem7: { + caption: "-", + tip: "", + }, + tbitem8: { + caption: "Remove", + tip: "Remove {0}", + }, + tbitem9: { + caption: "-", + tip: "", + }, + tbitem13: { + caption: "Export", + tip: "Export {0} Data To Excel", + }, + tbitem10: { + caption: "-", + tip: "", + }, + tbitem16: { + caption: "其它", + tip: "其它", + }, + tbitem21: { + caption: "Export Data Model", + tip: "导出数据模型", + }, + tbitem23: { + caption: "数据导入", + tip: "数据导入", + }, + tbitem17: { + caption: "-", + tip: "", + }, + tbitem19: { + caption: "Filter", + tip: "Filter", + }, + tbitem18: { + caption: "Help", + tip: "Help", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/case-step/case-step_zh_CN.ts b/app_Web/src/locale/lanres/entities/case-step/case-step_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..e9810f9e8bd4ab96af605e4edbb6b35a4a3fb3ef --- /dev/null +++ b/app_Web/src/locale/lanres/entities/case-step/case-step_zh_CN.ts @@ -0,0 +1,175 @@ +export default { + fields: { + type: '用例步骤类型', + id: '编号', + desc: '步骤', + expect: '预期', + version: '用例版本', + ibizcase: '用例', + parent: '分组用例步骤的组编号', + }, + views: { + editview: { + caption: '用例步骤', + title: '用例步骤', + }, + gridview: { + caption: '用例步骤', + title: '用例步骤', + }, + }, + main_form: { + details: { + group1: 'casestep基本信息', + formpage1: '基本信息', + group2: '操作信息', + formpage2: '其它', + srforikey: '', + srfkey: '编号', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + id: '编号', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: '常规条件', + }, + uiactions: { + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: '保存', + tip: '保存', + }, + tbitem4: { + caption: '保存并新建', + tip: '保存并新建', + }, + tbitem5: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + tbitem6: { + caption: '-', + tip: '', + }, + tbitem7: { + caption: '删除', + tip: '删除', + }, + tbitem8: { + caption: '-', + tip: '', + }, + tbitem12: { + caption: '新建', + tip: '新建', + }, + tbitem13: { + caption: '-', + tip: '', + }, + tbitem14: { + caption: '拷贝', + tip: '拷贝', + }, + tbitem16: { + caption: '-', + tip: '', + }, + tbitem23: { + caption: '第一个记录', + tip: '第一个记录', + }, + tbitem24: { + caption: '上一个记录', + tip: '上一个记录', + }, + tbitem25: { + caption: '下一个记录', + tip: '下一个记录', + }, + tbitem26: { + caption: '最后一个记录', + tip: '最后一个记录', + }, + tbitem21: { + caption: '-', + tip: '', + }, + tbitem22: { + caption: '帮助', + tip: '帮助', + }, + }, + gridviewtoolbar_toolbar: { + tbitem3: { + caption: '新建', + tip: '新建', + }, + tbitem4: { + caption: '编辑', + tip: '编辑', + }, + tbitem6: { + caption: '拷贝', + tip: '拷贝', + }, + tbitem7: { + caption: '-', + tip: '', + }, + tbitem8: { + caption: '删除', + tip: '删除', + }, + tbitem9: { + caption: '-', + tip: '', + }, + tbitem13: { + caption: '导出', + tip: '导出', + }, + tbitem10: { + caption: '-', + tip: '', + }, + tbitem16: { + caption: '其它', + tip: '其它', + }, + tbitem21: { + caption: '导出数据模型', + tip: '导出数据模型', + }, + tbitem23: { + caption: '数据导入', + tip: '数据导入', + }, + tbitem17: { + caption: '-', + tip: '', + }, + tbitem19: { + caption: '过滤', + tip: '过滤', + }, + tbitem18: { + caption: '帮助', + tip: '帮助', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/case/case_en_US.ts b/app_Web/src/locale/lanres/entities/case/case_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..dce31ddfd038336db238d6486a2d28c758d5cef7 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/case/case_en_US.ts @@ -0,0 +1,298 @@ + +export default { + fields: { + lastediteddate: '修改日期', + scripteddate: 'scriptedDate', + color: '标题颜色', + path: 'path', + openeddate: '创建日期', + lastrunresult: '结果', + linkcase: '相关用例', + order: '排序', + howrun: 'howRun', + version: '用例版本', + scriptedby: 'scriptedBy', + openedby: '由谁创建', + type: '用例类型', + status: '用例状态', + auto: 'auto', + frequency: 'frequency', + title: '用例标题', + lasteditedby: '最后修改者', + reviewedby: '由谁评审', + deleted: '已删除', + revieweddate: '评审时间', + pri: '优先级', + stage: '适用阶段', + scriptlocation: 'scriptLocation', + lastrundate: '执行时间', + keywords: '关键词', + scriptstatus: 'scriptStatus', + frame: '工具/框架', + substatus: '子状态', + id: '用例编号', + precondition: '前置条件', + lastrunner: '执行人', + fromcaseversion: '来源用例版本', + storyversion: '需求版本', + fromcaseid: '来源用例', + branch: '平台/分支', + frombug: '来源Bug', + story: '相关需求', + product: '所属产品', + lib: '所属库', + module: '所属模块', + modulename: '模块名称', + storyname: '需求名称', + productname: '产品名称', + }, + views: { + editview: { + caption: "测试用例", + title: '测试用例', + }, + maingridview: { + caption: "测试用例", + title: '测试用例', + }, + mainnewview: { + caption: "功能测试", + title: '功能测试', + }, + batchnewgridview: { + caption: "测试用例", + title: '测试用例', + }, + maindashboardview: { + caption: "功能测试", + title: '功能测试', + }, + gridview9: { + caption: "测试用例", + title: '测试用例', + }, + gridview: { + caption: "测试用例", + title: '测试用例', + }, + }, + main_form: { + details: { + group1: "case基本信息", + formpage1: "基本信息", + group2: "操作信息", + formpage2: "其它", + srforikey: "", + srfkey: "用例编号", + srfmajortext: "用例标题", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + title: "用例标题", + id: "用例编号", + }, + uiactions: { + }, + }, + mainnew_form: { + details: { + group1: "测试用例基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "用例编号", + srfmajortext: "用例标题", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + product: "所属产品", + productname: "产品名称", + module: "所属模块", + modulename: "模块名称", + type: "用例类型", + story: "相关需求", + storyname: "需求名称", + title: "用例标题", + pri: "优先级", + id: "用例编号", + }, + uiactions: { + }, + }, + maingrid_grid: { + columns: { + id: "id", + pri: "P", + title: "用例标题", + type: "用例类型", + openedby: "创建", + lastrunner: "执行人", + lastrundate: "执行时间", + lastrunresult: "结果", + status: "状态", + branch: "B", + uagridcolumn1: "操作", + }, + uiactions: { + }, + }, + batchnew_grid: { + columns: { + modulename: "所属模块", + storyname: "相关需求", + title: "用例标题", + type: "用例类型", + }, + uiactions: { + }, + }, + main2_grid: { + columns: { + pri: "P", + title: "用例标题", + status: "状态", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + pri: "P", + title: "用例标题", + status: "状态", + }, + uiactions: { + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: "Save", + tip: "Save", + }, + tbitem4: { + caption: "Save And New", + tip: "Save And New", + }, + tbitem5: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + tbitem6: { + caption: "-", + tip: "", + }, + tbitem7: { + caption: "Remove And Close", + tip: "Remove And Close Window", + }, + tbitem8: { + caption: "-", + tip: "", + }, + tbitem12: { + caption: "New", + tip: "New", + }, + tbitem13: { + caption: "-", + tip: "", + }, + tbitem14: { + caption: "Copy", + tip: "Copy {0}", + }, + tbitem16: { + caption: "-", + tip: "", + }, + tbitem23: { + caption: "第一个记录", + tip: "第一个记录", + }, + tbitem24: { + caption: "上一个记录", + tip: "上一个记录", + }, + tbitem25: { + caption: "下一个记录", + tip: "下一个记录", + }, + tbitem26: { + caption: "最后一个记录", + tip: "最后一个记录", + }, + tbitem21: { + caption: "-", + tip: "", + }, + tbitem22: { + caption: "Help", + tip: "Help", + }, + }, + batchnewgridviewtoolbar_toolbar: { + deuiaction1: { + caption: "行编辑", + tip: "行编辑", + }, + deuiaction2: { + caption: "新建行", + tip: "新建行", + }, + deuiaction3: { + caption: "保存行", + tip: "保存行", + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction3_batchnew: { + caption: "批量新建用例", + tip: "批量新建用例", + }, + seperator2: { + caption: "", + tip: "", + }, + deuiaction1: { + caption: "New", + tip: "New", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + mainnewviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/case/case_zh_CN.ts b/app_Web/src/locale/lanres/entities/case/case_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..31189a9aaa36fd1b99228de11a2c0d46f8d93b74 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/case/case_zh_CN.ts @@ -0,0 +1,297 @@ +export default { + fields: { + lastediteddate: '修改日期', + scripteddate: 'scriptedDate', + color: '标题颜色', + path: 'path', + openeddate: '创建日期', + lastrunresult: '结果', + linkcase: '相关用例', + order: '排序', + howrun: 'howRun', + version: '用例版本', + scriptedby: 'scriptedBy', + openedby: '由谁创建', + type: '用例类型', + status: '用例状态', + auto: 'auto', + frequency: 'frequency', + title: '用例标题', + lasteditedby: '最后修改者', + reviewedby: '由谁评审', + deleted: '已删除', + revieweddate: '评审时间', + pri: '优先级', + stage: '适用阶段', + scriptlocation: 'scriptLocation', + lastrundate: '执行时间', + keywords: '关键词', + scriptstatus: 'scriptStatus', + frame: '工具/框架', + substatus: '子状态', + id: '用例编号', + precondition: '前置条件', + lastrunner: '执行人', + fromcaseversion: '来源用例版本', + storyversion: '需求版本', + fromcaseid: '来源用例', + branch: '平台/分支', + frombug: '来源Bug', + story: '相关需求', + product: '所属产品', + lib: '所属库', + module: '所属模块', + modulename: '模块名称', + storyname: '需求名称', + productname: '产品名称', + }, + views: { + editview: { + caption: '测试用例', + title: '测试用例', + }, + maingridview: { + caption: '测试用例', + title: '测试用例', + }, + mainnewview: { + caption: '功能测试', + title: '功能测试', + }, + batchnewgridview: { + caption: '测试用例', + title: '测试用例', + }, + maindashboardview: { + caption: '功能测试', + title: '功能测试', + }, + gridview9: { + caption: '测试用例', + title: '测试用例', + }, + gridview: { + caption: '测试用例', + title: '测试用例', + }, + }, + main_form: { + details: { + group1: 'case基本信息', + formpage1: '基本信息', + group2: '操作信息', + formpage2: '其它', + srforikey: '', + srfkey: '用例编号', + srfmajortext: '用例标题', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + title: '用例标题', + id: '用例编号', + }, + uiactions: { + }, + }, + mainnew_form: { + details: { + group1: '测试用例基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: '用例编号', + srfmajortext: '用例标题', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + product: '所属产品', + productname: '产品名称', + module: '所属模块', + modulename: '模块名称', + type: '用例类型', + story: '相关需求', + storyname: '需求名称', + title: '用例标题', + pri: '优先级', + id: '用例编号', + }, + uiactions: { + }, + }, + maingrid_grid: { + columns: { + id: 'id', + pri: 'P', + title: '用例标题', + type: '用例类型', + openedby: '创建', + lastrunner: '执行人', + lastrundate: '执行时间', + lastrunresult: '结果', + status: '状态', + branch: 'B', + uagridcolumn1: '操作', + }, + uiactions: { + }, + }, + batchnew_grid: { + columns: { + modulename: '所属模块', + storyname: '相关需求', + title: '用例标题', + type: '用例类型', + }, + uiactions: { + }, + }, + main2_grid: { + columns: { + pri: 'P', + title: '用例标题', + status: '状态', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + pri: 'P', + title: '用例标题', + status: '状态', + }, + uiactions: { + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: '保存', + tip: '保存', + }, + tbitem4: { + caption: '保存并新建', + tip: '保存并新建', + }, + tbitem5: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + tbitem6: { + caption: '-', + tip: '', + }, + tbitem7: { + caption: '删除', + tip: '删除', + }, + tbitem8: { + caption: '-', + tip: '', + }, + tbitem12: { + caption: '新建', + tip: '新建', + }, + tbitem13: { + caption: '-', + tip: '', + }, + tbitem14: { + caption: '拷贝', + tip: '拷贝', + }, + tbitem16: { + caption: '-', + tip: '', + }, + tbitem23: { + caption: '第一个记录', + tip: '第一个记录', + }, + tbitem24: { + caption: '上一个记录', + tip: '上一个记录', + }, + tbitem25: { + caption: '下一个记录', + tip: '下一个记录', + }, + tbitem26: { + caption: '最后一个记录', + tip: '最后一个记录', + }, + tbitem21: { + caption: '-', + tip: '', + }, + tbitem22: { + caption: '帮助', + tip: '帮助', + }, + }, + batchnewgridviewtoolbar_toolbar: { + deuiaction1: { + caption: '行编辑', + tip: '行编辑', + }, + deuiaction2: { + caption: '新建行', + tip: '新建行', + }, + deuiaction3: { + caption: '保存行', + tip: '保存行', + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction3_batchnew: { + caption: '批量新建用例', + tip: '批量新建用例', + }, + seperator2: { + caption: '', + tip: '', + }, + deuiaction1: { + caption: '新建', + tip: '新建', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + mainnewviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/company/company_en_US.ts b/app_Web/src/locale/lanres/entities/company/company_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..6c73be0485e31894dd0f3909f0ee576980fe63c3 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/company/company_en_US.ts @@ -0,0 +1,106 @@ + +export default { + fields: { + admins: 'admins', + fax: '传真', + deleted: '逻辑删除标志', + website: '官网', + id: 'id', + zipcode: '邮政编码', + address: '通讯地址', + backyard: '内网', + name: '公司名称', + guest: '匿名登陆', + phone: '联系电话', + }, + views: { + depttreeexpview: { + caption: "公司", + title: '公司', + }, + deptusertreeexpview: { + caption: "公司", + title: '公司', + }, + maintabexpview: { + caption: "组织权限", + title: '组织权限', + }, + mainview: { + caption: "公司信息", + title: '公司信息', + }, + editview: { + caption: "公司信息", + title: '公司信息', + }, + mainview9: { + caption: "公司", + title: '公司', + }, + }, + main_form: { + details: { + group1: "company基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "id", + srfmajortext: "公司名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "公司名称", + phone: "联系电话", + fax: "传真", + address: "通讯地址", + zipcode: "邮政编码", + website: "官网", + backyard: "内网", + guest: "匿名登陆", + id: "id", + }, + uiactions: { + }, + }, + main_edit_form: { + details: { + group1: "company基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "id", + srfmajortext: "公司名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "公司名称", + phone: "联系电话", + fax: "传真", + address: "通讯地址", + zipcode: "邮政编码", + website: "官网", + backyard: "内网", + guest: "匿名登陆", + id: "id", + }, + uiactions: { + }, + }, + deptexp_treeview: { + nodes: { + alldept: '所有部门', + root: '默认根节点', + }, + uiactions: { + }, + }, + deptuserexp_treeview: { + nodes: { + alldept: '所有部门', + root: '默认根节点', + }, + uiactions: { + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/company/company_zh_CN.ts b/app_Web/src/locale/lanres/entities/company/company_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..952c4b58a1a89d3dce483eb35df8ff69c1ffa1ef --- /dev/null +++ b/app_Web/src/locale/lanres/entities/company/company_zh_CN.ts @@ -0,0 +1,105 @@ +export default { + fields: { + admins: 'admins', + fax: '传真', + deleted: '逻辑删除标志', + website: '官网', + id: 'id', + zipcode: '邮政编码', + address: '通讯地址', + backyard: '内网', + name: '公司名称', + guest: '匿名登陆', + phone: '联系电话', + }, + views: { + depttreeexpview: { + caption: '公司', + title: '公司', + }, + deptusertreeexpview: { + caption: '公司', + title: '公司', + }, + maintabexpview: { + caption: '组织权限', + title: '组织权限', + }, + mainview: { + caption: '公司信息', + title: '公司信息', + }, + editview: { + caption: '公司信息', + title: '公司信息', + }, + mainview9: { + caption: '公司', + title: '公司', + }, + }, + main_form: { + details: { + group1: 'company基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: 'id', + srfmajortext: '公司名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '公司名称', + phone: '联系电话', + fax: '传真', + address: '通讯地址', + zipcode: '邮政编码', + website: '官网', + backyard: '内网', + guest: '匿名登陆', + id: 'id', + }, + uiactions: { + }, + }, + main_edit_form: { + details: { + group1: 'company基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: 'id', + srfmajortext: '公司名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '公司名称', + phone: '联系电话', + fax: '传真', + address: '通讯地址', + zipcode: '邮政编码', + website: '官网', + backyard: '内网', + guest: '匿名登陆', + id: 'id', + }, + uiactions: { + }, + }, + deptexp_treeview: { + nodes: { + alldept: '所有部门', + root: '默认根节点', + }, + uiactions: { + }, + }, + deptuserexp_treeview: { + nodes: { + alldept: '所有部门', + root: '默认根节点', + }, + uiactions: { + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/dept/dept_en_US.ts b/app_Web/src/locale/lanres/entities/dept/dept_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..c9721ae5a7caedf09bac1d911eae9d5d3a611f2a --- /dev/null +++ b/app_Web/src/locale/lanres/entities/dept/dept_en_US.ts @@ -0,0 +1,156 @@ + +export default { + fields: { + manager: '负责人', + grade: 'grade', + function: 'function', + order: 'order', + path: 'path', + position: 'position', + id: 'id', + name: '部门名称', + parentname: '上级部门', + parent: 'parent', + isleaf: '无子部门', + }, + views: { + pickupview: { + caption: "部门", + title: '部门', + }, + maingridview: { + caption: "部门", + title: '部门', + }, + editview: { + caption: "部门信息", + title: '部门信息', + }, + pickupgridview: { + caption: "部门", + title: '部门', + }, + }, + main_form: { + details: { + group1: "基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "id", + srfmajortext: "部门名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "部门名称", + parentname: "上级部门", + manager: "负责人", + id: "id", + parent: "parent", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: "ID", + name: "部门", + parentname: "上级部门", + manager: "负责人", + order: "排序值", + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: "常规条件", + }, + uiactions: { + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: "Save", + tip: "Save", + }, + tbitem4: { + caption: "Save And New", + tip: "Save And New", + }, + tbitem5: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + tbitem6: { + caption: "-", + tip: "", + }, + tbitem7: { + caption: "Remove And Close", + tip: "Remove And Close Window", + }, + tbitem8: { + caption: "-", + tip: "", + }, + tbitem12: { + caption: "New", + tip: "New", + }, + tbitem13: { + caption: "-", + tip: "", + }, + tbitem14: { + caption: "Copy", + tip: "Copy {0}", + }, + tbitem16: { + caption: "-", + tip: "", + }, + tbitem23: { + caption: "第一个记录", + tip: "第一个记录", + }, + tbitem24: { + caption: "上一个记录", + tip: "上一个记录", + }, + tbitem25: { + caption: "下一个记录", + tip: "下一个记录", + }, + tbitem26: { + caption: "最后一个记录", + tip: "最后一个记录", + }, + tbitem21: { + caption: "-", + tip: "", + }, + tbitem22: { + caption: "Help", + tip: "Help", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/dept/dept_zh_CN.ts b/app_Web/src/locale/lanres/entities/dept/dept_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..a9739be1de7a981e9fa144cd077c6de232396dda --- /dev/null +++ b/app_Web/src/locale/lanres/entities/dept/dept_zh_CN.ts @@ -0,0 +1,155 @@ +export default { + fields: { + manager: '负责人', + grade: 'grade', + function: 'function', + order: 'order', + path: 'path', + position: 'position', + id: 'id', + name: '部门名称', + parentname: '上级部门', + parent: 'parent', + isleaf: '无子部门', + }, + views: { + pickupview: { + caption: '部门', + title: '部门', + }, + maingridview: { + caption: '部门', + title: '部门', + }, + editview: { + caption: '部门信息', + title: '部门信息', + }, + pickupgridview: { + caption: '部门', + title: '部门', + }, + }, + main_form: { + details: { + group1: '基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: 'id', + srfmajortext: '部门名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '部门名称', + parentname: '上级部门', + manager: '负责人', + id: 'id', + parent: 'parent', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: 'ID', + name: '部门', + parentname: '上级部门', + manager: '负责人', + order: '排序值', + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: '常规条件', + }, + uiactions: { + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: '保存', + tip: '保存', + }, + tbitem4: { + caption: '保存并新建', + tip: '保存并新建', + }, + tbitem5: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + tbitem6: { + caption: '-', + tip: '', + }, + tbitem7: { + caption: '删除', + tip: '删除', + }, + tbitem8: { + caption: '-', + tip: '', + }, + tbitem12: { + caption: '新建', + tip: '新建', + }, + tbitem13: { + caption: '-', + tip: '', + }, + tbitem14: { + caption: '拷贝', + tip: '拷贝', + }, + tbitem16: { + caption: '-', + tip: '', + }, + tbitem23: { + caption: '第一个记录', + tip: '第一个记录', + }, + tbitem24: { + caption: '上一个记录', + tip: '上一个记录', + }, + tbitem25: { + caption: '下一个记录', + tip: '下一个记录', + }, + tbitem26: { + caption: '最后一个记录', + tip: '最后一个记录', + }, + tbitem21: { + caption: '-', + tip: '', + }, + tbitem22: { + caption: '帮助', + tip: '帮助', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/group/group_en_US.ts b/app_Web/src/locale/lanres/entities/group/group_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..736af8a95a700c3b6ee876abbd50117e360abd43 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/group/group_en_US.ts @@ -0,0 +1,70 @@ + +export default { + fields: { + acl: 'acl', + desc: '分组描述', + id: 'ID', + name: '分组名称', + role: 'role', + }, + views: { + maingridview: { + caption: "群组", + title: '群组', + }, + editview: { + caption: "分组信息", + title: '分组信息', + }, + }, + main_form: { + details: { + group1: "基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "ID", + srfmajortext: "分组名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "分组名称", + desc: "分组描述", + id: "ID", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: "ID", + name: "分组名称", + desc: "分组描述", + uagridcolumn1: "操作", + }, + uiactions: { + edit: "Edit", + remove: "Remove", + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/group/group_zh_CN.ts b/app_Web/src/locale/lanres/entities/group/group_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..a2a4ac9239a48f2180c3a1f72913c9d5ace51f8d --- /dev/null +++ b/app_Web/src/locale/lanres/entities/group/group_zh_CN.ts @@ -0,0 +1,69 @@ +export default { + fields: { + acl: 'acl', + desc: '分组描述', + id: 'ID', + name: '分组名称', + role: 'role', + }, + views: { + maingridview: { + caption: '群组', + title: '群组', + }, + editview: { + caption: '分组信息', + title: '分组信息', + }, + }, + main_form: { + details: { + group1: '基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: 'ID', + srfmajortext: '分组名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '分组名称', + desc: '分组描述', + id: 'ID', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: 'ID', + name: '分组名称', + desc: '分组描述', + uagridcolumn1: '操作', + }, + uiactions: { + edit: '编辑', + remove: '删除', + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/history/history_en_US.ts b/app_Web/src/locale/lanres/entities/history/history_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..5e59ecbe8d7dcdb73b0d30dd4fcbfb4b9c84b255 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/history/history_en_US.ts @@ -0,0 +1,11 @@ + +export default { + fields: { + diff: '不同', + field: '字段', + ibiznew: '新值', + old: '旧值', + id: 'id', + action: '关联日志', + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/history/history_zh_CN.ts b/app_Web/src/locale/lanres/entities/history/history_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..4f495cbf638fa5dacef76ae2f17c11ed0444faee --- /dev/null +++ b/app_Web/src/locale/lanres/entities/history/history_zh_CN.ts @@ -0,0 +1,10 @@ +export default { + fields: { + diff: '不同', + field: '字段', + ibiznew: '新值', + old: '旧值', + id: 'id', + action: '关联日志', + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/ibz-doc/ibz-doc_en_US.ts b/app_Web/src/locale/lanres/entities/ibz-doc/ibz-doc_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..08a4595623579f47e8a5ae357bf9de8cca3b7476 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/ibz-doc/ibz-doc_en_US.ts @@ -0,0 +1,20 @@ + +export default { + fields: { + ibzdocid: '文档标识', + addedby: '由谁添加', + editedby: '由谁更新', + addeddate: '添加时间', + size: '大小', + lib: '所属文档库', + createdate: '建立时间', + ibzdocname: '文档名称', + order: '排序', + iscollect: '是否已收藏', + createman: '建立人', + updatedate: '更新时间', + editeddate: '更新时间', + objecttype: '对象类型', + updateman: '更新人', + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/ibz-doc/ibz-doc_zh_CN.ts b/app_Web/src/locale/lanres/entities/ibz-doc/ibz-doc_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..4890786fb1d76fed6aac3b00ba113efdb226d6d9 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/ibz-doc/ibz-doc_zh_CN.ts @@ -0,0 +1,19 @@ +export default { + fields: { + ibzdocid: '文档标识', + addedby: '由谁添加', + editedby: '由谁更新', + addeddate: '添加时间', + size: '大小', + lib: '所属文档库', + createdate: '建立时间', + ibzdocname: '文档名称', + order: '排序', + iscollect: '是否已收藏', + createman: '建立人', + updatedate: '更新时间', + editeddate: '更新时间', + objecttype: '对象类型', + updateman: '更新人', + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/ibz-subtask/ibz-subtask_en_US.ts b/app_Web/src/locale/lanres/entities/ibz-subtask/ibz-subtask_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..4d278de2fd30887ace7be5e0882e1c4fac924b6e --- /dev/null +++ b/app_Web/src/locale/lanres/entities/ibz-subtask/ibz-subtask_en_US.ts @@ -0,0 +1,82 @@ + +export default { + fields: { + canceledby: '由谁取消', + left: '预计剩余', + openeddate: '创建日期', + color: '标题颜色', + id: '编号', + finishedby: '由谁完成', + finishedlist: '完成者列表', + realstarted: '实际开始', + closedby: '由谁关闭', + substatus: '子状态', + closedreason: '关闭原因', + lastediteddate: '最后修改日期', + assigneddate: '指派日期', + pri: '优先级', + lasteditedby: '最后修改', + status: '任务状态', + name: '任务名称', + closeddate: '关闭时间', + type: '任务类型', + assignedto: '指派给', + desc: '任务描述', + eststarted: '预计开始', + deadline: '截止日期', + deleted: '已删除', + mailto: '抄送给', + consumed: '总计消耗', + estimate: '最初预计', + openedby: '由谁创建', + canceleddate: '取消时间', + finisheddate: '实际完成', + modulename: '所属模块', + storyname: '相关需求', + projectname: '所属项目', + product: '产品', + storyversion: '需求版本', + productname: '产品', + parentname: '父任务', + project: '所属项目', + module: '所属模块', + story: '相关需求', + parent: '父任务', + frombug: '来源Bug', + duration: '持续时间', + }, + views: { + subtasknewview: { + caption: "子任务", + title: '子任务', + }, + }, + subtasknew_grid: { + columns: { + modulename: "所属模块", + storyname: "相关需求", + name: "任务名称", + type: "任务类型", + assignedto: "指派给", + left: "预计", + desc: "任务描述", + pri: "优先级", + }, + uiactions: { + }, + }, + subtasknewviewtoolbar_toolbar: { + deuiaction1: { + caption: "行编辑", + tip: "行编辑", + }, + deuiaction2: { + caption: "新建行", + tip: "新建行", + }, + deuiaction3: { + caption: "保存行", + tip: "保存行", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/ibz-subtask/ibz-subtask_zh_CN.ts b/app_Web/src/locale/lanres/entities/ibz-subtask/ibz-subtask_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..ffdb89639bb32df3b38f9e5fc518cd2e5b2468ea --- /dev/null +++ b/app_Web/src/locale/lanres/entities/ibz-subtask/ibz-subtask_zh_CN.ts @@ -0,0 +1,81 @@ +export default { + fields: { + canceledby: '由谁取消', + left: '预计剩余', + openeddate: '创建日期', + color: '标题颜色', + id: '编号', + finishedby: '由谁完成', + finishedlist: '完成者列表', + realstarted: '实际开始', + closedby: '由谁关闭', + substatus: '子状态', + closedreason: '关闭原因', + lastediteddate: '最后修改日期', + assigneddate: '指派日期', + pri: '优先级', + lasteditedby: '最后修改', + status: '任务状态', + name: '任务名称', + closeddate: '关闭时间', + type: '任务类型', + assignedto: '指派给', + desc: '任务描述', + eststarted: '预计开始', + deadline: '截止日期', + deleted: '已删除', + mailto: '抄送给', + consumed: '总计消耗', + estimate: '最初预计', + openedby: '由谁创建', + canceleddate: '取消时间', + finisheddate: '实际完成', + modulename: '所属模块', + storyname: '相关需求', + projectname: '所属项目', + product: '产品', + storyversion: '需求版本', + productname: '产品', + parentname: '父任务', + project: '所属项目', + module: '所属模块', + story: '相关需求', + parent: '父任务', + frombug: '来源Bug', + duration: '持续时间', + }, + views: { + subtasknewview: { + caption: '子任务', + title: '子任务', + }, + }, + subtasknew_grid: { + columns: { + modulename: '所属模块', + storyname: '相关需求', + name: '任务名称', + type: '任务类型', + assignedto: '指派给', + left: '预计', + desc: '任务描述', + pri: '优先级', + }, + uiactions: { + }, + }, + subtasknewviewtoolbar_toolbar: { + deuiaction1: { + caption: '行编辑', + tip: '行编辑', + }, + deuiaction2: { + caption: '新建行', + tip: '新建行', + }, + deuiaction3: { + caption: '保存行', + tip: '保存行', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/module/module_en_US.ts b/app_Web/src/locale/lanres/entities/module/module_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..7d7660d5450612d35365f98b555a8850267de38b --- /dev/null +++ b/app_Web/src/locale/lanres/entities/module/module_en_US.ts @@ -0,0 +1,96 @@ + +export default { + fields: { + root: '所属根', + grade: '级别', + type: '类型', + name: '模块名称', + order: '排序', + owner: '负责人', + id: 'id', + collector: '收藏者', + ibizshort: '简称', + path: '路径', + deleted: '已删除', + parentname: '上级模块', + branch: '平台/分支', + parent: '上级模块', + }, + views: { + editview: { + caption: "模块", + title: '模块', + }, + gridview: { + caption: "模块", + title: '模块', + }, + pickupgridview: { + caption: "模块", + title: '模块', + }, + pickupview: { + caption: "模块", + title: '模块', + }, + }, + main_form: { + details: { + group1: "module基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "id", + srfmajortext: "模块名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "模块名称", + short: "简称", + parentname: "上级模块", + parent: "上级模块", + order: "排序", + id: "id", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + name: "模块名称", + parentname: "上级模块", + grade: "级别", + order: "排序", + owner: "负责人", + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: "常规条件", + }, + uiactions: { + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "Edit", + tip: "Edit {0}", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/module/module_zh_CN.ts b/app_Web/src/locale/lanres/entities/module/module_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..5e22f8123f3b62d468d0cc635f4a663f1578b9cd --- /dev/null +++ b/app_Web/src/locale/lanres/entities/module/module_zh_CN.ts @@ -0,0 +1,95 @@ +export default { + fields: { + root: '所属根', + grade: '级别', + type: '类型', + name: '模块名称', + order: '排序', + owner: '负责人', + id: 'id', + collector: '收藏者', + ibizshort: '简称', + path: '路径', + deleted: '已删除', + parentname: '上级模块', + branch: '平台/分支', + parent: '上级模块', + }, + views: { + editview: { + caption: '模块', + title: '模块', + }, + gridview: { + caption: '模块', + title: '模块', + }, + pickupgridview: { + caption: '模块', + title: '模块', + }, + pickupview: { + caption: '模块', + title: '模块', + }, + }, + main_form: { + details: { + group1: 'module基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: 'id', + srfmajortext: '模块名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '模块名称', + short: '简称', + parentname: '上级模块', + parent: '上级模块', + order: '排序', + id: 'id', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + name: '模块名称', + parentname: '上级模块', + grade: '级别', + order: '排序', + owner: '负责人', + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: '常规条件', + }, + uiactions: { + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '编辑', + tip: '编辑', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/product-life/product-life_en_US.ts b/app_Web/src/locale/lanres/entities/product-life/product-life_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..8eb3c2ec325a7665dfbe502d06e5c7c1daaada67 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/product-life/product-life_en_US.ts @@ -0,0 +1,29 @@ + +export default { + fields: { + branch: '平台/分支', + createman: '建立人', + updatedate: '更新时间', + productlifename: '产品生命周期名称', + product: '产品', + createdate: '建立时间', + parent: '父对象', + year: '年', + updateman: '更新人', + type: '属性', + marker: '里程碑', + begin: '开始日期', + productlifeid: '产品生命周期标识', + end: '结束日期', + }, + views: { + roadmaplistview: { + caption: "产品生命周期", + title: '产品生命周期', + }, + roadmaplistview9: { + caption: "产品生命周期", + title: '产品生命周期', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/product-life/product-life_zh_CN.ts b/app_Web/src/locale/lanres/entities/product-life/product-life_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..5efdd1893ef2560c2a9d5d675d5f00b83223b964 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/product-life/product-life_zh_CN.ts @@ -0,0 +1,28 @@ +export default { + fields: { + branch: '平台/分支', + createman: '建立人', + updatedate: '更新时间', + productlifename: '产品生命周期名称', + product: '产品', + createdate: '建立时间', + parent: '父对象', + year: '年', + updateman: '更新人', + type: '属性', + marker: '里程碑', + begin: '开始日期', + productlifeid: '产品生命周期标识', + end: '结束日期', + }, + views: { + roadmaplistview: { + caption: '产品生命周期', + title: '产品生命周期', + }, + roadmaplistview9: { + caption: '产品生命周期', + title: '产品生命周期', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/product-module/product-module_en_US.ts b/app_Web/src/locale/lanres/entities/product-module/product-module_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..3a48b8481f1964642d42d339560b753496cba9a8 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/product-module/product-module_en_US.ts @@ -0,0 +1,116 @@ + +export default { + fields: { + path: 'path', + deleted: '逻辑删除标志', + name: '名称', + branch: 'branch', + ibizshort: '短名称', + order: 'order', + grade: 'grade', + type: '类型(story)', + owner: 'owner', + isleaf: '叶子模块', + id: 'id', + collector: 'collector', + root: '产品', + parent: 'id', + }, + views: { + gridview: { + caption: "需求模块", + title: '需求模块', + }, + editview: { + caption: "需求模块", + title: '需求模块', + }, + }, + main_form: { + details: { + group1: "产品模块基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "id", + srfmajortext: "名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "名称", + order: "order", + id: "id", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + name: "名称", + root: "产品", + short: "短名称", + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: "常规条件", + }, + uiactions: { + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "Edit", + tip: "Edit {0}", + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, + exp_treeview: { + nodes: { + all: '所有模块', + branch: '平台', + root: '默认根节点', + }, + uiactions: { + }, + }, + taskexp_treeview: { + nodes: { + all: '所有模块', + root: '默认根节点', + }, + uiactions: { + }, + }, + bugexp_treeview: { + nodes: { + root: '默认根节点', + all: '全部', + }, + uiactions: { + }, + }, + caseexp_treeview: { + nodes: { + all: '全部', + root: '默认根节点', + }, + uiactions: { + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/product-module/product-module_zh_CN.ts b/app_Web/src/locale/lanres/entities/product-module/product-module_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..2b969243fa5f0c5dc058a6ab56f61b475721082f --- /dev/null +++ b/app_Web/src/locale/lanres/entities/product-module/product-module_zh_CN.ts @@ -0,0 +1,115 @@ +export default { + fields: { + path: 'path', + deleted: '逻辑删除标志', + name: '名称', + branch: 'branch', + ibizshort: '短名称', + order: 'order', + grade: 'grade', + type: '类型(story)', + owner: 'owner', + isleaf: '叶子模块', + id: 'id', + collector: 'collector', + root: '产品', + parent: 'id', + }, + views: { + gridview: { + caption: '需求模块', + title: '需求模块', + }, + editview: { + caption: '需求模块', + title: '需求模块', + }, + }, + main_form: { + details: { + group1: '产品模块基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: 'id', + srfmajortext: '名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '名称', + order: 'order', + id: 'id', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + name: '名称', + root: '产品', + short: '短名称', + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: '常规条件', + }, + uiactions: { + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '编辑', + tip: '编辑', + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, + exp_treeview: { + nodes: { + all: '所有模块', + branch: '平台', + root: '默认根节点', + }, + uiactions: { + }, + }, + taskexp_treeview: { + nodes: { + all: '所有模块', + root: '默认根节点', + }, + uiactions: { + }, + }, + bugexp_treeview: { + nodes: { + root: '默认根节点', + all: '全部', + }, + uiactions: { + }, + }, + caseexp_treeview: { + nodes: { + all: '全部', + root: '默认根节点', + }, + uiactions: { + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/product-plan/product-plan_en_US.ts b/app_Web/src/locale/lanres/entities/product-plan/product-plan_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..46c766cbb5d7dd9d6d71f1e8a464f8c6a7237007 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/product-plan/product-plan_en_US.ts @@ -0,0 +1,118 @@ + +export default { + fields: { + title: '名称', + id: '编号', + begin: '开始日期', + desc: '描述', + end: '结束日期', + deleted: '已删除', + order: '排序', + parentname: '父计划名称', + branch: '平台/分支', + parent: '父计划', + product: '产品', + }, + views: { + maintabexp: { + caption: "产品计划", + title: '产品计划', + }, + maineditview: { + caption: "产品计划", + title: '产品计划', + }, + gridview: { + caption: "产品计划", + title: '产品计划', + }, + editview: { + caption: "产品计划", + title: '产品计划', + }, + }, + main_form: { + details: { + grouppanel1: "分组面板", + group1: "productplan基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "编号", + srfmajortext: "名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + product: "产品", + title: "名称", + begin: "开始日期", + end: "结束日期", + desc: "描述", + id: "编号", + }, + uiactions: { + }, + }, + info_form: { + details: { + grouppanel1: "分组面板", + group1: "基本信息", + druipart1: "", + grouppanel2: "历史记录", + formpage1: "基本信息", + srforikey: "", + srfkey: "编号", + srfmajortext: "名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + product: "产品", + title: "名称", + begin: "开始日期", + end: "结束日期", + desc: "描述", + id: "编号", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: "编号", + title: "名称", + begin: "开始日期", + end: "结束日期", + actions: "操作", + }, + uiactions: { + relationstory: "关联需求", + relationbug: "关联Bug", + newsubplan: "子计划", + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/product-plan/product-plan_zh_CN.ts b/app_Web/src/locale/lanres/entities/product-plan/product-plan_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..bcaf180af242393a318921df3c5fc899850bc8ee --- /dev/null +++ b/app_Web/src/locale/lanres/entities/product-plan/product-plan_zh_CN.ts @@ -0,0 +1,117 @@ +export default { + fields: { + title: '名称', + id: '编号', + begin: '开始日期', + desc: '描述', + end: '结束日期', + deleted: '已删除', + order: '排序', + parentname: '父计划名称', + branch: '平台/分支', + parent: '父计划', + product: '产品', + }, + views: { + maintabexp: { + caption: '产品计划', + title: '产品计划', + }, + maineditview: { + caption: '产品计划', + title: '产品计划', + }, + gridview: { + caption: '产品计划', + title: '产品计划', + }, + editview: { + caption: '产品计划', + title: '产品计划', + }, + }, + main_form: { + details: { + grouppanel1: '分组面板', + group1: 'productplan基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: '编号', + srfmajortext: '名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + product: '产品', + title: '名称', + begin: '开始日期', + end: '结束日期', + desc: '描述', + id: '编号', + }, + uiactions: { + }, + }, + info_form: { + details: { + grouppanel1: '分组面板', + group1: '基本信息', + druipart1: '', + grouppanel2: '历史记录', + formpage1: '基本信息', + srforikey: '', + srfkey: '编号', + srfmajortext: '名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + product: '产品', + title: '名称', + begin: '开始日期', + end: '结束日期', + desc: '描述', + id: '编号', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: '编号', + title: '名称', + begin: '开始日期', + end: '结束日期', + actions: '操作', + }, + uiactions: { + relationstory: '关联需求', + relationbug: '关联Bug', + newsubplan: '子计划', + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/product-stats/product-stats_en_US.ts b/app_Web/src/locale/lanres/entities/product-stats/product-stats_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..42b0ea67f9a79aecfff96f11a0f56c36b244c347 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/product-stats/product-stats_en_US.ts @@ -0,0 +1,77 @@ + +export default { + fields: { + id: '产品编号', + deleted: '已删除', + storycnt: '需求总数', + productplancnt: '计划总数', + releasecnt: '发布总数', + waitstorycnt: '未开始需求数', + plannedstorycnt: '已计划需求数', + developingstorycnt: '开发中需求数', + testingstorycnt: '测试中需求数', + releasedstorycnt: '已发布需求数', + unendproductplancnt: '未过期计划数', + unendproductplanrate: '剩余计划率', + resprojectcnt: '关联项目数', + undoneresprojectcnt: '未完成关联项目数', + undoneresprojectrate: '进行项目率', + normalreleasecnt: '维护中发布数', + normalreleaserate: '维护发布率', + activestorycnt: '激活需求数', + activebugcnt: '未解决Bug数', + }, + views: { + editview9: { + caption: "产品统计", + title: '产品统计', + }, + }, + main2_form: { + details: { + rawitem1: "", + button4: "查看全部", + button5: "提需求", + grouppanel6: "", + rawitem2: "", + grouppanel13: "需求状态统计", + grouppanel1: "产品需求统计", + button1: "创建计划", + grouppanel3: "", + grouppanel8: "计划", + button2: "创建项目", + grouppanel4: "", + grouppanel9: "项目", + button3: "创建发布", + grouppanel5: "", + grouppanel11: "发布", + grouppanel2: "产品统计", + group1: "统计", + formpage1: "基本信息", + srforikey: "", + srfkey: "产品编号", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + storycnt: "需求数", + waitstorycnt: "未开始", + plannedstorycnt: "已计划", + developingstorycnt: "研发中", + testingstorycnt: "测试中", + releasedstorycnt: "已发布", + productplancnt: "所有计划", + unendproductplanrate: "剩余计划率", + unendproductplancnt: "未过期", + resprojectcnt: "所有项目", + undoneresprojectrate: "进行项目率", + undoneresprojectcnt: "进行中", + releasecnt: "所有发布", + normalreleaserate: "维护发布率", + normalreleasecnt: "维护中", + id: "产品编号", + }, + uiactions: { + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/product-stats/product-stats_zh_CN.ts b/app_Web/src/locale/lanres/entities/product-stats/product-stats_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..058df698ead967dfe495bdb9e39273cdfb792dc7 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/product-stats/product-stats_zh_CN.ts @@ -0,0 +1,76 @@ +export default { + fields: { + id: '产品编号', + deleted: '已删除', + storycnt: '需求总数', + productplancnt: '计划总数', + releasecnt: '发布总数', + waitstorycnt: '未开始需求数', + plannedstorycnt: '已计划需求数', + developingstorycnt: '开发中需求数', + testingstorycnt: '测试中需求数', + releasedstorycnt: '已发布需求数', + unendproductplancnt: '未过期计划数', + unendproductplanrate: '剩余计划率', + resprojectcnt: '关联项目数', + undoneresprojectcnt: '未完成关联项目数', + undoneresprojectrate: '进行项目率', + normalreleasecnt: '维护中发布数', + normalreleaserate: '维护发布率', + activestorycnt: '激活需求数', + activebugcnt: '未解决Bug数', + }, + views: { + editview9: { + caption: '产品统计', + title: '产品统计', + }, + }, + main2_form: { + details: { + rawitem1: '', + button4: '查看全部', + button5: '提需求', + grouppanel6: '', + rawitem2: '', + grouppanel13: '需求状态统计', + grouppanel1: '产品需求统计', + button1: '创建计划', + grouppanel3: '', + grouppanel8: '计划', + button2: '创建项目', + grouppanel4: '', + grouppanel9: '项目', + button3: '创建发布', + grouppanel5: '', + grouppanel11: '发布', + grouppanel2: '产品统计', + group1: '统计', + formpage1: '基本信息', + srforikey: '', + srfkey: '产品编号', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + storycnt: '需求数', + waitstorycnt: '未开始', + plannedstorycnt: '已计划', + developingstorycnt: '研发中', + testingstorycnt: '测试中', + releasedstorycnt: '已发布', + productplancnt: '所有计划', + unendproductplanrate: '剩余计划率', + unendproductplancnt: '未过期', + resprojectcnt: '所有项目', + undoneresprojectrate: '进行项目率', + undoneresprojectcnt: '进行中', + releasecnt: '所有发布', + normalreleaserate: '维护发布率', + normalreleasecnt: '维护中', + id: '产品编号', + }, + uiactions: { + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/product/product_en_US.ts b/app_Web/src/locale/lanres/entities/product/product_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..3d23f3e316c95df72ad4f7569da413c8d9814e83 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/product/product_en_US.ts @@ -0,0 +1,289 @@ + +export default { + fields: { + qd: '测试负责人', + acl: '访问控制', + name: '产品名称', + id: '编号', + deleted: '已删除', + whitelist: '分组白名单', + rd: '发布负责人', + order: '排序', + type: '产品类型', + po: '产品负责人', + desc: '产品描述 ', + status: '状态', + createdby: '由谁创建', + createdversion: '当前系统版本', + substatus: '子状态', + code: '产品代号', + createddate: '创建日期', + linename: '产品线', + line: '产品线', + activebugcnt: '未解决Bug数', + productplancnt: '计划总数', + releasecnt: '发布总数', + activestorycnt: '激活需求数', + }, + views: { + testtabexpview: { + caption: "测试", + title: '测试', + }, + expeditview: { + caption: "产品", + title: '产品', + }, + htmlview: { + caption: "iBiz软件生产管理", + title: 'iBiz软件生产管理', + }, + testdashboardview: { + caption: "产品", + title: '产品', + }, + testgridview: { + caption: "产品", + title: '产品', + }, + chartview: { + caption: "产品", + title: '产品', + }, + gridview_unclosed: { + caption: "未关闭产品", + title: '未关闭产品', + }, + storytreeexpview: { + caption: "产品", + title: '产品', + }, + casetreeexpview: { + caption: "产品", + title: '产品', + }, + maintabexpview: { + caption: "产品", + title: '产品', + }, + testleftsidebarlistview: { + caption: "测试", + title: '测试', + }, + gridview: { + caption: "产品", + title: '产品', + }, + pickupview: { + caption: "产品", + title: '产品', + }, + leftsidebarlistview: { + caption: "产品", + title: '产品', + }, + pickupgridview: { + caption: "产品", + title: '产品', + }, + dashboardinfomainview9: { + caption: "产品", + title: '产品', + }, + maindashboardview: { + caption: "产品", + title: '产品', + }, + editview: { + caption: "产品", + title: '产品', + }, + listexpview: { + caption: "产品统计", + title: '产品统计', + }, + bugtreeexpview: { + caption: "产品", + title: '产品', + }, + }, + dashboardinfo_form: { + details: { + group1: "产品基本信息", + grouppanel2: "负责人", + grouppanel3: "产品信息", + grouppanel4: "其他信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "编号", + srfmajortext: "产品名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "名称", + po: "产品", + rd: "发布", + qd: "测试", + linename: "产品线", + createdby: "创建人", + createddate: "创建日期", + acl: "访问控制", + id: "编号", + }, + uiactions: { + }, + }, + main_form: { + details: { + grouppanel1: "分组面板", + group1: "product基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "编号", + srfmajortext: "产品名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "产品名称", + code: "产品代号", + line: "产品线", + linename: "产品线", + po: "产品负责人", + qd: "测试负责人", + rd: "发布负责人", + type: "产品类型", + desc: "产品描述 ", + acl: "访问控制", + id: "编号", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + name: "产品名称", + code: "产品代号", + status: "状态", + type: "产品类型", + linename: "产品线", + }, + uiactions: { + }, + }, + test_grid: { + columns: { + name: "产品名称", + code: "产品代号", + status: "状态", + type: "产品类型", + linename: "产品线", + }, + uiactions: { + }, + }, + main2_grid: { + columns: { + name: "产品名称", + code: "产品代号", + status: "状态", + type: "产品类型", + linename: "产品线", + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: "常规条件", + n_acl_eq: "访问控制(等于(=))", + n_line_eq: "产品线(等于(=))", + n_linename_like: "产品线(文本包含(%))", + n_linename_eq: "产品线(等于(=))", + n_name_like: "产品名称(文本包含(%))", + }, + uiactions: { + }, + }, + testgridviewtoolbar_toolbar: { + tbitem4: { + caption: "Edit", + tip: "Edit {0}", + }, + tbitem7: { + caption: "-", + tip: "", + }, + tbitem16: { + caption: "其它", + tip: "其它", + }, + tbitem21: { + caption: "Export Data Model", + tip: "导出数据模型", + }, + }, + testleftsidebarlistviewtoolbar_toolbar: { + deuiaction3_testmanager: { + caption: "管理", + tip: "管理", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, + gridviewtoolbar_toolbar: { + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + leftsidebarlistviewtoolbar_toolbar: { + deuiaction3_manager: { + caption: "管理", + tip: "管理", + }, + seperator2: { + caption: "", + tip: "", + }, + deuiaction1: { + caption: "New", + tip: "New", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + listexpviewlistexpbar_list_quicktoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/product/product_zh_CN.ts b/app_Web/src/locale/lanres/entities/product/product_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..ddd5d28360662333e4190d910a55ae0d109a31c1 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/product/product_zh_CN.ts @@ -0,0 +1,288 @@ +export default { + fields: { + qd: '测试负责人', + acl: '访问控制', + name: '产品名称', + id: '编号', + deleted: '已删除', + whitelist: '分组白名单', + rd: '发布负责人', + order: '排序', + type: '产品类型', + po: '产品负责人', + desc: '产品描述 ', + status: '状态', + createdby: '由谁创建', + createdversion: '当前系统版本', + substatus: '子状态', + code: '产品代号', + createddate: '创建日期', + linename: '产品线', + line: '产品线', + activebugcnt: '未解决Bug数', + productplancnt: '计划总数', + releasecnt: '发布总数', + activestorycnt: '激活需求数', + }, + views: { + testtabexpview: { + caption: '测试', + title: '测试', + }, + expeditview: { + caption: '产品', + title: '产品', + }, + htmlview: { + caption: 'iBiz软件生产管理', + title: 'iBiz软件生产管理', + }, + testdashboardview: { + caption: '产品', + title: '产品', + }, + testgridview: { + caption: '产品', + title: '产品', + }, + chartview: { + caption: '产品', + title: '产品', + }, + gridview_unclosed: { + caption: '未关闭产品', + title: '未关闭产品', + }, + storytreeexpview: { + caption: '产品', + title: '产品', + }, + casetreeexpview: { + caption: '产品', + title: '产品', + }, + maintabexpview: { + caption: '产品', + title: '产品', + }, + testleftsidebarlistview: { + caption: '测试', + title: '测试', + }, + gridview: { + caption: '产品', + title: '产品', + }, + pickupview: { + caption: '产品', + title: '产品', + }, + leftsidebarlistview: { + caption: '产品', + title: '产品', + }, + pickupgridview: { + caption: '产品', + title: '产品', + }, + dashboardinfomainview9: { + caption: '产品', + title: '产品', + }, + maindashboardview: { + caption: '产品', + title: '产品', + }, + editview: { + caption: '产品', + title: '产品', + }, + listexpview: { + caption: '产品统计', + title: '产品统计', + }, + bugtreeexpview: { + caption: '产品', + title: '产品', + }, + }, + dashboardinfo_form: { + details: { + group1: '产品基本信息', + grouppanel2: '负责人', + grouppanel3: '产品信息', + grouppanel4: '其他信息', + formpage1: '基本信息', + srforikey: '', + srfkey: '编号', + srfmajortext: '产品名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '名称', + po: '产品', + rd: '发布', + qd: '测试', + linename: '产品线', + createdby: '创建人', + createddate: '创建日期', + acl: '访问控制', + id: '编号', + }, + uiactions: { + }, + }, + main_form: { + details: { + grouppanel1: '分组面板', + group1: 'product基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: '编号', + srfmajortext: '产品名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '产品名称', + code: '产品代号', + line: '产品线', + linename: '产品线', + po: '产品负责人', + qd: '测试负责人', + rd: '发布负责人', + type: '产品类型', + desc: '产品描述 ', + acl: '访问控制', + id: '编号', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + name: '产品名称', + code: '产品代号', + status: '状态', + type: '产品类型', + linename: '产品线', + }, + uiactions: { + }, + }, + test_grid: { + columns: { + name: '产品名称', + code: '产品代号', + status: '状态', + type: '产品类型', + linename: '产品线', + }, + uiactions: { + }, + }, + main2_grid: { + columns: { + name: '产品名称', + code: '产品代号', + status: '状态', + type: '产品类型', + linename: '产品线', + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: '常规条件', + n_acl_eq: '访问控制(等于(=))', + n_line_eq: '产品线(等于(=))', + n_linename_like: '产品线(文本包含(%))', + n_linename_eq: '产品线(等于(=))', + n_name_like: '产品名称(文本包含(%))', + }, + uiactions: { + }, + }, + testgridviewtoolbar_toolbar: { + tbitem4: { + caption: '编辑', + tip: '编辑', + }, + tbitem7: { + caption: '-', + tip: '', + }, + tbitem16: { + caption: '其它', + tip: '其它', + }, + tbitem21: { + caption: '导出数据模型', + tip: '导出数据模型', + }, + }, + testleftsidebarlistviewtoolbar_toolbar: { + deuiaction3_testmanager: { + caption: '管理', + tip: '管理', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, + gridviewtoolbar_toolbar: { + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + leftsidebarlistviewtoolbar_toolbar: { + deuiaction3_manager: { + caption: '管理', + tip: '管理', + }, + seperator2: { + caption: '', + tip: '', + }, + deuiaction1: { + caption: '新建', + tip: '新建', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + listexpviewlistexpbar_list_quicktoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/project-product/project-product_en_US.ts b/app_Web/src/locale/lanres/entities/project-product/project-product_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..ae5bc6f3141b8a737b7405343456c8a3eaf3b191 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/project-product/project-product_en_US.ts @@ -0,0 +1,23 @@ + +export default { + fields: { + id: '虚拟主键', + productname: '产品', + projectname: '项目', + planname: '计划名称', + product: '产品', + plan: '产品计划', + branch: '平台/分支', + project: '项目', + }, + views: { + planlistview9: { + caption: "关联计划", + title: '关联计划', + }, + listview9: { + caption: "关联产品", + title: '关联产品', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/project-product/project-product_zh_CN.ts b/app_Web/src/locale/lanres/entities/project-product/project-product_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..fabddd237920861480ca73ed12d1b2724517ac78 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/project-product/project-product_zh_CN.ts @@ -0,0 +1,22 @@ +export default { + fields: { + id: '虚拟主键', + productname: '产品', + projectname: '项目', + planname: '计划名称', + product: '产品', + plan: '产品计划', + branch: '平台/分支', + project: '项目', + }, + views: { + planlistview9: { + caption: '关联计划', + title: '关联计划', + }, + listview9: { + caption: '关联产品', + title: '关联产品', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/project-stats/project-stats_en_US.ts b/app_Web/src/locale/lanres/entities/project-stats/project-stats_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..934964355763e0cb5ad247a8c95bbf22eff28d7f --- /dev/null +++ b/app_Web/src/locale/lanres/entities/project-stats/project-stats_en_US.ts @@ -0,0 +1,61 @@ + +export default { + fields: { + id: '项目编号', + storycnt: '需求总数', + taskcnt: '任务总数', + totalestimate: '任务最初预计总工时', + totalconsumed: '任务消耗总工时', + totalleft: '任务预计剩余总工时', + undonetaskcnt: '未完成任务总数', + closedstorycnt: '关闭需求总数', + bugcnt: 'Bug总数', + activebugcnt: '未解决Bug总数', + unclosedstorycnt: '未关闭需求总数', + finishtaskcnt: '已结束任务总数', + finishbugcnt: '已解决Bug总数', + donetaskrate: '完成任务率', + closedstoryrate: '关闭需求率', + finishbugrate: '解决Bug率', + deleted: '已删除', + time: '工时', + type: '工时类型', + }, + views: { + maindashboardview: { + caption: "项目统计", + title: '项目统计', + }, + editview9: { + caption: "项目统计", + title: '项目统计', + }, + }, + main_form: { + details: { + grouppanel1: "任务统计", + grouppanel2: "需求统计", + grouppanel3: "bug统计", + group1: "项目统计基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "项目编号", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + taskcnt: "总任务", + donetaskrate: "", + undonetaskcnt: "未完成", + storycnt: "总需求", + closedstoryrate: "", + unclosedstorycnt: "未关闭", + bugcnt: "所有", + finishbugrate: "", + activebugcnt: "未解决", + id: "项目编号", + }, + uiactions: { + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/project-stats/project-stats_zh_CN.ts b/app_Web/src/locale/lanres/entities/project-stats/project-stats_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..720db6f20cc8f614c4b39c1bb7bcf56cc690b733 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/project-stats/project-stats_zh_CN.ts @@ -0,0 +1,60 @@ +export default { + fields: { + id: '项目编号', + storycnt: '需求总数', + taskcnt: '任务总数', + totalestimate: '任务最初预计总工时', + totalconsumed: '任务消耗总工时', + totalleft: '任务预计剩余总工时', + undonetaskcnt: '未完成任务总数', + closedstorycnt: '关闭需求总数', + bugcnt: 'Bug总数', + activebugcnt: '未解决Bug总数', + unclosedstorycnt: '未关闭需求总数', + finishtaskcnt: '已结束任务总数', + finishbugcnt: '已解决Bug总数', + donetaskrate: '完成任务率', + closedstoryrate: '关闭需求率', + finishbugrate: '解决Bug率', + deleted: '已删除', + time: '工时', + type: '工时类型', + }, + views: { + maindashboardview: { + caption: '项目统计', + title: '项目统计', + }, + editview9: { + caption: '项目统计', + title: '项目统计', + }, + }, + main_form: { + details: { + grouppanel1: '任务统计', + grouppanel2: '需求统计', + grouppanel3: 'bug统计', + group1: '项目统计基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: '项目编号', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + taskcnt: '总任务', + donetaskrate: '', + undonetaskcnt: '未完成', + storycnt: '总需求', + closedstoryrate: '', + unclosedstorycnt: '未关闭', + bugcnt: '所有', + finishbugrate: '', + activebugcnt: '未解决', + id: '项目编号', + }, + uiactions: { + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/project/project_en_US.ts b/app_Web/src/locale/lanres/entities/project/project_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..0c186f41b1874a3b826d7fe07b4979b683acbcb3 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/project/project_en_US.ts @@ -0,0 +1,240 @@ + +export default { + fields: { + openedversion: '当前系统版本', + begin: '开始时间', + acl: '访问控制', + deleted: '已删除', + desc: '项目描述', + pm: '项目负责人', + id: '项目编号', + name: '项目名称', + substatus: '子状态', + order: '项目排序', + rd: '发布负责人', + whitelist: '分组白名单', + pri: '优先级', + end: '结束日期', + canceleddate: '取消日期', + code: '项目代号', + catid: 'catID', + statge: 'statge', + canceledby: '由谁取消', + iscat: 'isCat', + openeddate: '创建日期', + closedby: '由谁关闭', + type: '项目类型', + po: '产品负责人', + status: '项目状态', + days: '可用工作日', + team: '团队名称', + closeddate: '关闭日期', + openedby: '由谁创建', + qd: '测试负责人', + parentname: 'parent', + parent: '父项目', + taskcnt: '任务总数', + bugcnt: 'Bug总数', + storycnt: '需求总数', + }, + views: { + tasktreeexpview: { + caption: "项目", + title: '项目', + }, + burndownchartview: { + caption: "项目", + title: '项目', + }, + listexpview: { + caption: "项目", + title: '项目', + }, + pickupgridview: { + caption: "项目", + title: '项目', + }, + curproductgridview: { + caption: "项目", + title: '项目', + }, + pickupview: { + caption: "项目", + title: '项目', + }, + leftsidebarlistview: { + caption: "项目", + title: '项目', + }, + gridview: { + caption: "项目", + title: '项目', + }, + maindashboardview: { + caption: "项目", + title: '项目', + }, + gridview9_unclosed: { + caption: "未关闭的项目", + title: '未关闭的项目', + }, + dashboardinfoview: { + caption: "项目", + title: '项目', + }, + editview: { + caption: "项目", + title: '项目', + }, + maintabexpview: { + caption: "项目", + title: '项目', + }, + }, + dashboardinfo_form: { + details: { + group1: "project基本信息", + druipart1: "", + grouppanel6: "关联产品", + druipart2: "", + grouppanel7: "关联计划", + grouppanel2: "分组面板", + grouppanel3: "分组面板", + grouppanel1: "工时统计", + grouppanel4: "基本信息", + grouppanel5: "访问控制", + formpage1: "基本信息", + srforikey: "", + srfkey: "项目编号", + srfmajortext: "项目名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + id: "项目编号", + code: "项目代号", + name: "项目名称", + desc: "项目描述", + type: "项目类型", + status: "项目状态", + begin: "开始时间", + end: "结束日期", + days: "可用工作日", + formitem: "预计", + formitem1: "消耗", + formitem2: "剩余", + formitem3: "需求", + formitem4: "任务", + formitem5: "Bug", + acl: "访问控制", + }, + uiactions: { + }, + }, + main_form: { + details: { + grouppanel1: "分组面板", + group1: "project基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "项目编号", + srfmajortext: "项目名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "项目名称", + code: "项目代号", + end: "结束日期", + begin: "开始时间", + formitemex1: "项目周期", + days: "可用工作日", + team: "团队名称", + type: "项目类型", + formitem: "关联产品", + formitem1: "关联计划", + desc: "项目描述", + acl: "访问控制", + id: "项目编号", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: "ID", + name: "项目名称", + code: "项目代号", + status: "项目状态", + end: "结束日期", + }, + uiactions: { + }, + }, + main2_grid: { + columns: { + id: "ID", + name: "项目名称", + code: "项目代号", + status: "项目状态", + end: "结束日期", + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: "常规条件", + }, + uiactions: { + }, + }, + curproductgridviewtoolbar_toolbar: { + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, + gridviewtoolbar_toolbar: { + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + leftsidebarlistviewtoolbar_toolbar: { + deuiaction3_manager: { + caption: "管理", + tip: "管理", + }, + seperator2: { + caption: "", + tip: "", + }, + deuiaction1: { + caption: "New", + tip: "New", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/project/project_zh_CN.ts b/app_Web/src/locale/lanres/entities/project/project_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..450c1f94c3f2963056a02ed701c9f14a3681b965 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/project/project_zh_CN.ts @@ -0,0 +1,239 @@ +export default { + fields: { + openedversion: '当前系统版本', + begin: '开始时间', + acl: '访问控制', + deleted: '已删除', + desc: '项目描述', + pm: '项目负责人', + id: '项目编号', + name: '项目名称', + substatus: '子状态', + order: '项目排序', + rd: '发布负责人', + whitelist: '分组白名单', + pri: '优先级', + end: '结束日期', + canceleddate: '取消日期', + code: '项目代号', + catid: 'catID', + statge: 'statge', + canceledby: '由谁取消', + iscat: 'isCat', + openeddate: '创建日期', + closedby: '由谁关闭', + type: '项目类型', + po: '产品负责人', + status: '项目状态', + days: '可用工作日', + team: '团队名称', + closeddate: '关闭日期', + openedby: '由谁创建', + qd: '测试负责人', + parentname: 'parent', + parent: '父项目', + taskcnt: '任务总数', + bugcnt: 'Bug总数', + storycnt: '需求总数', + }, + views: { + tasktreeexpview: { + caption: '项目', + title: '项目', + }, + burndownchartview: { + caption: '项目', + title: '项目', + }, + listexpview: { + caption: '项目', + title: '项目', + }, + pickupgridview: { + caption: '项目', + title: '项目', + }, + curproductgridview: { + caption: '项目', + title: '项目', + }, + pickupview: { + caption: '项目', + title: '项目', + }, + leftsidebarlistview: { + caption: '项目', + title: '项目', + }, + gridview: { + caption: '项目', + title: '项目', + }, + maindashboardview: { + caption: '项目', + title: '项目', + }, + gridview9_unclosed: { + caption: '未关闭的项目', + title: '未关闭的项目', + }, + dashboardinfoview: { + caption: '项目', + title: '项目', + }, + editview: { + caption: '项目', + title: '项目', + }, + maintabexpview: { + caption: '项目', + title: '项目', + }, + }, + dashboardinfo_form: { + details: { + group1: 'project基本信息', + druipart1: '', + grouppanel6: '关联产品', + druipart2: '', + grouppanel7: '关联计划', + grouppanel2: '分组面板', + grouppanel3: '分组面板', + grouppanel1: '工时统计', + grouppanel4: '基本信息', + grouppanel5: '访问控制', + formpage1: '基本信息', + srforikey: '', + srfkey: '项目编号', + srfmajortext: '项目名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + id: '项目编号', + code: '项目代号', + name: '项目名称', + desc: '项目描述', + type: '项目类型', + status: '项目状态', + begin: '开始时间', + end: '结束日期', + days: '可用工作日', + formitem: '预计', + formitem1: '消耗', + formitem2: '剩余', + formitem3: '需求', + formitem4: '任务', + formitem5: 'Bug', + acl: '访问控制', + }, + uiactions: { + }, + }, + main_form: { + details: { + grouppanel1: '分组面板', + group1: 'project基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: '项目编号', + srfmajortext: '项目名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '项目名称', + code: '项目代号', + end: '结束日期', + begin: '开始时间', + formitemex1: '项目周期', + days: '可用工作日', + team: '团队名称', + type: '项目类型', + formitem: '关联产品', + formitem1: '关联计划', + desc: '项目描述', + acl: '访问控制', + id: '项目编号', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: 'ID', + name: '项目名称', + code: '项目代号', + status: '项目状态', + end: '结束日期', + }, + uiactions: { + }, + }, + main2_grid: { + columns: { + id: 'ID', + name: '项目名称', + code: '项目代号', + status: '项目状态', + end: '结束日期', + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: '常规条件', + }, + uiactions: { + }, + }, + curproductgridviewtoolbar_toolbar: { + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, + gridviewtoolbar_toolbar: { + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + leftsidebarlistviewtoolbar_toolbar: { + deuiaction3_manager: { + caption: '管理', + tip: '管理', + }, + seperator2: { + caption: '', + tip: '', + }, + deuiaction1: { + caption: '新建', + tip: '新建', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/release/release_en_US.ts b/app_Web/src/locale/lanres/entities/release/release_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..b7107cc859eb9276ac65f3c2ff08908c850e0931 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/release/release_en_US.ts @@ -0,0 +1,144 @@ + +export default { + fields: { + stories: '完成的需求', + marker: '里程碑', + id: 'ID', + leftbugs: '遗留的Bug', + bugs: '解决的Bug', + deleted: '已删除', + name: '发布名称', + date: '发布日期', + status: '状态', + substatus: '子状态', + desc: '描述', + buildname: '版本', + product: '产品', + build: '版本', + branch: '平台/分支', + }, + views: { + gridview: { + caption: "发布", + title: '发布', + }, + editview: { + caption: "发布", + title: '发布', + }, + }, + main_form: { + details: { + group1: "release基本信息", + formpage1: "基本信息", + group2: "操作信息", + formpage2: "其它", + srforikey: "", + srfkey: "ID", + srfmajortext: "发布名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "发布名称", + id: "ID", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: "ID", + name: "发布名称", + buildname: "版本", + status: "状态", + date: "发布日期", + }, + uiactions: { + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: "Save", + tip: "Save", + }, + tbitem4: { + caption: "Save And New", + tip: "Save And New", + }, + tbitem5: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + tbitem6: { + caption: "-", + tip: "", + }, + tbitem7: { + caption: "Remove And Close", + tip: "Remove And Close Window", + }, + tbitem8: { + caption: "-", + tip: "", + }, + tbitem12: { + caption: "New", + tip: "New", + }, + tbitem13: { + caption: "-", + tip: "", + }, + tbitem14: { + caption: "Copy", + tip: "Copy {0}", + }, + tbitem16: { + caption: "-", + tip: "", + }, + tbitem23: { + caption: "第一个记录", + tip: "第一个记录", + }, + tbitem24: { + caption: "上一个记录", + tip: "上一个记录", + }, + tbitem25: { + caption: "下一个记录", + tip: "下一个记录", + }, + tbitem26: { + caption: "最后一个记录", + tip: "最后一个记录", + }, + tbitem21: { + caption: "-", + tip: "", + }, + tbitem22: { + caption: "Help", + tip: "Help", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/release/release_zh_CN.ts b/app_Web/src/locale/lanres/entities/release/release_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..b9e649965b46b8ea10926abf3c0a83a6405fa5bf --- /dev/null +++ b/app_Web/src/locale/lanres/entities/release/release_zh_CN.ts @@ -0,0 +1,143 @@ +export default { + fields: { + stories: '完成的需求', + marker: '里程碑', + id: 'ID', + leftbugs: '遗留的Bug', + bugs: '解决的Bug', + deleted: '已删除', + name: '发布名称', + date: '发布日期', + status: '状态', + substatus: '子状态', + desc: '描述', + buildname: '版本', + product: '产品', + build: '版本', + branch: '平台/分支', + }, + views: { + gridview: { + caption: '发布', + title: '发布', + }, + editview: { + caption: '发布', + title: '发布', + }, + }, + main_form: { + details: { + group1: 'release基本信息', + formpage1: '基本信息', + group2: '操作信息', + formpage2: '其它', + srforikey: '', + srfkey: 'ID', + srfmajortext: '发布名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '发布名称', + id: 'ID', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: 'ID', + name: '发布名称', + buildname: '版本', + status: '状态', + date: '发布日期', + }, + uiactions: { + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: '保存', + tip: '保存', + }, + tbitem4: { + caption: '保存并新建', + tip: '保存并新建', + }, + tbitem5: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + tbitem6: { + caption: '-', + tip: '', + }, + tbitem7: { + caption: '删除', + tip: '删除', + }, + tbitem8: { + caption: '-', + tip: '', + }, + tbitem12: { + caption: '新建', + tip: '新建', + }, + tbitem13: { + caption: '-', + tip: '', + }, + tbitem14: { + caption: '拷贝', + tip: '拷贝', + }, + tbitem16: { + caption: '-', + tip: '', + }, + tbitem23: { + caption: '第一个记录', + tip: '第一个记录', + }, + tbitem24: { + caption: '上一个记录', + tip: '上一个记录', + }, + tbitem25: { + caption: '下一个记录', + tip: '下一个记录', + }, + tbitem26: { + caption: '最后一个记录', + tip: '最后一个记录', + }, + tbitem21: { + caption: '-', + tip: '', + }, + tbitem22: { + caption: '帮助', + tip: '帮助', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/story-spec/story-spec_en_US.ts b/app_Web/src/locale/lanres/entities/story-spec/story-spec_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..c51ca087e3622549280b52a0ae13a561c5f97c8c --- /dev/null +++ b/app_Web/src/locale/lanres/entities/story-spec/story-spec_en_US.ts @@ -0,0 +1,45 @@ + +export default { + fields: { + spec: '需求描述 ', + duplicatestory: '重复需求ID', + verify: '验收标准', + id: '虚拟主键', + title: '需求名称', + version: '版本号', + story: '需求', + }, + views: { + mainview9: { + caption: "需求描述", + title: '需求描述', + }, + }, + main_form: { + details: { + rawitem1: "", + group1: "storyspec基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "虚拟主键", + srfmajortext: "需求名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + spec: "需求描述 ", + verify: "验收标准", + id: "虚拟主键", + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: "常规条件", + n_version_eq: "版本号(等于(=))", + }, + uiactions: { + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/story-spec/story-spec_zh_CN.ts b/app_Web/src/locale/lanres/entities/story-spec/story-spec_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..ab0bc02c0a00d0297b6b086d159fe54d522b21d8 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/story-spec/story-spec_zh_CN.ts @@ -0,0 +1,44 @@ +export default { + fields: { + spec: '需求描述 ', + duplicatestory: '重复需求ID', + verify: '验收标准', + id: '虚拟主键', + title: '需求名称', + version: '版本号', + story: '需求', + }, + views: { + mainview9: { + caption: '需求描述', + title: '需求描述', + }, + }, + main_form: { + details: { + rawitem1: '', + group1: 'storyspec基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: '虚拟主键', + srfmajortext: '需求名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + spec: '需求描述 ', + verify: '验收标准', + id: '虚拟主键', + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: '常规条件', + n_version_eq: '版本号(等于(=))', + }, + uiactions: { + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/story/story_en_US.ts b/app_Web/src/locale/lanres/entities/story/story_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..cb87363418f922c3d2b8c10ae82e7142c45ad007 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/story/story_en_US.ts @@ -0,0 +1,473 @@ + +export default { + fields: { + assignedto: '指派给', + childstories: '细分需求', + plan: '所属计划', + version: '版本号', + assigneddate: '指派日期', + pri: '优先级', + linkstories: '相关需求', + status: '当前状态', + estimate: '预计工时', + revieweddate: '评审时间', + title: '需求名称', + sourcenote: '来源备注', + reviewedby: '由谁评审', + substatus: '子状态', + stagedby: '设置阶段者', + openedby: '由谁创建', + openeddate: '创建日期', + id: '编号', + source: '需求来源', + closedreason: '关闭原因', + color: '标题颜色', + mailto: '抄送给', + deleted: '已删除', + keywords: '关键词', + lasteditedby: '最后修改', + stage: '所处阶段', + closeddate: '关闭日期 ', + closedby: '由谁关闭', + type: '需求类型', + lastediteddate: '最后修改日期', + path: '模块路径', + parentname: '父需求名称', + modulename: '所属模块名称', + productname: '产品名称', + frombug: '来源Bug', + parent: '父需求', + module: '所属模块', + product: '所属产品', + duplicatestory: '重复需求ID', + branch: '平台/分支', + tobug: '转Bug', + spec: '需求描述', + verify: '验收标准', + }, + views: { + mainview: { + caption: "需求", + title: '需求', + }, + editview: { + caption: "需求", + title: '需求', + }, + gridview9_assignedtome: { + caption: "需求", + title: '需求', + }, + mainview9_editmode: { + caption: "需求", + title: '需求', + }, + plansubeditview: { + caption: "需求", + title: '需求', + }, + pickupgridview: { + caption: "需求", + title: '需求', + }, + mainview9_storyspec: { + caption: "需求", + title: '需求', + }, + mainview_editmode: { + caption: "需求", + title: '需求', + }, + mainview9: { + caption: "需求", + title: '需求', + }, + gridview9_substory: { + caption: "子需求", + title: '子需求', + }, + maingridview: { + caption: "需求", + title: '需求', + }, + mpickupview: { + caption: "关联需求", + title: '关联需求', + }, + plansubgridview: { + caption: "需求", + title: '需求', + }, + main2gridview: { + caption: "需求", + title: '需求', + }, + editview_storychange: { + caption: "变更", + title: '变更', + }, + }, + storyspec_editmode_form: { + details: { + grouppanel1: "分组面板", + druipart1: "", + grouppanel2: "分组面板", + group1: "需求描述信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "编号", + srfmajortext: "需求名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + version: "版本#", + reviewedby: "由谁评审", + notreview: "不需要评审", + title: "需求名称", + verify: "验收标准", + spec: "需求描述", + comment: "备注", + files: "附件", + id: "编号", + }, + uiactions: { + }, + }, + main_newmode_form: { + details: { + group1: "需求基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "编号", + srfmajortext: "需求名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + product: "所属产品", + module: "所属模块", + prodoctname: "所属产品", + modulename: "所属模块", + plan: "计划", + source: "需求来源", + sourcenote: "来源备注", + reviewedby: "由谁评审", + title: "需求名称", + pri: "优先级", + estimate: "预计", + formitem: "需求描述", + formitem1: "验收标准", + mailto: "抄送给", + keywords: "关键词", + id: "编号", + }, + uiactions: { + }, + }, + storyspec_form: { + details: { + grouppanel1: "需求描述", + grouppanel2: "验收标准", + group1: "需求描述信息", + druipart1: "", + formpage1: "基本信息", + srforikey: "", + srfkey: "编号", + srfmajortext: "需求名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + parent: "父需求", + version: "版本#", + spec: "需求描述", + verify: "验收标准", + id: "编号", + }, + uiactions: { + }, + }, + main_editmode_form: { + details: { + group1: "story基本信息", + grouppanel1: "分组面板", + grouppanel2: "分组面板", + group2: "需求的一生", + grouppanel3: "其他相关", + formpage1: "基本信息", + srforikey: "", + srfkey: "编号", + srfmajortext: "需求名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + title: "需求名称", + prodoctname: "所属产品", + modulename: "所属模块", + plan: "所属计划", + source: "需求来源", + sourcenote: "来源备注", + status: "当前状态", + stage: "所处阶段", + pri: "优先级", + estimate: "预计工时", + keywords: "关键词", + mailto: "抄送给", + openedby: "由谁创建", + openeddate: "于", + assignedto: "指派给", + assigneddate: "于", + linkstories: "相关需求", + id: "编号", + product: "所属产品", + module: "所属模块", + }, + uiactions: { + }, + }, + main_form: { + details: { + group1: "story基本信息", + formpage1: "基本信息", + grouppanel1: "分组面板", + grouppanel2: "分组面板", + grouppanel3: "分组面板", + group2: "操作信息", + formpage2: "需求的一生", + srforikey: "", + srfkey: "编号", + srfmajortext: "需求名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + title: "需求名称", + prodoctname: "所属产品", + modulename: "所属模块", + plan: "所属计划", + source: "需求来源", + sourcenote: "来源备注", + status: "当前状态", + stage: "所处阶段", + pri: "优先级", + estimate: "预计工时", + keywords: "关键词", + mailto: "抄送给", + openedby: "由谁创建", + openeddate: "于", + assignedto: "指派给", + assigneddate: "于", + reviewedby: "由谁评审", + revieweddate: "评审时间", + closedby: "由谁关闭", + closeddate: "关闭日期 ", + closedreason: "关闭原因", + lasteditedby: "最后修改", + lastediteddate: "于", + id: "编号", + product: "所属产品", + }, + uiactions: { + }, + }, + main3_grid: { + columns: { + id: "ID", + pri: "P", + title: "需求名称", + assignedto: "指派给", + estimate: "预计工时", + status: "当前状态", + uagridcolumn1: "操作", + }, + uiactions: { + changestorydetail: "变更", + closestory: "关闭", + openbaseinfoeditview: "编辑", + opencasecreateview: "建用例", + }, + }, + main_grid: { + columns: { + id: "ID", + pri: "P", + title: "需求名称", + modulename: "所属模块名称", + uagridcolumn1: "操作", + }, + uiactions: { + changestorydetail: "变更", + closestory: "关闭", + openbaseinfoeditview: "编辑", + opencasecreateview: "建用例", + }, + }, + main2_grid: { + columns: { + id: "ID", + pri: "P", + title: "需求名称", + uagridcolumn1: "操作", + }, + uiactions: { + changestorydetail: "变更", + closestory: "关闭", + openbaseinfoeditview: "编辑", + opencasecreateview: "建用例", + }, + }, + pickupgrid_grid: { + columns: { + id: "ID", + pri: "P", + title: "需求名称", + modulename: "所属模块名称", + }, + uiactions: { + }, + }, + main_plansub_grid: { + columns: { + id: "ID", + pri: "P", + title: "需求名称", + modulename: "所属模块名称", + }, + uiactions: { + }, + }, + main9_grid: { + columns: { + pri: "P", + title: "需求名称", + status: "状态", + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: "常规条件", + }, + uiactions: { + }, + }, + editview_storychangetoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "Edit", + tip: "Edit {0}", + }, + }, + main2gridviewtoolbar_toolbar: { + tbitem3: { + caption: "New", + tip: "New", + }, + tbitem4: { + caption: "Edit", + tip: "Edit {0}", + }, + tbitem6: { + caption: "Copy", + tip: "Copy {0}", + }, + tbitem7: { + caption: "-", + tip: "", + }, + tbitem8: { + caption: "Remove", + tip: "Remove {0}", + }, + tbitem9: { + caption: "-", + tip: "", + }, + tbitem13: { + caption: "Export", + tip: "Export {0} Data To Excel", + }, + tbitem10: { + caption: "-", + tip: "", + }, + tbitem16: { + caption: "其它", + tip: "其它", + }, + tbitem21: { + caption: "Export Data Model", + tip: "导出数据模型", + }, + tbitem23: { + caption: "数据导入", + tip: "数据导入", + }, + tbitem17: { + caption: "-", + tip: "", + }, + tbitem19: { + caption: "Filter", + tip: "Filter", + }, + tbitem18: { + caption: "Help", + tip: "Help", + }, + }, + plansubgridviewtoolbar_toolbar: { + deuiaction3_planrelationstory: { + caption: "关联需求", + tip: "关联需求", + }, + seperator2: { + caption: "", + tip: "", + }, + deuiaction1: { + caption: "New", + tip: "New", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + plansubeditviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/story/story_zh_CN.ts b/app_Web/src/locale/lanres/entities/story/story_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..10b0c283e6110f532e7607091ca99c630ed7fb19 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/story/story_zh_CN.ts @@ -0,0 +1,472 @@ +export default { + fields: { + assignedto: '指派给', + childstories: '细分需求', + plan: '所属计划', + version: '版本号', + assigneddate: '指派日期', + pri: '优先级', + linkstories: '相关需求', + status: '当前状态', + estimate: '预计工时', + revieweddate: '评审时间', + title: '需求名称', + sourcenote: '来源备注', + reviewedby: '由谁评审', + substatus: '子状态', + stagedby: '设置阶段者', + openedby: '由谁创建', + openeddate: '创建日期', + id: '编号', + source: '需求来源', + closedreason: '关闭原因', + color: '标题颜色', + mailto: '抄送给', + deleted: '已删除', + keywords: '关键词', + lasteditedby: '最后修改', + stage: '所处阶段', + closeddate: '关闭日期 ', + closedby: '由谁关闭', + type: '需求类型', + lastediteddate: '最后修改日期', + path: '模块路径', + parentname: '父需求名称', + modulename: '所属模块名称', + productname: '产品名称', + frombug: '来源Bug', + parent: '父需求', + module: '所属模块', + product: '所属产品', + duplicatestory: '重复需求ID', + branch: '平台/分支', + tobug: '转Bug', + spec: '需求描述', + verify: '验收标准', + }, + views: { + mainview: { + caption: '需求', + title: '需求', + }, + editview: { + caption: '需求', + title: '需求', + }, + gridview9_assignedtome: { + caption: '需求', + title: '需求', + }, + mainview9_editmode: { + caption: '需求', + title: '需求', + }, + plansubeditview: { + caption: '需求', + title: '需求', + }, + pickupgridview: { + caption: '需求', + title: '需求', + }, + mainview9_storyspec: { + caption: '需求', + title: '需求', + }, + mainview_editmode: { + caption: '需求', + title: '需求', + }, + mainview9: { + caption: '需求', + title: '需求', + }, + gridview9_substory: { + caption: '子需求', + title: '子需求', + }, + maingridview: { + caption: '需求', + title: '需求', + }, + mpickupview: { + caption: '关联需求', + title: '关联需求', + }, + plansubgridview: { + caption: '需求', + title: '需求', + }, + main2gridview: { + caption: '需求', + title: '需求', + }, + editview_storychange: { + caption: '变更', + title: '变更', + }, + }, + storyspec_editmode_form: { + details: { + grouppanel1: '分组面板', + druipart1: '', + grouppanel2: '分组面板', + group1: '需求描述信息', + formpage1: '基本信息', + srforikey: '', + srfkey: '编号', + srfmajortext: '需求名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + version: '版本#', + reviewedby: '由谁评审', + notreview: '不需要评审', + title: '需求名称', + verify: '验收标准', + spec: '需求描述', + comment: '备注', + files: '附件', + id: '编号', + }, + uiactions: { + }, + }, + main_newmode_form: { + details: { + group1: '需求基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: '编号', + srfmajortext: '需求名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + product: '所属产品', + module: '所属模块', + prodoctname: '所属产品', + modulename: '所属模块', + plan: '计划', + source: '需求来源', + sourcenote: '来源备注', + reviewedby: '由谁评审', + title: '需求名称', + pri: '优先级', + estimate: '预计', + formitem: '需求描述', + formitem1: '验收标准', + mailto: '抄送给', + keywords: '关键词', + id: '编号', + }, + uiactions: { + }, + }, + storyspec_form: { + details: { + grouppanel1: '需求描述', + grouppanel2: '验收标准', + group1: '需求描述信息', + druipart1: '', + formpage1: '基本信息', + srforikey: '', + srfkey: '编号', + srfmajortext: '需求名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + parent: '父需求', + version: '版本#', + spec: '需求描述', + verify: '验收标准', + id: '编号', + }, + uiactions: { + }, + }, + main_editmode_form: { + details: { + group1: 'story基本信息', + grouppanel1: '分组面板', + grouppanel2: '分组面板', + group2: '需求的一生', + grouppanel3: '其他相关', + formpage1: '基本信息', + srforikey: '', + srfkey: '编号', + srfmajortext: '需求名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + title: '需求名称', + prodoctname: '所属产品', + modulename: '所属模块', + plan: '所属计划', + source: '需求来源', + sourcenote: '来源备注', + status: '当前状态', + stage: '所处阶段', + pri: '优先级', + estimate: '预计工时', + keywords: '关键词', + mailto: '抄送给', + openedby: '由谁创建', + openeddate: '于', + assignedto: '指派给', + assigneddate: '于', + linkstories: '相关需求', + id: '编号', + product: '所属产品', + module: '所属模块', + }, + uiactions: { + }, + }, + main_form: { + details: { + group1: 'story基本信息', + formpage1: '基本信息', + grouppanel1: '分组面板', + grouppanel2: '分组面板', + grouppanel3: '分组面板', + group2: '操作信息', + formpage2: '需求的一生', + srforikey: '', + srfkey: '编号', + srfmajortext: '需求名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + title: '需求名称', + prodoctname: '所属产品', + modulename: '所属模块', + plan: '所属计划', + source: '需求来源', + sourcenote: '来源备注', + status: '当前状态', + stage: '所处阶段', + pri: '优先级', + estimate: '预计工时', + keywords: '关键词', + mailto: '抄送给', + openedby: '由谁创建', + openeddate: '于', + assignedto: '指派给', + assigneddate: '于', + reviewedby: '由谁评审', + revieweddate: '评审时间', + closedby: '由谁关闭', + closeddate: '关闭日期 ', + closedreason: '关闭原因', + lasteditedby: '最后修改', + lastediteddate: '于', + id: '编号', + product: '所属产品', + }, + uiactions: { + }, + }, + main3_grid: { + columns: { + id: 'ID', + pri: 'P', + title: '需求名称', + assignedto: '指派给', + estimate: '预计工时', + status: '当前状态', + uagridcolumn1: '操作', + }, + uiactions: { + changestorydetail: '变更', + closestory: '关闭', + openbaseinfoeditview: '编辑', + opencasecreateview: '建用例', + }, + }, + main_grid: { + columns: { + id: 'ID', + pri: 'P', + title: '需求名称', + modulename: '所属模块名称', + uagridcolumn1: '操作', + }, + uiactions: { + changestorydetail: '变更', + closestory: '关闭', + openbaseinfoeditview: '编辑', + opencasecreateview: '建用例', + }, + }, + main2_grid: { + columns: { + id: 'ID', + pri: 'P', + title: '需求名称', + uagridcolumn1: '操作', + }, + uiactions: { + changestorydetail: '变更', + closestory: '关闭', + openbaseinfoeditview: '编辑', + opencasecreateview: '建用例', + }, + }, + pickupgrid_grid: { + columns: { + id: 'ID', + pri: 'P', + title: '需求名称', + modulename: '所属模块名称', + }, + uiactions: { + }, + }, + main_plansub_grid: { + columns: { + id: 'ID', + pri: 'P', + title: '需求名称', + modulename: '所属模块名称', + }, + uiactions: { + }, + }, + main9_grid: { + columns: { + pri: 'P', + title: '需求名称', + status: '状态', + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: '常规条件', + }, + uiactions: { + }, + }, + editview_storychangetoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '编辑', + tip: '编辑', + }, + }, + main2gridviewtoolbar_toolbar: { + tbitem3: { + caption: '新建', + tip: '新建', + }, + tbitem4: { + caption: '编辑', + tip: '编辑', + }, + tbitem6: { + caption: '拷贝', + tip: '拷贝', + }, + tbitem7: { + caption: '-', + tip: '', + }, + tbitem8: { + caption: '删除', + tip: '删除', + }, + tbitem9: { + caption: '-', + tip: '', + }, + tbitem13: { + caption: '导出', + tip: '导出', + }, + tbitem10: { + caption: '-', + tip: '', + }, + tbitem16: { + caption: '其它', + tip: '其它', + }, + tbitem21: { + caption: '导出数据模型', + tip: '导出数据模型', + }, + tbitem23: { + caption: '数据导入', + tip: '数据导入', + }, + tbitem17: { + caption: '-', + tip: '', + }, + tbitem19: { + caption: '过滤', + tip: '过滤', + }, + tbitem18: { + caption: '帮助', + tip: '帮助', + }, + }, + plansubgridviewtoolbar_toolbar: { + deuiaction3_planrelationstory: { + caption: '关联需求', + tip: '关联需求', + }, + seperator2: { + caption: '', + tip: '', + }, + deuiaction1: { + caption: '新建', + tip: '新建', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + plansubeditviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/sub-product-plan/sub-product-plan_en_US.ts b/app_Web/src/locale/lanres/entities/sub-product-plan/sub-product-plan_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..cad8392a2de6a51d138a0638ccb27ae75d0157e9 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/sub-product-plan/sub-product-plan_en_US.ts @@ -0,0 +1,94 @@ + +export default { + fields: { + title: '名称', + id: '编号', + begin: '开始日期', + desc: '描述', + end: '结束日期', + deleted: '已删除', + order: '排序', + parentname: '父计划名称', + branch: '平台/分支', + parent: '父计划', + product: '产品', + }, + views: { + subplancreateview: { + caption: "产品计划", + title: '产品计划', + }, + subplangridview: { + caption: "产品计划", + title: '产品计划', + }, + subplaneditview: { + caption: "子计划", + title: '子计划', + }, + }, + mainsubplan_form: { + details: { + grouppanel1: "分组面板", + group1: "productplan基本信息", + button1: "Save And Close", + button2: "关闭", + grouppanel3: "分组面板", + grouppanel2: "分组面板", + formpage1: "基本信息", + srforikey: "", + srfkey: "编号", + srfmajortext: "名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + product: "产品", + parent: "父计划", + parentname: "父计划名称", + title: "名称", + begin: "开始日期", + end: "结束日期", + desc: "描述", + id: "编号", + }, + uiactions: { + saveandexit: "Save And Close", + exit: "返回", + }, + }, + mainsubplan_grid: { + columns: { + id: "编号", + title: "名称", + begin: "开始日期", + end: "结束日期", + }, + uiactions: { + }, + }, + subplangridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + subplancreateviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/sub-product-plan/sub-product-plan_zh_CN.ts b/app_Web/src/locale/lanres/entities/sub-product-plan/sub-product-plan_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..080e2d00b6843a73aef3d15df648a829d4042d0f --- /dev/null +++ b/app_Web/src/locale/lanres/entities/sub-product-plan/sub-product-plan_zh_CN.ts @@ -0,0 +1,93 @@ +export default { + fields: { + title: '名称', + id: '编号', + begin: '开始日期', + desc: '描述', + end: '结束日期', + deleted: '已删除', + order: '排序', + parentname: '父计划名称', + branch: '平台/分支', + parent: '父计划', + product: '产品', + }, + views: { + subplancreateview: { + caption: '产品计划', + title: '产品计划', + }, + subplangridview: { + caption: '产品计划', + title: '产品计划', + }, + subplaneditview: { + caption: '子计划', + title: '子计划', + }, + }, + mainsubplan_form: { + details: { + grouppanel1: '分组面板', + group1: 'productplan基本信息', + button1: '保存', + button2: '关闭', + grouppanel3: '分组面板', + grouppanel2: '分组面板', + formpage1: '基本信息', + srforikey: '', + srfkey: '编号', + srfmajortext: '名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + product: '产品', + parent: '父计划', + parentname: '父计划名称', + title: '名称', + begin: '开始日期', + end: '结束日期', + desc: '描述', + id: '编号', + }, + uiactions: { + saveandexit: '保存并关闭', + exit: '返回', + }, + }, + mainsubplan_grid: { + columns: { + id: '编号', + title: '名称', + begin: '开始日期', + end: '结束日期', + }, + uiactions: { + }, + }, + subplangridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + subplancreateviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/sub-task/sub-task_en_US.ts b/app_Web/src/locale/lanres/entities/sub-task/sub-task_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..4d278de2fd30887ace7be5e0882e1c4fac924b6e --- /dev/null +++ b/app_Web/src/locale/lanres/entities/sub-task/sub-task_en_US.ts @@ -0,0 +1,82 @@ + +export default { + fields: { + canceledby: '由谁取消', + left: '预计剩余', + openeddate: '创建日期', + color: '标题颜色', + id: '编号', + finishedby: '由谁完成', + finishedlist: '完成者列表', + realstarted: '实际开始', + closedby: '由谁关闭', + substatus: '子状态', + closedreason: '关闭原因', + lastediteddate: '最后修改日期', + assigneddate: '指派日期', + pri: '优先级', + lasteditedby: '最后修改', + status: '任务状态', + name: '任务名称', + closeddate: '关闭时间', + type: '任务类型', + assignedto: '指派给', + desc: '任务描述', + eststarted: '预计开始', + deadline: '截止日期', + deleted: '已删除', + mailto: '抄送给', + consumed: '总计消耗', + estimate: '最初预计', + openedby: '由谁创建', + canceleddate: '取消时间', + finisheddate: '实际完成', + modulename: '所属模块', + storyname: '相关需求', + projectname: '所属项目', + product: '产品', + storyversion: '需求版本', + productname: '产品', + parentname: '父任务', + project: '所属项目', + module: '所属模块', + story: '相关需求', + parent: '父任务', + frombug: '来源Bug', + duration: '持续时间', + }, + views: { + subtasknewview: { + caption: "子任务", + title: '子任务', + }, + }, + subtasknew_grid: { + columns: { + modulename: "所属模块", + storyname: "相关需求", + name: "任务名称", + type: "任务类型", + assignedto: "指派给", + left: "预计", + desc: "任务描述", + pri: "优先级", + }, + uiactions: { + }, + }, + subtasknewviewtoolbar_toolbar: { + deuiaction1: { + caption: "行编辑", + tip: "行编辑", + }, + deuiaction2: { + caption: "新建行", + tip: "新建行", + }, + deuiaction3: { + caption: "保存行", + tip: "保存行", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/sub-task/sub-task_zh_CN.ts b/app_Web/src/locale/lanres/entities/sub-task/sub-task_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..ffdb89639bb32df3b38f9e5fc518cd2e5b2468ea --- /dev/null +++ b/app_Web/src/locale/lanres/entities/sub-task/sub-task_zh_CN.ts @@ -0,0 +1,81 @@ +export default { + fields: { + canceledby: '由谁取消', + left: '预计剩余', + openeddate: '创建日期', + color: '标题颜色', + id: '编号', + finishedby: '由谁完成', + finishedlist: '完成者列表', + realstarted: '实际开始', + closedby: '由谁关闭', + substatus: '子状态', + closedreason: '关闭原因', + lastediteddate: '最后修改日期', + assigneddate: '指派日期', + pri: '优先级', + lasteditedby: '最后修改', + status: '任务状态', + name: '任务名称', + closeddate: '关闭时间', + type: '任务类型', + assignedto: '指派给', + desc: '任务描述', + eststarted: '预计开始', + deadline: '截止日期', + deleted: '已删除', + mailto: '抄送给', + consumed: '总计消耗', + estimate: '最初预计', + openedby: '由谁创建', + canceleddate: '取消时间', + finisheddate: '实际完成', + modulename: '所属模块', + storyname: '相关需求', + projectname: '所属项目', + product: '产品', + storyversion: '需求版本', + productname: '产品', + parentname: '父任务', + project: '所属项目', + module: '所属模块', + story: '相关需求', + parent: '父任务', + frombug: '来源Bug', + duration: '持续时间', + }, + views: { + subtasknewview: { + caption: '子任务', + title: '子任务', + }, + }, + subtasknew_grid: { + columns: { + modulename: '所属模块', + storyname: '相关需求', + name: '任务名称', + type: '任务类型', + assignedto: '指派给', + left: '预计', + desc: '任务描述', + pri: '优先级', + }, + uiactions: { + }, + }, + subtasknewviewtoolbar_toolbar: { + deuiaction1: { + caption: '行编辑', + tip: '行编辑', + }, + deuiaction2: { + caption: '新建行', + tip: '新建行', + }, + deuiaction3: { + caption: '保存行', + tip: '保存行', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/task/task_en_US.ts b/app_Web/src/locale/lanres/entities/task/task_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..79d46a5364c53de8d222ddfa2eb02bebfaed5c55 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/task/task_en_US.ts @@ -0,0 +1,530 @@ + +export default { + fields: { + canceledby: '由谁取消', + left: '预计剩余', + openeddate: '创建日期', + color: '标题颜色', + id: '编号', + finishedby: '由谁完成', + finishedlist: '完成者列表', + realstarted: '实际开始', + closedby: '由谁关闭', + substatus: '子状态', + closedreason: '关闭原因', + lastediteddate: '最后修改日期', + assigneddate: '指派日期', + pri: '优先级', + lasteditedby: '最后修改', + status: '任务状态', + name: '任务名称', + closeddate: '关闭时间', + type: '任务类型', + assignedto: '指派给', + desc: '任务描述', + eststarted: '预计开始', + deadline: '截止日期', + deleted: '已删除', + mailto: '抄送给', + consumed: '总计消耗', + estimate: '最初预计', + openedby: '由谁创建', + canceleddate: '取消时间', + finisheddate: '实际完成', + modulename: '所属模块', + storyname: '相关需求', + projectname: '所属项目', + product: '产品', + storyversion: '需求版本', + productname: '产品', + parentname: '父任务', + project: '所属项目', + module: '所属模块', + story: '相关需求', + parent: '父任务', + frombug: '来源Bug', + duration: '持续时间', + }, + views: { + assigntaskview: { + caption: "指派任务", + title: '指派任务', + }, + maineditview: { + caption: "任务", + title: '任务', + }, + maingridview9_child: { + caption: "任务", + title: '任务', + }, + maininfoview9: { + caption: "任务", + title: '任务', + }, + gridview: { + caption: "任务", + title: '任务', + }, + maindashboardview: { + caption: "任务", + title: '任务', + }, + tasktypeganttview: { + caption: "任务", + title: '任务', + }, + pivottableview: { + caption: "任务", + title: '任务', + }, + gridview9_assignedtome: { + caption: "任务", + title: '任务', + }, + workinfoeditview9: { + caption: "工时信息", + title: '工时信息', + }, + maingridview: { + caption: "任务", + title: '任务', + }, + opentaskview: { + caption: "开始任务", + title: '开始任务', + }, + closepausecancelview: { + caption: "任务", + title: '任务', + }, + doneview: { + caption: "完成任务", + title: '完成任务', + }, + editview: { + caption: "任务", + title: '任务', + }, + maindetailview9: { + caption: "任务", + title: '任务', + }, + }, + main_form: { + details: { + group1: "task基本信息", + formpage1: "基本信息", + srfupdatedate: "最后修改日期", + srforikey: "", + srfkey: "编号", + srfmajortext: "任务名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + projectname: "所属项目", + project: "所属项目", + type: "任务类型", + module: "所属模块", + modulename: "所属模块", + formitem: "所有模块", + assignedto: "指派给", + formitem1: "多人任务", + story: "相关需求", + storyname: "相关需求", + desc: "任务描述", + formitem2: "附件", + deadline: "截止日期", + estsarted: "预计开始", + formitemex1: "日程规划", + mailto: "抄送给", + id: "编号", + }, + uiactions: { + }, + }, + maindetail_form: { + details: { + grouppanel3: "任务描述", + grouppanel2: "需求描述", + druipart1: "", + grouppanel1: "子任务", + group1: "task基本信息", + formpage1: "基本信息", + srfupdatedate: "最后修改日期", + srforikey: "", + srfkey: "编号", + srfmajortext: "任务名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + parent: "父任务", + story: "相关需求", + desc: "任务描述", + id: "编号", + }, + uiactions: { + }, + }, + assignform_form: { + details: { + druipart1: "", + grouppanel1: "分组面板", + group1: "任务基本信息", + formpage1: "基本信息", + srfupdatedate: "最后修改日期", + srforikey: "", + srfkey: "编号", + srfmajortext: "任务名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + assignedto: "指派给", + left: "预计剩余", + formitem: "备注", + id: "编号", + }, + uiactions: { + }, + }, + closepausecancelform_form: { + details: { + druipart1: "", + grouppanel1: "分组面板", + group1: "任务基本信息", + formpage1: "基本信息", + srfupdatedate: "最后修改日期", + srforikey: "", + srfkey: "编号", + srfmajortext: "任务名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + formitem: "备注", + id: "编号", + }, + uiactions: { + }, + }, + completeform_form: { + details: { + druipart1: "", + grouppanel1: "分组面板", + group1: "任务基本信息", + formpage1: "基本信息", + srfupdatedate: "最后修改日期", + srforikey: "", + srfkey: "编号", + srfmajortext: "任务名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + consumed: "之前消耗", + consumption: "本次消耗", + consumed2: "总计耗时", + assignedto: "指派给", + finisheddate: "实际完成", + formitem: "附件", + formitem1: "备注", + id: "编号", + }, + uiactions: { + }, + }, + mainedit_form: { + details: { + grouppanel6: "任务描述", + grouppanel7: "备注", + druipart1: "", + grouppanel2: "分组面板", + group1: "任务基本信息", + grouppanel1: "基本信息", + grouppanel4: "工时信息", + grouppanel5: "任务的一生", + grouppanel3: "分组面板", + formpage1: "基本信息", + srfupdatedate: "最后修改日期", + srforikey: "", + srfkey: "编号", + srfmajortext: "任务名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "任务名称", + desc: "任务描述", + desc1: "备注", + formitem: "附件", + projectname: "所属项目", + project: "所属项目", + modulename: "所属模块", + module: "所属模块", + storyname: "相关需求", + story: "相关需求", + parentname: "父任务", + parent: "父任务", + assignedto: "指派给", + type: "任务类型", + status: "任务状态", + eststarted: "预计开始", + deadline: "截止日期", + estimate: "最初预计", + consumed: "总计消耗", + left: "预计剩余", + openedby: "由谁创建", + realstarted: "实际开始", + finishedby: "由谁完成", + finisheddate: "实际完成", + canceledby: "由谁取消", + canceleddate: "取消时间", + closedby: "由谁关闭", + closedreason: "关闭原因", + closeddate: "关闭时间", + id: "编号", + }, + uiactions: { + }, + }, + maininfo_form: { + details: { + group1: "task基本信息", + formpage1: "基本信息", + grouppanel1: "分组面板", + grouppanel5: "分组面板", + grouppanel4: "分组面板", + grouppanel2: "分组面板", + grouppanel3: "分组面板", + formpage2: "任务的一生", + srfupdatedate: "最后修改日期", + srforikey: "", + srfkey: "编号", + srfmajortext: "任务名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "任务名称", + projectname: "所属项目", + modulename: "所属模块", + storyname: "相关需求", + assignedto: "指派给", + type: "任务类型", + status: "任务状态", + pri: "优先级", + mailto: "抄送给", + openedby: "由谁创建", + openeddate: "于", + finishedby: "由谁完成", + finisheddate: "于", + canceledby: "由谁取消", + canceleddate: "于", + closedby: "由谁关闭", + closeddate: "于", + closedreason: "关闭原因", + lasteditedby: "最后修改", + lastediteddate: "于", + id: "编号", + project: "所属项目", + }, + uiactions: { + }, + }, + workinfoform_form: { + details: { + group1: "工时信息", + formpage1: "基本信息", + srfupdatedate: "最后修改日期", + srforikey: "", + srfkey: "编号", + srfmajortext: "任务名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + estimate: "最初预计", + consumed: "总计消耗", + left: "预计剩余", + eststarted: "预计开始", + realstarted: "实际开始", + deadline: "截止日期", + id: "编号", + }, + uiactions: { + }, + }, + startform_form: { + details: { + druipart1: "", + grouppanel1: "分组面板", + group1: "任务基本信息", + formpage1: "基本信息", + srfupdatedate: "最后修改日期", + srforikey: "", + srfkey: "编号", + srfmajortext: "任务名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + realstarted: "实际开始", + consumed: "总计消耗", + left: "预计剩余", + formitem: "备注", + id: "编号", + }, + uiactions: { + }, + }, + main2_grid: { + columns: { + id: "编号", + pri: "P", + name: "任务名称", + status: "任务状态", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: "ID", + pri: "P", + name: "任务名称", + status: "任务状态", + assignedto: "指派给", + finishedby: "完成者", + estimate: "预计", + consumed: "消耗", + left: "剩余", + deadline: "截止日期", + uagridcolumn1: "操作", + }, + uiactions: { + starttask: "开始", + closetask: "关闭", + donetask: "完成", + mainedit: "编辑", + newsubtask: "子任务", + }, + }, + pivottable_grid: { + columns: { + id: "编号", + pri: "P", + name: "任务名称", + status: "任务状态", + type: "任务类型", + assignedto: "指派给", + estimate: "最初预计", + left: "预计剩余", + consumed: "总计消耗", + productname: "产品", + projectname: "所属项目", + storyname: "相关需求", + modulename: "所属模块", + parentname: "父任务", + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: "常规条件", + }, + uiactions: { + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, + maineditviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + gridviewtoolbar_toolbar: { + tbitem3: { + caption: "New", + tip: "New", + }, + tbitem4: { + caption: "Edit", + tip: "Edit {0}", + }, + tbitem6: { + caption: "Copy", + tip: "Copy {0}", + }, + tbitem7: { + caption: "-", + tip: "", + }, + tbitem8: { + caption: "Remove", + tip: "Remove {0}", + }, + tbitem9: { + caption: "-", + tip: "", + }, + tbitem13: { + caption: "Export", + tip: "Export {0} Data To Excel", + }, + tbitem10: { + caption: "-", + tip: "", + }, + tbitem16: { + caption: "其它", + tip: "其它", + }, + tbitem21: { + caption: "Export Data Model", + tip: "导出数据模型", + }, + tbitem23: { + caption: "数据导入", + tip: "数据导入", + }, + tbitem17: { + caption: "-", + tip: "", + }, + tbitem19: { + caption: "Filter", + tip: "Filter", + }, + tbitem18: { + caption: "Help", + tip: "Help", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/task/task_zh_CN.ts b/app_Web/src/locale/lanres/entities/task/task_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..10a03cc5f46fe597b9aef4d0eb50163b130fadf7 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/task/task_zh_CN.ts @@ -0,0 +1,529 @@ +export default { + fields: { + canceledby: '由谁取消', + left: '预计剩余', + openeddate: '创建日期', + color: '标题颜色', + id: '编号', + finishedby: '由谁完成', + finishedlist: '完成者列表', + realstarted: '实际开始', + closedby: '由谁关闭', + substatus: '子状态', + closedreason: '关闭原因', + lastediteddate: '最后修改日期', + assigneddate: '指派日期', + pri: '优先级', + lasteditedby: '最后修改', + status: '任务状态', + name: '任务名称', + closeddate: '关闭时间', + type: '任务类型', + assignedto: '指派给', + desc: '任务描述', + eststarted: '预计开始', + deadline: '截止日期', + deleted: '已删除', + mailto: '抄送给', + consumed: '总计消耗', + estimate: '最初预计', + openedby: '由谁创建', + canceleddate: '取消时间', + finisheddate: '实际完成', + modulename: '所属模块', + storyname: '相关需求', + projectname: '所属项目', + product: '产品', + storyversion: '需求版本', + productname: '产品', + parentname: '父任务', + project: '所属项目', + module: '所属模块', + story: '相关需求', + parent: '父任务', + frombug: '来源Bug', + duration: '持续时间', + }, + views: { + assigntaskview: { + caption: '指派任务', + title: '指派任务', + }, + maineditview: { + caption: '任务', + title: '任务', + }, + maingridview9_child: { + caption: '任务', + title: '任务', + }, + maininfoview9: { + caption: '任务', + title: '任务', + }, + gridview: { + caption: '任务', + title: '任务', + }, + maindashboardview: { + caption: '任务', + title: '任务', + }, + tasktypeganttview: { + caption: '任务', + title: '任务', + }, + pivottableview: { + caption: '任务', + title: '任务', + }, + gridview9_assignedtome: { + caption: '任务', + title: '任务', + }, + workinfoeditview9: { + caption: '工时信息', + title: '工时信息', + }, + maingridview: { + caption: '任务', + title: '任务', + }, + opentaskview: { + caption: '开始任务', + title: '开始任务', + }, + closepausecancelview: { + caption: '任务', + title: '任务', + }, + doneview: { + caption: '完成任务', + title: '完成任务', + }, + editview: { + caption: '任务', + title: '任务', + }, + maindetailview9: { + caption: '任务', + title: '任务', + }, + }, + main_form: { + details: { + group1: 'task基本信息', + formpage1: '基本信息', + srfupdatedate: '最后修改日期', + srforikey: '', + srfkey: '编号', + srfmajortext: '任务名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + projectname: '所属项目', + project: '所属项目', + type: '任务类型', + module: '所属模块', + modulename: '所属模块', + formitem: '所有模块', + assignedto: '指派给', + formitem1: '多人任务', + story: '相关需求', + storyname: '相关需求', + desc: '任务描述', + formitem2: '附件', + deadline: '截止日期', + estsarted: '预计开始', + formitemex1: '日程规划', + mailto: '抄送给', + id: '编号', + }, + uiactions: { + }, + }, + maindetail_form: { + details: { + grouppanel3: '任务描述', + grouppanel2: '需求描述', + druipart1: '', + grouppanel1: '子任务', + group1: 'task基本信息', + formpage1: '基本信息', + srfupdatedate: '最后修改日期', + srforikey: '', + srfkey: '编号', + srfmajortext: '任务名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + parent: '父任务', + story: '相关需求', + desc: '任务描述', + id: '编号', + }, + uiactions: { + }, + }, + assignform_form: { + details: { + druipart1: '', + grouppanel1: '分组面板', + group1: '任务基本信息', + formpage1: '基本信息', + srfupdatedate: '最后修改日期', + srforikey: '', + srfkey: '编号', + srfmajortext: '任务名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + assignedto: '指派给', + left: '预计剩余', + formitem: '备注', + id: '编号', + }, + uiactions: { + }, + }, + closepausecancelform_form: { + details: { + druipart1: '', + grouppanel1: '分组面板', + group1: '任务基本信息', + formpage1: '基本信息', + srfupdatedate: '最后修改日期', + srforikey: '', + srfkey: '编号', + srfmajortext: '任务名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + formitem: '备注', + id: '编号', + }, + uiactions: { + }, + }, + completeform_form: { + details: { + druipart1: '', + grouppanel1: '分组面板', + group1: '任务基本信息', + formpage1: '基本信息', + srfupdatedate: '最后修改日期', + srforikey: '', + srfkey: '编号', + srfmajortext: '任务名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + consumed: '之前消耗', + consumption: '本次消耗', + consumed2: '总计耗时', + assignedto: '指派给', + finisheddate: '实际完成', + formitem: '附件', + formitem1: '备注', + id: '编号', + }, + uiactions: { + }, + }, + mainedit_form: { + details: { + grouppanel6: '任务描述', + grouppanel7: '备注', + druipart1: '', + grouppanel2: '分组面板', + group1: '任务基本信息', + grouppanel1: '基本信息', + grouppanel4: '工时信息', + grouppanel5: '任务的一生', + grouppanel3: '分组面板', + formpage1: '基本信息', + srfupdatedate: '最后修改日期', + srforikey: '', + srfkey: '编号', + srfmajortext: '任务名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '任务名称', + desc: '任务描述', + desc1: '备注', + formitem: '附件', + projectname: '所属项目', + project: '所属项目', + modulename: '所属模块', + module: '所属模块', + storyname: '相关需求', + story: '相关需求', + parentname: '父任务', + parent: '父任务', + assignedto: '指派给', + type: '任务类型', + status: '任务状态', + eststarted: '预计开始', + deadline: '截止日期', + estimate: '最初预计', + consumed: '总计消耗', + left: '预计剩余', + openedby: '由谁创建', + realstarted: '实际开始', + finishedby: '由谁完成', + finisheddate: '实际完成', + canceledby: '由谁取消', + canceleddate: '取消时间', + closedby: '由谁关闭', + closedreason: '关闭原因', + closeddate: '关闭时间', + id: '编号', + }, + uiactions: { + }, + }, + maininfo_form: { + details: { + group1: 'task基本信息', + formpage1: '基本信息', + grouppanel1: '分组面板', + grouppanel5: '分组面板', + grouppanel4: '分组面板', + grouppanel2: '分组面板', + grouppanel3: '分组面板', + formpage2: '任务的一生', + srfupdatedate: '最后修改日期', + srforikey: '', + srfkey: '编号', + srfmajortext: '任务名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '任务名称', + projectname: '所属项目', + modulename: '所属模块', + storyname: '相关需求', + assignedto: '指派给', + type: '任务类型', + status: '任务状态', + pri: '优先级', + mailto: '抄送给', + openedby: '由谁创建', + openeddate: '于', + finishedby: '由谁完成', + finisheddate: '于', + canceledby: '由谁取消', + canceleddate: '于', + closedby: '由谁关闭', + closeddate: '于', + closedreason: '关闭原因', + lasteditedby: '最后修改', + lastediteddate: '于', + id: '编号', + project: '所属项目', + }, + uiactions: { + }, + }, + workinfoform_form: { + details: { + group1: '工时信息', + formpage1: '基本信息', + srfupdatedate: '最后修改日期', + srforikey: '', + srfkey: '编号', + srfmajortext: '任务名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + estimate: '最初预计', + consumed: '总计消耗', + left: '预计剩余', + eststarted: '预计开始', + realstarted: '实际开始', + deadline: '截止日期', + id: '编号', + }, + uiactions: { + }, + }, + startform_form: { + details: { + druipart1: '', + grouppanel1: '分组面板', + group1: '任务基本信息', + formpage1: '基本信息', + srfupdatedate: '最后修改日期', + srforikey: '', + srfkey: '编号', + srfmajortext: '任务名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + realstarted: '实际开始', + consumed: '总计消耗', + left: '预计剩余', + formitem: '备注', + id: '编号', + }, + uiactions: { + }, + }, + main2_grid: { + columns: { + id: '编号', + pri: 'P', + name: '任务名称', + status: '任务状态', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: 'ID', + pri: 'P', + name: '任务名称', + status: '任务状态', + assignedto: '指派给', + finishedby: '完成者', + estimate: '预计', + consumed: '消耗', + left: '剩余', + deadline: '截止日期', + uagridcolumn1: '操作', + }, + uiactions: { + starttask: '开始', + closetask: '关闭', + donetask: '完成', + mainedit: '编辑', + newsubtask: '子任务', + }, + }, + pivottable_grid: { + columns: { + id: '编号', + pri: 'P', + name: '任务名称', + status: '任务状态', + type: '任务类型', + assignedto: '指派给', + estimate: '最初预计', + left: '预计剩余', + consumed: '总计消耗', + productname: '产品', + projectname: '所属项目', + storyname: '相关需求', + modulename: '所属模块', + parentname: '父任务', + }, + uiactions: { + }, + }, + default_searchform: { + details: { + formpage1: '常规条件', + }, + uiactions: { + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, + maineditviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + gridviewtoolbar_toolbar: { + tbitem3: { + caption: '新建', + tip: '新建', + }, + tbitem4: { + caption: '编辑', + tip: '编辑', + }, + tbitem6: { + caption: '拷贝', + tip: '拷贝', + }, + tbitem7: { + caption: '-', + tip: '', + }, + tbitem8: { + caption: '删除', + tip: '删除', + }, + tbitem9: { + caption: '-', + tip: '', + }, + tbitem13: { + caption: '导出', + tip: '导出', + }, + tbitem10: { + caption: '-', + tip: '', + }, + tbitem16: { + caption: '其它', + tip: '其它', + }, + tbitem21: { + caption: '导出数据模型', + tip: '导出数据模型', + }, + tbitem23: { + caption: '数据导入', + tip: '数据导入', + }, + tbitem17: { + caption: '-', + tip: '', + }, + tbitem19: { + caption: '过滤', + tip: '过滤', + }, + tbitem18: { + caption: '帮助', + tip: '帮助', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/test-task/test-task_en_US.ts b/app_Web/src/locale/lanres/entities/test-task/test-task_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..bd3d2d2028a6569af7c282dc1aa253e9c5e865ac --- /dev/null +++ b/app_Web/src/locale/lanres/entities/test-task/test-task_en_US.ts @@ -0,0 +1,164 @@ + +export default { + fields: { + end: '结束日期', + begin: '开始日期', + mailto: '抄送给', + pri: '优先级', + substatus: '子状态', + report: 'report', + desc: '描述', + id: '编号', + status: '当前状态', + owner: '负责人', + deleted: '已删除', + auto: 'auto', + name: '名称', + product: '所属产品', + build: '版本', + project: '所属项目', + }, + views: { + gridview9_untested: { + caption: "测试版本", + title: '测试版本', + }, + editview: { + caption: "测试版本", + title: '测试版本', + }, + gridview: { + caption: "测试版本", + title: '测试版本', + }, + }, + main_form: { + details: { + group1: "testtask基本信息", + formpage1: "基本信息", + group2: "操作信息", + formpage2: "其它", + srforikey: "", + srfkey: "编号", + srfmajortext: "名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "名称", + id: "编号", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: "ID", + product: "所属产品", + name: "名称", + project: "所属项目", + build: "版本", + begin: "开始日期", + end: "结束日期", + }, + uiactions: { + }, + }, + main2_grid: { + columns: { + id: "ID", + product: "所属产品", + name: "名称", + project: "所属项目", + build: "版本", + begin: "开始日期", + end: "结束日期", + }, + uiactions: { + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: "Save", + tip: "Save", + }, + tbitem4: { + caption: "Save And New", + tip: "Save And New", + }, + tbitem5: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + tbitem6: { + caption: "-", + tip: "", + }, + tbitem7: { + caption: "Remove And Close", + tip: "Remove And Close Window", + }, + tbitem8: { + caption: "-", + tip: "", + }, + tbitem12: { + caption: "New", + tip: "New", + }, + tbitem13: { + caption: "-", + tip: "", + }, + tbitem14: { + caption: "Copy", + tip: "Copy {0}", + }, + tbitem16: { + caption: "-", + tip: "", + }, + tbitem23: { + caption: "第一个记录", + tip: "第一个记录", + }, + tbitem24: { + caption: "上一个记录", + tip: "上一个记录", + }, + tbitem25: { + caption: "下一个记录", + tip: "下一个记录", + }, + tbitem26: { + caption: "最后一个记录", + tip: "最后一个记录", + }, + tbitem21: { + caption: "-", + tip: "", + }, + tbitem22: { + caption: "Help", + tip: "Help", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/test-task/test-task_zh_CN.ts b/app_Web/src/locale/lanres/entities/test-task/test-task_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..901edb6f82c2fd3319a19534b11168fdc0fd7554 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/test-task/test-task_zh_CN.ts @@ -0,0 +1,163 @@ +export default { + fields: { + end: '结束日期', + begin: '开始日期', + mailto: '抄送给', + pri: '优先级', + substatus: '子状态', + report: 'report', + desc: '描述', + id: '编号', + status: '当前状态', + owner: '负责人', + deleted: '已删除', + auto: 'auto', + name: '名称', + product: '所属产品', + build: '版本', + project: '所属项目', + }, + views: { + gridview9_untested: { + caption: '测试版本', + title: '测试版本', + }, + editview: { + caption: '测试版本', + title: '测试版本', + }, + gridview: { + caption: '测试版本', + title: '测试版本', + }, + }, + main_form: { + details: { + group1: 'testtask基本信息', + formpage1: '基本信息', + group2: '操作信息', + formpage2: '其它', + srforikey: '', + srfkey: '编号', + srfmajortext: '名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '名称', + id: '编号', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: 'ID', + product: '所属产品', + name: '名称', + project: '所属项目', + build: '版本', + begin: '开始日期', + end: '结束日期', + }, + uiactions: { + }, + }, + main2_grid: { + columns: { + id: 'ID', + product: '所属产品', + name: '名称', + project: '所属项目', + build: '版本', + begin: '开始日期', + end: '结束日期', + }, + uiactions: { + }, + }, + gridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + editviewtoolbar_toolbar: { + tbitem3: { + caption: '保存', + tip: '保存', + }, + tbitem4: { + caption: '保存并新建', + tip: '保存并新建', + }, + tbitem5: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + tbitem6: { + caption: '-', + tip: '', + }, + tbitem7: { + caption: '删除', + tip: '删除', + }, + tbitem8: { + caption: '-', + tip: '', + }, + tbitem12: { + caption: '新建', + tip: '新建', + }, + tbitem13: { + caption: '-', + tip: '', + }, + tbitem14: { + caption: '拷贝', + tip: '拷贝', + }, + tbitem16: { + caption: '-', + tip: '', + }, + tbitem23: { + caption: '第一个记录', + tip: '第一个记录', + }, + tbitem24: { + caption: '上一个记录', + tip: '上一个记录', + }, + tbitem25: { + caption: '下一个记录', + tip: '下一个记录', + }, + tbitem26: { + caption: '最后一个记录', + tip: '最后一个记录', + }, + tbitem21: { + caption: '-', + tip: '', + }, + tbitem22: { + caption: '帮助', + tip: '帮助', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/user/user_en_US.ts b/app_Web/src/locale/lanres/entities/user/user_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..2ff70e837b002406561bd862438f8c1403be4e05 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/user/user_en_US.ts @@ -0,0 +1,137 @@ + +export default { + fields: { + password: '密码', + address: '通讯地址', + weixin: '微信', + dingding: '钉钉', + fails: 'fails', + slack: 'slack', + ranzhi: 'ranzhi', + account: '账户', + locked: 'locked', + avatar: 'avatar', + scorelevel: 'scoreLevel', + realname: '真实姓名', + zipcode: 'zipcode', + dept: '所属部门', + commiter: 'commiter', + role: '职位', + deleted: '逻辑删除标志', + last: '最后登录', + clientstatus: 'clientStatus', + skype: 'skype', + whatsapp: 'whatsapp', + score: 'score', + gender: '性别', + mobile: '手机', + clientlang: 'clientLang', + visits: '访问次数', + join: '入职日期', + email: '邮箱', + ip: 'ip', + birthday: 'birthday', + nickname: 'nickname', + phone: '电话', + id: 'ID', + qq: 'QQ', + }, + views: { + pickupview: { + caption: "用户", + title: '用户', + }, + editview: { + caption: "用户信息", + title: '用户信息', + }, + pickupgridview: { + caption: "用户", + title: '用户', + }, + maingridview: { + caption: "用户", + title: '用户', + }, + }, + main_form: { + details: { + group1: "基本信息", + grouppanel1: "账号信息", + grouppanel2: "联系信息", + grouppanel3: "用户信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "ID", + srfmajortext: "真实姓名", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + realname: "真实姓名", + join: "入职日期", + dept: "所属部门", + role: "职位", + gender: "性别", + account: "账户", + email: "邮箱", + password: "密码", + mobile: "手机", + phone: "电话", + qq: "QQ", + dingding: "钉钉", + weixin: "微信", + address: "通讯地址", + id: "ID", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: "ID", + realname: "真实姓名", + account: "账户", + role: "职位", + email: "邮箱", + gender: "性别", + phone: "电话", + qq: "QQ", + address: "通讯地址", + last: "最后登录", + visits: "访问次数", + uagridcolumn1: "操作", + }, + uiactions: { + edit: "Edit", + remove: "Remove", + }, + }, + default_searchform: { + details: { + formpage1: "常规条件", + }, + uiactions: { + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/entities/user/user_zh_CN.ts b/app_Web/src/locale/lanres/entities/user/user_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..e3e6faca56eab930d74ae10a1c1181e088025e75 --- /dev/null +++ b/app_Web/src/locale/lanres/entities/user/user_zh_CN.ts @@ -0,0 +1,136 @@ +export default { + fields: { + password: '密码', + address: '通讯地址', + weixin: '微信', + dingding: '钉钉', + fails: 'fails', + slack: 'slack', + ranzhi: 'ranzhi', + account: '账户', + locked: 'locked', + avatar: 'avatar', + scorelevel: 'scoreLevel', + realname: '真实姓名', + zipcode: 'zipcode', + dept: '所属部门', + commiter: 'commiter', + role: '职位', + deleted: '逻辑删除标志', + last: '最后登录', + clientstatus: 'clientStatus', + skype: 'skype', + whatsapp: 'whatsapp', + score: 'score', + gender: '性别', + mobile: '手机', + clientlang: 'clientLang', + visits: '访问次数', + join: '入职日期', + email: '邮箱', + ip: 'ip', + birthday: 'birthday', + nickname: 'nickname', + phone: '电话', + id: 'ID', + qq: 'QQ', + }, + views: { + pickupview: { + caption: '用户', + title: '用户', + }, + editview: { + caption: '用户信息', + title: '用户信息', + }, + pickupgridview: { + caption: '用户', + title: '用户', + }, + maingridview: { + caption: '用户', + title: '用户', + }, + }, + main_form: { + details: { + group1: '基本信息', + grouppanel1: '账号信息', + grouppanel2: '联系信息', + grouppanel3: '用户信息', + formpage1: '基本信息', + srforikey: '', + srfkey: 'ID', + srfmajortext: '真实姓名', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + realname: '真实姓名', + join: '入职日期', + dept: '所属部门', + role: '职位', + gender: '性别', + account: '账户', + email: '邮箱', + password: '密码', + mobile: '手机', + phone: '电话', + qq: 'QQ', + dingding: '钉钉', + weixin: '微信', + address: '通讯地址', + id: 'ID', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: 'ID', + realname: '真实姓名', + account: '账户', + role: '职位', + email: '邮箱', + gender: '性别', + phone: '电话', + qq: 'QQ', + address: '通讯地址', + last: '最后登录', + visits: '访问次数', + uagridcolumn1: '操作', + }, + uiactions: { + edit: '编辑', + remove: '删除', + }, + }, + default_searchform: { + details: { + formpage1: '常规条件', + }, + uiactions: { + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/group/group_en_US.ts b/app_Web/src/locale/lanres/group/group_en_US.ts new file mode 100644 index 0000000000000000000000000000000000000000..736af8a95a700c3b6ee876abbd50117e360abd43 --- /dev/null +++ b/app_Web/src/locale/lanres/group/group_en_US.ts @@ -0,0 +1,70 @@ + +export default { + fields: { + acl: 'acl', + desc: '分组描述', + id: 'ID', + name: '分组名称', + role: 'role', + }, + views: { + maingridview: { + caption: "群组", + title: '群组', + }, + editview: { + caption: "分组信息", + title: '分组信息', + }, + }, + main_form: { + details: { + group1: "基本信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "ID", + srfmajortext: "分组名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "分组名称", + desc: "分组描述", + id: "ID", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: "ID", + name: "分组名称", + desc: "分组描述", + uagridcolumn1: "操作", + }, + uiactions: { + edit: "Edit", + remove: "Remove", + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/group/group_zh_CN.ts b/app_Web/src/locale/lanres/group/group_zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..a2a4ac9239a48f2180c3a1f72913c9d5ace51f8d --- /dev/null +++ b/app_Web/src/locale/lanres/group/group_zh_CN.ts @@ -0,0 +1,69 @@ +export default { + fields: { + acl: 'acl', + desc: '分组描述', + id: 'ID', + name: '分组名称', + role: 'role', + }, + views: { + maingridview: { + caption: '群组', + title: '群组', + }, + editview: { + caption: '分组信息', + title: '分组信息', + }, + }, + main_form: { + details: { + group1: '基本信息', + formpage1: '基本信息', + srforikey: '', + srfkey: 'ID', + srfmajortext: '分组名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '分组名称', + desc: '分组描述', + id: 'ID', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: 'ID', + name: '分组名称', + desc: '分组描述', + uagridcolumn1: '操作', + }, + uiactions: { + edit: '编辑', + remove: '删除', + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, +}; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/product-module/product-module_en_US.ts b/app_Web/src/locale/lanres/product-module/product-module_en_US.ts index cddf9df9d3a7c4964af7b60211e05672c7986e4c..351640f5fbfc8f0fd7a8acb96eb2a20ce8ba4c25 100644 --- a/app_Web/src/locale/lanres/product-module/product-module_en_US.ts +++ b/app_Web/src/locale/lanres/product-module/product-module_en_US.ts @@ -80,27 +80,27 @@ export default { tip: "Save And Close Window", }, }, - bugexp_treeview: { + exp_treeview: { nodes: { + all: '所有模块', + branch: '平台', root: '默认根节点', - all: '全部', }, uiactions: { }, }, - exp_treeview: { + taskexp_treeview: { nodes: { all: '所有模块', - branch: '平台', root: '默认根节点', }, uiactions: { }, }, - taskexp_treeview: { + bugexp_treeview: { nodes: { - all: '所有模块', root: '默认根节点', + all: '全部', }, uiactions: { }, diff --git a/app_Web/src/locale/lanres/product-module/product-module_zh_CN.ts b/app_Web/src/locale/lanres/product-module/product-module_zh_CN.ts index 679d2f3c9c079943269aac36f256422fb5c258ed..98d167066f9ee7958a19a7afdcbfbccfae3c2af6 100644 --- a/app_Web/src/locale/lanres/product-module/product-module_zh_CN.ts +++ b/app_Web/src/locale/lanres/product-module/product-module_zh_CN.ts @@ -79,27 +79,27 @@ export default { tip: '保存并关闭', }, }, - bugexp_treeview: { + exp_treeview: { nodes: { + all: '所有模块', + branch: '平台', root: '默认根节点', - all: '全部', }, uiactions: { }, }, - exp_treeview: { + taskexp_treeview: { nodes: { all: '所有模块', - branch: '平台', root: '默认根节点', }, uiactions: { }, }, - taskexp_treeview: { + bugexp_treeview: { nodes: { - all: '所有模块', root: '默认根节点', + all: '全部', }, uiactions: { }, diff --git a/app_Web/src/locale/lanres/product/product_en_US.ts b/app_Web/src/locale/lanres/product/product_en_US.ts index fee164ff766b27ff1fae6889cd1425e430c97f03..71450d7cfe1a1549e5b27f9dd0c7f76f68bb5ad9 100644 --- a/app_Web/src/locale/lanres/product/product_en_US.ts +++ b/app_Web/src/locale/lanres/product/product_en_US.ts @@ -64,10 +64,18 @@ export default { }, gridview: { caption: "产品", + title: '产品', + }, + pickupview: { + caption: "产品", title: '产品', }, leftsidebarlistview: { caption: "产品", + title: '产品', + }, + pickupgridview: { + caption: "产品", title: '产品', }, dashboardinfomainview9: { @@ -145,7 +153,7 @@ export default { uiactions: { }, }, - test_grid: { + main_grid: { columns: { name: "产品名称", code: "产品代号", @@ -156,7 +164,7 @@ export default { uiactions: { }, }, - main_grid: { + test_grid: { columns: { name: "产品名称", code: "产品代号", diff --git a/app_Web/src/locale/lanres/product/product_zh_CN.ts b/app_Web/src/locale/lanres/product/product_zh_CN.ts index d983f07d7263078f50ccbdf096b28b2e1631ba36..691d6b9de64c6b17bfe98ced05e92936f22a41a4 100644 --- a/app_Web/src/locale/lanres/product/product_zh_CN.ts +++ b/app_Web/src/locale/lanres/product/product_zh_CN.ts @@ -63,10 +63,18 @@ export default { }, gridview: { caption: '产品', + title: '产品', + }, + pickupview: { + caption: '产品', title: '产品', }, leftsidebarlistview: { caption: '产品', + title: '产品', + }, + pickupgridview: { + caption: '产品', title: '产品', }, dashboardinfomainview9: { @@ -144,7 +152,7 @@ export default { uiactions: { }, }, - test_grid: { + main_grid: { columns: { name: '产品名称', code: '产品代号', @@ -155,7 +163,7 @@ export default { uiactions: { }, }, - main_grid: { + test_grid: { columns: { name: '产品名称', code: '产品代号', diff --git a/app_Web/src/locale/lanres/project/project_en_US.ts b/app_Web/src/locale/lanres/project/project_en_US.ts index dd7017306f9795f12c34f8b9103bb1d35a33a1b2..1b291d16c57518480e3d514de4d600b6f7b20e16 100644 --- a/app_Web/src/locale/lanres/project/project_en_US.ts +++ b/app_Web/src/locale/lanres/project/project_en_US.ts @@ -45,10 +45,18 @@ export default { }, listexpview: { caption: "项目", + title: '项目', + }, + pickupgridview: { + caption: "项目", title: '项目', }, curproductgridview: { caption: "项目", + title: '项目', + }, + pickupview: { + caption: "项目", title: '项目', }, leftsidebarlistview: { @@ -171,6 +179,13 @@ export default { uiactions: { }, }, + default_searchform: { + details: { + formpage1: "常规条件", + }, + uiactions: { + }, + }, curproductgridviewtoolbar_toolbar: { deuiaction2: { caption: "刷新", diff --git a/app_Web/src/locale/lanres/project/project_zh_CN.ts b/app_Web/src/locale/lanres/project/project_zh_CN.ts index 95515ee74cd34b43ffffc22358e3a624419e2435..be6bad89b7d7d0001314148da6e50d317be73979 100644 --- a/app_Web/src/locale/lanres/project/project_zh_CN.ts +++ b/app_Web/src/locale/lanres/project/project_zh_CN.ts @@ -44,10 +44,18 @@ export default { }, listexpview: { caption: '项目', + title: '项目', + }, + pickupgridview: { + caption: '项目', title: '项目', }, curproductgridview: { caption: '项目', + title: '项目', + }, + pickupview: { + caption: '项目', title: '项目', }, leftsidebarlistview: { @@ -170,6 +178,13 @@ export default { uiactions: { }, }, + default_searchform: { + details: { + formpage1: '常规条件', + }, + uiactions: { + }, + }, curproductgridviewtoolbar_toolbar: { deuiaction2: { caption: '刷新', diff --git a/app_Web/src/locale/lanres/release/release_zh_CN.ts b/app_Web/src/locale/lanres/release/release_zh_CN.ts index 48591a27dee15d1992ea16c95c30328a17585aad..b9e649965b46b8ea10926abf3c0a83a6405fa5bf 100644 --- a/app_Web/src/locale/lanres/release/release_zh_CN.ts +++ b/app_Web/src/locale/lanres/release/release_zh_CN.ts @@ -92,8 +92,8 @@ export default { tip: '', }, tbitem7: { - caption: '删除并关闭', - tip: '删除并关闭', + caption: '删除', + tip: '删除', }, tbitem8: { caption: '-', diff --git a/app_Web/src/locale/lanres/story/story_en_US.ts b/app_Web/src/locale/lanres/story/story_en_US.ts index dc7bf3145c7488caf0307a4804b581dd97c6db39..cb87363418f922c3d2b8c10ae82e7142c45ad007 100644 --- a/app_Web/src/locale/lanres/story/story_en_US.ts +++ b/app_Web/src/locale/lanres/story/story_en_US.ts @@ -102,6 +102,37 @@ export default { caption: "需求", title: '需求', }, + editview_storychange: { + caption: "变更", + title: '变更', + }, + }, + storyspec_editmode_form: { + details: { + grouppanel1: "分组面板", + druipart1: "", + grouppanel2: "分组面板", + group1: "需求描述信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "编号", + srfmajortext: "需求名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + version: "版本#", + reviewedby: "由谁评审", + notreview: "不需要评审", + title: "需求名称", + verify: "验收标准", + spec: "需求描述", + comment: "备注", + files: "附件", + id: "编号", + }, + uiactions: { + }, }, main_newmode_form: { details: { @@ -134,6 +165,29 @@ export default { uiactions: { }, }, + storyspec_form: { + details: { + grouppanel1: "需求描述", + grouppanel2: "验收标准", + group1: "需求描述信息", + druipart1: "", + formpage1: "基本信息", + srforikey: "", + srfkey: "编号", + srfmajortext: "需求名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + parent: "父需求", + version: "版本#", + spec: "需求描述", + verify: "验收标准", + id: "编号", + }, + uiactions: { + }, + }, main_editmode_form: { details: { group1: "story基本信息", @@ -173,27 +227,6 @@ export default { uiactions: { }, }, - storyspec_form: { - details: { - group1: "需求描述信息", - druipart1: "", - formpage1: "基本信息", - srforikey: "", - srfkey: "编号", - srfmajortext: "需求名称", - srftempmode: "", - srfuf: "", - srfdeid: "", - srfsourcekey: "", - parent: "父需求", - version: "版本#", - spec: "需求描述", - verify: "验收标准", - id: "编号", - }, - uiactions: { - }, - }, main_form: { details: { group1: "story基本信息", @@ -239,70 +272,70 @@ export default { uiactions: { }, }, - main_plansub_grid: { + main3_grid: { columns: { id: "ID", pri: "P", title: "需求名称", - modulename: "所属模块名称", + assignedto: "指派给", + estimate: "预计工时", + status: "当前状态", + uagridcolumn1: "操作", }, uiactions: { + changestorydetail: "变更", + closestory: "关闭", + openbaseinfoeditview: "编辑", + opencasecreateview: "建用例", }, }, - pickupgrid_grid: { + main_grid: { columns: { id: "ID", pri: "P", title: "需求名称", modulename: "所属模块名称", + uagridcolumn1: "操作", }, uiactions: { + changestorydetail: "变更", + closestory: "关闭", + openbaseinfoeditview: "编辑", + opencasecreateview: "建用例", }, }, - main3_grid: { + main2_grid: { columns: { id: "ID", pri: "P", title: "需求名称", - assignedto: "指派给", - estimate: "预计工时", - status: "当前状态", uagridcolumn1: "操作", }, uiactions: { - changestorydetail: "变更需求", + changestorydetail: "变更", closestory: "关闭", openbaseinfoeditview: "编辑", opencasecreateview: "建用例", }, }, - main_grid: { + pickupgrid_grid: { columns: { id: "ID", pri: "P", title: "需求名称", modulename: "所属模块名称", - uagridcolumn1: "操作", }, uiactions: { - changestorydetail: "变更需求", - closestory: "关闭", - openbaseinfoeditview: "编辑", - opencasecreateview: "建用例", }, }, - main2_grid: { + main_plansub_grid: { columns: { id: "ID", pri: "P", title: "需求名称", - uagridcolumn1: "操作", + modulename: "所属模块名称", }, uiactions: { - changestorydetail: "变更需求", - closestory: "关闭", - openbaseinfoeditview: "编辑", - opencasecreateview: "建用例", }, }, main9_grid: { @@ -321,33 +354,7 @@ export default { uiactions: { }, }, - plansubgridviewtoolbar_toolbar: { - deuiaction3_planrelationstory: { - caption: "关联需求", - tip: "关联需求", - }, - seperator2: { - caption: "", - tip: "", - }, - deuiaction1: { - caption: "New", - tip: "New", - }, - deuiaction4: { - caption: "Remove", - tip: "Remove {0}", - }, - seperator1: { - caption: "", - tip: "", - }, - deuiaction2: { - caption: "刷新", - tip: "刷新", - }, - }, - plansubeditviewtoolbar_toolbar: { + editview_storychangetoolbar_toolbar: { deuiaction1: { caption: "Save And Close", tip: "Save And Close Window", @@ -431,4 +438,36 @@ export default { tip: "Help", }, }, + plansubgridviewtoolbar_toolbar: { + deuiaction3_planrelationstory: { + caption: "关联需求", + tip: "关联需求", + }, + seperator2: { + caption: "", + tip: "", + }, + deuiaction1: { + caption: "New", + tip: "New", + }, + deuiaction4: { + caption: "Remove", + tip: "Remove {0}", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + plansubeditviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, }; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/story/story_zh_CN.ts b/app_Web/src/locale/lanres/story/story_zh_CN.ts index 797c1b3b656230375e0fc876c1ac8d76cd3aa6b9..10b0c283e6110f532e7607091ca99c630ed7fb19 100644 --- a/app_Web/src/locale/lanres/story/story_zh_CN.ts +++ b/app_Web/src/locale/lanres/story/story_zh_CN.ts @@ -101,6 +101,37 @@ export default { caption: '需求', title: '需求', }, + editview_storychange: { + caption: '变更', + title: '变更', + }, + }, + storyspec_editmode_form: { + details: { + grouppanel1: '分组面板', + druipart1: '', + grouppanel2: '分组面板', + group1: '需求描述信息', + formpage1: '基本信息', + srforikey: '', + srfkey: '编号', + srfmajortext: '需求名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + version: '版本#', + reviewedby: '由谁评审', + notreview: '不需要评审', + title: '需求名称', + verify: '验收标准', + spec: '需求描述', + comment: '备注', + files: '附件', + id: '编号', + }, + uiactions: { + }, }, main_newmode_form: { details: { @@ -133,6 +164,29 @@ export default { uiactions: { }, }, + storyspec_form: { + details: { + grouppanel1: '需求描述', + grouppanel2: '验收标准', + group1: '需求描述信息', + druipart1: '', + formpage1: '基本信息', + srforikey: '', + srfkey: '编号', + srfmajortext: '需求名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + parent: '父需求', + version: '版本#', + spec: '需求描述', + verify: '验收标准', + id: '编号', + }, + uiactions: { + }, + }, main_editmode_form: { details: { group1: 'story基本信息', @@ -172,27 +226,6 @@ export default { uiactions: { }, }, - storyspec_form: { - details: { - group1: '需求描述信息', - druipart1: '', - formpage1: '基本信息', - srforikey: '', - srfkey: '编号', - srfmajortext: '需求名称', - srftempmode: '', - srfuf: '', - srfdeid: '', - srfsourcekey: '', - parent: '父需求', - version: '版本#', - spec: '需求描述', - verify: '验收标准', - id: '编号', - }, - uiactions: { - }, - }, main_form: { details: { group1: 'story基本信息', @@ -238,70 +271,70 @@ export default { uiactions: { }, }, - main_plansub_grid: { + main3_grid: { columns: { id: 'ID', pri: 'P', title: '需求名称', - modulename: '所属模块名称', + assignedto: '指派给', + estimate: '预计工时', + status: '当前状态', + uagridcolumn1: '操作', }, uiactions: { + changestorydetail: '变更', + closestory: '关闭', + openbaseinfoeditview: '编辑', + opencasecreateview: '建用例', }, }, - pickupgrid_grid: { + main_grid: { columns: { id: 'ID', pri: 'P', title: '需求名称', modulename: '所属模块名称', + uagridcolumn1: '操作', }, uiactions: { + changestorydetail: '变更', + closestory: '关闭', + openbaseinfoeditview: '编辑', + opencasecreateview: '建用例', }, }, - main3_grid: { + main2_grid: { columns: { id: 'ID', pri: 'P', title: '需求名称', - assignedto: '指派给', - estimate: '预计工时', - status: '当前状态', uagridcolumn1: '操作', }, uiactions: { - changestorydetail: '变更需求', + changestorydetail: '变更', closestory: '关闭', openbaseinfoeditview: '编辑', opencasecreateview: '建用例', }, }, - main_grid: { + pickupgrid_grid: { columns: { id: 'ID', pri: 'P', title: '需求名称', modulename: '所属模块名称', - uagridcolumn1: '操作', }, uiactions: { - changestorydetail: '变更需求', - closestory: '关闭', - openbaseinfoeditview: '编辑', - opencasecreateview: '建用例', }, }, - main2_grid: { + main_plansub_grid: { columns: { id: 'ID', pri: 'P', title: '需求名称', - uagridcolumn1: '操作', + modulename: '所属模块名称', }, uiactions: { - changestorydetail: '变更需求', - closestory: '关闭', - openbaseinfoeditview: '编辑', - opencasecreateview: '建用例', }, }, main9_grid: { @@ -320,33 +353,7 @@ export default { uiactions: { }, }, - plansubgridviewtoolbar_toolbar: { - deuiaction3_planrelationstory: { - caption: '关联需求', - tip: '关联需求', - }, - seperator2: { - caption: '', - tip: '', - }, - deuiaction1: { - caption: '新建', - tip: '新建', - }, - deuiaction4: { - caption: '删除', - tip: '删除', - }, - seperator1: { - caption: '', - tip: '', - }, - deuiaction2: { - caption: '刷新', - tip: '刷新', - }, - }, - plansubeditviewtoolbar_toolbar: { + editview_storychangetoolbar_toolbar: { deuiaction1: { caption: '保存并关闭', tip: '保存并关闭', @@ -430,4 +437,36 @@ export default { tip: '帮助', }, }, + plansubgridviewtoolbar_toolbar: { + deuiaction3_planrelationstory: { + caption: '关联需求', + tip: '关联需求', + }, + seperator2: { + caption: '', + tip: '', + }, + deuiaction1: { + caption: '新建', + tip: '新建', + }, + deuiaction4: { + caption: '删除', + tip: '删除', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + plansubeditviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, }; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/sub-product-plan/sub-product-plan_en_US.ts b/app_Web/src/locale/lanres/sub-product-plan/sub-product-plan_en_US.ts index c38703a5d81bd3f21a69b7fe28bb36f774a12c39..cad8392a2de6a51d138a0638ccb27ae75d0157e9 100644 --- a/app_Web/src/locale/lanres/sub-product-plan/sub-product-plan_en_US.ts +++ b/app_Web/src/locale/lanres/sub-product-plan/sub-product-plan_en_US.ts @@ -54,7 +54,7 @@ export default { }, uiactions: { saveandexit: "Save And Close", - exit: "关闭", + exit: "返回", }, }, mainsubplan_grid: { diff --git a/app_Web/src/locale/lanres/sub-product-plan/sub-product-plan_zh_CN.ts b/app_Web/src/locale/lanres/sub-product-plan/sub-product-plan_zh_CN.ts index 702c7f1ec40d61a50fbb39dcfc3b945cb998b0c9..080e2d00b6843a73aef3d15df648a829d4042d0f 100644 --- a/app_Web/src/locale/lanres/sub-product-plan/sub-product-plan_zh_CN.ts +++ b/app_Web/src/locale/lanres/sub-product-plan/sub-product-plan_zh_CN.ts @@ -53,7 +53,7 @@ export default { }, uiactions: { saveandexit: '保存并关闭', - exit: '关闭', + exit: '返回', }, }, mainsubplan_grid: { diff --git a/app_Web/src/locale/lanres/task/task_en_US.ts b/app_Web/src/locale/lanres/task/task_en_US.ts index 3c28387e5db9d4532d817bc7fe680def4837e392..c277e04380ce76c8a1293575becb506f16a4f2b1 100644 --- a/app_Web/src/locale/lanres/task/task_en_US.ts +++ b/app_Web/src/locale/lanres/task/task_en_US.ts @@ -46,6 +46,10 @@ export default { duration: '持续时间', }, views: { + maineditview: { + caption: "任务", + title: '任务', + }, maingridview9_child: { caption: "任务", title: '任务', @@ -60,6 +64,10 @@ export default { }, tasktypeganttview: { caption: "任务", + title: '任务', + }, + pivottableview: { + caption: "任务", title: '任务', }, gridview9_assignedtome: { @@ -69,6 +77,18 @@ export default { maingridview: { caption: "任务", title: '任务', + }, + opentaskview: { + caption: "开始任务", + title: '开始任务', + }, + closepausecancelview: { + caption: "任务", + title: '任务', + }, + doneview: { + caption: "完成任务", + title: '完成任务', }, editview: { caption: "任务", @@ -83,8 +103,6 @@ export default { details: { group1: "task基本信息", formpage1: "基本信息", - group2: "操作信息", - formpage2: "其它", srfupdatedate: "最后修改日期", srforikey: "", srfkey: "编号", @@ -93,7 +111,22 @@ export default { srfuf: "", srfdeid: "", srfsourcekey: "", - name: "任务名称", + projectname: "所属项目", + project: "所属项目", + type: "任务类型", + module: "所属模块", + modulename: "所属模块", + formitem: "所有模块", + assignedto: "指派给", + formitem1: "多人任务", + story: "相关需求", + storyname: "相关需求", + desc: "任务描述", + formitem2: "附件", + deadline: "截止日期", + estsarted: "预计开始", + formitemex1: "", + mailto: "抄送给", id: "编号", }, uiactions: { @@ -123,6 +156,106 @@ export default { uiactions: { }, }, + closepausecancelform_form: { + details: { + druipart1: "", + grouppanel1: "分组面板", + group1: "任务基本信息", + formpage1: "基本信息", + srfupdatedate: "最后修改日期", + srforikey: "", + srfkey: "编号", + srfmajortext: "任务名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + formitem: "备注", + id: "编号", + }, + uiactions: { + }, + }, + completeform_form: { + details: { + druipart1: "", + grouppanel1: "分组面板", + group1: "任务基本信息", + formpage1: "基本信息", + srfupdatedate: "最后修改日期", + srforikey: "", + srfkey: "编号", + srfmajortext: "任务名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + consumed: "之前消耗", + consumption: "本次消耗", + consumed2: "总计耗时", + assignedto: "指派给", + finisheddate: "实际完成", + formitem: "附件", + formitem1: "备注", + id: "编号", + }, + uiactions: { + }, + }, + mainedit_form: { + details: { + grouppanel6: "任务描述", + grouppanel7: "备注", + druipart1: "", + grouppanel2: "分组面板", + group1: "任务基本信息", + grouppanel1: "基本信息", + grouppanel4: "工时信息", + grouppanel5: "任务的一生", + grouppanel3: "分组面板", + formpage1: "基本信息", + srfupdatedate: "最后修改日期", + srforikey: "", + srfkey: "编号", + srfmajortext: "任务名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + name: "任务名称", + desc: "任务描述", + desc1: "备注", + formitem: "附件", + projectname: "所属项目", + project: "所属项目", + modulename: "所属模块", + module: "所属模块", + storyname: "相关需求", + story: "相关需求", + parentname: "父任务", + parent: "父任务", + assignedto: "指派给", + type: "任务类型", + status: "任务状态", + eststarted: "预计开始", + deadline: "截止日期", + estimate: "最初预计", + consumed: "总计消耗", + left: "预计剩余", + openedby: "由谁创建", + realstarted: "实际开始", + finishedby: "由谁完成", + finisheddate: "实际完成", + canceledby: "由谁取消", + canceleddate: "取消时间", + closedby: "由谁关闭", + closedreason: "关闭原因", + closeddate: "关闭时间", + id: "编号", + }, + uiactions: { + }, + }, maininfo_form: { details: { group1: "task基本信息", @@ -167,6 +300,29 @@ export default { uiactions: { }, }, + startform_form: { + details: { + druipart1: "", + grouppanel1: "分组面板", + group1: "任务基本信息", + formpage1: "基本信息", + srfupdatedate: "最后修改日期", + srforikey: "", + srfkey: "编号", + srfmajortext: "任务名称", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + realstarted: "实际开始", + consumed: "总计消耗", + left: "预计剩余", + formitem: "备注", + id: "编号", + }, + uiactions: { + }, + }, main2_grid: { columns: { id: "编号", @@ -179,78 +335,55 @@ export default { }, main_grid: { columns: { - id: "编号", + id: "ID", pri: "P", name: "任务名称", status: "任务状态", + assignedto: "指派给", + finishedby: "完成者", + estimate: "预计", + consumed: "消耗", + left: "剩余", + deadline: "截止日期", + uagridcolumn1: "操作", }, uiactions: { + starttask: "开始", + closetask: "关闭", + donetask: "完成", + mainedit: "编辑", }, }, - editviewtoolbar_toolbar: { - tbitem3: { - caption: "Save", - tip: "Save", + pivottable_grid: { + columns: { + id: "编号", + pri: "P", + name: "任务名称", + status: "任务状态", + type: "任务类型", + assignedto: "指派给", + estimate: "最初预计", + left: "预计剩余", + consumed: "总计消耗", + productname: "产品", + projectname: "所属项目", + storyname: "相关需求", + modulename: "所属模块", + parentname: "父任务", }, - tbitem4: { - caption: "Save And New", - tip: "Save And New", + uiactions: { }, - tbitem5: { + }, + editviewtoolbar_toolbar: { + deuiaction1: { caption: "Save And Close", tip: "Save And Close Window", }, - tbitem6: { - caption: "-", - tip: "", - }, - tbitem7: { - caption: "Remove And Close", - tip: "Remove And Close Window", - }, - tbitem8: { - caption: "-", - tip: "", - }, - tbitem12: { - caption: "New", - tip: "New", - }, - tbitem13: { - caption: "-", - tip: "", - }, - tbitem14: { - caption: "Copy", - tip: "Copy {0}", - }, - tbitem16: { - caption: "-", - tip: "", - }, - tbitem23: { - caption: "第一个记录", - tip: "第一个记录", - }, - tbitem24: { - caption: "上一个记录", - tip: "上一个记录", - }, - tbitem25: { - caption: "下一个记录", - tip: "下一个记录", - }, - tbitem26: { - caption: "最后一个记录", - tip: "最后一个记录", - }, - tbitem21: { - caption: "-", - tip: "", - }, - tbitem22: { - caption: "Help", - tip: "Help", + }, + maineditviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", }, }, maingridviewtoolbar_toolbar: { diff --git a/app_Web/src/locale/lanres/task/task_zh_CN.ts b/app_Web/src/locale/lanres/task/task_zh_CN.ts index 3d6e5844708199b416e29e283688ad240ed785f4..5bef13a0fe31ffe10a751ee50f33e0e83c986032 100644 --- a/app_Web/src/locale/lanres/task/task_zh_CN.ts +++ b/app_Web/src/locale/lanres/task/task_zh_CN.ts @@ -45,6 +45,10 @@ export default { duration: '持续时间', }, views: { + maineditview: { + caption: '任务', + title: '任务', + }, maingridview9_child: { caption: '任务', title: '任务', @@ -59,6 +63,10 @@ export default { }, tasktypeganttview: { caption: '任务', + title: '任务', + }, + pivottableview: { + caption: '任务', title: '任务', }, gridview9_assignedtome: { @@ -68,6 +76,18 @@ export default { maingridview: { caption: '任务', title: '任务', + }, + opentaskview: { + caption: '开始任务', + title: '开始任务', + }, + closepausecancelview: { + caption: '任务', + title: '任务', + }, + doneview: { + caption: '完成任务', + title: '完成任务', }, editview: { caption: '任务', @@ -82,8 +102,6 @@ export default { details: { group1: 'task基本信息', formpage1: '基本信息', - group2: '操作信息', - formpage2: '其它', srfupdatedate: '最后修改日期', srforikey: '', srfkey: '编号', @@ -92,7 +110,22 @@ export default { srfuf: '', srfdeid: '', srfsourcekey: '', - name: '任务名称', + projectname: '所属项目', + project: '所属项目', + type: '任务类型', + module: '所属模块', + modulename: '所属模块', + formitem: '所有模块', + assignedto: '指派给', + formitem1: '多人任务', + story: '相关需求', + storyname: '相关需求', + desc: '任务描述', + formitem2: '附件', + deadline: '截止日期', + estsarted: '预计开始', + formitemex1: '', + mailto: '抄送给', id: '编号', }, uiactions: { @@ -122,6 +155,106 @@ export default { uiactions: { }, }, + closepausecancelform_form: { + details: { + druipart1: '', + grouppanel1: '分组面板', + group1: '任务基本信息', + formpage1: '基本信息', + srfupdatedate: '最后修改日期', + srforikey: '', + srfkey: '编号', + srfmajortext: '任务名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + formitem: '备注', + id: '编号', + }, + uiactions: { + }, + }, + completeform_form: { + details: { + druipart1: '', + grouppanel1: '分组面板', + group1: '任务基本信息', + formpage1: '基本信息', + srfupdatedate: '最后修改日期', + srforikey: '', + srfkey: '编号', + srfmajortext: '任务名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + consumed: '之前消耗', + consumption: '本次消耗', + consumed2: '总计耗时', + assignedto: '指派给', + finisheddate: '实际完成', + formitem: '附件', + formitem1: '备注', + id: '编号', + }, + uiactions: { + }, + }, + mainedit_form: { + details: { + grouppanel6: '任务描述', + grouppanel7: '备注', + druipart1: '', + grouppanel2: '分组面板', + group1: '任务基本信息', + grouppanel1: '基本信息', + grouppanel4: '工时信息', + grouppanel5: '任务的一生', + grouppanel3: '分组面板', + formpage1: '基本信息', + srfupdatedate: '最后修改日期', + srforikey: '', + srfkey: '编号', + srfmajortext: '任务名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + name: '任务名称', + desc: '任务描述', + desc1: '备注', + formitem: '附件', + projectname: '所属项目', + project: '所属项目', + modulename: '所属模块', + module: '所属模块', + storyname: '相关需求', + story: '相关需求', + parentname: '父任务', + parent: '父任务', + assignedto: '指派给', + type: '任务类型', + status: '任务状态', + eststarted: '预计开始', + deadline: '截止日期', + estimate: '最初预计', + consumed: '总计消耗', + left: '预计剩余', + openedby: '由谁创建', + realstarted: '实际开始', + finishedby: '由谁完成', + finisheddate: '实际完成', + canceledby: '由谁取消', + canceleddate: '取消时间', + closedby: '由谁关闭', + closedreason: '关闭原因', + closeddate: '关闭时间', + id: '编号', + }, + uiactions: { + }, + }, maininfo_form: { details: { group1: 'task基本信息', @@ -166,6 +299,29 @@ export default { uiactions: { }, }, + startform_form: { + details: { + druipart1: '', + grouppanel1: '分组面板', + group1: '任务基本信息', + formpage1: '基本信息', + srfupdatedate: '最后修改日期', + srforikey: '', + srfkey: '编号', + srfmajortext: '任务名称', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + realstarted: '实际开始', + consumed: '总计消耗', + left: '预计剩余', + formitem: '备注', + id: '编号', + }, + uiactions: { + }, + }, main2_grid: { columns: { id: '编号', @@ -178,78 +334,55 @@ export default { }, main_grid: { columns: { - id: '编号', + id: 'ID', pri: 'P', name: '任务名称', status: '任务状态', + assignedto: '指派给', + finishedby: '完成者', + estimate: '预计', + consumed: '消耗', + left: '剩余', + deadline: '截止日期', + uagridcolumn1: '操作', }, uiactions: { + starttask: '开始', + closetask: '关闭', + donetask: '完成', + mainedit: '编辑', }, }, - editviewtoolbar_toolbar: { - tbitem3: { - caption: '保存', - tip: '保存', + pivottable_grid: { + columns: { + id: '编号', + pri: 'P', + name: '任务名称', + status: '任务状态', + type: '任务类型', + assignedto: '指派给', + estimate: '最初预计', + left: '预计剩余', + consumed: '总计消耗', + productname: '产品', + projectname: '所属项目', + storyname: '相关需求', + modulename: '所属模块', + parentname: '父任务', }, - tbitem4: { - caption: '保存并新建', - tip: '保存并新建', + uiactions: { }, - tbitem5: { + }, + editviewtoolbar_toolbar: { + deuiaction1: { caption: '保存并关闭', tip: '保存并关闭', }, - tbitem6: { - caption: '-', - tip: '', - }, - tbitem7: { - caption: '删除并关闭', - tip: '删除并关闭', - }, - tbitem8: { - caption: '-', - tip: '', - }, - tbitem12: { - caption: '新建', - tip: '新建', - }, - tbitem13: { - caption: '-', - tip: '', - }, - tbitem14: { - caption: '拷贝', - tip: '拷贝', - }, - tbitem16: { - caption: '-', - tip: '', - }, - tbitem23: { - caption: '第一个记录', - tip: '第一个记录', - }, - tbitem24: { - caption: '上一个记录', - tip: '上一个记录', - }, - tbitem25: { - caption: '下一个记录', - tip: '下一个记录', - }, - tbitem26: { - caption: '最后一个记录', - tip: '最后一个记录', - }, - tbitem21: { - caption: '-', - tip: '', - }, - tbitem22: { - caption: '帮助', - tip: '帮助', + }, + maineditviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', }, }, maingridviewtoolbar_toolbar: { diff --git a/app_Web/src/locale/lanres/test-task/test-task_zh_CN.ts b/app_Web/src/locale/lanres/test-task/test-task_zh_CN.ts index 7db9f79d1aecb559550bb1ba4e1fc5a29d1ed93f..901edb6f82c2fd3319a19534b11168fdc0fd7554 100644 --- a/app_Web/src/locale/lanres/test-task/test-task_zh_CN.ts +++ b/app_Web/src/locale/lanres/test-task/test-task_zh_CN.ts @@ -112,8 +112,8 @@ export default { tip: '', }, tbitem7: { - caption: '删除并关闭', - tip: '删除并关闭', + caption: '删除', + tip: '删除', }, tbitem8: { caption: '-', diff --git a/app_Web/src/locale/lanres/user/user_en_US.ts b/app_Web/src/locale/lanres/user/user_en_US.ts index 90d1212217f515b413700930c8ccf1f9209c6d6d..2ff70e837b002406561bd862438f8c1403be4e05 100644 --- a/app_Web/src/locale/lanres/user/user_en_US.ts +++ b/app_Web/src/locale/lanres/user/user_en_US.ts @@ -1,39 +1,137 @@ export default { fields: { - password: 'password', - address: 'address', - weixin: 'weixin', - dingding: 'dingding', + password: '密码', + address: '通讯地址', + weixin: '微信', + dingding: '钉钉', fails: 'fails', slack: 'slack', ranzhi: 'ranzhi', - account: 'account', + account: '账户', locked: 'locked', avatar: 'avatar', scorelevel: 'scoreLevel', - realname: 'realname', + realname: '真实姓名', zipcode: 'zipcode', - dept: 'dept', + dept: '所属部门', commiter: 'commiter', - role: 'role', + role: '职位', deleted: '逻辑删除标志', - last: 'last', + last: '最后登录', clientstatus: 'clientStatus', skype: 'skype', whatsapp: 'whatsapp', score: 'score', - gender: 'gender', - mobile: 'mobile', + gender: '性别', + mobile: '手机', clientlang: 'clientLang', - visits: 'visits', - join: 'join', - email: 'email', + visits: '访问次数', + join: '入职日期', + email: '邮箱', ip: 'ip', birthday: 'birthday', nickname: 'nickname', - phone: 'phone', - id: 'id', - qq: 'qq', + phone: '电话', + id: 'ID', + qq: 'QQ', }, + views: { + pickupview: { + caption: "用户", + title: '用户', + }, + editview: { + caption: "用户信息", + title: '用户信息', + }, + pickupgridview: { + caption: "用户", + title: '用户', + }, + maingridview: { + caption: "用户", + title: '用户', + }, + }, + main_form: { + details: { + group1: "基本信息", + grouppanel1: "账号信息", + grouppanel2: "联系信息", + grouppanel3: "用户信息", + formpage1: "基本信息", + srforikey: "", + srfkey: "ID", + srfmajortext: "真实姓名", + srftempmode: "", + srfuf: "", + srfdeid: "", + srfsourcekey: "", + realname: "真实姓名", + join: "入职日期", + dept: "所属部门", + role: "职位", + gender: "性别", + account: "账户", + email: "邮箱", + password: "密码", + mobile: "手机", + phone: "电话", + qq: "QQ", + dingding: "钉钉", + weixin: "微信", + address: "通讯地址", + id: "ID", + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: "ID", + realname: "真实姓名", + account: "账户", + role: "职位", + email: "邮箱", + gender: "性别", + phone: "电话", + qq: "QQ", + address: "通讯地址", + last: "最后登录", + visits: "访问次数", + uagridcolumn1: "操作", + }, + uiactions: { + edit: "Edit", + remove: "Remove", + }, + }, + default_searchform: { + details: { + formpage1: "常规条件", + }, + uiactions: { + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: "New", + tip: "New", + }, + seperator1: { + caption: "", + tip: "", + }, + deuiaction2: { + caption: "刷新", + tip: "刷新", + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: "Save And Close", + tip: "Save And Close Window", + }, + }, }; \ No newline at end of file diff --git a/app_Web/src/locale/lanres/user/user_zh_CN.ts b/app_Web/src/locale/lanres/user/user_zh_CN.ts index 59d4e7f4ea6cfeb15e275b8bed04d0dbe4e32fa3..e3e6faca56eab930d74ae10a1c1181e088025e75 100644 --- a/app_Web/src/locale/lanres/user/user_zh_CN.ts +++ b/app_Web/src/locale/lanres/user/user_zh_CN.ts @@ -1,38 +1,136 @@ export default { fields: { - password: 'password', - address: 'address', - weixin: 'weixin', - dingding: 'dingding', + password: '密码', + address: '通讯地址', + weixin: '微信', + dingding: '钉钉', fails: 'fails', slack: 'slack', ranzhi: 'ranzhi', - account: 'account', + account: '账户', locked: 'locked', avatar: 'avatar', scorelevel: 'scoreLevel', - realname: 'realname', + realname: '真实姓名', zipcode: 'zipcode', - dept: 'dept', + dept: '所属部门', commiter: 'commiter', - role: 'role', + role: '职位', deleted: '逻辑删除标志', - last: 'last', + last: '最后登录', clientstatus: 'clientStatus', skype: 'skype', whatsapp: 'whatsapp', score: 'score', - gender: 'gender', - mobile: 'mobile', + gender: '性别', + mobile: '手机', clientlang: 'clientLang', - visits: 'visits', - join: 'join', - email: 'email', + visits: '访问次数', + join: '入职日期', + email: '邮箱', ip: 'ip', birthday: 'birthday', nickname: 'nickname', - phone: 'phone', - id: 'id', - qq: 'qq', + phone: '电话', + id: 'ID', + qq: 'QQ', }, + views: { + pickupview: { + caption: '用户', + title: '用户', + }, + editview: { + caption: '用户信息', + title: '用户信息', + }, + pickupgridview: { + caption: '用户', + title: '用户', + }, + maingridview: { + caption: '用户', + title: '用户', + }, + }, + main_form: { + details: { + group1: '基本信息', + grouppanel1: '账号信息', + grouppanel2: '联系信息', + grouppanel3: '用户信息', + formpage1: '基本信息', + srforikey: '', + srfkey: 'ID', + srfmajortext: '真实姓名', + srftempmode: '', + srfuf: '', + srfdeid: '', + srfsourcekey: '', + realname: '真实姓名', + join: '入职日期', + dept: '所属部门', + role: '职位', + gender: '性别', + account: '账户', + email: '邮箱', + password: '密码', + mobile: '手机', + phone: '电话', + qq: 'QQ', + dingding: '钉钉', + weixin: '微信', + address: '通讯地址', + id: 'ID', + }, + uiactions: { + }, + }, + main_grid: { + columns: { + id: 'ID', + realname: '真实姓名', + account: '账户', + role: '职位', + email: '邮箱', + gender: '性别', + phone: '电话', + qq: 'QQ', + address: '通讯地址', + last: '最后登录', + visits: '访问次数', + uagridcolumn1: '操作', + }, + uiactions: { + edit: '编辑', + remove: '删除', + }, + }, + default_searchform: { + details: { + formpage1: '常规条件', + }, + uiactions: { + }, + }, + maingridviewtoolbar_toolbar: { + deuiaction1: { + caption: '新建', + tip: '新建', + }, + seperator1: { + caption: '', + tip: '', + }, + deuiaction2: { + caption: '刷新', + tip: '刷新', + }, + }, + editviewtoolbar_toolbar: { + deuiaction1: { + caption: '保存并关闭', + tip: '保存并关闭', + }, + }, }; \ No newline at end of file diff --git a/app_Web/src/mock/app/zentao-appmenu/zentao-appmenu.ts b/app_Web/src/mock/app/zentao-appmenu/zentao-appmenu.ts index 84274f1db90b0dbc518ab8aeb611346beb80da55..79214c63014423fbeff0777b8d63349812f5862e 100644 --- a/app_Web/src/mock/app/zentao-appmenu/zentao-appmenu.ts +++ b/app_Web/src/mock/app/zentao-appmenu/zentao-appmenu.ts @@ -79,7 +79,7 @@ mock.onGet('v7/zentaoappmenu').reply((config: any) => { iconcls: '', icon: '', textcls: '', - appfunctag: '_4', + appfunctag: '_5', resourcetag: '', }, { @@ -97,7 +97,7 @@ mock.onGet('v7/zentaoappmenu').reply((config: any) => { iconcls: '', icon: '', textcls: '', - appfunctag: '_3', + appfunctag: '_4', resourcetag: '', }, ], @@ -171,7 +171,7 @@ mock.onGet('v7/zentaoappmenu').reply((config: any) => { iconcls: 'fa fa-cogs', icon: '', textcls: '', - appfunctag: '_5', + appfunctag: '_6', resourcetag: '', }, ], diff --git a/app_Web/src/mock/codelist/codelist.ts b/app_Web/src/mock/codelist/codelist.ts index c6847f216f074d828bb7c390f25cebab35275611..13c911fc9fb755cc66da9effc2d69d1504a60e2f 100644 --- a/app_Web/src/mock/codelist/codelist.ts +++ b/app_Web/src/mock/codelist/codelist.ts @@ -46,6 +46,7 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { text: '激活', "data":"", "codename":"Active", + "color": "rgba(0, 157, 255, 1)", value: 'active', disabled: false, @@ -56,6 +57,7 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { text: '已解决', "data":"", "codename":"Resolved", + "color": "rgba(1, 217, 19, 1)", value: 'resolved', disabled: false, @@ -66,6 +68,7 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { text: '已关闭', "data":"", "codename":"Closed", + "color": "rgba(151, 152, 141, 1)", value: 'closed', disabled: false, @@ -284,6 +287,130 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { }, ] }, + { + srfkey: 'ProjectTimeType', + emptytext: '', + "codelisttype":"static", + items: [ + { + id: 'CONSUMED', + label: '消耗时间', + text: '消耗时间', + "data":"", + "codename":"Consumed", + value: 'CONSUMED', + + disabled: false, + }, + { + id: 'LEFT', + label: '剩余时间', + text: '剩余时间', + "data":"", + "codename":"Left", + value: 'LEFT', + + disabled: false, + }, + ] + }, + { + srfkey: 'Bug__type', + emptytext: '未定义', + "codelisttype":"static", + items: [ + { + id: 'codeerror', + label: '代码错误', + text: '代码错误', + "data":"", + "codename":"Codeerror", + value: 'codeerror', + + disabled: false, + }, + { + id: 'config', + label: '配置相关', + text: '配置相关', + "data":"", + "codename":"Config", + value: 'config', + + disabled: false, + }, + { + id: 'install', + label: '安装部署', + text: '安装部署', + "data":"", + "codename":"Install", + value: 'install', + + disabled: false, + }, + { + id: 'security', + label: '安全相关', + text: '安全相关', + "data":"", + "codename":"Security", + value: 'security', + + disabled: false, + }, + { + id: 'performance', + label: '性能问题', + text: '性能问题', + "data":"", + "codename":"Performance", + value: 'performance', + + disabled: false, + }, + { + id: 'standard', + label: '标准规范', + text: '标准规范', + "data":"", + "codename":"Standard", + value: 'standard', + + disabled: false, + }, + { + id: 'automation', + label: '测试脚本', + text: '测试脚本', + "data":"", + "codename":"Automation", + value: 'automation', + + disabled: false, + }, + { + id: 'designdefect', + label: '设计缺陷', + text: '设计缺陷', + "data":"", + "codename":"Designdefect", + value: 'designdefect', + + disabled: false, + }, + { + id: 'others', + label: '其他', + text: '其他', + "data":"", + "codename":"Others", + value: 'others', + + disabled: false, + }, + ] + }, { srfkey: 'Product__acl', emptytext: '未定义', @@ -1048,6 +1175,33 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { }, ] }, + { + srfkey: 'User__gender', + emptytext: '未定义', + "codelisttype":"static", + items: [ + { + id: 'f', + label: '女', + text: '女', + "data":"", + "codename":"F", + value: 'f', + + disabled: false, + }, + { + id: 'm', + label: '男', + text: '男', + "data":"", + "codename":"M", + value: 'm', + + disabled: false, + }, + ] + }, { srfkey: 'Action__object_type', emptytext: '未定义', @@ -1416,137 +1570,134 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { ] }, { - srfkey: 'Task__closed_reason', + srfkey: 'Task_quickpacket', emptytext: '未定义', "codelisttype":"static", items: [ { - id: 'done', - label: '已完成', - text: '已完成', - "data":"", - "codename":"Done", - value: 'done', + id: 'All', + label: '所有', + text: '所有', + "data":{}, + "codename":"All", + value: 'All', disabled: false, }, { - id: 'cancel', - label: '已取消', - text: '已取消', - "data":"", - "codename":"Cancel", - value: 'cancel', + id: 'UNCLOSED', + label: '未关闭', + text: '未关闭', + "data":{"n_status_noteq":"closed"}, + "codename":"Unclosed", + value: 'UNCLOSED', disabled: false, }, - ] - }, - { - "srfkey": "UserRealName", - "emptytext": "未定义", - "codelisttype":"dynamic", - "appdataentity":"User", - "appdedataset":"FetchDefault", - "items": [] - }, - { - srfkey: 'Product__type', - emptytext: '未定义', - "codelisttype":"static", - items: [ { - id: 'normal', - label: '正常', - text: '正常', - "data":"", - "codename":"Normal", - "color": "blue", - value: 'normal', + id: 'TOME', + label: '指派给我', + text: '指派给我', + "data":{"n_assignedto_eq":"%srfloginname%"}, + "codename":"Tome", + value: 'TOME', disabled: false, }, { - id: 'branch', - label: '多分支', - text: '多分支', + id: 'MORE', + label: '更多', + text: '更多', "data":"", - "codename":"Branch", - value: 'branch', + "codename":"More", + value: 'MORE', disabled: false, }, { - id: 'platform', - label: '多平台', - text: '多平台', - "data":"", - "codename":"Platform", - value: 'platform', - + id: 'NOTSTARTED', + label: '未开始', + text: '未开始', + "data":{"n_status_eq":"wait"}, + "codename":"Notstarted", + value: 'NOTSTARTED', + "pvalue": "MORE", disabled: false, }, - ] - }, - { - srfkey: 'Testcase__status', - emptytext: '未定义', - "codelisttype":"static", - items: [ { - id: 'wait', - label: '待评审', - text: '待评审', - "data":"", - "codename":"Wait", - value: 'wait', - + id: 'INPROGRESS', + label: '进行中', + text: '进行中', + "data":{"n_status_eq":"doing"}, + "codename":"Inprogress", + value: 'INPROGRESS', + "pvalue": "MORE", disabled: false, }, { - id: 'normal', - label: '正常', - text: '正常', - "data":"", - "codename":"Normal", - value: 'normal', - + id: 'UNACCOMPLISHED', + label: '未完成', + text: '未完成', + "data":{"n_status_noteq":"done"}, + "codename":"Unaccomplished", + value: 'UNACCOMPLISHED', + "pvalue": "MORE", disabled: false, }, { - id: 'blocked', - label: '被阻塞', - text: '被阻塞', - "data":"", - "codename":"Blocked", - value: 'blocked', - + id: 'IFINISHED', + label: '我完成', + text: '我完成', + "data":{"n_finishedby_eq":"%srfloginname%"}, + "codename":"Ifinished", + value: 'IFINISHED', + "pvalue": "MORE", disabled: false, }, { - id: 'investigate', - label: '研究中', - text: '研究中', - "data":"", - "codename":"Investigate", - value: 'investigate', - + id: 'COMPLETED', + label: '已完成', + text: '已完成', + "data":{"n_status_eq":"done"}, + "codename":"Completed", + value: 'COMPLETED', + "pvalue": "MORE", + disabled: false, + }, + { + id: 'CLOSED', + label: '已关闭', + text: '已关闭', + "data":{"n_status_eq":"closed"}, + "codename":"Closed", + value: 'CLOSED', + "pvalue": "MORE", + disabled: false, + }, + { + id: 'CANCELLED', + label: '已取消', + text: '已取消', + "data":{"n_status_eq":"cancel"}, + "codename":"Cancelled", + value: 'CANCELLED', + "pvalue": "MORE", disabled: false, }, ] }, { - srfkey: 'Story__quickpacket', + srfkey: 'Bug__quickpacket', emptytext: '未定义', "codelisttype":"static", items: [ { - id: 'ALL', + id: 'All', label: '所有', text: '所有', - "data":"", + "data":{}, "codename":"All", - value: 'ALL', + value: 'All', disabled: false, }, @@ -1554,16 +1705,26 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { id: 'UNCLOSED', label: '未关闭', text: '未关闭', - "data":{"n_stage_noteq":"closed"}, + "data":{"n_status_noteq":"closed"}, "codename":"Unclosed", value: 'UNCLOSED', disabled: false, }, + { + id: 'ICREATE', + label: '由我创建', + text: '由我创建', + "data":{"n_openedby_eq":"%SRFUSERID%"}, + "codename":"Icreate", + value: 'ICREATE', + + disabled: false, + }, { id: 'TOME', - label: '指给我', - text: '指给我', + label: '指派给我', + text: '指派给我', "data":{"n_assignedto_eq":"%SRFUSERID%"}, "codename":"Tome", value: 'TOME', @@ -1571,32 +1732,32 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { disabled: false, }, { - id: 'ICREATE', - label: '我创建', - text: '我创建', - "data":{"n_openedby_eq":"%SRFUSERID%"}, - "codename":"Icreate", - value: 'ICREATE', + id: 'BYME', + label: '由我解决', + text: '由我解决', + "data":{"n_resolvedby_eq":"%SRFUSERID%"}, + "codename":"Byme", + value: 'BYME', disabled: false, }, { - id: 'IREVIEW', - label: '我评审', - text: '我评审', - "data":{"n_reviewedby_eq":"%SRFUSERID%"}, - "codename":"Ireview", - value: 'IREVIEW', + id: 'WAITCLOSED', + label: '待关闭', + text: '待关闭', + "data":{"n_status_eq":"closed"}, + "codename":"Waitclosed", + value: 'WAITCLOSED', disabled: false, }, { - id: 'DRAFT', - label: '草稿', - text: '草稿', - "data":{"n_status_eq":"draft"}, - "codename":"Draft", - value: 'DRAFT', + id: 'UNRESOLVED', + label: '未解决', + text: '未解决', + "data":{"n_status_eq":"resolved"}, + "codename":"Unresolved", + value: 'UNRESOLVED', disabled: false, }, @@ -1611,21 +1772,599 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { disabled: false, }, { - id: 'ICLOSE', - label: '我关闭', - text: '我关闭', - "data":{"n_closedby_eq":"%SRFUSERID%"}, - "codename":"Iclose", - value: 'ICLOSE', + id: 'UNCONFIRMED', + label: '未确认', + text: '未确认', + "data":{"n_confirmed_eq": 0}, + "codename":"Unconfirmed", + value: 'UNCONFIRMED', "pvalue": "MORE", disabled: false, }, { - id: 'ACTIVED', - label: '激活', - text: '激活', - "data":{"n_status_eq":"active"}, - "codename":"Actived", + id: 'UNASSIGNED', + label: '未指派', + text: '未指派', + "data":{"n_assignedto_eq":""}, + "codename":"Unassigned", + value: 'UNASSIGNED', + "pvalue": "MORE", + disabled: false, + }, + { + id: 'EXPIREDBUG', + label: '过期Bug', + text: '过期Bug', + "data":{"n_deadline_lt": "%srfcurdate%"}, + "codename":"Expiredbug", + value: 'EXPIREDBUG', + "pvalue": "MORE", + disabled: false, + }, + ] + }, + { + srfkey: 'Task__closed_reason', + emptytext: '未定义', + "codelisttype":"static", + items: [ + { + id: 'done', + label: '已完成', + text: '已完成', + "data":"", + "codename":"Done", + value: 'done', + + disabled: false, + }, + { + id: 'cancel', + label: '已取消', + text: '已取消', + "data":"", + "codename":"Cancel", + value: 'cancel', + + disabled: false, + }, + ] + }, + { + srfkey: 'Bug__os', + emptytext: '未定义', + "codelisttype":"static", + items: [ + { + id: 'all', + label: '全部', + text: '全部', + "data":"", + "codename":"All", + value: 'all', + + disabled: false, + }, + { + id: 'windows', + label: 'Windows', + text: 'Windows', + "data":"", + "codename":"Windows", + value: 'windows', + + disabled: false, + }, + { + id: 'win10', + label: 'Windows 10', + text: 'Windows 10', + "data":"", + "codename":"Win10", + value: 'win10', + + disabled: false, + }, + { + id: 'win8', + label: 'Windows 8', + text: 'Windows 8', + "data":"", + "codename":"Win8", + value: 'win8', + + disabled: false, + }, + { + id: 'win7', + label: 'Windows 7', + text: 'Windows 7', + "data":"", + "codename":"Win7", + value: 'win7', + + disabled: false, + }, + { + id: 'vista', + label: 'Windows Vista', + text: 'Windows Vista', + "data":"", + "codename":"Vista", + value: 'vista', + + disabled: false, + }, + { + id: 'winxp', + label: 'Windows XP', + text: 'Windows XP', + "data":"", + "codename":"Winxp", + value: 'winxp', + + disabled: false, + }, + { + id: 'win2012', + label: 'Windows 2012', + text: 'Windows 2012', + "data":"", + "codename":"Win2012", + value: 'win2012', + + disabled: false, + }, + { + id: 'win2008', + label: 'Windows 2008', + text: 'Windows 2008', + "data":"", + "codename":"Win2008", + value: 'win2008', + + disabled: false, + }, + { + id: 'win2003', + label: 'Windows 2003', + text: 'Windows 2003', + "data":"", + "codename":"Win2003", + value: 'win2003', + + disabled: false, + }, + { + id: 'win2000', + label: 'Windows 2000', + text: 'Windows 2000', + "data":"", + "codename":"Win2000", + value: 'win2000', + + disabled: false, + }, + { + id: 'android', + label: 'Android', + text: 'Android', + "data":"", + "codename":"Android", + value: 'android', + + disabled: false, + }, + { + id: 'ios', + label: 'IOS', + text: 'IOS', + "data":"", + "codename":"Ios", + value: 'ios', + + disabled: false, + }, + { + id: 'wp8', + label: 'WP8', + text: 'WP8', + "data":"", + "codename":"Wp8", + value: 'wp8', + + disabled: false, + }, + { + id: 'wp7', + label: 'WP7', + text: 'WP7', + "data":"", + "codename":"Wp7", + value: 'wp7', + + disabled: false, + }, + { + id: 'symbian', + label: 'Symbian', + text: 'Symbian', + "data":"", + "codename":"Symbian", + value: 'symbian', + + disabled: false, + }, + { + id: 'linux', + label: 'Linux', + text: 'Linux', + "data":"", + "codename":"Linux", + value: 'linux', + + disabled: false, + }, + { + id: 'freebsd', + label: 'FreeBSD', + text: 'FreeBSD', + "data":"", + "codename":"Freebsd", + value: 'freebsd', + + disabled: false, + }, + { + id: 'osx', + label: 'OS X', + text: 'OS X', + "data":"", + "codename":"Osx", + value: 'osx', + + disabled: false, + }, + { + id: 'unix', + label: 'Unix', + text: 'Unix', + "data":"", + "codename":"Unix", + value: 'unix', + + disabled: false, + }, + { + id: 'others', + label: '其他', + text: '其他', + "data":"", + "codename":"Others", + value: 'others', + + disabled: false, + }, + ] + }, + { + "srfkey": "UserRealName", + "emptytext": "未定义", + "codelisttype":"dynamic", + "appdataentity":"User", + "appdedataset":"FetchDefault", + "items": [] + }, + { + srfkey: 'Product__type', + emptytext: '未定义', + "codelisttype":"static", + items: [ + { + id: 'normal', + label: '正常', + text: '正常', + "data":"", + "codename":"Normal", + "color": "blue", + value: 'normal', + + disabled: false, + }, + { + id: 'branch', + label: '多分支', + text: '多分支', + "data":"", + "codename":"Branch", + value: 'branch', + + disabled: false, + }, + { + id: 'platform', + label: '多平台', + text: '多平台', + "data":"", + "codename":"Platform", + value: 'platform', + + disabled: false, + }, + ] + }, + { + srfkey: 'Testcase__type', + emptytext: '未定义', + "codelisttype":"static", + items: [ + { + id: 'feature', + label: '功能测试', + text: '功能测试', + "data":"", + "codename":"Feature", + value: 'feature', + + disabled: false, + }, + { + id: 'performance', + label: '性能测试', + text: '性能测试', + "data":"", + "codename":"Performance", + value: 'performance', + + disabled: false, + }, + { + id: 'config', + label: '配置相关', + text: '配置相关', + "data":"", + "codename":"Config", + value: 'config', + + disabled: false, + }, + { + id: 'install', + label: '安装部署', + text: '安装部署', + "data":"", + "codename":"Install", + value: 'install', + + disabled: false, + }, + { + id: 'security', + label: '安全相关', + text: '安全相关', + "data":"", + "codename":"Security", + value: 'security', + + disabled: false, + }, + { + id: 'interface', + label: '接口测试', + text: '接口测试', + "data":"", + "codename":"Interface", + value: 'interface', + + disabled: false, + }, + { + id: 'unit', + label: '单元测试', + text: '单元测试', + "data":"", + "codename":"Unit", + value: 'unit', + + disabled: false, + }, + { + id: 'other', + label: '其他', + text: '其他', + "data":"", + "codename":"Other", + value: 'other', + + disabled: false, + }, + ] + }, + { + srfkey: 'Bug__severity', + emptytext: '未定义', + "codelisttype":"static", + items: [ + { + id: '1', + label: '1', + text: '1', + "data":"", + "codename":"Item_1", + value: 1, + + disabled: false, + }, + { + id: '2', + label: '2', + text: '2', + "data":"", + "codename":"Item_2", + value: 2, + + disabled: false, + }, + { + id: '3', + label: '3', + text: '3', + "data":"", + "codename":"Item_3", + value: 3, + + disabled: false, + }, + { + id: '4', + label: '4', + text: '4', + "data":"", + "codename":"Item_4", + value: 4, + + disabled: false, + }, + ] + }, + { + srfkey: 'Testcase__status', + emptytext: '未定义', + "codelisttype":"static", + items: [ + { + id: 'wait', + label: '待评审', + text: '待评审', + "data":"", + "codename":"Wait", + value: 'wait', + + disabled: false, + }, + { + id: 'normal', + label: '正常', + text: '正常', + "data":"", + "codename":"Normal", + value: 'normal', + + disabled: false, + }, + { + id: 'blocked', + label: '被阻塞', + text: '被阻塞', + "data":"", + "codename":"Blocked", + value: 'blocked', + + disabled: false, + }, + { + id: 'investigate', + label: '研究中', + text: '研究中', + "data":"", + "codename":"Investigate", + value: 'investigate', + + disabled: false, + }, + ] + }, + { + srfkey: 'Story__quickpacket', + emptytext: '未定义', + "codelisttype":"static", + items: [ + { + id: 'ALL', + label: '所有', + text: '所有', + "data":"", + "codename":"All", + value: 'ALL', + + disabled: false, + }, + { + id: 'UNCLOSED', + label: '未关闭', + text: '未关闭', + "data":{"n_stage_noteq":"closed"}, + "codename":"Unclosed", + value: 'UNCLOSED', + + disabled: false, + }, + { + id: 'TOME', + label: '指给我', + text: '指给我', + "data":{"n_assignedto_eq":"%SRFUSERID%"}, + "codename":"Tome", + value: 'TOME', + + disabled: false, + }, + { + id: 'ICREATE', + label: '我创建', + text: '我创建', + "data":{"n_openedby_eq":"%SRFUSERID%"}, + "codename":"Icreate", + value: 'ICREATE', + + disabled: false, + }, + { + id: 'IREVIEW', + label: '我评审', + text: '我评审', + "data":{"n_reviewedby_eq":"%SRFUSERID%"}, + "codename":"Ireview", + value: 'IREVIEW', + + disabled: false, + }, + { + id: 'DRAFT', + label: '草稿', + text: '草稿', + "data":{"n_status_eq":"draft"}, + "codename":"Draft", + value: 'DRAFT', + + disabled: false, + }, + { + id: 'MORE', + label: '更多', + text: '更多', + "data":"", + "codename":"More", + value: 'MORE', + + disabled: false, + }, + { + id: 'ICLOSE', + label: '我关闭', + text: '我关闭', + "data":{"n_closedby_eq":"%SRFUSERID%"}, + "codename":"Iclose", + value: 'ICLOSE', + "pvalue": "MORE", + disabled: false, + }, + { + id: 'ACTIVED', + label: '激活', + text: '激活', + "data":{"n_status_eq":"active"}, + "codename":"Actived", value: 'ACTIVED', "pvalue": "MORE", disabled: false, @@ -1662,6 +2401,223 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { }, ] }, + { + srfkey: 'Bug__browser', + emptytext: '未定义', + "codelisttype":"static", + items: [ + { + id: 'all', + label: '全部', + text: '全部', + "data":"", + "codename":"All", + value: 'all', + + disabled: false, + }, + { + id: 'ie', + label: 'IE系列', + text: 'IE系列', + "data":"", + "codename":"Ie", + value: 'ie', + + disabled: false, + }, + { + id: 'ie11', + label: 'IE11', + text: 'IE11', + "data":"", + "codename":"Ie11", + value: 'ie11', + + disabled: false, + }, + { + id: 'ie10', + label: 'IE10', + text: 'IE10', + "data":"", + "codename":"Ie10", + value: 'ie10', + + disabled: false, + }, + { + id: 'ie9', + label: 'IE9', + text: 'IE9', + "data":"", + "codename":"Ie9", + value: 'ie9', + + disabled: false, + }, + { + id: 'ie8', + label: 'IE8', + text: 'IE8', + "data":"", + "codename":"Ie8", + value: 'ie8', + + disabled: false, + }, + { + id: 'ie7', + label: 'IE7', + text: 'IE7', + "data":"", + "codename":"Ie7", + value: 'ie7', + + disabled: false, + }, + { + id: 'ie6', + label: 'IE6', + text: 'IE6', + "data":"", + "codename":"Ie6", + value: 'ie6', + + disabled: false, + }, + { + id: 'chrome', + label: 'chrome', + text: 'chrome', + "data":"", + "codename":"Chrome", + value: 'chrome', + + disabled: false, + }, + { + id: 'firefox', + label: 'firefox系列', + text: 'firefox系列', + "data":"", + "codename":"Firefox", + value: 'firefox', + + disabled: false, + }, + { + id: 'firefox4', + label: 'firefox4', + text: 'firefox4', + "data":"", + "codename":"Firefox4", + value: 'firefox4', + + disabled: false, + }, + { + id: 'firefox3', + label: 'firefox3', + text: 'firefox3', + "data":"", + "codename":"Firefox3", + value: 'firefox3', + + disabled: false, + }, + { + id: 'firefox2', + label: 'firefox2', + text: 'firefox2', + "data":"", + "codename":"Firefox2", + value: 'firefox2', + + disabled: false, + }, + { + id: 'opera', + label: 'opera系列', + text: 'opera系列', + "data":"", + "codename":"Opera", + value: 'opera', + + disabled: false, + }, + { + id: 'opera11', + label: 'opera11', + text: 'opera11', + "data":"", + "codename":"Opera11", + value: 'opera11', + + disabled: false, + }, + { + id: 'oprea10', + label: 'oprea10', + text: 'oprea10', + "data":"", + "codename":"Oprea10", + value: 'oprea10', + + disabled: false, + }, + { + id: 'opera9', + label: 'opera9', + text: 'opera9', + "data":"", + "codename":"Opera9", + value: 'opera9', + + disabled: false, + }, + { + id: 'safari', + label: 'safari', + text: 'safari', + "data":"", + "codename":"Safari", + value: 'safari', + + disabled: false, + }, + { + id: 'maxthon', + label: '傲游', + text: '傲游', + "data":"", + "codename":"Maxthon", + value: 'maxthon', + + disabled: false, + }, + { + id: 'uc', + label: 'UC', + text: 'UC', + "data":"", + "codename":"Uc", + value: 'uc', + + disabled: false, + }, + { + id: 'others', + label: '其他', + text: '其他', + "data":"", + "codename":"Others", + value: 'others', + + disabled: false, + }, + ] + }, { srfkey: 'Project__type', emptytext: '未定义', @@ -1806,6 +2762,33 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { }, ] }, + { + srfkey: 'Company__guest', + emptytext: '未定义', + "codelisttype":"static", + items: [ + { + id: '1', + label: '允许', + text: '允许', + "data":"", + "codename":"Item_1", + value: '1', + + disabled: false, + }, + { + id: '0', + label: '不允许', + text: '不允许', + "data":"", + "codename":"Item_0", + value: '0', + + disabled: false, + }, + ] + }, { srfkey: 'Story__status', emptytext: '未定义', @@ -2065,6 +3048,7 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { text: '未开始', "data":"", "codename":"Wait", + "color": "rgba(131, 138, 157, 1)", value: 'wait', disabled: false, @@ -2075,6 +3059,7 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { text: '进行中', "data":"", "codename":"Doing", + "color": "rgba(255, 93, 93, 1)", value: 'doing', disabled: false, @@ -2085,6 +3070,7 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { text: '已完成', "data":"", "codename":"Done", + "color": "rgba(67, 160, 71, 1)", value: 'done', disabled: false, @@ -2095,6 +3081,7 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { text: '已暂停', "data":"", "codename":"Pause", + "color": "rgba(255, 152, 0, 1)", value: 'pause', disabled: false, @@ -2105,6 +3092,7 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { text: '已取消', "data":"", "codename":"Cancel", + "color": "rgba(131, 138, 157, 1)", value: 'cancel', disabled: false, @@ -2115,6 +3103,7 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { text: '已关闭', "data":"", "codename":"Closed", + "color": "rgba(131, 138, 157, 1)", value: 'closed', disabled: false, @@ -2195,6 +3184,61 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { }, ] }, + { + "srfkey": "Role", + "emptytext": "未定义", + "codelisttype":"dynamic", + "appdataentity":"Group", + "appdedataset":"FetchDefault", + "items": [] + }, + { + srfkey: 'Testcase__result', + emptytext: '未定义', + "codelisttype":"static", + items: [ + { + id: 'n/a', + label: '忽略', + text: '忽略', + "data":"", + "codename":"N_a", + value: 'n/a', + + disabled: false, + }, + { + id: 'pass', + label: '通过', + text: '通过', + "data":"", + "codename":"Pass", + value: 'pass', + + disabled: false, + }, + { + id: 'fail', + label: '失败', + text: '失败', + "data":"", + "codename":"Fail", + value: 'fail', + + disabled: false, + }, + { + id: 'blocked', + label: '阻塞', + text: '阻塞', + "data":"", + "codename":"Blocked", + value: 'blocked', + + disabled: false, + }, + ] + }, { srfkey: 'Bug__pri', emptytext: '未定义', @@ -2238,6 +3282,93 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => { "codename":"Item_4", value: 4, + disabled: false, + }, + ] + }, + { + srfkey: 'Bug__resolution', + emptytext: '未定义', + "codelisttype":"static", + items: [ + { + id: 'bydesign', + label: '设计如此', + text: '设计如此', + "data":"", + "codename":"Bydesign", + value: 'bydesign', + + disabled: false, + }, + { + id: 'duplicate', + label: '重复Bug', + text: '重复Bug', + "data":"", + "codename":"Duplicate", + value: 'duplicate', + + disabled: false, + }, + { + id: 'external', + label: '外部原因', + text: '外部原因', + "data":"", + "codename":"External", + value: 'external', + + disabled: false, + }, + { + id: 'fixed', + label: '已解决', + text: '已解决', + "data":"", + "codename":"Fixed", + value: 'fixed', + + disabled: false, + }, + { + id: 'notrepro', + label: '无法重现', + text: '无法重现', + "data":"", + "codename":"Notrepro", + value: 'notrepro', + + disabled: false, + }, + { + id: 'postponed', + label: '延期处理', + text: '延期处理', + "data":"", + "codename":"Postponed", + value: 'postponed', + + disabled: false, + }, + { + id: 'willnotfix', + label: '不予解决', + text: '不予解决', + "data":"", + "codename":"Willnotfix", + value: 'willnotfix', + + disabled: false, + }, + { + id: 'tostory', + label: '转为需求', + text: '转为需求', + "data":"", + "codename":"Tostory", + value: 'tostory', + disabled: false, }, ] diff --git a/app_Web/src/mock/entity/companys/companys.ts b/app_Web/src/mock/entity/companys/companys.ts new file mode 100644 index 0000000000000000000000000000000000000000..6f59c898cae0d096e45da5201a6fa35a711d1e51 --- /dev/null +++ b/app_Web/src/mock/entity/companys/companys.ts @@ -0,0 +1,380 @@ +import qs from 'qs'; +import { MockAdapter } from '@/mock/mock-adapter'; +const mock = MockAdapter.getInstance(); + +// 模拟数据 +const mockDatas: Array = [ +]; + + +//getwflink +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/companies\/[a-zA-Z0-9\-\;]+\/usertasks\/[a-zA-Z0-9\-\;]+\/ways$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: getwflink"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status,[ + {"sequenceFlowId":"dfdsfdsfdsfdsfds","sequenceFlowName":"同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddlfldldfldsfds","refViewKey":""}, + {"sequenceFlowId":"ddssdfdfdfdfsfdf","sequenceFlowName":"不同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddfdsldlfdlldsf","refViewKey":"workorder_ltform_editview"} + ]]; +}); + +// getwfstep +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/companies\/process-definitions-nodes$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: getwfstep"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, [ + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-dfdfd", + "userTaskName":"待审", + "cnt":0, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1" + }, + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-87927", + "userTaskName":"待分配", + "cnt":3, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1"} + ]]; +}); + +// createBatch +mock.onPost(new RegExp(/^\/companies\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: createBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// updateBatch +mock.onPut(new RegExp(/^\/companies\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: updateBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// removeBatch +mock.onDelete(new RegExp(/^\/companies\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: removeBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + + +// Select +mock.onGet(new RegExp(/^\/companies\/([a-zA-Z0-9\-\;]{1,35})\/select$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: Select"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/companies\/([a-zA-Z0-9\-\;]{1,35})\/select$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items); + console.groupEnd(); + console.groupEnd(); + return [status, _items]; +}); + +// GetDraft +mock.onGet(new RegExp(/^\/companies\/getdraft$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: GetDraft"); + console.table({url:config.url, method: config.method, data:config.data}); + // GetDraft + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// CheckKey +mock.onPost(new RegExp(/^\/companies\/?([a-zA-Z0-9\-\;]{0,35})\/checkkey$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: CheckKey"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/companies\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// Update +mock.onPut(new RegExp(/^\/companies\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: Update"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/companies\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// Save +mock.onPost(new RegExp(/^\/companies\/?([a-zA-Z0-9\-\;]{0,35})\/save$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: Save"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/companies\/([a-zA-Z0-9\-\;]{1,35})\/save$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// Create +mock.onPost(new RegExp(/^\/companies\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: Create"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/companies\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(mockDatas[0]); + console.groupEnd(); + console.groupEnd(); + return [status, mockDatas[0]]; +}); + +// FetchDefault +mock.onGet(new RegExp(/^\/companies\/fetchdefault$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(mockDatas); + console.groupEnd(); + console.groupEnd(); + return [status, mockDatas ? mockDatas : []]; +}); + +// FetchDefault +mock.onGet(new RegExp(/^\/companies\/fetchdefault(\?[\w-./?%&=,]*)*$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + if(config.url.includes('page')){ + let url = config.url.split('?')[1]; + let params = qs.parse(url); + Object.assign(config, params); + } + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + let total = mockDatas.length; + let records: Array = []; + if(!config.page || !config.size){ + records = mockDatas; + }else{ + if((config.page-1)*config.size < total){ + records = mockDatas.slice(config.page,config.size); + } + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(records ? records : []); + console.groupEnd(); + console.groupEnd(); + return [status, records ? records : []]; +}); +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 + + +// Get +mock.onGet(new RegExp(/^\/companies\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: Get"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/companies\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); + +// Remove +mock.onDelete(new RegExp(/^\/companies\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:company 方法: Remove"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/companies\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); diff --git a/app_Web/src/mock/entity/depts/depts.ts b/app_Web/src/mock/entity/depts/depts.ts new file mode 100644 index 0000000000000000000000000000000000000000..85dce07f91ed869e15951f62b468943022a6e6e0 --- /dev/null +++ b/app_Web/src/mock/entity/depts/depts.ts @@ -0,0 +1,424 @@ +import qs from 'qs'; +import { MockAdapter } from '@/mock/mock-adapter'; +const mock = MockAdapter.getInstance(); + +// 模拟数据 +const mockDatas: Array = [ +]; + + +//getwflink +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/depts\/[a-zA-Z0-9\-\;]+\/usertasks\/[a-zA-Z0-9\-\;]+\/ways$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: getwflink"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status,[ + {"sequenceFlowId":"dfdsfdsfdsfdsfds","sequenceFlowName":"同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddlfldldfldsfds","refViewKey":""}, + {"sequenceFlowId":"ddssdfdfdfdfsfdf","sequenceFlowName":"不同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddfdsldlfdlldsf","refViewKey":"workorder_ltform_editview"} + ]]; +}); + +// getwfstep +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/depts\/process-definitions-nodes$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: getwfstep"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, [ + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-dfdfd", + "userTaskName":"待审", + "cnt":0, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1" + }, + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-87927", + "userTaskName":"待分配", + "cnt":3, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1"} + ]]; +}); + +// createBatch +mock.onPost(new RegExp(/^\/depts\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: createBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// updateBatch +mock.onPut(new RegExp(/^\/depts\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: updateBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// removeBatch +mock.onDelete(new RegExp(/^\/depts\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: removeBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + + +// Select +mock.onGet(new RegExp(/^\/depts\/([a-zA-Z0-9\-\;]{1,35})\/select$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: Select"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/depts\/([a-zA-Z0-9\-\;]{1,35})\/select$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items); + console.groupEnd(); + console.groupEnd(); + return [status, _items]; +}); + +// Save +mock.onPost(new RegExp(/^\/depts\/?([a-zA-Z0-9\-\;]{0,35})\/save$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: Save"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/depts\/([a-zA-Z0-9\-\;]{1,35})\/save$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// Create +mock.onPost(new RegExp(/^\/depts\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: Create"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/depts\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(mockDatas[0]); + console.groupEnd(); + console.groupEnd(); + return [status, mockDatas[0]]; +}); + +// Update +mock.onPut(new RegExp(/^\/depts\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: Update"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/depts\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// GetDraft +mock.onGet(new RegExp(/^\/depts\/getdraft$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: GetDraft"); + console.table({url:config.url, method: config.method, data:config.data}); + // GetDraft + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// CheckKey +mock.onPost(new RegExp(/^\/depts\/?([a-zA-Z0-9\-\;]{0,35})\/checkkey$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: CheckKey"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/depts\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// FetchDefault +mock.onGet(new RegExp(/^\/depts\/fetchdefault$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(mockDatas); + console.groupEnd(); + console.groupEnd(); + return [status, mockDatas ? mockDatas : []]; +}); + +// FetchDefault +mock.onGet(new RegExp(/^\/depts\/fetchdefault(\?[\w-./?%&=,]*)*$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + if(config.url.includes('page')){ + let url = config.url.split('?')[1]; + let params = qs.parse(url); + Object.assign(config, params); + } + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + let total = mockDatas.length; + let records: Array = []; + if(!config.page || !config.size){ + records = mockDatas; + }else{ + if((config.page-1)*config.size < total){ + records = mockDatas.slice(config.page,config.size); + } + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(records ? records : []); + console.groupEnd(); + console.groupEnd(); + return [status, records ? records : []]; +}); + +// FetchRoot +mock.onGet(new RegExp(/^\/depts\/fetchroot$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: FetchRoot"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(mockDatas); + console.groupEnd(); + console.groupEnd(); + return [status, mockDatas ? mockDatas : []]; +}); + +// FetchRoot +mock.onGet(new RegExp(/^\/depts\/fetchroot(\?[\w-./?%&=,]*)*$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: FetchRoot"); + console.table({url:config.url, method: config.method, data:config.data}); + if(config.url.includes('page')){ + let url = config.url.split('?')[1]; + let params = qs.parse(url); + Object.assign(config, params); + } + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + let total = mockDatas.length; + let records: Array = []; + if(!config.page || !config.size){ + records = mockDatas; + }else{ + if((config.page-1)*config.size < total){ + records = mockDatas.slice(config.page,config.size); + } + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(records ? records : []); + console.groupEnd(); + console.groupEnd(); + return [status, records ? records : []]; +}); +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 + + +// Remove +mock.onDelete(new RegExp(/^\/depts\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: Remove"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/depts\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); + +// Get +mock.onGet(new RegExp(/^\/depts\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:dept 方法: Get"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/depts\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); diff --git a/app_Web/src/mock/entity/groups/groups.ts b/app_Web/src/mock/entity/groups/groups.ts new file mode 100644 index 0000000000000000000000000000000000000000..30acac35897232011ae9f11908b7bb272b0a4d1f --- /dev/null +++ b/app_Web/src/mock/entity/groups/groups.ts @@ -0,0 +1,380 @@ +import qs from 'qs'; +import { MockAdapter } from '@/mock/mock-adapter'; +const mock = MockAdapter.getInstance(); + +// 模拟数据 +const mockDatas: Array = [ +]; + + +//getwflink +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/groups\/[a-zA-Z0-9\-\;]+\/usertasks\/[a-zA-Z0-9\-\;]+\/ways$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: getwflink"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status,[ + {"sequenceFlowId":"dfdsfdsfdsfdsfds","sequenceFlowName":"同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddlfldldfldsfds","refViewKey":""}, + {"sequenceFlowId":"ddssdfdfdfdfsfdf","sequenceFlowName":"不同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddfdsldlfdlldsf","refViewKey":"workorder_ltform_editview"} + ]]; +}); + +// getwfstep +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/groups\/process-definitions-nodes$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: getwfstep"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, [ + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-dfdfd", + "userTaskName":"待审", + "cnt":0, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1" + }, + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-87927", + "userTaskName":"待分配", + "cnt":3, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1"} + ]]; +}); + +// createBatch +mock.onPost(new RegExp(/^\/groups\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: createBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// updateBatch +mock.onPut(new RegExp(/^\/groups\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: updateBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// removeBatch +mock.onDelete(new RegExp(/^\/groups\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: removeBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + + +// Select +mock.onGet(new RegExp(/^\/groups\/([a-zA-Z0-9\-\;]{1,35})\/select$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: Select"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/groups\/([a-zA-Z0-9\-\;]{1,35})\/select$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items); + console.groupEnd(); + console.groupEnd(); + return [status, _items]; +}); + +// Create +mock.onPost(new RegExp(/^\/groups\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: Create"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/groups\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(mockDatas[0]); + console.groupEnd(); + console.groupEnd(); + return [status, mockDatas[0]]; +}); + +// Save +mock.onPost(new RegExp(/^\/groups\/?([a-zA-Z0-9\-\;]{0,35})\/save$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: Save"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/groups\/([a-zA-Z0-9\-\;]{1,35})\/save$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// GetDraft +mock.onGet(new RegExp(/^\/groups\/getdraft$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: GetDraft"); + console.table({url:config.url, method: config.method, data:config.data}); + // GetDraft + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// Update +mock.onPut(new RegExp(/^\/groups\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: Update"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/groups\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// CheckKey +mock.onPost(new RegExp(/^\/groups\/?([a-zA-Z0-9\-\;]{0,35})\/checkkey$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: CheckKey"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/groups\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// FetchDefault +mock.onGet(new RegExp(/^\/groups\/fetchdefault$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(mockDatas); + console.groupEnd(); + console.groupEnd(); + return [status, mockDatas ? mockDatas : []]; +}); + +// FetchDefault +mock.onGet(new RegExp(/^\/groups\/fetchdefault(\?[\w-./?%&=,]*)*$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + if(config.url.includes('page')){ + let url = config.url.split('?')[1]; + let params = qs.parse(url); + Object.assign(config, params); + } + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + let total = mockDatas.length; + let records: Array = []; + if(!config.page || !config.size){ + records = mockDatas; + }else{ + if((config.page-1)*config.size < total){ + records = mockDatas.slice(config.page,config.size); + } + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(records ? records : []); + console.groupEnd(); + console.groupEnd(); + return [status, records ? records : []]; +}); +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 + + +// Remove +mock.onDelete(new RegExp(/^\/groups\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: Remove"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/groups\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); + +// Get +mock.onGet(new RegExp(/^\/groups\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:group 方法: Get"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/groups\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); diff --git a/app_Web/src/mock/entity/ibz-subtasks/ibz-subtasks.ts b/app_Web/src/mock/entity/ibz-subtasks/ibz-subtasks.ts new file mode 100644 index 0000000000000000000000000000000000000000..991dff5bfca0ba6a52903ebe954db9aba98ec3ee --- /dev/null +++ b/app_Web/src/mock/entity/ibz-subtasks/ibz-subtasks.ts @@ -0,0 +1,811 @@ +import qs from 'qs'; +import { MockAdapter } from '@/mock/mock-adapter'; +const mock = MockAdapter.getInstance(); + +// 模拟数据 +const mockDatas: Array = [ +]; + + +//getwflink +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/ibz_subtasks\/[a-zA-Z0-9\-\;]+\/usertasks\/[a-zA-Z0-9\-\;]+\/ways$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: getwflink"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status,[ + {"sequenceFlowId":"dfdsfdsfdsfdsfds","sequenceFlowName":"同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddlfldldfldsfds","refViewKey":""}, + {"sequenceFlowId":"ddssdfdfdfdfsfdf","sequenceFlowName":"不同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddfdsldlfdlldsf","refViewKey":"workorder_ltform_editview"} + ]]; +}); + +// getwfstep +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/ibz_subtasks\/process-definitions-nodes$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: getwfstep"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, [ + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-dfdfd", + "userTaskName":"待审", + "cnt":0, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1" + }, + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-87927", + "userTaskName":"待分配", + "cnt":3, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1"} + ]]; +}); + +// createBatch +mock.onPost(new RegExp(/^\/ibz_subtasks\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: createBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// updateBatch +mock.onPut(new RegExp(/^\/ibz_subtasks\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: updateBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// removeBatch +mock.onDelete(new RegExp(/^\/ibz_subtasks\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: removeBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + + + +// Select +mock.onGet(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})\/select$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: Select"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})\/select$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items); + console.groupEnd(); + console.groupEnd(); + return [status, _items]; +}); + + +// Select +mock.onGet(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})\/select$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: Select"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})\/select$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items); + console.groupEnd(); + console.groupEnd(); + return [status, _items]; +}); + + +// GetDraft +mock.onGet(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/getdraft$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: GetDraft"); + console.table({url:config.url, method: config.method, data:config.data}); + // GetDraft + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// GetDraft +mock.onGet(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/getdraft$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: GetDraft"); + console.table({url:config.url, method: config.method, data:config.data}); + // GetDraft + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + + + +// Update +mock.onPut(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: Update"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// Update +mock.onPut(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: Update"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// Save +mock.onPost(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})\/save$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: Save"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})\/save$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// Save +mock.onPost(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})\/save$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: Save"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})\/save$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + + + +// CheckKey +mock.onPost(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: CheckKey"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// CheckKey +mock.onPost(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: CheckKey"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// Create +mock.onPost(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: Create"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// Create +mock.onPost(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: Create"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// FetchRootTask +mock.onGet(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/fetchroottask$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: FetchRootTask"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + let tempValue: any = {}; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/fetchroottask$/).exec(config.url); + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + if (items.length > 0 && paramArray.length > 0) { + paramArray.forEach((paramkey: any) => { + if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) { + let keysGrounp: Array = tempValue[paramkey].split(new RegExp(/[\;]/)); + let tempArray: Array = []; + keysGrounp.forEach((singlekey: any) => { + let _items = items.filter((item: any) => { return item[paramkey] == singlekey }); + if(_items.length >0){ + tempArray.push(..._items); + } + }) + items = tempArray; + } else { + items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] }); + } + }) + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(items); + console.groupEnd(); + console.groupEnd(); + return [status, items]; +}); + + +// FetchRootTask +mock.onGet(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/fetchroottask$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: FetchRootTask"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + let tempValue: any = {}; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/fetchroottask$/).exec(config.url); + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + if (items.length > 0 && paramArray.length > 0) { + paramArray.forEach((paramkey: any) => { + if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) { + let keysGrounp: Array = tempValue[paramkey].split(new RegExp(/[\;]/)); + let tempArray: Array = []; + keysGrounp.forEach((singlekey: any) => { + let _items = items.filter((item: any) => { return item[paramkey] == singlekey }); + if(_items.length >0){ + tempArray.push(..._items); + } + }) + items = tempArray; + } else { + items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] }); + } + }) + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(items); + console.groupEnd(); + console.groupEnd(); + return [status, items]; +}); + + +// FetchTypeGroup +mock.onGet(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/fetchtypegroup$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: FetchTypeGroup"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + let tempValue: any = {}; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/fetchtypegroup$/).exec(config.url); + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + if (items.length > 0 && paramArray.length > 0) { + paramArray.forEach((paramkey: any) => { + if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) { + let keysGrounp: Array = tempValue[paramkey].split(new RegExp(/[\;]/)); + let tempArray: Array = []; + keysGrounp.forEach((singlekey: any) => { + let _items = items.filter((item: any) => { return item[paramkey] == singlekey }); + if(_items.length >0){ + tempArray.push(..._items); + } + }) + items = tempArray; + } else { + items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] }); + } + }) + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(items); + console.groupEnd(); + console.groupEnd(); + return [status, items]; +}); + + +// FetchTypeGroup +mock.onGet(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/fetchtypegroup$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: FetchTypeGroup"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + let tempValue: any = {}; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/fetchtypegroup$/).exec(config.url); + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + if (items.length > 0 && paramArray.length > 0) { + paramArray.forEach((paramkey: any) => { + if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) { + let keysGrounp: Array = tempValue[paramkey].split(new RegExp(/[\;]/)); + let tempArray: Array = []; + keysGrounp.forEach((singlekey: any) => { + let _items = items.filter((item: any) => { return item[paramkey] == singlekey }); + if(_items.length >0){ + tempArray.push(..._items); + } + }) + items = tempArray; + } else { + items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] }); + } + }) + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(items); + console.groupEnd(); + console.groupEnd(); + return [status, items]; +}); + + +// FetchDefault +mock.onGet(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/fetchdefault$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + let tempValue: any = {}; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/fetchdefault$/).exec(config.url); + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + if (items.length > 0 && paramArray.length > 0) { + paramArray.forEach((paramkey: any) => { + if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) { + let keysGrounp: Array = tempValue[paramkey].split(new RegExp(/[\;]/)); + let tempArray: Array = []; + keysGrounp.forEach((singlekey: any) => { + let _items = items.filter((item: any) => { return item[paramkey] == singlekey }); + if(_items.length >0){ + tempArray.push(..._items); + } + }) + items = tempArray; + } else { + items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] }); + } + }) + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(items); + console.groupEnd(); + console.groupEnd(); + return [status, items]; +}); + + +// FetchDefault +mock.onGet(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/fetchdefault$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + let tempValue: any = {}; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/fetchdefault$/).exec(config.url); + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + if (items.length > 0 && paramArray.length > 0) { + paramArray.forEach((paramkey: any) => { + if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) { + let keysGrounp: Array = tempValue[paramkey].split(new RegExp(/[\;]/)); + let tempArray: Array = []; + keysGrounp.forEach((singlekey: any) => { + let _items = items.filter((item: any) => { return item[paramkey] == singlekey }); + if(_items.length >0){ + tempArray.push(..._items); + } + }) + items = tempArray; + } else { + items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] }); + } + }) + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(items); + console.groupEnd(); + console.groupEnd(); + return [status, items]; +}); + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + + +// Remove +mock.onDelete(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: Remove"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); + +// Remove +mock.onDelete(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: Remove"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); + +// Get +mock.onGet(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: Get"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); + +// Get +mock.onGet(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:ibz_subtask 方法: Get"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/ibz_subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); diff --git a/app_Web/src/mock/entity/product-statss/product-statss.ts b/app_Web/src/mock/entity/product-statss/product-statss.ts new file mode 100644 index 0000000000000000000000000000000000000000..d855fea6fc50f96512be2b800c417aaa5b5033d5 --- /dev/null +++ b/app_Web/src/mock/entity/product-statss/product-statss.ts @@ -0,0 +1,380 @@ +import qs from 'qs'; +import { MockAdapter } from '@/mock/mock-adapter'; +const mock = MockAdapter.getInstance(); + +// 模拟数据 +const mockDatas: Array = [ +]; + + +//getwflink +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/productstats\/[a-zA-Z0-9\-\;]+\/usertasks\/[a-zA-Z0-9\-\;]+\/ways$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: getwflink"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status,[ + {"sequenceFlowId":"dfdsfdsfdsfdsfds","sequenceFlowName":"同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddlfldldfldsfds","refViewKey":""}, + {"sequenceFlowId":"ddssdfdfdfdfsfdf","sequenceFlowName":"不同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddfdsldlfdlldsf","refViewKey":"workorder_ltform_editview"} + ]]; +}); + +// getwfstep +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/productstats\/process-definitions-nodes$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: getwfstep"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, [ + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-dfdfd", + "userTaskName":"待审", + "cnt":0, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1" + }, + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-87927", + "userTaskName":"待分配", + "cnt":3, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1"} + ]]; +}); + +// createBatch +mock.onPost(new RegExp(/^\/productstats\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: createBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// updateBatch +mock.onPut(new RegExp(/^\/productstats\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: updateBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// removeBatch +mock.onDelete(new RegExp(/^\/productstats\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: removeBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + + +// Select +mock.onGet(new RegExp(/^\/productstats\/([a-zA-Z0-9\-\;]{1,35})\/select$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: Select"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/productstats\/([a-zA-Z0-9\-\;]{1,35})\/select$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items); + console.groupEnd(); + console.groupEnd(); + return [status, _items]; +}); + +// Update +mock.onPut(new RegExp(/^\/productstats\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: Update"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/productstats\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// GetDraft +mock.onGet(new RegExp(/^\/productstats\/getdraft$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: GetDraft"); + console.table({url:config.url, method: config.method, data:config.data}); + // GetDraft + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// Save +mock.onPost(new RegExp(/^\/productstats\/?([a-zA-Z0-9\-\;]{0,35})\/save$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: Save"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/productstats\/([a-zA-Z0-9\-\;]{1,35})\/save$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// Create +mock.onPost(new RegExp(/^\/productstats\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: Create"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/productstats\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(mockDatas[0]); + console.groupEnd(); + console.groupEnd(); + return [status, mockDatas[0]]; +}); + +// CheckKey +mock.onPost(new RegExp(/^\/productstats\/?([a-zA-Z0-9\-\;]{0,35})\/checkkey$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: CheckKey"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/productstats\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// FetchDefault +mock.onGet(new RegExp(/^\/productstats\/fetchdefault$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(mockDatas); + console.groupEnd(); + console.groupEnd(); + return [status, mockDatas ? mockDatas : []]; +}); + +// FetchDefault +mock.onGet(new RegExp(/^\/productstats\/fetchdefault(\?[\w-./?%&=,]*)*$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + if(config.url.includes('page')){ + let url = config.url.split('?')[1]; + let params = qs.parse(url); + Object.assign(config, params); + } + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + let total = mockDatas.length; + let records: Array = []; + if(!config.page || !config.size){ + records = mockDatas; + }else{ + if((config.page-1)*config.size < total){ + records = mockDatas.slice(config.page,config.size); + } + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(records ? records : []); + console.groupEnd(); + console.groupEnd(); + return [status, records ? records : []]; +}); +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 + + +// Get +mock.onGet(new RegExp(/^\/productstats\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: Get"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/productstats\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); + +// Remove +mock.onDelete(new RegExp(/^\/productstats\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:productstats 方法: Remove"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/productstats\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); diff --git a/app_Web/src/mock/entity/products/products.ts b/app_Web/src/mock/entity/products/products.ts index a325bd7d6362390e6921059732d765da15280b46..622e79f5261146cc9c3e13a3067c6f9ef60fe8d6 100644 --- a/app_Web/src/mock/entity/products/products.ts +++ b/app_Web/src/mock/entity/products/products.ts @@ -245,6 +245,44 @@ mock.onPut(new RegExp(/^\/products\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: return [status, data]; }); +// Close +mock.onPost(new RegExp(/^\/products\/?([a-zA-Z0-9\-\;]{0,35})\/close$/)).reply((config: any) => { + console.groupCollapsed("实体:product 方法: Close"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/close$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + // Create mock.onPost(new RegExp(/^\/products\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: any) => { console.groupCollapsed("实体:product 方法: Create"); diff --git a/app_Web/src/mock/entity/project-statss/project-statss.ts b/app_Web/src/mock/entity/project-statss/project-statss.ts new file mode 100644 index 0000000000000000000000000000000000000000..4288cab4cb4df512b13422681f01c4c621ce04c2 --- /dev/null +++ b/app_Web/src/mock/entity/project-statss/project-statss.ts @@ -0,0 +1,424 @@ +import qs from 'qs'; +import { MockAdapter } from '@/mock/mock-adapter'; +const mock = MockAdapter.getInstance(); + +// 模拟数据 +const mockDatas: Array = [ +]; + + +//getwflink +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/projectstats\/[a-zA-Z0-9\-\;]+\/usertasks\/[a-zA-Z0-9\-\;]+\/ways$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: getwflink"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status,[ + {"sequenceFlowId":"dfdsfdsfdsfdsfds","sequenceFlowName":"同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddlfldldfldsfds","refViewKey":""}, + {"sequenceFlowId":"ddssdfdfdfdfsfdf","sequenceFlowName":"不同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddfdsldlfdlldsf","refViewKey":"workorder_ltform_editview"} + ]]; +}); + +// getwfstep +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/projectstats\/process-definitions-nodes$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: getwfstep"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, [ + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-dfdfd", + "userTaskName":"待审", + "cnt":0, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1" + }, + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-87927", + "userTaskName":"待分配", + "cnt":3, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1"} + ]]; +}); + +// createBatch +mock.onPost(new RegExp(/^\/projectstats\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: createBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// updateBatch +mock.onPut(new RegExp(/^\/projectstats\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: updateBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// removeBatch +mock.onDelete(new RegExp(/^\/projectstats\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: removeBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + + +// Select +mock.onGet(new RegExp(/^\/projectstats\/([a-zA-Z0-9\-\;]{1,35})\/select$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: Select"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/projectstats\/([a-zA-Z0-9\-\;]{1,35})\/select$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items); + console.groupEnd(); + console.groupEnd(); + return [status, _items]; +}); + +// Update +mock.onPut(new RegExp(/^\/projectstats\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: Update"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/projectstats\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// Save +mock.onPost(new RegExp(/^\/projectstats\/?([a-zA-Z0-9\-\;]{0,35})\/save$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: Save"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/projectstats\/([a-zA-Z0-9\-\;]{1,35})\/save$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// Create +mock.onPost(new RegExp(/^\/projectstats\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: Create"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/projectstats\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(mockDatas[0]); + console.groupEnd(); + console.groupEnd(); + return [status, mockDatas[0]]; +}); + +// CheckKey +mock.onPost(new RegExp(/^\/projectstats\/?([a-zA-Z0-9\-\;]{0,35})\/checkkey$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: CheckKey"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/projectstats\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + +// GetDraft +mock.onGet(new RegExp(/^\/projectstats\/getdraft$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: GetDraft"); + console.table({url:config.url, method: config.method, data:config.data}); + // GetDraft + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// FetchTaskTime +mock.onGet(new RegExp(/^\/projectstats\/fetchtasktime$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: FetchTaskTime"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(mockDatas); + console.groupEnd(); + console.groupEnd(); + return [status, mockDatas ? mockDatas : []]; +}); + +// FetchTaskTime +mock.onGet(new RegExp(/^\/projectstats\/fetchtasktime(\?[\w-./?%&=,]*)*$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: FetchTaskTime"); + console.table({url:config.url, method: config.method, data:config.data}); + if(config.url.includes('page')){ + let url = config.url.split('?')[1]; + let params = qs.parse(url); + Object.assign(config, params); + } + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + let total = mockDatas.length; + let records: Array = []; + if(!config.page || !config.size){ + records = mockDatas; + }else{ + if((config.page-1)*config.size < total){ + records = mockDatas.slice(config.page,config.size); + } + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(records ? records : []); + console.groupEnd(); + console.groupEnd(); + return [status, records ? records : []]; +}); + +// FetchDefault +mock.onGet(new RegExp(/^\/projectstats\/fetchdefault$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(mockDatas); + console.groupEnd(); + console.groupEnd(); + return [status, mockDatas ? mockDatas : []]; +}); + +// FetchDefault +mock.onGet(new RegExp(/^\/projectstats\/fetchdefault(\?[\w-./?%&=,]*)*$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + if(config.url.includes('page')){ + let url = config.url.split('?')[1]; + let params = qs.parse(url); + Object.assign(config, params); + } + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + let total = mockDatas.length; + let records: Array = []; + if(!config.page || !config.size){ + records = mockDatas; + }else{ + if((config.page-1)*config.size < total){ + records = mockDatas.slice(config.page,config.size); + } + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(records ? records : []); + console.groupEnd(); + console.groupEnd(); + return [status, records ? records : []]; +}); +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 +// URI参数传递情况未实现 + + +// Get +mock.onGet(new RegExp(/^\/projectstats\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: Get"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/projectstats\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); + +// Remove +mock.onDelete(new RegExp(/^\/projectstats\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:projectstats 方法: Remove"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/projectstats\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); diff --git a/app_Web/src/mock/entity/storys/storys.ts b/app_Web/src/mock/entity/storys/storys.ts index 6a5dbf36a7906a86e3336d4cbadb1bd18eac349c..80d71cfdaf21bff6f59b2aae04ce0d20fd465e5b 100644 --- a/app_Web/src/mock/entity/storys/storys.ts +++ b/app_Web/src/mock/entity/storys/storys.ts @@ -231,6 +231,266 @@ mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: }); +// BatchChangeStage +mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchchangestage$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchChangeStage"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchchangestage$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// BatchChangeStage +mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})\/batchchangestage$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchChangeStage"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchchangestage$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + + +// BatchChangePlan +mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchchangeplan$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchChangePlan"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchchangeplan$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// BatchChangePlan +mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})\/batchchangeplan$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchChangePlan"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchchangeplan$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + + +// BatchClose +mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchclose$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchClose"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchclose$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// BatchClose +mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})\/batchclose$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchClose"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchclose$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + + +// Change +mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/change$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: Change"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/change$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// Change +mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})\/change$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: Change"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/stories\/([a-zA-Z0-9\-\;]{1,35})\/change$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + + // CheckKey mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/)).reply((config: any) => { console.groupCollapsed("实体:story 方法: CheckKey"); @@ -361,18 +621,17 @@ mock.onPut(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})$/)).reply((config: a return [status, data]; }); - -// Save -mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/save$/)).reply((config: any) => { - console.groupCollapsed("实体:story 方法: Save"); +// BatchChangeBranch +mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchchangebranch$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchChangeBranch"); console.table({url:config.url, method: config.method, data:config.data}); let status = MockAdapter.mockStatus(config); if (status !== 200) { return [status, null]; } const paramArray:Array = ['id','id']; - const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/save$/).exec(config.url); + const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchchangebranch$/).exec(config.url); let tempValue: any = {}; if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ paramArray.forEach((item: any, index: number) => { @@ -389,16 +648,472 @@ mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0 return [status, {}]; }); -// Save -mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})\/save$/)).reply((config: any) => { - console.groupCollapsed("实体:story 方法: Save"); +// BatchChangeBranch +mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})\/batchchangebranch$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchChangeBranch"); console.table({url:config.url, method: config.method, data:config.data}); let status = MockAdapter.mockStatus(config); if (status !== 200) { return [status, null]; } const paramArray:Array = ['id']; - const matchArray:any = new RegExp(/^\/stories\/([a-zA-Z0-9\-\;]{1,35})\/save$/).exec(config.url); + const matchArray:any = new RegExp(/^\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchchangebranch$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + + +// BatchReview +mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchreview$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchReview"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchreview$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// BatchReview +mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})\/batchreview$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchReview"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchreview$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + + +// Review +mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/review$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: Review"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/review$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// Review +mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})\/review$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: Review"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/stories\/([a-zA-Z0-9\-\;]{1,35})\/review$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + + +// AssignTo +mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/assignto$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: AssignTo"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/assignto$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// AssignTo +mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})\/assignto$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: AssignTo"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/stories\/([a-zA-Z0-9\-\;]{1,35})\/assignto$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + + +// BatchAssignTo +mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchassignto$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchAssignTo"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchassignto$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// BatchAssignTo +mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})\/batchassignto$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchAssignTo"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchassignto$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + + + +// Save +mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/save$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: Save"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/save$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// Save +mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})\/save$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: Save"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/stories\/([a-zA-Z0-9\-\;]{1,35})\/save$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + + +// BatchChangeModule +mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchchangemodule$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchChangeModule"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchchangemodule$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// BatchChangeModule +mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})\/batchchangemodule$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: BatchChangeModule"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/stories\/([a-zA-Z0-9\-\;]{1,35})\/batchchangemodule$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + //let items = mockDatas ? mockDatas : []; + //let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + let data = JSON.parse(config.data); + mockDatas.forEach((item)=>{ + if(item['id'] == tempValue['id'] ){ + for(let value in data){ + if(item.hasOwnProperty(value)){ + item[value] = data[value]; + } + } + } + }) + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(data); + console.groupEnd(); + console.groupEnd(); + return [status, data]; +}); + + +// Close +mock.onPost(new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/close$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: Close"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/products\/([a-zA-Z0-9\-\;]{1,35})\/stories\/([a-zA-Z0-9\-\;]{1,35})\/close$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + +// Close +mock.onPost(new RegExp(/^\/stories\/?([a-zA-Z0-9\-\;]{0,35})\/close$/)).reply((config: any) => { + console.groupCollapsed("实体:story 方法: Close"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + const matchArray:any = new RegExp(/^\/stories\/([a-zA-Z0-9\-\;]{1,35})\/close$/).exec(config.url); let tempValue: any = {}; if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ paramArray.forEach((item: any, index: number) => { diff --git a/app_Web/src/mock/entity/sub-tasks/sub-tasks.ts b/app_Web/src/mock/entity/sub-tasks/sub-tasks.ts new file mode 100644 index 0000000000000000000000000000000000000000..971c771814043c38fdf4f340bd4cd970c96843a4 --- /dev/null +++ b/app_Web/src/mock/entity/sub-tasks/sub-tasks.ts @@ -0,0 +1,811 @@ +import qs from 'qs'; +import { MockAdapter } from '@/mock/mock-adapter'; +const mock = MockAdapter.getInstance(); + +// 模拟数据 +const mockDatas: Array = [ +]; + + +//getwflink +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/subtasks\/[a-zA-Z0-9\-\;]+\/usertasks\/[a-zA-Z0-9\-\;]+\/ways$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: getwflink"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status,[ + {"sequenceFlowId":"dfdsfdsfdsfdsfds","sequenceFlowName":"同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddlfldldfldsfds","refViewKey":""}, + {"sequenceFlowId":"ddssdfdfdfdfsfdf","sequenceFlowName":"不同意", + "taskId":"aaaaddddccccddddd","processDefinitionKey":"support-workorders-approve-v1", + "processInstanceId":"ddfdsldlfdlldsf","refViewKey":"workorder_ltform_editview"} + ]]; +}); + +// getwfstep +mock.onGet(new RegExp(/^\/wfcore\/pms-app-web\/subtasks\/process-definitions-nodes$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: getwfstep"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, [ + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-dfdfd", + "userTaskName":"待审", + "cnt":0, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1" + }, + {"userTaskId":"sddfddfd-dfdf-fdfd-fdf-87927", + "userTaskName":"待分配", + "cnt":3, + "processDefinitionKey":"support-workorders-approve-v1", + "processDefinitionName":"工单审批流程v1"} + ]]; +}); + +// createBatch +mock.onPost(new RegExp(/^\/subtasks\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: createBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// updateBatch +mock.onPut(new RegExp(/^\/subtasks\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: updateBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + +// removeBatch +mock.onDelete(new RegExp(/^\/subtasks\/batch$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: removeBatch"); + console.table({url:config.url, method: config.method, data:config.data}); + console.groupEnd(); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, {}]; + } + return [status, {}]; +}); + + + +// Select +mock.onGet(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})\/select$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: Select"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})\/select$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items); + console.groupEnd(); + console.groupEnd(); + return [status, _items]; +}); + + +// Select +mock.onGet(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})\/select$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: Select"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})\/select$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items); + console.groupEnd(); + console.groupEnd(); + return [status, _items]; +}); + + +// GetDraft +mock.onGet(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/getdraft$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: GetDraft"); + console.table({url:config.url, method: config.method, data:config.data}); + // GetDraft + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// GetDraft +mock.onGet(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/getdraft$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: GetDraft"); + console.table({url:config.url, method: config.method, data:config.data}); + // GetDraft + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + + + +// Update +mock.onPut(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: Update"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// Update +mock.onPut(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: Update"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// Save +mock.onPost(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})\/save$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: Save"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})\/save$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// Save +mock.onPost(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})\/save$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: Save"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})\/save$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + + + +// CheckKey +mock.onPost(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: CheckKey"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// CheckKey +mock.onPost(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: CheckKey"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})\/checkkey$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// Create +mock.onPost(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: Create"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// Create +mock.onPost(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: Create"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table({}); + console.groupEnd(); + console.groupEnd(); + return [status, {}]; +}); + + +// FetchRootTask +mock.onGet(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/fetchroottask$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: FetchRootTask"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + let tempValue: any = {}; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/fetchroottask$/).exec(config.url); + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + if (items.length > 0 && paramArray.length > 0) { + paramArray.forEach((paramkey: any) => { + if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) { + let keysGrounp: Array = tempValue[paramkey].split(new RegExp(/[\;]/)); + let tempArray: Array = []; + keysGrounp.forEach((singlekey: any) => { + let _items = items.filter((item: any) => { return item[paramkey] == singlekey }); + if(_items.length >0){ + tempArray.push(..._items); + } + }) + items = tempArray; + } else { + items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] }); + } + }) + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(items); + console.groupEnd(); + console.groupEnd(); + return [status, items]; +}); + + +// FetchRootTask +mock.onGet(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/fetchroottask$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: FetchRootTask"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + let tempValue: any = {}; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/fetchroottask$/).exec(config.url); + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + if (items.length > 0 && paramArray.length > 0) { + paramArray.forEach((paramkey: any) => { + if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) { + let keysGrounp: Array = tempValue[paramkey].split(new RegExp(/[\;]/)); + let tempArray: Array = []; + keysGrounp.forEach((singlekey: any) => { + let _items = items.filter((item: any) => { return item[paramkey] == singlekey }); + if(_items.length >0){ + tempArray.push(..._items); + } + }) + items = tempArray; + } else { + items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] }); + } + }) + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(items); + console.groupEnd(); + console.groupEnd(); + return [status, items]; +}); + + +// FetchTypeGroup +mock.onGet(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/fetchtypegroup$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: FetchTypeGroup"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + let tempValue: any = {}; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/fetchtypegroup$/).exec(config.url); + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + if (items.length > 0 && paramArray.length > 0) { + paramArray.forEach((paramkey: any) => { + if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) { + let keysGrounp: Array = tempValue[paramkey].split(new RegExp(/[\;]/)); + let tempArray: Array = []; + keysGrounp.forEach((singlekey: any) => { + let _items = items.filter((item: any) => { return item[paramkey] == singlekey }); + if(_items.length >0){ + tempArray.push(..._items); + } + }) + items = tempArray; + } else { + items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] }); + } + }) + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(items); + console.groupEnd(); + console.groupEnd(); + return [status, items]; +}); + + +// FetchTypeGroup +mock.onGet(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/fetchtypegroup$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: FetchTypeGroup"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + let tempValue: any = {}; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/fetchtypegroup$/).exec(config.url); + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + if (items.length > 0 && paramArray.length > 0) { + paramArray.forEach((paramkey: any) => { + if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) { + let keysGrounp: Array = tempValue[paramkey].split(new RegExp(/[\;]/)); + let tempArray: Array = []; + keysGrounp.forEach((singlekey: any) => { + let _items = items.filter((item: any) => { return item[paramkey] == singlekey }); + if(_items.length >0){ + tempArray.push(..._items); + } + }) + items = tempArray; + } else { + items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] }); + } + }) + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(items); + console.groupEnd(); + console.groupEnd(); + return [status, items]; +}); + + +// FetchDefault +mock.onGet(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/fetchdefault$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + let tempValue: any = {}; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/fetchdefault$/).exec(config.url); + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + if (items.length > 0 && paramArray.length > 0) { + paramArray.forEach((paramkey: any) => { + if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) { + let keysGrounp: Array = tempValue[paramkey].split(new RegExp(/[\;]/)); + let tempArray: Array = []; + keysGrounp.forEach((singlekey: any) => { + let _items = items.filter((item: any) => { return item[paramkey] == singlekey }); + if(_items.length >0){ + tempArray.push(..._items); + } + }) + items = tempArray; + } else { + items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] }); + } + }) + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(items); + console.groupEnd(); + console.groupEnd(); + return [status, items]; +}); + + +// FetchDefault +mock.onGet(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/fetchdefault$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: FetchDefault"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id']; + let tempValue: any = {}; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/fetchdefault$/).exec(config.url); + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + if (items.length > 0 && paramArray.length > 0) { + paramArray.forEach((paramkey: any) => { + if (tempValue[paramkey] && tempValue[paramkey].indexOf(";") > 0) { + let keysGrounp: Array = tempValue[paramkey].split(new RegExp(/[\;]/)); + let tempArray: Array = []; + keysGrounp.forEach((singlekey: any) => { + let _items = items.filter((item: any) => { return item[paramkey] == singlekey }); + if(_items.length >0){ + tempArray.push(..._items); + } + }) + items = tempArray; + } else { + items = items.filter((item: any) => { return item[paramkey] == tempValue[paramkey] }); + } + }) + } + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(items); + console.groupEnd(); + console.groupEnd(); + return [status, items]; +}); + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + +// URI参数传递情况未实现 + + +// Remove +mock.onDelete(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: Remove"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); + +// Remove +mock.onDelete(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: Remove"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); + +// Get +mock.onGet(new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: Get"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id','id']; + const matchArray:any = new RegExp(/^\/projects\/([a-zA-Z0-9\-\;]{1,35})\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); + +// Get +mock.onGet(new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => { + console.groupCollapsed("实体:subtask 方法: Get"); + console.table({url:config.url, method: config.method, data:config.data}); + let status = MockAdapter.mockStatus(config); + if (status !== 200) { + return [status, null]; + } + const paramArray:Array = ['id','id']; + const matchArray:any = new RegExp(/^\/tasks\/([a-zA-Z0-9\-\;]{1,35})\/subtasks\/([a-zA-Z0-9\-\;]{1,35})$/).exec(config.url); + let tempValue: any = {}; + if(matchArray && matchArray.length >1 && paramArray && paramArray.length >0){ + paramArray.forEach((item: any, index: number) => { + Object.defineProperty(tempValue, item, { + enumerable: true, + value: matchArray[index + 1] + }); + }); + } + let items = mockDatas ? mockDatas : []; + let _items = items.find((item: any) => Object.is(item.id, tempValue.id)); + console.groupCollapsed("response数据 status: "+status+" data: "); + console.table(_items?_items:{}); + console.groupEnd(); + console.groupEnd(); + return [status, _items?_items:{}]; +}); diff --git a/app_Web/src/mock/index.ts b/app_Web/src/mock/index.ts index c2945eee9e752d2e4e2f671931220c40e6e14a86..1dd78f9a47e7c830c0c627a5a266301464395ff3 100644 --- a/app_Web/src/mock/index.ts +++ b/app_Web/src/mock/index.ts @@ -14,9 +14,14 @@ import './entity/products/products'; import './entity/sub-product-plans/sub-product-plans'; import './entity/story-specs/story-specs'; import './entity/branchs/branchs'; +import './entity/product-statss/product-statss'; import './entity/actions/actions'; +import './entity/groups/groups'; import './entity/case-steps/case-steps'; +import './entity/depts/depts'; +import './entity/companys/companys'; import './entity/storys/storys'; +import './entity/sub-tasks/sub-tasks'; import './entity/projects/projects'; import './entity/historys/historys'; import './entity/users/users'; @@ -26,6 +31,7 @@ import './entity/product-lifes/product-lifes'; import './entity/tasks/tasks'; import './entity/builds/builds'; import './entity/test-tasks/test-tasks'; +import './entity/project-statss/project-statss'; import './entity/bugs/bugs'; import './entity/ibz-docs/ibz-docs'; import './entity/releases/releases'; diff --git a/app_Web/src/mock/viewconfig/viewconfig.ts b/app_Web/src/mock/viewconfig/viewconfig.ts index f7d1724fa53e46c9618a95d8ade2aae6d38ff069..719b121b1b2e789ae03e1fe4df81ad753e5bf39e 100644 --- a/app_Web/src/mock/viewconfig/viewconfig.ts +++ b/app_Web/src/mock/viewconfig/viewconfig.ts @@ -23,6 +23,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "ProductExpEditView", "viewtag": "00ac056d598228619b6c0dbfcd603e4c" }, + "companydepttreeexpview": { + "title": "组织部门树导航视图", + "caption": "公司", + "viewtype": "DETREEEXPVIEW", + "viewmodule": "zentao", + "viewname": "CompanyDeptTreeExpView", + "viewtag": "025443fdc6ac693e261108fbdf1b40ab" + }, "caseeditview": { "title": "case编辑视图", "caption": "测试用例", @@ -79,6 +87,22 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "ProjectTaskTreeExpView", "viewtag": "103bc77ad54de2476db1d4e9c788cd4e" }, + "bugmaineditview": { + "title": "Bug编辑", + "caption": "Bug编辑", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "BugMainEditView", + "viewtag": "122af527bf38b47ddc53c882847b490e" + }, + "taskassigntaskview": { + "title": "指派任务", + "caption": "指派任务", + "viewtype": "DEOPTVIEW", + "viewmodule": "zentao", + "viewname": "TaskAssignTaskView", + "viewtag": "12661bdb476cd339554799b417c6ea48" + }, "bugmaindashboardview": { "title": "Bug数据看板视图", "caption": "Bug", @@ -87,6 +111,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "BugMainDashboardView", "viewtag": "1540523a668e920d831510cfbec2c5e2" }, + "deptpickupview": { + "title": "dept数据选择视图", + "caption": "部门", + "viewtype": "DEPICKUPVIEW", + "viewmodule": "zentao", + "viewname": "DeptPickupView", + "viewtag": "16b54862dad958907853dc7eb084a0c0" + }, "productplansubplancreateview": { "title": "计划", "caption": "产品计划", @@ -143,6 +175,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "BugMPickupView", "viewtag": "21d716ac12c793af54b112a5a3599674" }, + "taskmaineditview": { + "title": "任务", + "caption": "任务", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "TaskMainEditView", + "viewtag": "21e00a7239d9737bbfda5c1608b4129c" + }, "moduleeditview": { "title": "模块", "caption": "模块", @@ -183,6 +223,22 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "TaskMainInfoView9", "viewtag": "321ab2e4e87a29fef8eed086e951a006" }, + "tasksubtasknewview": { + "title": "子任务", + "caption": "子任务", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "TaskSubTaskNewView", + "viewtag": "35ba93bac795e0deb7297d2d471b7180" + }, + "projectstatsmaindashboardview": { + "title": "项目统计数据看板视图", + "caption": "项目统计", + "viewtype": "DEPORTALVIEW", + "viewmodule": "ibiz", + "viewname": "ProjectStatsMainDashboardView", + "viewtag": "37df93bfc6d8126c9303eab0c5363df8" + }, "projectburndownchartview": { "title": "燃尽图", "caption": "项目", @@ -199,6 +255,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "ProjectListExpView", "viewtag": "3aafb12bb0db2be013c0f5ced8c7dc50" }, + "projectpickupgridview": { + "title": "project选择表格视图", + "caption": "项目", + "viewtype": "DEPICKUPGRIDVIEW", + "viewmodule": "zentao", + "viewname": "ProjectPickupGridView", + "viewtag": "3b346aee2b79b7b6b59bc870b4c67f72" + }, "storymainview": { "title": "需求数据看板视图", "caption": "需求", @@ -207,8 +271,24 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "StoryMainView", "viewtag": "3f2ca3e560d9082bb56fbf7667a57a66" }, + "casemaingridview": { + "title": "功能测试", + "caption": "测试用例", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "CaseMainGridView", + "viewtag": "417541fa331fc089b84936b8359403fa" + }, + "bugbuglifeeditview9": { + "title": "Bug的一生", + "caption": "Bug", + "viewtype": "DEEDITVIEW9", + "viewmodule": "zentao", + "viewname": "BugBugLifeEditView9", + "viewtag": "443935a0b9d0fa8daf3131956a8bacc9" + }, "bugeditview": { - "title": "bug编辑视图", + "title": "Bug", "caption": "Bug", "viewtype": "DEEDITVIEW", "viewmodule": "zentao", @@ -223,6 +303,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "StoryEditView", "viewtag": "4863a523ac490ebce771717756f0c6a8" }, + "taskgridview": { + "title": "task表格视图", + "caption": "任务", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "TaskGridView", + "viewtag": "4b01c8ae7e7e23b9c67dbca2ee90e41b" + }, "storygridview9_assignedtome": { "title": "需求表格视图", "caption": "需求", @@ -231,6 +319,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "StoryGridView9_AssignedToMe", "viewtag": "4b82e9acf6c784b138b365d6011b296b" }, + "companydeptusertreeexpview": { + "title": "组织部门人员树导航视图", + "caption": "公司", + "viewtype": "DETREEEXPVIEW", + "viewmodule": "zentao", + "viewname": "CompanyDeptUserTreeExpView", + "viewtag": "4cb497e84dfabd873bc62d5386d5551f" + }, "productplansubplangridview": { "title": "子计划", "caption": "产品计划", @@ -295,6 +391,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "ProductPlanSubPlanEditView", "viewtag": "54c7ba4afb6222c4c0af04a78a0592df" }, + "companymaintabexpview": { + "title": "组织权限", + "caption": "组织权限", + "viewtype": "DETABEXPVIEW", + "viewmodule": "zentao", + "viewname": "CompanyMainTabExpView", + "viewtag": "56084e37dc061358abd4a3f5340b27e9" + }, "storypickupgridview": { "title": "需求", "caption": "需求", @@ -311,6 +415,22 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "TaskMainDashboardView", "viewtag": "575fecad655143bbd28f17c581725a4e" }, + "userpickupview": { + "title": "user数据选择视图", + "caption": "用户", + "viewtype": "DEPICKUPVIEW", + "viewmodule": "zentao", + "viewname": "UserPickupView", + "viewtag": "57e77f1cea8cff268fbd744f326867fb" + }, + "casemainnewview": { + "title": "功能测试", + "caption": "功能测试", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "CaseMainNewView", + "viewtag": "5890a810365fec51e801d2cffce44fde" + }, "productstorytreeexpview": { "title": "产品需求导航视图", "caption": "产品", @@ -319,6 +439,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "ProductStoryTreeExpView", "viewtag": "58a943454a652d4f4ce2702d6447c079" }, + "projectpickupview": { + "title": "project数据选择视图", + "caption": "项目", + "viewtype": "DEPICKUPVIEW", + "viewmodule": "zentao", + "viewname": "ProjectPickupView", + "viewtag": "5a8a29268a7563b62fc0160233958830" + }, "testtaskeditview": { "title": "testtask编辑视图", "caption": "测试版本", @@ -327,6 +455,22 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "TestTaskEditView", "viewtag": "5b139a407fa34f386f3f784f33841184" }, + "deptmaingridview": { + "title": "dept表格视图", + "caption": "部门", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "DeptMainGridView", + "viewtag": "5c2b20935d511794aeca60376bd81fef" + }, + "productstatseditview9": { + "title": "产品统计编辑视图", + "caption": "产品统计", + "viewtype": "DEEDITVIEW9", + "viewmodule": "ibiz", + "viewname": "ProductStatsEditView9", + "viewtag": "5d468f620cc30181773d875b3bb8be6e" + }, "tasktasktypeganttview": { "title": "任务甘特视图", "caption": "任务", @@ -343,6 +487,38 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "StoryMainView9_StorySpec", "viewtag": "61f32b2b422e8f1a9825e1f704464a8c" }, + "productcasetreeexpview": { + "title": "产品需求导航视图", + "caption": "产品", + "viewtype": "DETREEEXPVIEW", + "viewmodule": "zentao", + "viewname": "ProductCaseTreeExpView", + "viewtag": "63b82c8ee288130faca83833ec1f837c" + }, + "taskpivottableview": { + "title": "任务表格视图", + "caption": "任务", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "TaskPivotTableView", + "viewtag": "64204774cc4b97f20aa3becb41b184d5" + }, + "bugstepsinfoeditview": { + "title": "Bug编辑视图", + "caption": "重现步骤", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "BugStepsInfoEditView", + "viewtag": "6558930042f15c2297572f51d7e77df5" + }, + "casebatchnewgridview": { + "title": "测试用例", + "caption": "测试用例", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "CaseBatchNewGridView", + "viewtag": "66769499a681f12bd2ebff8859f1d4ea" + }, "productmaintabexpview": { "title": "产品", "caption": "产品", @@ -351,6 +527,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "ProductMainTabExpView", "viewtag": "6c7b582273d0726bcf77214807cfe40c" }, + "casemaindashboardview": { + "title": "功能测试", + "caption": "功能测试", + "viewtype": "DEPORTALVIEW", + "viewmodule": "zentao", + "viewname": "CaseMainDashboardView", + "viewtag": "6f78b25e86923ab600a2141d50fe49fd" + }, "actionhistroylistview": { "title": "历史记录", "caption": "系统日志", @@ -415,6 +599,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "ActionProjectTrendsListView", "viewtag": "7d34636d1c24d613abf8d3fdc64ec7ba" }, + "productpickupview": { + "title": "product数据选择视图", + "caption": "产品", + "viewtype": "DEPICKUPVIEW", + "viewmodule": "zentao", + "viewname": "ProductPickupView", + "viewtag": "7df0f0deee91304e0350f00baa8a92d6" + }, "storymainview_editmode": { "title": "需求数据看板视图", "caption": "需求", @@ -447,6 +639,22 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "ProductPlanGridView", "viewtag": "81b0cee2fedff8f4902c0d735714e5af" }, + "groupmaingridview": { + "title": "group表格视图", + "caption": "群组", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "GroupMainGridView", + "viewtag": "8399a93b13ffd4ecea6c65e7804a1353" + }, + "usereditview": { + "title": "user编辑视图", + "caption": "用户信息", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "UserEditView", + "viewtag": "83b1f6c353e9383e36b8d58eec845267" + }, "projectgridview": { "title": "项目", "caption": "项目", @@ -463,6 +671,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "ProjectMainDashboardView", "viewtag": "85ee867b09a2d6303c061d91374ec975" }, + "taskworkinfoeditview9": { + "title": "工时信息", + "caption": "工时信息", + "viewtype": "DEEDITVIEW9", + "viewmodule": "zentao", + "viewname": "TaskWorkInfoEditView9", + "viewtag": "8ca35f54383cecb05da77cdb1a6588fd" + }, "productleftsidebarlistview": { "title": "所有产品", "caption": "产品", @@ -471,6 +687,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "ProductLeftSidebarListView", "viewtag": "8ca39819b87c5e3e8669fcd7409cf9a2" }, + "productpickupgridview": { + "title": "product选择表格视图", + "caption": "产品", + "viewtype": "DEPICKUPGRIDVIEW", + "viewmodule": "zentao", + "viewname": "ProductPickupGridView", + "viewtag": "8d53a973712c13f448efb8e2182ccc0b" + }, "storymainview9": { "title": "需求编辑视图", "caption": "需求", @@ -583,6 +807,30 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "TestTaskGridView", "viewtag": "aae1ade339fe6a2ebe367489f6393db1" }, + "companymainview": { + "title": "公司数据看板视图", + "caption": "公司信息", + "viewtype": "DEPORTALVIEW", + "viewmodule": "zentao", + "viewname": "CompanyMainView", + "viewtag": "abc58a7e8f6c6860ef5ea3ead20e5ffd" + }, + "taskopentaskview": { + "title": "开始任务", + "caption": "开始任务", + "viewtype": "DEOPTVIEW", + "viewmodule": "zentao", + "viewname": "TaskOpenTaskView", + "viewtag": "abca63015fc84466991c6479f955f6d0" + }, + "companyeditview": { + "title": "company编辑视图", + "caption": "公司信息", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "CompanyEditView", + "viewtag": "b39a7a76c2175803831235ae3aeef05b" + }, "productdashboardinfomainview9": { "title": "产品信息", "caption": "产品", @@ -591,6 +839,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "ProductDashboardInfoMainView9", "viewtag": "b5d2389c0dd12ae614b319090ecc2361" }, + "taskclosepausecancelview": { + "title": "任务选项操作视图", + "caption": "任务", + "viewtype": "DEOPTVIEW", + "viewmodule": "zentao", + "viewname": "TaskClosePauseCancelView", + "viewtag": "b78229d8342c2c13ddd8e403a7d853bc" + }, "storympickupview": { "title": "关联需求", "caption": "关联需求", @@ -607,6 +863,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "StoryPlanSubGridView", "viewtag": "b9e94e3713c82ebab002631bda872b94" }, + "depteditview": { + "title": "dept编辑视图", + "caption": "部门信息", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "DeptEditView", + "viewtag": "bae11f9447355ecc9e2cdff2490e6d11" + }, "productmaindashboardview": { "title": "产品数据看板视图", "caption": "产品", @@ -615,6 +879,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "ProductMainDashboardView", "viewtag": "bc36be2ee4a78e69c13665a8ad03ab6a" }, + "userpickupgridview": { + "title": "user选择表格视图", + "caption": "用户", + "viewtype": "DEPICKUPGRIDVIEW", + "viewmodule": "zentao", + "viewname": "UserPickupGridView", + "viewtag": "bd3043a0eb4bed8abd005228a4e729af" + }, "modulepickupgridview": { "title": "模块选择", "caption": "模块", @@ -631,6 +903,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "BugGridView", "viewtag": "c9410c9f72535adf1fff569d5243edd1" }, + "taskdoneview": { + "title": "完成任务", + "caption": "完成任务", + "viewtype": "DEOPTVIEW", + "viewmodule": "zentao", + "viewname": "TaskDoneView", + "viewtag": "c9c256aef78723e1bf9ddc1d38667c3f" + }, "modulepickupview": { "title": "模块选择", "caption": "模块", @@ -671,6 +951,22 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "TestPortalView", "viewtag": "D1283E46-401A-4CFD-A7A1-BF5B90197463" }, + "groupeditview": { + "title": "group编辑视图", + "caption": "分组信息", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "GroupEditView", + "viewtag": "d2de1e2449f8c1cf2e0310f5477eef4b" + }, + "usermaingridview": { + "title": "user表格视图", + "caption": "用户", + "viewtype": "DEGRIDVIEW", + "viewmodule": "zentao", + "viewname": "UserMainGridView", + "viewtag": "d364bfbf7092ee45cd0acae49fac77ab" + }, "branchpmeditview": { "title": "平台管理", "caption": "产品的分支和平台信息", @@ -679,6 +975,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "BranchPMEditView", "viewtag": "d4cb26555e6d81a172652580cf7d9f7f" }, + "companymainview9": { + "title": "公司编辑视图", + "caption": "公司", + "viewtype": "DEEDITVIEW9", + "viewmodule": "zentao", + "viewname": "CompanyMainView9", + "viewtag": "d7f401156de51eb49cdb10a6fb9263ee" + }, "storymain2gridview": { "title": "story表格视图", "caption": "需求", @@ -687,6 +991,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "StoryMain2GridView", "viewtag": "dea346284a2fbb66467c4838c1b3f577" }, + "actionalltrendslistview": { + "title": "系统日志列表视图", + "caption": "系统日志", + "viewtype": "DELISTVIEW", + "viewmodule": "zentao", + "viewname": "ActionAllTrendsListView", + "viewtag": "df57be69540a2e80fee7f3575162b93a" + }, "producteditview": { "title": "product编辑视图", "caption": "产品", @@ -703,6 +1015,30 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "ProductListExpView", "viewtag": "e396b6f39451e3bf963aec602106adf0" }, + "projectstatseditview9": { + "title": "项目统计编辑视图", + "caption": "项目统计", + "viewtype": "DEEDITVIEW9", + "viewmodule": "ibiz", + "viewname": "ProjectStatsEditView9", + "viewtag": "e444135470a806822b9b950e15c42a3e" + }, + "storyeditview_storychange": { + "title": "需求编辑视图", + "caption": "变更", + "viewtype": "DEEDITVIEW", + "viewmodule": "zentao", + "viewname": "StoryEditView_StoryChange", + "viewtag": "e54598b1e6d38d7c6ce8231b531b46bd" + }, + "deptpickupgridview": { + "title": "dept选择表格视图", + "caption": "部门", + "viewtype": "DEPICKUPGRIDVIEW", + "viewmodule": "zentao", + "viewname": "DeptPickupGridView", + "viewtag": "e644f7976b08c3d7f14fd7e1d5329da8" + }, "taskeditview": { "title": "task编辑视图", "caption": "任务", @@ -711,6 +1047,14 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => { "viewname": "TaskEditView", "viewtag": "ea141fddc78fd1af4d06e494baf12cc1" }, + "bugdashboardmaineditview9": { + "title": "主信息", + "caption": "Bug", + "viewtype": "DEEDITVIEW9", + "viewmodule": "zentao", + "viewname": "BugDashboardMainEditView9", + "viewtag": "ec9a5987de12c718961f243f4034efea" + }, "casestepgridview": { "title": "casestep表格视图", "caption": "用例步骤", diff --git a/app_Web/src/model/chart-detail/chart-series.ts b/app_Web/src/model/chart-detail/chart-series.ts index a514988b0fc05329072ed3947f85439fec362c3a..8e2a8632ed242ea8def2805d968b38ddce43802e 100644 --- a/app_Web/src/model/chart-detail/chart-series.ts +++ b/app_Web/src/model/chart-detail/chart-series.ts @@ -122,6 +122,14 @@ export class ChartSeries { */ public seriesLayoutBy:string = "column"; + /** + * 序列代码表 + * + * @type {*} + * @memberof ChartSeries + */ + public seriesCodeList:any; + /** * Creates an instance of ChartSeries. * ChartSeries 实例 @@ -144,6 +152,7 @@ export class ChartSeries { this.dataSetFields = opts.dataSetFields ? opts.dataSetFields:[]; this.seriesMap = opts.seriesMap ? opts.seriesMap:null; this.seriesIndex = opts.seriesIndex? opts.seriesIndex:0; + this.seriesCodeList = opts.seriesCodeList?opts.seriesCodeList:null; } /** @@ -285,4 +294,14 @@ export class ChartSeries { public setSeriesIndex(state: number): void { this.seriesIndex = state; } + + /** + * 设置序列代码表 + * + * @param {any} state + * @memberof ChartSeries + */ + public setSeriesCodeList(state: any): void { + this.seriesCodeList = state; + } } \ No newline at end of file diff --git a/app_Web/src/pages/ibiz/product-life-road-map-list-view/product-life-road-map-list-view-base.vue b/app_Web/src/pages/ibiz/product-life-road-map-list-view/product-life-road-map-list-view-base.vue index 42df74d92959e32dcda2f523aea182b83940a9fd..dc2003ee59e595d16ece78a97294b24606feedfd 100644 --- a/app_Web/src/pages/ibiz/product-life-road-map-list-view/product-life-road-map-list-view-base.vue +++ b/app_Web/src/pages/ibiz/product-life-road-map-list-view/product-life-road-map-list-view-base.vue @@ -164,10 +164,12 @@ export default class ProductLifeRoadMapListViewBase extends Vue { onViewData(newVal: any, oldVal: any) { const _this: any = this; if (!Object.is(newVal, oldVal) && _this.engine) { - _this.parseViewParam(); - _this.engine.load(); + this.$nextTick(()=>{ + _this.parseViewParam(); + _this.engine.load(); + + }); } - } /** @@ -273,6 +275,9 @@ export default class ProductLifeRoadMapListViewBase extends Vue { if(this.context && this.context.srfparentkey){ Object.assign(this.viewparams,{srfparentkey:this.context.srfparentkey}); } + if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){ + Object.assign(this.context,this.$store.getters.getAppData().context); + } this.handleCustomViewData(); return; } diff --git a/app_Web/src/pages/ibiz/product-life-road-map-list-view9/product-life-road-map-list-view9-base.vue b/app_Web/src/pages/ibiz/product-life-road-map-list-view9/product-life-road-map-list-view9-base.vue index 462f4ae59d6de2785d0b556cad777b2f5ee9ba36..9642241b7596023161e0e3982dcbe5ec90744982 100644 --- a/app_Web/src/pages/ibiz/product-life-road-map-list-view9/product-life-road-map-list-view9-base.vue +++ b/app_Web/src/pages/ibiz/product-life-road-map-list-view9/product-life-road-map-list-view9-base.vue @@ -160,10 +160,12 @@ export default class ProductLifeRoadMapListView9Base extends Vue { onViewData(newVal: any, oldVal: any) { const _this: any = this; if (!Object.is(newVal, oldVal) && _this.engine) { - _this.parseViewParam(); - _this.engine.load(); + this.$nextTick(()=>{ + _this.parseViewParam(); + _this.engine.load(); + + }); } - } /** @@ -268,6 +270,9 @@ export default class ProductLifeRoadMapListView9Base extends Vue { if(this.context && this.context.srfparentkey){ Object.assign(this.viewparams,{srfparentkey:this.context.srfparentkey}); } + if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){ + Object.assign(this.context,this.$store.getters.getAppData().context); + } this.handleCustomViewData(); return; } diff --git a/app_Web/src/pages/ibiz/product-stats-edit-view9/product-stats-edit-view9-base.vue b/app_Web/src/pages/ibiz/product-stats-edit-view9/product-stats-edit-view9-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..0a0da526edc046450b6839e1a73a5983c7b2f961 --- /dev/null +++ b/app_Web/src/pages/ibiz/product-stats-edit-view9/product-stats-edit-view9-base.vue @@ -0,0 +1,536 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/pages/ibiz/product-stats-edit-view9/product-stats-edit-view9.less b/app_Web/src/pages/ibiz/product-stats-edit-view9/product-stats-edit-view9.less new file mode 100644 index 0000000000000000000000000000000000000000..08bbb2ba53d30e71b1045a5fe27aaba3cf0f4db1 --- /dev/null +++ b/app_Web/src/pages/ibiz/product-stats-edit-view9/product-stats-edit-view9.less @@ -0,0 +1,6 @@ +// 避免空文件,后台不让空文件过 +.product-stats-edit-view9 { + --product-stats-edit-view9: 0; +} + + diff --git a/app_Web/src/pages/ibiz/product-stats-edit-view9/product-stats-edit-view9.vue b/app_Web/src/pages/ibiz/product-stats-edit-view9/product-stats-edit-view9.vue new file mode 100644 index 0000000000000000000000000000000000000000..85c2c739655d755ea973699e6f01229dd7a61280 --- /dev/null +++ b/app_Web/src/pages/ibiz/product-stats-edit-view9/product-stats-edit-view9.vue @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/app_Web/src/pages/ibiz/project-stats-edit-view9/project-stats-edit-view9-base.vue b/app_Web/src/pages/ibiz/project-stats-edit-view9/project-stats-edit-view9-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..2500d0cb6310223486e909fb6f8ed2d63249aa1f --- /dev/null +++ b/app_Web/src/pages/ibiz/project-stats-edit-view9/project-stats-edit-view9-base.vue @@ -0,0 +1,535 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/pages/ibiz/project-stats-edit-view9/project-stats-edit-view9.less b/app_Web/src/pages/ibiz/project-stats-edit-view9/project-stats-edit-view9.less new file mode 100644 index 0000000000000000000000000000000000000000..87c6714e653ba8a95baf86f3bfd884b3755eb64a --- /dev/null +++ b/app_Web/src/pages/ibiz/project-stats-edit-view9/project-stats-edit-view9.less @@ -0,0 +1,6 @@ +// 避免空文件,后台不让空文件过 +.project-stats-edit-view9 { + --project-stats-edit-view9: 0; +} + + diff --git a/app_Web/src/pages/ibiz/project-stats-edit-view9/project-stats-edit-view9.vue b/app_Web/src/pages/ibiz/project-stats-edit-view9/project-stats-edit-view9.vue new file mode 100644 index 0000000000000000000000000000000000000000..12dd095be150d5d4369794fc89bcce4f3cdf32ad --- /dev/null +++ b/app_Web/src/pages/ibiz/project-stats-edit-view9/project-stats-edit-view9.vue @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/app_Web/src/pages/ibiz/project-stats-main-dashboard-view/project-stats-main-dashboard-view-base.vue b/app_Web/src/pages/ibiz/project-stats-main-dashboard-view/project-stats-main-dashboard-view-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..f1de4e5b9efe9adfc5e9094336af9ffcda91f5eb --- /dev/null +++ b/app_Web/src/pages/ibiz/project-stats-main-dashboard-view/project-stats-main-dashboard-view-base.vue @@ -0,0 +1,479 @@ + + + + + + \ No newline at end of file diff --git a/app_Web/src/pages/ibiz/project-stats-main-dashboard-view/project-stats-main-dashboard-view.less b/app_Web/src/pages/ibiz/project-stats-main-dashboard-view/project-stats-main-dashboard-view.less new file mode 100644 index 0000000000000000000000000000000000000000..a561a0cde391b12a470f3075275609184a13460d --- /dev/null +++ b/app_Web/src/pages/ibiz/project-stats-main-dashboard-view/project-stats-main-dashboard-view.less @@ -0,0 +1,6 @@ +// 避免空文件,后台不让空文件过 +.project-stats-main-dashboard-view { + --project-stats-main-dashboard-view: 0; +} + + diff --git a/app_Web/src/pages/ibiz/project-stats-main-dashboard-view/project-stats-main-dashboard-view.vue b/app_Web/src/pages/ibiz/project-stats-main-dashboard-view/project-stats-main-dashboard-view.vue new file mode 100644 index 0000000000000000000000000000000000000000..7a69105a04983263fcceb6a6d3c9296f36672194 --- /dev/null +++ b/app_Web/src/pages/ibiz/project-stats-main-dashboard-view/project-stats-main-dashboard-view.vue @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/app_Web/src/pages/ungroup/test-portal-view/test-portal-view-base.vue b/app_Web/src/pages/ungroup/test-portal-view/test-portal-view-base.vue index 96a11dfaa1a5fa6045ca1c405651da5b7d186dea..23dfe101f5fcf720b95a2c5282d82ec552b8fdc5 100644 --- a/app_Web/src/pages/ungroup/test-portal-view/test-portal-view-base.vue +++ b/app_Web/src/pages/ungroup/test-portal-view/test-portal-view-base.vue @@ -143,10 +143,12 @@ export default class TestPortalViewBase extends Vue { onViewData(newVal: any, oldVal: any) { const _this: any = this; if (!Object.is(newVal, oldVal) && _this.engine) { - _this.parseViewParam(); - _this.engine.load(); + this.$nextTick(()=>{ + _this.parseViewParam(); + _this.engine.load(); + + }); } - } /** @@ -229,6 +231,9 @@ export default class TestPortalViewBase extends Vue { if(this.context && this.context.srfparentkey){ Object.assign(this.viewparams,{srfparentkey:this.context.srfparentkey}); } + if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){ + Object.assign(this.context,this.$store.getters.getAppData().context); + } this.handleCustomViewData(); return; } diff --git a/app_Web/src/pages/zentao/action-all-trends-list-view/action-all-trends-list-view-base.vue b/app_Web/src/pages/zentao/action-all-trends-list-view/action-all-trends-list-view-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..34575c3f2eea1d8f0acd665104ba12994c4bc8a3 --- /dev/null +++ b/app_Web/src/pages/zentao/action-all-trends-list-view/action-all-trends-list-view-base.vue @@ -0,0 +1,642 @@ + + + + + + + \ No newline at end of file diff --git a/app_Web/src/pages/zentao/action-all-trends-list-view/action-all-trends-list-view.less b/app_Web/src/pages/zentao/action-all-trends-list-view/action-all-trends-list-view.less new file mode 100644 index 0000000000000000000000000000000000000000..240fa5775b59c0dce1d2c150081b4930ebffa506 --- /dev/null +++ b/app_Web/src/pages/zentao/action-all-trends-list-view/action-all-trends-list-view.less @@ -0,0 +1,6 @@ +// 避免空文件,后台不让空文件过 +.action-all-trends-list-view { + --action-all-trends-list-view: 0; +} + + diff --git a/app_Web/src/pages/zentao/action-all-trends-list-view/action-all-trends-list-view.vue b/app_Web/src/pages/zentao/action-all-trends-list-view/action-all-trends-list-view.vue new file mode 100644 index 0000000000000000000000000000000000000000..b08e99a3e4325db450b5d11b537bcd18c9ca9b07 --- /dev/null +++ b/app_Web/src/pages/zentao/action-all-trends-list-view/action-all-trends-list-view.vue @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/app_Web/src/pages/zentao/action-edit-view/action-edit-view-base.vue b/app_Web/src/pages/zentao/action-edit-view/action-edit-view-base.vue index 21f02cfef9e5e36d5f19bfd5a14c41e4f998d727..4eacdd4576ffcd3fd53a47776dd574d6b67fa019 100644 --- a/app_Web/src/pages/zentao/action-edit-view/action-edit-view-base.vue +++ b/app_Web/src/pages/zentao/action-edit-view/action-edit-view-base.vue @@ -213,10 +213,12 @@ export default class ActionEditViewBase extends Vue { onViewData(newVal: any, oldVal: any) { const _this: any = this; if (!Object.is(newVal, oldVal) && _this.engine) { - _this.parseViewParam(); - _this.engine.load(); + this.$nextTick(()=>{ + _this.parseViewParam(); + _this.engine.load(); + + }); } - } /** @@ -268,7 +270,7 @@ export default class ActionEditViewBase extends Vue { tbitem5: { name: 'tbitem5', caption: '保存并关闭', disabled: false, type: 'DEUIACTION', visabled: true, dataaccaction: '', uiaction: { tag: 'SaveAndExit', target: '' } }, tbitem6: { name: 'tbitem6', type: 'SEPERATOR', visabled: true, dataaccaction: '', uiaction: { } }, - tbitem7: { name: 'tbitem7', caption: '删除并关闭', disabled: false, type: 'DEUIACTION', visabled: true, dataaccaction: '', uiaction: { tag: 'RemoveAndExit', target: 'SINGLEKEY' } }, + tbitem7: { name: 'tbitem7', caption: '删除', disabled: false, type: 'DEUIACTION', visabled: true, dataaccaction: '', uiaction: { tag: 'RemoveAndExit', target: 'SINGLEKEY' } }, tbitem8: { name: 'tbitem8', type: 'SEPERATOR', visabled: true, dataaccaction: '', uiaction: { } }, tbitem12: { name: 'tbitem12', caption: '新建', disabled: false, type: 'DEUIACTION', visabled: true, dataaccaction: '', uiaction: { tag: 'New', target: '' } }, @@ -353,6 +355,9 @@ export default class ActionEditViewBase extends Vue { if(this.context && this.context.srfparentkey){ Object.assign(this.viewparams,{srfparentkey:this.context.srfparentkey}); } + if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){ + Object.assign(this.context,this.$store.getters.getAppData().context); + } this.handleCustomViewData(); return; } @@ -1091,7 +1096,7 @@ export default class ActionEditViewBase extends Vue { } } /** - * 删除并关闭 + * 删除 * * @param {any[]} args 当前数据 * @param {any} contextJO 行为附加上下文 diff --git a/app_Web/src/pages/zentao/action-histroy-list-view/action-histroy-list-view-base.vue b/app_Web/src/pages/zentao/action-histroy-list-view/action-histroy-list-view-base.vue index 7b9575a164d789bcb5f36bc456ddf4298223efaf..ca2899767d070b421dbb7ff288ef9bac4077814f 100644 --- a/app_Web/src/pages/zentao/action-histroy-list-view/action-histroy-list-view-base.vue +++ b/app_Web/src/pages/zentao/action-histroy-list-view/action-histroy-list-view-base.vue @@ -10,6 +10,8 @@ updateAction="Update" fetchAction="FetchType" :showBusyIndicator="true" + :newdata="newdata" + :opendata="opendata" name="list" ref='list' @selectionchange="list_selectionchange($event)" @@ -163,10 +165,12 @@ export default class ActionHistroyListViewBase extends Vue { onViewData(newVal: any, oldVal: any) { const _this: any = this; if (!Object.is(newVal, oldVal) && _this.engine) { - _this.parseViewParam(); - _this.engine.load(); + this.$nextTick(()=>{ + _this.parseViewParam(); + _this.engine.load(); + + }); } - } /** @@ -272,6 +276,9 @@ export default class ActionHistroyListViewBase extends Vue { if(this.context && this.context.srfparentkey){ Object.assign(this.viewparams,{srfparentkey:this.context.srfparentkey}); } + if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){ + Object.assign(this.context,this.$store.getters.getAppData().context); + } this.handleCustomViewData(); return; } @@ -505,6 +512,7 @@ export default class ActionHistroyListViewBase extends Vue { data.srfsourcekey = args[0].srfsourcekey; } let curViewParam = JSON.parse(JSON.stringify(this.context)); + delete curViewParam.action; if(args.length >0){ Object.assign(curViewParam,args[0]); } diff --git a/app_Web/src/pages/zentao/action-product-trends-list-view/action-product-trends-list-view-base.vue b/app_Web/src/pages/zentao/action-product-trends-list-view/action-product-trends-list-view-base.vue index 1d27421483468cf51c8f450abd31705bcaa73bd5..1d6b28a54760b13f71a1deb5b0160386ae719356 100644 --- a/app_Web/src/pages/zentao/action-product-trends-list-view/action-product-trends-list-view-base.vue +++ b/app_Web/src/pages/zentao/action-product-trends-list-view/action-product-trends-list-view-base.vue @@ -10,6 +10,8 @@ updateAction="Update" fetchAction="FetchProductTrends" :showBusyIndicator="true" + :newdata="newdata" + :opendata="opendata" name="list" ref='list' @selectionchange="list_selectionchange($event)" @@ -162,10 +164,12 @@ export default class ActionProductTrendsListViewBase extends Vue { onViewData(newVal: any, oldVal: any) { const _this: any = this; if (!Object.is(newVal, oldVal) && _this.engine) { - _this.parseViewParam(); - _this.engine.load(); + this.$nextTick(()=>{ + _this.parseViewParam(); + _this.engine.load(); + + }); } - } /** @@ -270,6 +274,9 @@ export default class ActionProductTrendsListViewBase extends Vue { if(this.context && this.context.srfparentkey){ Object.assign(this.viewparams,{srfparentkey:this.context.srfparentkey}); } + if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){ + Object.assign(this.context,this.$store.getters.getAppData().context); + } this.handleCustomViewData(); return; } @@ -503,6 +510,7 @@ export default class ActionProductTrendsListViewBase extends Vue { data.srfsourcekey = args[0].srfsourcekey; } let curViewParam = JSON.parse(JSON.stringify(this.context)); + delete curViewParam.action; if(args.length >0){ Object.assign(curViewParam,args[0]); } diff --git a/app_Web/src/pages/zentao/action-product-trends-list-view9/action-product-trends-list-view9-base.vue b/app_Web/src/pages/zentao/action-product-trends-list-view9/action-product-trends-list-view9-base.vue index 7c69bac64f30238e00b2f336f2b2bc2768972484..e2d33638d72e7e36152e828ea37f524bd22bd4b7 100644 --- a/app_Web/src/pages/zentao/action-product-trends-list-view9/action-product-trends-list-view9-base.vue +++ b/app_Web/src/pages/zentao/action-product-trends-list-view9/action-product-trends-list-view9-base.vue @@ -10,6 +10,8 @@ updateAction="Update" fetchAction="FetchProductTrends" :showBusyIndicator="true" + :newdata="newdata" + :opendata="opendata" name="list" ref='list' @selectionchange="list_selectionchange($event)" @@ -159,10 +161,12 @@ export default class ActionProductTrendsListView9Base extends Vue { onViewData(newVal: any, oldVal: any) { const _this: any = this; if (!Object.is(newVal, oldVal) && _this.engine) { - _this.parseViewParam(); - _this.engine.load(); + this.$nextTick(()=>{ + _this.parseViewParam(); + _this.engine.load(); + + }); } - } /** @@ -266,6 +270,9 @@ export default class ActionProductTrendsListView9Base extends Vue { if(this.context && this.context.srfparentkey){ Object.assign(this.viewparams,{srfparentkey:this.context.srfparentkey}); } + if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){ + Object.assign(this.context,this.$store.getters.getAppData().context); + } this.handleCustomViewData(); return; } @@ -506,6 +513,7 @@ export default class ActionProductTrendsListView9Base extends Vue { data.srfsourcekey = args[0].srfsourcekey; } let curViewParam = JSON.parse(JSON.stringify(this.context)); + delete curViewParam.action; if(args.length >0){ Object.assign(curViewParam,args[0]); } diff --git a/app_Web/src/pages/zentao/action-project-trends-list-view/action-project-trends-list-view-base.vue b/app_Web/src/pages/zentao/action-project-trends-list-view/action-project-trends-list-view-base.vue index 67ce18a7716c59324832ffc810b06504d1a4e8a4..0c5fa336eba96389ba5033d97b72c720283153e5 100644 --- a/app_Web/src/pages/zentao/action-project-trends-list-view/action-project-trends-list-view-base.vue +++ b/app_Web/src/pages/zentao/action-project-trends-list-view/action-project-trends-list-view-base.vue @@ -10,6 +10,8 @@ updateAction="Update" fetchAction="FetchProjectTrends" :showBusyIndicator="true" + :newdata="newdata" + :opendata="opendata" name="list" ref='list' @selectionchange="list_selectionchange($event)" @@ -162,10 +164,12 @@ export default class ActionProjectTrendsListViewBase extends Vue { onViewData(newVal: any, oldVal: any) { const _this: any = this; if (!Object.is(newVal, oldVal) && _this.engine) { - _this.parseViewParam(); - _this.engine.load(); + this.$nextTick(()=>{ + _this.parseViewParam(); + _this.engine.load(); + + }); } - } /** @@ -270,6 +274,9 @@ export default class ActionProjectTrendsListViewBase extends Vue { if(this.context && this.context.srfparentkey){ Object.assign(this.viewparams,{srfparentkey:this.context.srfparentkey}); } + if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){ + Object.assign(this.context,this.$store.getters.getAppData().context); + } this.handleCustomViewData(); return; } @@ -503,6 +510,7 @@ export default class ActionProjectTrendsListViewBase extends Vue { data.srfsourcekey = args[0].srfsourcekey; } let curViewParam = JSON.parse(JSON.stringify(this.context)); + delete curViewParam.action; if(args.length >0){ Object.assign(curViewParam,args[0]); } diff --git a/app_Web/src/pages/zentao/action-project-trends-list-view9/action-project-trends-list-view9-base.vue b/app_Web/src/pages/zentao/action-project-trends-list-view9/action-project-trends-list-view9-base.vue index e65d4ef6fdbc20926c4213b291832fe9d5108610..586f4b5afbf8672b685c4108a60ca48f68bc62ff 100644 --- a/app_Web/src/pages/zentao/action-project-trends-list-view9/action-project-trends-list-view9-base.vue +++ b/app_Web/src/pages/zentao/action-project-trends-list-view9/action-project-trends-list-view9-base.vue @@ -10,6 +10,8 @@ updateAction="Update" fetchAction="FetchProjectTrends" :showBusyIndicator="true" + :newdata="newdata" + :opendata="opendata" name="list" ref='list' @selectionchange="list_selectionchange($event)" @@ -159,10 +161,12 @@ export default class ActionProjectTrendsListView9Base extends Vue { onViewData(newVal: any, oldVal: any) { const _this: any = this; if (!Object.is(newVal, oldVal) && _this.engine) { - _this.parseViewParam(); - _this.engine.load(); + this.$nextTick(()=>{ + _this.parseViewParam(); + _this.engine.load(); + + }); } - } /** @@ -266,6 +270,9 @@ export default class ActionProjectTrendsListView9Base extends Vue { if(this.context && this.context.srfparentkey){ Object.assign(this.viewparams,{srfparentkey:this.context.srfparentkey}); } + if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){ + Object.assign(this.context,this.$store.getters.getAppData().context); + } this.handleCustomViewData(); return; } @@ -506,6 +513,7 @@ export default class ActionProjectTrendsListView9Base extends Vue { data.srfsourcekey = args[0].srfsourcekey; } let curViewParam = JSON.parse(JSON.stringify(this.context)); + delete curViewParam.action; if(args.length >0){ Object.assign(curViewParam,args[0]); } diff --git a/app_Web/src/pages/zentao/branch-pmedit-view/branch-pmedit-view-base.vue b/app_Web/src/pages/zentao/branch-pmedit-view/branch-pmedit-view-base.vue index e5463faa52e6810b2660ea7af06e923a9772a1a8..665bb1ecc511ef2c216174eeff151111cbf7128f 100644 --- a/app_Web/src/pages/zentao/branch-pmedit-view/branch-pmedit-view-base.vue +++ b/app_Web/src/pages/zentao/branch-pmedit-view/branch-pmedit-view-base.vue @@ -173,10 +173,12 @@ export default class BranchPMEditViewBase extends Vue { onViewData(newVal: any, oldVal: any) { const _this: any = this; if (!Object.is(newVal, oldVal) && _this.engine) { - _this.parseViewParam(); - _this.engine.load(); + this.$nextTick(()=>{ + _this.parseViewParam(); + _this.engine.load(); + + }); } - } /** @@ -288,6 +290,9 @@ export default class BranchPMEditViewBase extends Vue { if(this.context && this.context.srfparentkey){ Object.assign(this.viewparams,{srfparentkey:this.context.srfparentkey}); } + if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){ + Object.assign(this.context,this.$store.getters.getAppData().context); + } this.handleCustomViewData(); return; } diff --git a/app_Web/src/pages/zentao/branch-pmgrid-view/branch-pmgrid-view-base.vue b/app_Web/src/pages/zentao/branch-pmgrid-view/branch-pmgrid-view-base.vue index a28d050c5f2fa30f8535842a880e9d671790a403..059aef49b54ff87d21e15a001c0ee3b91dd951f9 100644 --- a/app_Web/src/pages/zentao/branch-pmgrid-view/branch-pmgrid-view-base.vue +++ b/app_Web/src/pages/zentao/branch-pmgrid-view/branch-pmgrid-view-base.vue @@ -203,10 +203,12 @@ export default class BranchPMGridViewBase extends Vue { onViewData(newVal: any, oldVal: any) { const _this: any = this; if (!Object.is(newVal, oldVal) && _this.engine) { - _this.parseViewParam(); - _this.engine.load(); + this.$nextTick(()=>{ + _this.parseViewParam(); + _this.engine.load(); + + }); } - } /** @@ -329,6 +331,9 @@ export default class BranchPMGridViewBase extends Vue { if(this.context && this.context.srfparentkey){ Object.assign(this.viewparams,{srfparentkey:this.context.srfparentkey}); } + if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){ + Object.assign(this.context,this.$store.getters.getAppData().context); + } this.handleCustomViewData(); return; } @@ -684,6 +689,7 @@ export default class BranchPMGridViewBase extends Vue { data.srfsourcekey = args[0].srfsourcekey; } let curViewParam = JSON.parse(JSON.stringify(this.context)); + delete curViewParam.branch; if(args.length >0){ Object.assign(curViewParam,args[0]); } diff --git a/app_Web/src/pages/zentao/bug-bug-life-edit-view9/bug-bug-life-edit-view9-base.vue b/app_Web/src/pages/zentao/bug-bug-life-edit-view9/bug-bug-life-edit-view9-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..c22fc1dbeddf23e348b04a48ed23680e0e10f728 --- /dev/null +++ b/app_Web/src/pages/zentao/bug-bug-life-edit-view9/bug-bug-life-edit-view9-base.vue @@ -0,0 +1,536 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/pages/zentao/bug-bug-life-edit-view9/bug-bug-life-edit-view9.less b/app_Web/src/pages/zentao/bug-bug-life-edit-view9/bug-bug-life-edit-view9.less new file mode 100644 index 0000000000000000000000000000000000000000..9375538a0a53416b1c15983eaf0dd6e4eca77b01 --- /dev/null +++ b/app_Web/src/pages/zentao/bug-bug-life-edit-view9/bug-bug-life-edit-view9.less @@ -0,0 +1,6 @@ +// 避免空文件,后台不让空文件过 +.bug-bug-life-edit-view9 { + --bug-bug-life-edit-view9: 0; +} + + diff --git a/app_Web/src/pages/zentao/bug-bug-life-edit-view9/bug-bug-life-edit-view9.vue b/app_Web/src/pages/zentao/bug-bug-life-edit-view9/bug-bug-life-edit-view9.vue new file mode 100644 index 0000000000000000000000000000000000000000..89bf98bb2ce3a322db30147ce20f3c16bc05ece3 --- /dev/null +++ b/app_Web/src/pages/zentao/bug-bug-life-edit-view9/bug-bug-life-edit-view9.vue @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/app_Web/src/pages/zentao/bug-dashboard-main-edit-view9/bug-dashboard-main-edit-view9-base.vue b/app_Web/src/pages/zentao/bug-dashboard-main-edit-view9/bug-dashboard-main-edit-view9-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..6532d85fe43e2cf911e22e1445e2edc81cb2a7bd --- /dev/null +++ b/app_Web/src/pages/zentao/bug-dashboard-main-edit-view9/bug-dashboard-main-edit-view9-base.vue @@ -0,0 +1,536 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/pages/zentao/bug-dashboard-main-edit-view9/bug-dashboard-main-edit-view9.less b/app_Web/src/pages/zentao/bug-dashboard-main-edit-view9/bug-dashboard-main-edit-view9.less new file mode 100644 index 0000000000000000000000000000000000000000..dd1cd18a47ac65179ecf899aec00c19b8dc1ce41 --- /dev/null +++ b/app_Web/src/pages/zentao/bug-dashboard-main-edit-view9/bug-dashboard-main-edit-view9.less @@ -0,0 +1,6 @@ +// 避免空文件,后台不让空文件过 +.bug-dashboard-main-edit-view9 { + --bug-dashboard-main-edit-view9: 0; +} + + diff --git a/app_Web/src/pages/zentao/bug-dashboard-main-edit-view9/bug-dashboard-main-edit-view9.vue b/app_Web/src/pages/zentao/bug-dashboard-main-edit-view9/bug-dashboard-main-edit-view9.vue new file mode 100644 index 0000000000000000000000000000000000000000..f7f51f82a9d505c8dc90077ffd1129ad4f6726ce --- /dev/null +++ b/app_Web/src/pages/zentao/bug-dashboard-main-edit-view9/bug-dashboard-main-edit-view9.vue @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/app_Web/src/pages/zentao/bug-edit-view/bug-edit-view-base.vue b/app_Web/src/pages/zentao/bug-edit-view/bug-edit-view-base.vue index fa3ba6af71ac5af379df1da087266283d9bc3e11..a10d3f3e859b122fb8739122cef94bf905cf5834 100644 --- a/app_Web/src/pages/zentao/bug-edit-view/bug-edit-view-base.vue +++ b/app_Web/src/pages/zentao/bug-edit-view/bug-edit-view-base.vue @@ -1,50 +1,13 @@ + + @@ -184,6 +220,7 @@ import { UIActionTool,Util } from '@/utils'; import BugService from '@/service/bug/bug-service'; import MainService from './main-grid-service'; +import BugUIService from '@/uiservice/bug/bug-ui-service'; import CodeListService from "@service/app/codelist-service"; import { FormItemModel } from '@/model/form-detail'; @@ -273,6 +310,35 @@ export default class MainBase extends Vue implements ControlInterface { public appEntityService: BugService = new BugService({ $store: this.$store }); + /** + * 逻辑事件 + * + * @param {*} [params={}] + * @param {*} [tag] + * @param {*} [$event] + * @memberof + */ + public grid_uagridcolumn1_u953838c_click(params: any = {}, tag?: any, $event?: any) { + // 取数 + let datas: any[] = []; + let xData: any = null; + // _this 指向容器对象 + const _this: any = this; + let paramJO:any = {}; + + let contextJO:any = {}; + xData = this; + if (_this.getDatas && _this.getDatas instanceof Function) { + datas = [..._this.getDatas()]; + } + if(params){ + datas = [params]; + } + // 界面行为 + const curUIService:BugUIService = new BugUIService(); + curUIService.Bug_MainEdit(datas,contextJO, paramJO, $event, xData,this,"Bug"); + } + /** * 关闭视图 @@ -666,6 +732,20 @@ export default class MainBase extends Vue implements ControlInterface { show: true, util: 'PX' }, + { + name: 'resolution', + label: '方案', + langtag: 'entities.bug.main_grid.columns.resolution', + show: true, + util: 'PX' + }, + { + name: 'uagridcolumn1', + label: '操作', + langtag: 'entities.bug.main_grid.columns.uagridcolumn1', + show: true, + util: 'PX' + }, ] /** @@ -1077,6 +1157,30 @@ export default class MainBase extends Vue implements ControlInterface { textSeparator: '、', valueSeparator: ',', }, + { + name: 'openedby', + srfkey: 'UserRealName', + codelistType : 'DYNAMIC', + textSeparator: ',', + renderMode: 'string', + valueSeparator: ",", + }, + { + name: 'assignedto', + srfkey: 'UserRealName', + codelistType : 'DYNAMIC', + textSeparator: ',', + renderMode: 'string', + valueSeparator: ",", + }, + { + name: 'resolution', + srfkey: 'Bug__resolution', + codelistType : 'STATIC', + renderMode: 'other', + textSeparator: '、', + valueSeparator: ',', + }, ]; let _this = this; for (const codelist of codelistColumns) { @@ -1423,6 +1527,9 @@ export default class MainBase extends Vue implements ControlInterface { * @memberof Main */ public uiAction(row: any, tag: any, $event: any) { + if(Object.is('MainEdit', tag)) { + this.grid_uagridcolumn1_u953838c_click(row, tag, $event); + } } /** diff --git a/app_Web/src/widgets/bug/main-grid/main-grid-model.ts b/app_Web/src/widgets/bug/main-grid/main-grid-model.ts index dbf4036e844c6a4ef0d82fa06abc85bcd942d3b3..8f8bf59e79c52fbdb4f91fd38ab67f45896c1746 100644 --- a/app_Web/src/widgets/bug/main-grid/main-grid-model.ts +++ b/app_Web/src/widgets/bug/main-grid/main-grid-model.ts @@ -32,9 +32,9 @@ export default class MainModel { dataType: 'PICKUP', }, { - name: 'resolvedbuild', - prop: 'resolvedbuild', - dataType: 'PICKUP', + name: 'resolution', + prop: 'resolution', + dataType: 'SSCODELIST', }, { name: 'srfmajortext', diff --git a/app_Web/src/widgets/bug/main-plan-sub-grid/main-plan-sub-grid-base.vue b/app_Web/src/widgets/bug/main-plan-sub-grid/main-plan-sub-grid-base.vue index 21c6213a3584296befb76f332b7b41e4bd7a421a..7cd21e385863ca05a32f636f19b3ac5addd9dc08 100644 --- a/app_Web/src/widgets/bug/main-plan-sub-grid/main-plan-sub-grid-base.vue +++ b/app_Web/src/widgets/bug/main-plan-sub-grid/main-plan-sub-grid-base.vue @@ -105,7 +105,9 @@ @@ -1077,6 +1079,14 @@ export default class Main_PlanSubBase extends Vue implements ControlInterface { textSeparator: '、', valueSeparator: ',', }, + { + name: 'openedby', + srfkey: 'UserRealName', + codelistType : 'DYNAMIC', + textSeparator: ',', + renderMode: 'string', + valueSeparator: ",", + }, ]; let _this = this; for (const codelist of codelistColumns) { diff --git a/app_Web/src/widgets/bug/main-plan-sub-grid/main-plan-sub-grid-model.ts b/app_Web/src/widgets/bug/main-plan-sub-grid/main-plan-sub-grid-model.ts index 60fe04cce8ad96fd99823708ec28f22d55c468bb..5dddbd8084784fa5a8c9b6b973c8c7009889e07a 100644 --- a/app_Web/src/widgets/bug/main-plan-sub-grid/main-plan-sub-grid-model.ts +++ b/app_Web/src/widgets/bug/main-plan-sub-grid/main-plan-sub-grid-model.ts @@ -31,11 +31,6 @@ export default class Main_PlanSubModel { prop: 'tostory', dataType: 'PICKUP', }, - { - name: 'resolvedbuild', - prop: 'resolvedbuild', - dataType: 'PICKUP', - }, { name: 'srfmajortext', prop: 'title', diff --git a/app_Web/src/widgets/bug/main2-grid/main2-grid-model.ts b/app_Web/src/widgets/bug/main2-grid/main2-grid-model.ts index 4d8914c9b138608237473b6302fddde3bec451a1..a6feaab575b93b825964411cfbab41191e82a610 100644 --- a/app_Web/src/widgets/bug/main2-grid/main2-grid-model.ts +++ b/app_Web/src/widgets/bug/main2-grid/main2-grid-model.ts @@ -56,11 +56,6 @@ export default class Main2Model { prop: 'tostory', dataType: 'PICKUP', }, - { - name: 'resolvedbuild', - prop: 'resolvedbuild', - dataType: 'PICKUP', - }, { name: 'srfmajortext', prop: 'title', diff --git a/app_Web/src/widgets/bug/mpickup-viewpickupviewpanel-pickupviewpanel/mpickup-viewpickupviewpanel-pickupviewpanel-model.ts b/app_Web/src/widgets/bug/mpickup-viewpickupviewpanel-pickupviewpanel/mpickup-viewpickupviewpanel-pickupviewpanel-model.ts index 0a39fd3a4d25515d539d175ef8f68c2dc4f2cdbb..367d821b2835432338ea3ef744ae814672965c0d 100644 --- a/app_Web/src/widgets/bug/mpickup-viewpickupviewpanel-pickupviewpanel/mpickup-viewpickupviewpanel-pickupviewpanel-model.ts +++ b/app_Web/src/widgets/bug/mpickup-viewpickupviewpanel-pickupviewpanel/mpickup-viewpickupviewpanel-pickupviewpanel-model.ts @@ -114,6 +114,9 @@ export default class MPickupViewpickupviewpanelModel { { name: 'resolvedby', }, + { + name: 'resolvedbuild', + }, { name: 'pri', }, @@ -186,9 +189,6 @@ export default class MPickupViewpickupviewpanelModel { { name: 'testtask', }, - { - name: 'resolvedbuild', - }, ] } diff --git a/app_Web/src/widgets/bug/pickup-gird-grid/pickup-gird-grid-base.vue b/app_Web/src/widgets/bug/pickup-gird-grid/pickup-gird-grid-base.vue index b63ce50666e5c6bb96143bc840851899586e8ff1..29a304c27f5167062dedc2220167d431fe2dff7c 100644 --- a/app_Web/src/widgets/bug/pickup-gird-grid/pickup-gird-grid-base.vue +++ b/app_Web/src/widgets/bug/pickup-gird-grid/pickup-gird-grid-base.vue @@ -97,7 +97,9 @@ @@ -1055,6 +1057,14 @@ export default class PickupGirdBase extends Vue implements ControlInterface { textSeparator: '、', valueSeparator: ',', }, + { + name: 'openedby', + srfkey: 'UserRealName', + codelistType : 'DYNAMIC', + textSeparator: ',', + renderMode: 'string', + valueSeparator: ",", + }, ]; let _this = this; for (const codelist of codelistColumns) { diff --git a/app_Web/src/widgets/bug/pickup-gird-grid/pickup-gird-grid-model.ts b/app_Web/src/widgets/bug/pickup-gird-grid/pickup-gird-grid-model.ts index f0cc31ab008565d18680808422592b1d7ef68798..1586d7db1b9966c55d621034a28fcac914261a58 100644 --- a/app_Web/src/widgets/bug/pickup-gird-grid/pickup-gird-grid-model.ts +++ b/app_Web/src/widgets/bug/pickup-gird-grid/pickup-gird-grid-model.ts @@ -31,11 +31,6 @@ export default class PickupGirdModel { prop: 'tostory', dataType: 'PICKUP', }, - { - name: 'resolvedbuild', - prop: 'resolvedbuild', - dataType: 'PICKUP', - }, { name: 'srfmajortext', prop: 'title', diff --git a/app_Web/src/widgets/bug/steps-info-form/steps-info-form-base.vue b/app_Web/src/widgets/bug/steps-info-form/steps-info-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..efeb6424d38b8c6971b3a39a42087d1d6f39034b --- /dev/null +++ b/app_Web/src/widgets/bug/steps-info-form/steps-info-form-base.vue @@ -0,0 +1,1546 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/bug/steps-info-form/steps-info-form-model.ts b/app_Web/src/widgets/bug/steps-info-form/steps-info-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..a6edb716c6a0924195596cb7c120ca0e391542a8 --- /dev/null +++ b/app_Web/src/widgets/bug/steps-info-form/steps-info-form-model.ts @@ -0,0 +1,76 @@ +/** + * StepsInfo 部件模型 + * + * @export + * @class StepsInfoModel + */ +export default class StepsInfoModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof StepsInfoModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srfupdatedate', + prop: 'lastediteddate', + dataType: 'DATETIME', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'title', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'steps', + prop: 'steps', + dataType: 'LONGTEXT', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'bug', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/bug/steps-info-form/steps-info-form-service.ts b/app_Web/src/widgets/bug/steps-info-form/steps-info-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..3be9f75b0ad99fcfd56796da6933e5a6fe624229 --- /dev/null +++ b/app_Web/src/widgets/bug/steps-info-form/steps-info-form-service.ts @@ -0,0 +1,371 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import BugService from '@/service/bug/bug-service'; +import StepsInfoModel from './steps-info-form-model'; + + +/** + * StepsInfo 部件服务对象 + * + * @export + * @class StepsInfoService + */ +export default class StepsInfoService extends ControlService { + + /** + * Bug服务对象 + * + * @type {BugService} + * @memberof StepsInfoService + */ + public appEntityService: BugService = new BugService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof StepsInfoService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of StepsInfoService. + * + * @param {*} [opts={}] + * @memberof StepsInfoService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new StepsInfoModel(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof StepsInfoService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StepsInfoService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof StepsInfoService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof StepsInfoService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StepsInfoService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StepsInfoService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StepsInfoService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StepsInfoService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StepsInfoService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.bug = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StepsInfoService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof StepsInfoService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/bug/steps-info-form/steps-info-form.less b/app_Web/src/widgets/bug/steps-info-form/steps-info-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/bug/steps-info-form/steps-info-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/bug/steps-info-form/steps-info-form.vue b/app_Web/src/widgets/bug/steps-info-form/steps-info-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..ab056a05b22475fdf360a612d3b1f66ea499ac9c --- /dev/null +++ b/app_Web/src/widgets/bug/steps-info-form/steps-info-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet-base.vue b/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..86eab5d751a48f049e74eabe022851bff9f47612 --- /dev/null +++ b/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet-base.vue @@ -0,0 +1,220 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet-model.ts b/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..18ab1bd21d3f3ff6ae4d86de971c8693835aa2e0 --- /dev/null +++ b/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet-model.ts @@ -0,0 +1,196 @@ +/** + * StepsInfo 部件模型 + * + * @export + * @class StepsInfoModel + */ +export default class StepsInfoModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof StepsInfoModel + */ + public getDataItems(): any[] { + return [ + { + name: 'severity', + }, + { + name: 'storyversion', + }, + { + name: 'linkbug', + }, + { + name: 'activateddate', + }, + { + name: 'assignedto', + }, + { + name: 'resolution', + }, + { + name: 'lastediteddate', + }, + { + name: 'result', + }, + { + name: 'keywords', + }, + { + name: 'closedby', + }, + { + name: 'browser', + }, + { + name: 'steps', + }, + { + name: 'v2', + }, + { + name: 'confirmed', + }, + { + name: 'openedby', + }, + { + name: 'activatedcount', + }, + { + name: 'openeddate', + }, + { + name: 'closeddate', + }, + { + name: 'mailto', + }, + { + name: 'assigneddate', + }, + { + name: 'deadline', + }, + { + name: 'color', + }, + { + name: 'resolveddate', + }, + { + name: 'type', + }, + { + name: 'status', + }, + { + name: 'openedbuild', + }, + { + name: 'v1', + }, + { + name: 'deleted', + }, + { + name: 'lines', + }, + { + name: 'substatus', + }, + { + name: 'bug', + prop: 'id', + }, + { + name: 'found', + }, + { + name: 'resolvedby', + }, + { + name: 'resolvedbuild', + }, + { + name: 'pri', + }, + { + name: 'os', + }, + { + name: 'hardware', + }, + { + name: 'lasteditedby', + }, + { + name: 'title', + }, + { + name: 'productname', + }, + { + name: 'projectname', + }, + { + name: 'storyname', + }, + { + name: 'caseversion', + }, + { + name: 'repotype', + }, + { + name: 'tostory', + }, + { + name: 'entry', + }, + { + name: 'product', + }, + { + name: 'totask', + }, + { + name: 'plan', + }, + { + name: 'module', + }, + { + name: 'branch', + }, + { + name: 'duplicatebug', + }, + { + name: 'repo', + }, + { + name: 'story', + }, + { + name: 'ibizcase', + }, + { + name: 'project', + }, + { + name: 'task', + }, + { + name: 'testtask', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet-service.ts b/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..13594904a08f4d959cc08a652837a55a6883b37b --- /dev/null +++ b/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * StepsInfo 部件服务对象 + * + * @export + * @class StepsInfoService + */ +export default class StepsInfoService extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet.less b/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet.less new file mode 100644 index 0000000000000000000000000000000000000000..79fe0e3e9e4f43d98d8b98f5d0e7f1283e0fe7fc --- /dev/null +++ b/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet.less @@ -0,0 +1,4 @@ +.portlet { + --portlet: 0px; +} +// this is less diff --git a/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet.vue b/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet.vue new file mode 100644 index 0000000000000000000000000000000000000000..e7d07d89ffa8da21710ad800627564aacc010c81 --- /dev/null +++ b/app_Web/src/widgets/bug/steps-info-portlet/steps-info-portlet.vue @@ -0,0 +1,15 @@ + + \ No newline at end of file diff --git a/app_Web/src/widgets/case/assigned-to-me-case-portlet/assigned-to-me-case-portlet-model.ts b/app_Web/src/widgets/case/assigned-to-me-case-portlet/assigned-to-me-case-portlet-model.ts index ca1a21f905960490a5a2de030e4f98ee99950d49..f3122af65d37460b98db58b55d35634c35815777 100644 --- a/app_Web/src/widgets/case/assigned-to-me-case-portlet/assigned-to-me-case-portlet-model.ts +++ b/app_Web/src/widgets/case/assigned-to-me-case-portlet/assigned-to-me-case-portlet-model.ts @@ -138,6 +138,15 @@ export default class AssignedToMeCaseModel { { name: 'module', }, + { + name: 'modulename', + }, + { + name: 'storyname', + }, + { + name: 'productname', + }, ] } diff --git a/app_Web/src/widgets/case/batch-new-grid/batch-new-grid-base.vue b/app_Web/src/widgets/case/batch-new-grid/batch-new-grid-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..e453d12c5c41a49402b820511b59fb6dc4ebf9fd --- /dev/null +++ b/app_Web/src/widgets/case/batch-new-grid/batch-new-grid-base.vue @@ -0,0 +1,1549 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/case/batch-new-grid/batch-new-grid-model.ts b/app_Web/src/widgets/case/batch-new-grid/batch-new-grid-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..aa0aee5aaa4eab5cc27cf819900ab702cd1873ac --- /dev/null +++ b/app_Web/src/widgets/case/batch-new-grid/batch-new-grid-model.ts @@ -0,0 +1,133 @@ +/** + * BatchNew 部件模型 + * + * @export + * @class BatchNewModel + */ +export default class BatchNewModel { + + /** + * 是否是实体数据导出 + * + * @returns {any[]} + * @memberof BatchNewGridMode + */ + public isDEExport: boolean = false; + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof BatchNewGridMode + */ + public getDataItems(): any[] { + if(this.isDEExport){ + return [ + ] + }else{ + return [ + { + name: 'module', + prop: 'module', + dataType: 'PICKUP', + }, + { + name: 'frombug', + prop: 'frombug', + dataType: 'PICKUP', + }, + { + name: 'storyname', + prop: 'storyname', + dataType: 'PICKUPTEXT', + }, + { + name: 'type', + prop: 'type', + dataType: 'SSCODELIST', + }, + { + name: 'srfmajortext', + prop: 'title', + dataType: 'TEXT', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfdataaccaction', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'product', + prop: 'product', + dataType: 'PICKUP', + }, + { + name: 'modulename', + prop: 'modulename', + dataType: 'PICKUPTEXT', + }, + { + name: 'story', + prop: 'story', + dataType: 'PICKUP', + }, + { + name: 'title', + prop: 'title', + dataType: 'TEXT', + }, + { + name: 'lib', + prop: 'lib', + dataType: 'PICKUP', + }, + { + name: 'fromcaseid', + prop: 'fromcaseid', + dataType: 'PICKUP', + }, + { + name: 'branch', + prop: 'branch', + dataType: 'PICKUP', + }, + { + name: 'case', + prop: 'id', + }, + { + name:'size', + prop:'size' + }, + { + name:'query', + prop:'query' + }, + { + name:'page', + prop:'page' + }, + { + name:'sort', + prop:'sort' + }, + { + name:'srfparentdata', + prop:'srfparentdata' + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + ] + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/batch-new-grid/batch-new-grid-service.ts b/app_Web/src/widgets/case/batch-new-grid/batch-new-grid-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..2d1fde9a68e0ae00eb4a29ef285d89f1f2f504f5 --- /dev/null +++ b/app_Web/src/widgets/case/batch-new-grid/batch-new-grid-service.ts @@ -0,0 +1,318 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import CaseService from '@/service/case/case-service'; +import BatchNewModel from './batch-new-grid-model'; + + +/** + * BatchNew 部件服务对象 + * + * @export + * @class BatchNewService + */ +export default class BatchNewService extends ControlService { + + /** + * 测试用例服务对象 + * + * @type {CaseService} + * @memberof BatchNewService + */ + public appEntityService: CaseService = new CaseService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof BatchNewService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of BatchNewService. + * + * @param {*} [opts={}] + * @memberof BatchNewService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new BatchNewModel(); + } + + + /** + * 处理数据 + * + * @public + * @param {Promise} promise + * @returns {Promise} + * @memberof BatchNewService + */ + public doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof BatchNewService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof BatchNewService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof BatchNewService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof BatchNewService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Data,Context,isloading); + }else{ + result =_appEntityService.Update(Data,Context,isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 获取数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof BatchNewService + */ + @Errorlog + public get(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:0}); + } + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof BatchNewService + */ + @Errorlog + public search(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.FetchDefault(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof BatchNewService + */ + @Errorlog + public loadDraft(action: string, context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:'0'}); + //仿真主键数据 + response.data.id = Util.createUUID(); + } + this.handleResponse(action, response, true); + this.mergeDefaults(response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 合并配置的默认值 + * @param {*} + * @memberof BatchNewService + */ + public mergeDefaults(response:any = {}){ + if(response.data){ + } + } + + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/batch-new-grid/batch-new-grid.less b/app_Web/src/widgets/case/batch-new-grid/batch-new-grid.less new file mode 100644 index 0000000000000000000000000000000000000000..6a7da728b17882d2231f0b993dbbfc09610c58fb --- /dev/null +++ b/app_Web/src/widgets/case/batch-new-grid/batch-new-grid.less @@ -0,0 +1,4 @@ +.grid { + --grid: 0; +} +// this is less diff --git a/app_Web/src/widgets/case/batch-new-grid/batch-new-grid.vue b/app_Web/src/widgets/case/batch-new-grid/batch-new-grid.vue new file mode 100644 index 0000000000000000000000000000000000000000..26d502e9c61556e1608ddc82ce6a07dee78390b0 --- /dev/null +++ b/app_Web/src/widgets/case/batch-new-grid/batch-new-grid.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard-base.vue b/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..4fd1629cdaebc49091757011ab0e409000307d0a --- /dev/null +++ b/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard-base.vue @@ -0,0 +1,369 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard-model.ts b/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..509fed4ac62207b335ecb2ba0b3c876193d4727f --- /dev/null +++ b/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard-model.ts @@ -0,0 +1,145 @@ +/** + * FeatureDashboard 部件模型 + * + * @export + * @class FeatureDashboardModel + */ +export default class FeatureDashboardModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof FeatureDashboardModel + */ + public getDataItems(): any[] { + return [ + { + name: 'lastediteddate', + }, + { + name: 'scripteddate', + }, + { + name: 'color', + }, + { + name: 'path', + }, + { + name: 'openeddate', + }, + { + name: 'lastrunresult', + }, + { + name: 'linkcase', + }, + { + name: 'order', + }, + { + name: 'howrun', + }, + { + name: 'version', + }, + { + name: 'scriptedby', + }, + { + name: 'openedby', + }, + { + name: 'type', + }, + { + name: 'status', + }, + { + name: 'auto', + }, + { + name: 'frequency', + }, + { + name: 'title', + }, + { + name: 'lasteditedby', + }, + { + name: 'reviewedby', + }, + { + name: 'deleted', + }, + { + name: 'revieweddate', + }, + { + name: 'pri', + }, + { + name: 'stage', + }, + { + name: 'scriptlocation', + }, + { + name: 'lastrundate', + }, + { + name: 'keywords', + }, + { + name: 'scriptstatus', + }, + { + name: 'frame', + }, + { + name: 'substatus', + }, + { + name: 'case', + prop: 'id', + }, + { + name: 'precondition', + }, + { + name: 'lastrunner', + }, + { + name: 'fromcaseversion', + }, + { + name: 'storyversion', + }, + { + name: 'fromcaseid', + }, + { + name: 'branch', + }, + { + name: 'frombug', + }, + { + name: 'story', + }, + { + name: 'product', + }, + { + name: 'lib', + }, + { + name: 'module', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard-service.ts b/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..9b88050537d3ee6c4eadf575ebd56241df52ac99 --- /dev/null +++ b/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * FeatureDashboard 部件服务对象 + * + * @export + * @class FeatureDashboardService + */ +export default class FeatureDashboardService extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard.less b/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard.less new file mode 100644 index 0000000000000000000000000000000000000000..5de8b00b879d5b4ec83486e385f889ea75bc9964 --- /dev/null +++ b/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard.less @@ -0,0 +1,4 @@ +.dashboard { + --dashboard: 0px; +} +// this is less diff --git a/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard.vue b/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard.vue new file mode 100644 index 0000000000000000000000000000000000000000..83d8d7c6ec3463ca6cb53c4e88eb107988b5610b --- /dev/null +++ b/app_Web/src/widgets/case/feature-dashboard-dashboard/feature-dashboard-dashboard.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid-base.vue b/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..2ff8112b4391945730a7e7f2b7b4df1054a10927 --- /dev/null +++ b/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid-base.vue @@ -0,0 +1,1442 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid-model.ts b/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..a63a363b79f9a3a13d9d4c65f14e2cb70ac6295a --- /dev/null +++ b/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid-model.ts @@ -0,0 +1,128 @@ +/** + * FeatureGrid 部件模型 + * + * @export + * @class FeatureGridModel + */ +export default class FeatureGridModel { + + /** + * 是否是实体数据导出 + * + * @returns {any[]} + * @memberof FeatureGridGridMode + */ + public isDEExport: boolean = false; + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof FeatureGridGridMode + */ + public getDataItems(): any[] { + if(this.isDEExport){ + return [ + ] + }else{ + return [ + { + name: 'module', + prop: 'module', + dataType: 'PICKUP', + }, + { + name: 'frombug', + prop: 'frombug', + dataType: 'PICKUP', + }, + { + name: 'status', + prop: 'status', + dataType: 'SSCODELIST', + }, + { + name: 'srfmajortext', + prop: 'title', + dataType: 'TEXT', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfdataaccaction', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'product', + prop: 'product', + dataType: 'PICKUP', + }, + { + name: 'story', + prop: 'story', + dataType: 'PICKUP', + }, + { + name: 'pri', + prop: 'pri', + dataType: 'NSCODELIST', + }, + { + name: 'title', + prop: 'title', + dataType: 'TEXT', + }, + { + name: 'lib', + prop: 'lib', + dataType: 'PICKUP', + }, + { + name: 'fromcaseid', + prop: 'fromcaseid', + dataType: 'PICKUP', + }, + { + name: 'branch', + prop: 'branch', + dataType: 'PICKUP', + }, + { + name: 'case', + prop: 'id', + }, + { + name:'size', + prop:'size' + }, + { + name:'query', + prop:'query' + }, + { + name:'page', + prop:'page' + }, + { + name:'sort', + prop:'sort' + }, + { + name:'srfparentdata', + prop:'srfparentdata' + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + ] + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid-service.ts b/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..196e9278cc5cd94cb13d1dc6b5ad7e1fcf3ac41c --- /dev/null +++ b/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid-service.ts @@ -0,0 +1,318 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import CaseService from '@/service/case/case-service'; +import FeatureGridModel from './feature-grid-grid-model'; + + +/** + * FeatureGrid 部件服务对象 + * + * @export + * @class FeatureGridService + */ +export default class FeatureGridService extends ControlService { + + /** + * 测试用例服务对象 + * + * @type {CaseService} + * @memberof FeatureGridService + */ + public appEntityService: CaseService = new CaseService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof FeatureGridService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of FeatureGridService. + * + * @param {*} [opts={}] + * @memberof FeatureGridService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new FeatureGridModel(); + } + + + /** + * 处理数据 + * + * @public + * @param {Promise} promise + * @returns {Promise} + * @memberof FeatureGridService + */ + public doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof FeatureGridService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof FeatureGridService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof FeatureGridService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof FeatureGridService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Data,Context,isloading); + }else{ + result =_appEntityService.Update(Data,Context,isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 获取数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof FeatureGridService + */ + @Errorlog + public get(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:0}); + } + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof FeatureGridService + */ + @Errorlog + public search(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.FetchDefault(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof FeatureGridService + */ + @Errorlog + public loadDraft(action: string, context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:'0'}); + //仿真主键数据 + response.data.id = Util.createUUID(); + } + this.handleResponse(action, response, true); + this.mergeDefaults(response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 合并配置的默认值 + * @param {*} + * @memberof FeatureGridService + */ + public mergeDefaults(response:any = {}){ + if(response.data){ + } + } + + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid.less b/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid.less new file mode 100644 index 0000000000000000000000000000000000000000..6a7da728b17882d2231f0b993dbbfc09610c58fb --- /dev/null +++ b/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid.less @@ -0,0 +1,4 @@ +.grid { + --grid: 0; +} +// this is less diff --git a/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid.vue b/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid.vue new file mode 100644 index 0000000000000000000000000000000000000000..873098fdea77dec420f0cbae11bf0eeea00548bd --- /dev/null +++ b/app_Web/src/widgets/case/feature-grid-grid/feature-grid-grid.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard-base.vue b/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..5d02742a5ef9fadd45e77fb7585c4be77d46383f --- /dev/null +++ b/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard-base.vue @@ -0,0 +1,369 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard-model.ts b/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..c0c6f8d59c3287fc170032f42ebf359917179dac --- /dev/null +++ b/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard-model.ts @@ -0,0 +1,154 @@ +/** + * MainDashboard 部件模型 + * + * @export + * @class MainDashboardModel + */ +export default class MainDashboardModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainDashboardModel + */ + public getDataItems(): any[] { + return [ + { + name: 'lastediteddate', + }, + { + name: 'scripteddate', + }, + { + name: 'color', + }, + { + name: 'path', + }, + { + name: 'openeddate', + }, + { + name: 'lastrunresult', + }, + { + name: 'linkcase', + }, + { + name: 'order', + }, + { + name: 'howrun', + }, + { + name: 'version', + }, + { + name: 'scriptedby', + }, + { + name: 'openedby', + }, + { + name: 'type', + }, + { + name: 'status', + }, + { + name: 'auto', + }, + { + name: 'frequency', + }, + { + name: 'title', + }, + { + name: 'lasteditedby', + }, + { + name: 'reviewedby', + }, + { + name: 'deleted', + }, + { + name: 'revieweddate', + }, + { + name: 'pri', + }, + { + name: 'stage', + }, + { + name: 'scriptlocation', + }, + { + name: 'lastrundate', + }, + { + name: 'keywords', + }, + { + name: 'scriptstatus', + }, + { + name: 'frame', + }, + { + name: 'substatus', + }, + { + name: 'case', + prop: 'id', + }, + { + name: 'precondition', + }, + { + name: 'lastrunner', + }, + { + name: 'fromcaseversion', + }, + { + name: 'storyversion', + }, + { + name: 'fromcaseid', + }, + { + name: 'branch', + }, + { + name: 'frombug', + }, + { + name: 'story', + }, + { + name: 'product', + }, + { + name: 'lib', + }, + { + name: 'module', + }, + { + name: 'modulename', + }, + { + name: 'storyname', + }, + { + name: 'productname', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard-service.ts b/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..e0475f1b76ed3e3d0688e30e2dbf3bae547eb71e --- /dev/null +++ b/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * MainDashboard 部件服务对象 + * + * @export + * @class MainDashboardService + */ +export default class MainDashboardService extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard.less b/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard.less new file mode 100644 index 0000000000000000000000000000000000000000..5de8b00b879d5b4ec83486e385f889ea75bc9964 --- /dev/null +++ b/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard.less @@ -0,0 +1,4 @@ +.dashboard { + --dashboard: 0px; +} +// this is less diff --git a/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard.vue b/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard.vue new file mode 100644 index 0000000000000000000000000000000000000000..1031ac570389d5e42eff285b4df44dcd8594976d --- /dev/null +++ b/app_Web/src/widgets/case/main-dashboard-dashboard/main-dashboard-dashboard.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-edit-form/main-edit-form-base.vue b/app_Web/src/widgets/case/main-edit-form/main-edit-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..779fb33dacd602dcfe097cfaef7b416ce8f4f25d --- /dev/null +++ b/app_Web/src/widgets/case/main-edit-form/main-edit-form-base.vue @@ -0,0 +1,1563 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-edit-form/main-edit-form-model.ts b/app_Web/src/widgets/case/main-edit-form/main-edit-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..1ec44734804f90d7f88fa86735321204e4b207a9 --- /dev/null +++ b/app_Web/src/widgets/case/main-edit-form/main-edit-form-model.ts @@ -0,0 +1,71 @@ +/** + * MainEdit 部件模型 + * + * @export + * @class MainEditModel + */ +export default class MainEditModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainEditModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'title', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'title', + prop: 'title', + dataType: 'TEXT', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'case', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-edit-form/main-edit-form-service.ts b/app_Web/src/widgets/case/main-edit-form/main-edit-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..6256ec61f51adf1845d15228229f76523c497ea1 --- /dev/null +++ b/app_Web/src/widgets/case/main-edit-form/main-edit-form-service.ts @@ -0,0 +1,371 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import CaseService from '@/service/case/case-service'; +import MainEditModel from './main-edit-form-model'; + + +/** + * MainEdit 部件服务对象 + * + * @export + * @class MainEditService + */ +export default class MainEditService extends ControlService { + + /** + * 测试用例服务对象 + * + * @type {CaseService} + * @memberof MainEditService + */ + public appEntityService: CaseService = new CaseService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof MainEditService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of MainEditService. + * + * @param {*} [opts={}] + * @memberof MainEditService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new MainEditModel(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof MainEditService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.case = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof MainEditService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-edit-form/main-edit-form.less b/app_Web/src/widgets/case/main-edit-form/main-edit-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/case/main-edit-form/main-edit-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/case/main-edit-form/main-edit-form.vue b/app_Web/src/widgets/case/main-edit-form/main-edit-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..57b0ad5891426ddf1dc04508aeb05f378ddeef9a --- /dev/null +++ b/app_Web/src/widgets/case/main-edit-form/main-edit-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-grid-grid/main-grid-grid-base.vue b/app_Web/src/widgets/case/main-grid-grid/main-grid-grid-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..ddfecdf07676db4528bd8c29dbf99f459fad3f33 --- /dev/null +++ b/app_Web/src/widgets/case/main-grid-grid/main-grid-grid-base.vue @@ -0,0 +1,1615 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-grid-grid/main-grid-grid-model.ts b/app_Web/src/widgets/case/main-grid-grid/main-grid-grid-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..b5614a1e26ecb36a9afb985895a2ca7b52ac13e6 --- /dev/null +++ b/app_Web/src/widgets/case/main-grid-grid/main-grid-grid-model.ts @@ -0,0 +1,158 @@ +/** + * MainGrid 部件模型 + * + * @export + * @class MainGridModel + */ +export default class MainGridModel { + + /** + * 是否是实体数据导出 + * + * @returns {any[]} + * @memberof MainGridGridMode + */ + public isDEExport: boolean = false; + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainGridGridMode + */ + public getDataItems(): any[] { + if(this.isDEExport){ + return [ + ] + }else{ + return [ + { + name: 'module', + prop: 'module', + dataType: 'PICKUP', + }, + { + name: 'lastrundate', + prop: 'lastrundate', + dataType: 'DATETIME', + }, + { + name: 'frombug', + prop: 'frombug', + dataType: 'PICKUP', + }, + { + name: 'status', + prop: 'status', + dataType: 'SSCODELIST', + }, + { + name: 'type', + prop: 'type', + dataType: 'SSCODELIST', + }, + { + name: 'srfmajortext', + prop: 'title', + dataType: 'TEXT', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfdataaccaction', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'openedby', + prop: 'openedby', + dataType: 'TEXT', + }, + { + name: 'product', + prop: 'product', + dataType: 'PICKUP', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'story', + prop: 'story', + dataType: 'PICKUP', + }, + { + name: 'pri', + prop: 'pri', + dataType: 'NSCODELIST', + }, + { + name: 'title', + prop: 'title', + dataType: 'TEXT', + }, + { + name: 'lib', + prop: 'lib', + dataType: 'PICKUP', + }, + { + name: 'fromcaseid', + prop: 'fromcaseid', + dataType: 'PICKUP', + }, + { + name: 'lastrunresult', + prop: 'lastrunresult', + dataType: 'SSCODELIST', + }, + { + name: 'branch', + prop: 'branch', + dataType: 'PICKUP', + }, + { + name: 'lastrunner', + prop: 'lastrunner', + dataType: 'TEXT', + }, + { + name: 'case', + prop: 'id', + }, + { + name:'size', + prop:'size' + }, + { + name:'query', + prop:'query' + }, + { + name:'page', + prop:'page' + }, + { + name:'sort', + prop:'sort' + }, + { + name:'srfparentdata', + prop:'srfparentdata' + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + ] + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-grid-grid/main-grid-grid-service.ts b/app_Web/src/widgets/case/main-grid-grid/main-grid-grid-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..7b5cc0f5389da4f5a4f797349aaa9127a27c2fbf --- /dev/null +++ b/app_Web/src/widgets/case/main-grid-grid/main-grid-grid-service.ts @@ -0,0 +1,318 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import CaseService from '@/service/case/case-service'; +import MainGridModel from './main-grid-grid-model'; + + +/** + * MainGrid 部件服务对象 + * + * @export + * @class MainGridService + */ +export default class MainGridService extends ControlService { + + /** + * 测试用例服务对象 + * + * @type {CaseService} + * @memberof MainGridService + */ + public appEntityService: CaseService = new CaseService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof MainGridService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of MainGridService. + * + * @param {*} [opts={}] + * @memberof MainGridService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new MainGridModel(); + } + + + /** + * 处理数据 + * + * @public + * @param {Promise} promise + * @returns {Promise} + * @memberof MainGridService + */ + public doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainGridService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainGridService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainGridService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainGridService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Data,Context,isloading); + }else{ + result =_appEntityService.Update(Data,Context,isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 获取数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainGridService + */ + @Errorlog + public get(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:0}); + } + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainGridService + */ + @Errorlog + public search(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.FetchDefault(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainGridService + */ + @Errorlog + public loadDraft(action: string, context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:'0'}); + //仿真主键数据 + response.data.id = Util.createUUID(); + } + this.handleResponse(action, response, true); + this.mergeDefaults(response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 合并配置的默认值 + * @param {*} + * @memberof MainGridService + */ + public mergeDefaults(response:any = {}){ + if(response.data){ + } + } + + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-grid-grid/main-grid-grid.less b/app_Web/src/widgets/case/main-grid-grid/main-grid-grid.less new file mode 100644 index 0000000000000000000000000000000000000000..6a7da728b17882d2231f0b993dbbfc09610c58fb --- /dev/null +++ b/app_Web/src/widgets/case/main-grid-grid/main-grid-grid.less @@ -0,0 +1,4 @@ +.grid { + --grid: 0; +} +// this is less diff --git a/app_Web/src/widgets/case/main-grid-grid/main-grid-grid.vue b/app_Web/src/widgets/case/main-grid-grid/main-grid-grid.vue new file mode 100644 index 0000000000000000000000000000000000000000..38795ab29b97d1e217c955ac8a60e91082dd1fe2 --- /dev/null +++ b/app_Web/src/widgets/case/main-grid-grid/main-grid-grid.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-new-form/main-new-form-base.vue b/app_Web/src/widgets/case/main-new-form/main-new-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..b5f750ebcccfa8c064971564d33ac423901277f0 --- /dev/null +++ b/app_Web/src/widgets/case/main-new-form/main-new-form-base.vue @@ -0,0 +1,1801 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-new-form/main-new-form-model.ts b/app_Web/src/widgets/case/main-new-form/main-new-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..bb9806d12a787b2a3daca38d1df2854d8c23283b --- /dev/null +++ b/app_Web/src/widgets/case/main-new-form/main-new-form-model.ts @@ -0,0 +1,111 @@ +/** + * MainNew 部件模型 + * + * @export + * @class MainNewModel + */ +export default class MainNewModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainNewModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'title', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'product', + prop: 'product', + dataType: 'PICKUP', + }, + { + name: 'productname', + prop: 'productname', + dataType: 'PICKUPTEXT', + }, + { + name: 'module', + prop: 'module', + dataType: 'PICKUP', + }, + { + name: 'modulename', + prop: 'modulename', + dataType: 'PICKUPTEXT', + }, + { + name: 'type', + prop: 'type', + dataType: 'SSCODELIST', + }, + { + name: 'story', + prop: 'story', + dataType: 'PICKUP', + }, + { + name: 'storyname', + prop: 'storyname', + dataType: 'PICKUPTEXT', + }, + { + name: 'title', + prop: 'title', + dataType: 'TEXT', + }, + { + name: 'pri', + prop: 'pri', + dataType: 'NSCODELIST', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'case', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-new-form/main-new-form-service.ts b/app_Web/src/widgets/case/main-new-form/main-new-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..d175a5361b984fb0ffff4107318621180a0356ca --- /dev/null +++ b/app_Web/src/widgets/case/main-new-form/main-new-form-service.ts @@ -0,0 +1,407 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import CaseService from '@/service/case/case-service'; +import MainNewModel from './main-new-form-model'; +import ProductService from '@/service/product/product-service'; +import ModuleService from '@/service/module/module-service'; +import StoryService from '@/service/story/story-service'; + + +/** + * MainNew 部件服务对象 + * + * @export + * @class MainNewService + */ +export default class MainNewService extends ControlService { + + /** + * 测试用例服务对象 + * + * @type {CaseService} + * @memberof MainNewService + */ + public appEntityService: CaseService = new CaseService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof MainNewService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of MainNewService. + * + * @param {*} [opts={}] + * @memberof MainNewService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new MainNewModel(); + } + + /** + * 产品服务对象 + * + * @type {ProductService} + * @memberof MainNewService + */ + public productService: ProductService = new ProductService(); + + /** + * 模块服务对象 + * + * @type {ModuleService} + * @memberof MainNewService + */ + public moduleService: ModuleService = new ModuleService(); + + /** + * 需求服务对象 + * + * @type {StoryService} + * @memberof MainNewService + */ + public storyService: StoryService = new StoryService(); + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof MainNewService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainNewService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + if (Object.is(serviceName, 'ProductService') && Object.is(interfaceName, 'FetchDefault')) { + return this.doItems(this.productService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'id', 'product'); + } + if (Object.is(serviceName, 'ModuleService') && Object.is(interfaceName, 'FetchDefault')) { + return this.doItems(this.moduleService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'id', 'module'); + } + if (Object.is(serviceName, 'StoryService') && Object.is(interfaceName, 'FetchDefault')) { + return this.doItems(this.storyService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'id', 'story'); + } + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainNewService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainNewService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainNewService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainNewService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainNewService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainNewService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainNewService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.case = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainNewService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof MainNewService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/case/main-new-form/main-new-form.less b/app_Web/src/widgets/case/main-new-form/main-new-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/case/main-new-form/main-new-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/case/main-new-form/main-new-form.vue b/app_Web/src/widgets/case/main-new-form/main-new-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..7689b06d00c518771f2379d355984aa9fe988607 --- /dev/null +++ b/app_Web/src/widgets/case/main-new-form/main-new-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/company/company-info-portlet/company-info-portlet-base.vue b/app_Web/src/widgets/company/company-info-portlet/company-info-portlet-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..36065ff25e817acb9fceb23e3d39e403e92b414f --- /dev/null +++ b/app_Web/src/widgets/company/company-info-portlet/company-info-portlet-base.vue @@ -0,0 +1,220 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/company/company-info-portlet/company-info-portlet-model.ts b/app_Web/src/widgets/company/company-info-portlet/company-info-portlet-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..a9ea18711312dd471dff378e35c84d55f8c7acc8 --- /dev/null +++ b/app_Web/src/widgets/company/company-info-portlet/company-info-portlet-model.ts @@ -0,0 +1,55 @@ +/** + * CompanyInfo 部件模型 + * + * @export + * @class CompanyInfoModel + */ +export default class CompanyInfoModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof CompanyInfoModel + */ + public getDataItems(): any[] { + return [ + { + name: 'admins', + }, + { + name: 'fax', + }, + { + name: 'deleted', + }, + { + name: 'website', + }, + { + name: 'company', + prop: 'id', + }, + { + name: 'zipcode', + }, + { + name: 'address', + }, + { + name: 'backyard', + }, + { + name: 'name', + }, + { + name: 'guest', + }, + { + name: 'phone', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/company-info-portlet/company-info-portlet-service.ts b/app_Web/src/widgets/company/company-info-portlet/company-info-portlet-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..a50d4213a4204d3f84975146f7fd05a4ac1cccb2 --- /dev/null +++ b/app_Web/src/widgets/company/company-info-portlet/company-info-portlet-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * CompanyInfo 部件服务对象 + * + * @export + * @class CompanyInfoService + */ +export default class CompanyInfoService extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/company-info-portlet/company-info-portlet.less b/app_Web/src/widgets/company/company-info-portlet/company-info-portlet.less new file mode 100644 index 0000000000000000000000000000000000000000..79fe0e3e9e4f43d98d8b98f5d0e7f1283e0fe7fc --- /dev/null +++ b/app_Web/src/widgets/company/company-info-portlet/company-info-portlet.less @@ -0,0 +1,4 @@ +.portlet { + --portlet: 0px; +} +// this is less diff --git a/app_Web/src/widgets/company/company-info-portlet/company-info-portlet.vue b/app_Web/src/widgets/company/company-info-portlet/company-info-portlet.vue new file mode 100644 index 0000000000000000000000000000000000000000..8561d1cc8dc91fb2806c7a31ce15c5a540e279e3 --- /dev/null +++ b/app_Web/src/widgets/company/company-info-portlet/company-info-portlet.vue @@ -0,0 +1,15 @@ + + \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview-base.vue b/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..cfc7b2136ad047ff8943005275a0f64fc7b51c14 --- /dev/null +++ b/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview-base.vue @@ -0,0 +1,767 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview-model.ts b/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..4c6378e89e64a40e2ef43ef80cc69987c989abf9 --- /dev/null +++ b/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview-model.ts @@ -0,0 +1,55 @@ +/** + * DeptExp 部件模型 + * + * @export + * @class DeptExpModel + */ +export default class DeptExpModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof DeptExpModel + */ + public getDataItems(): any[] { + return [ + { + name: 'admins', + }, + { + name: 'fax', + }, + { + name: 'deleted', + }, + { + name: 'website', + }, + { + name: 'company', + prop: 'id', + }, + { + name: 'zipcode', + }, + { + name: 'address', + }, + { + name: 'backyard', + }, + { + name: 'name', + }, + { + name: 'guest', + }, + { + name: 'phone', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview-service.ts b/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..acea4601f8d9cf393ca3887a44f878a40d56fcc1 --- /dev/null +++ b/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview-service.ts @@ -0,0 +1,837 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import CompanyService from '@/service/company/company-service'; +import DeptExpModel from './dept-exp-treeview-model'; +import CodeListService from '@service/app/codelist-service'; +import i18n from '@/locale'; +import DeptService from '@service/dept/dept-service'; + + +/** + * DeptExp 部件服务对象 + * + * @export + * @class DeptExpService + */ +export default class DeptExpService extends ControlService { + + /** + * 公司服务对象 + * + * @type {CompanyService} + * @memberof DeptExpService + */ + public appEntityService: CompanyService = new CompanyService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof DeptExpService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of DeptExpService. + * + * @param {*} [opts={}] + * @memberof DeptExpService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new DeptExpModel(); + } + + + /** + * 代码表服务对象 + * + * @type {CodeListService} + * @memberof DeptExpService + */ + public codeListService:CodeListService = new CodeListService({ $store: this.getStore() }); + + + /** + * 部门服务对象 + * + * @type {DeptService} + * @memberof DeptExpService + */ + public deptService: DeptService = new DeptService({ $store: this.getStore() }); + + /** + * 节点分隔符号 + * + * @public + * @type {string} + * @memberof DeptExpService + */ + public TREENODE_SEPARATOR: string = ';'; + + /** + * 子部门节点分隔符号 + * + * @public + * @type {string} + * @memberof DeptExpService + */ + public TREENODE_SUBDEPT: string = 'SubDept'; + + /** + * 所有部门节点分隔符号 + * + * @public + * @type {string} + * @memberof DeptExpService + */ + public TREENODE_ALLDEPT: string = 'AllDept'; + + /** + * 默认根节点节点分隔符号 + * + * @public + * @type {string} + * @memberof DeptExpService + */ + public TREENODE_ROOT: string = 'ROOT'; + + /** + * 根部门节点分隔符号 + * + * @public + * @type {string} + * @memberof DeptExpService + */ + public TREENODE_ROOTDEPT: string = 'RootDept'; + + /** + * 获取节点数据 + * + * @param {string} action + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof DeptExpService + */ + @Errorlog + public async getNodes(context:any = {},data: any = {}, isloading?: boolean): Promise { + let { srfparentkey, srfcat, srfnodeid, srfnodefilter, query }: { srfparentkey: string, srfcat: string, srfnodeid: string, srfnodefilter: string, query:string } = data; + srfnodefilter = query ? query : srfnodefilter; + let list: any[] = []; + let filter: any = {}; + + + if (!srfnodeid || Object.is(srfnodeid, '#')) { + srfnodeid = this.TREENODE_ROOT; + } + + let strTreeNodeId: string = srfnodeid; + let strRealNodeId: string = ''; + let bRootSelect: boolean = false; + let strNodeType: string | null = null; + let strRootSelectNode: string = ''; + + if (Object.is(strTreeNodeId, this.TREENODE_ROOT)) { + strNodeType = this.TREENODE_ROOT; + if (srfparentkey) { + strRealNodeId = srfparentkey; + } + } else { + let nPos = strTreeNodeId.indexOf(this.TREENODE_SEPARATOR); + if (nPos === -1) { + return Promise.reject({ status: 500, data: { title: '失败', message: `树节点${strTreeNodeId}标识无效` } }); + } + strNodeType = strTreeNodeId.substring(0, nPos); + strRealNodeId = strTreeNodeId.substring(nPos + 1); + } + + Object.assign(filter, + { + srfparentkey: srfparentkey, + srfcat: srfcat, + srfnodefilter: srfnodefilter, + strRealNodeId: strRealNodeId, + srfnodeid: srfnodeid, + strNodeType: strNodeType, + viewparams: JSON.parse(JSON.stringify(data)).viewparams + } + ); + + // 分解节点标识 + let nodeid: string[] = strRealNodeId.split(this.TREENODE_SEPARATOR); + for (let i = 0; i < nodeid.length; i++) { + switch (i) { + case 0: + Object.assign(filter, { nodeid: nodeid[0] }); + break; + case 1: + Object.assign(filter, { nodeid2: nodeid[1] }); + break; + case 2: + Object.assign(filter, { nodeid3: nodeid[2] }); + break; + case 3: + Object.assign(filter, { nodeid4: nodeid[3] }); + break; + default: + break; + } + } + + if (Object.is(strNodeType, this.TREENODE_SUBDEPT)) { + await this.fillSubdeptNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + if (Object.is(strNodeType, this.TREENODE_ALLDEPT)) { + await this.fillAlldeptNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + if (Object.is(strNodeType, this.TREENODE_ROOT)) { + await this.fillRootNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + if (Object.is(strNodeType, this.TREENODE_ROOTDEPT)) { + await this.fillRootdeptNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + return Promise.resolve({ status: 500, data: { title: '失败', message: `树节点${strTreeNodeId}标识无效` } }); + } + + /** + * 填充 树视图节点[子部门] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof DeptExpService + */ + @Errorlog + public fillSubdeptNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let searchFilter: any = {}; + + if (Object.is(filter.strNodeType, this.TREENODE_SUBDEPT)) { + Object.assign(searchFilter, { n_parent_eq: filter.nodeid }); + } + + + if (Object.is(filter.strNodeType, this.TREENODE_ROOTDEPT)) { + Object.assign(searchFilter, { n_parent_eq: filter.nodeid }); + } + + Object.assign(searchFilter, { total: false }); + let bFirst: boolean = true; + let records: any[] = []; + try { + this.searchSubdept(context, searchFilter, filter).then((records:any) =>{ + if(records && records.length >0){ + records.forEach((entity: any) => { + let treeNode: any = {}; + // 整理context + let strId: string = entity.id; + let strText: string = entity.name; + Object.assign(treeNode,{srfparentdename:'Dept',srfparentkey:entity.id}); + let tempContext:any = JSON.parse(JSON.stringify(context)); + Object.assign(tempContext,{srfparentdename:'Dept',srfparentkey:entity.id,dept:strId}) + Object.assign(treeNode,{srfappctx:tempContext}); + Object.assign(treeNode,{'dept':strId}); + Object.assign(treeNode, { srfkey: strId }); + Object.assign(treeNode, { text: strText, srfmajortext: strText }); + let strNodeId: string = 'SubDept'; + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += strId; + Object.assign(treeNode, { id: strNodeId }); + Object.assign(treeNode, { expanded: filter.isautoexpand }); + Object.assign(treeNode, { leaf: false }); + let objLeafFlag = entity.isleaf; + if (objLeafFlag != null ) { + let strLeafFlag: string = objLeafFlag.toString().toLowerCase(); + if (Object.is(strLeafFlag, '1') || Object.is(strLeafFlag, 'true')){ + Object.assign(treeNode, { leaf: true }); + } + } + Object.assign(treeNode, { navfilter: "n_parent_eq" }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + bFirst = false; + }); + }else{ + resolve(list); + } + }); + } catch (error) { + console.error(error); + } + }); + + } + + /** + * 获取查询集合 + * + * @public + * @param {any{}} context + * @param {*} searchFilter + * @param {*} filter + * @returns {any[]} + * @memberof TestEnetityDatasService + */ + @Errorlog + public searchSubdept(context:any={}, searchFilter: any, filter: any): Promise { + return new Promise((resolve:any,reject:any) =>{ + if(filter.viewparams){ + Object.assign(searchFilter,filter.viewparams); + } + if(!searchFilter.page){ + Object.assign(searchFilter,{page:0}); + } + if(!searchFilter.size){ + Object.assign(searchFilter,{size:1000}); + } + if(context && context.srfparentdename){ + Object.assign(searchFilter,{srfparentdename:JSON.parse(JSON.stringify(context)).srfparentdename}); + } + if(context && context.srfparentkey){ + Object.assign(searchFilter,{srfparentkey:JSON.parse(JSON.stringify(context)).srfparentkey}); + } + const _appEntityService: any = this.deptService; + let list: any[] = []; + if (_appEntityService['FetchDefault'] && _appEntityService['FetchDefault'] instanceof Function) { + const response: Promise = _appEntityService['FetchDefault'](context, searchFilter, false); + response.then((response: any) => { + if (!response.status || response.status !== 200) { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchDefault数据集异常!'); + } + const data: any = response.data; + if (Object.keys(data).length > 0) { + list = JSON.parse(JSON.stringify(data)); + resolve(list); + } else { + resolve([]); + } + }).catch((response: any) => { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchDefault数据集异常!'); + }); + } + }) + } + + /** + * 填充 树视图节点[子部门]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof DeptExpService + */ + @Errorlog + public async fillSubdeptNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充子部门 + let SubdeptRsNavContext:any = {}; + let SubdeptRsNavParams:any = {}; + let SubdeptRsParams:any = {}; + await this.fillSubdeptNodes(context, filter, list ,SubdeptRsNavContext,SubdeptRsNavParams,SubdeptRsParams); + } else { + // 填充子部门 + let SubdeptRsNavContext:any = {}; + let SubdeptRsNavParams:any = {}; + let SubdeptRsParams:any = {}; + await this.fillSubdeptNodes(context, filter, list ,SubdeptRsNavContext,SubdeptRsNavParams,SubdeptRsParams); + } + } + + /** + * 填充 树视图节点[所有部门] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof DeptExpService + */ + @Errorlog + public fillAlldeptNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let treeNode: any = {}; + Object.assign(treeNode, { text: 'entities.company.deptexp_treeview.nodes.alldept' }); + Object.assign(treeNode, { isUseLangRes: true }); + Object.assign(treeNode,{srfappctx:context}); + Object.assign(treeNode, { srfmajortext: treeNode.text }); + let strNodeId: string = 'AllDept'; + + // 没有指定节点值,直接使用父节点值 + Object.assign(treeNode, { srfkey: filter.strRealNodeId }); + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += filter.strRealNodeId; + + Object.assign(treeNode, { id: strNodeId }); + + Object.assign(treeNode, { expanded: true }); + Object.assign(treeNode, { leaf: false }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + }); + } + + /** + * 填充 树视图节点[所有部门]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof DeptExpService + */ + @Errorlog + public async fillAlldeptNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充根部门 + let RootdeptRsNavContext:any = {}; + let RootdeptRsNavParams:any = {}; + let RootdeptRsParams:any = {}; + await this.fillRootdeptNodes(context, filter, list ,RootdeptRsNavContext,RootdeptRsNavParams,RootdeptRsParams); + } else { + // 填充根部门 + let RootdeptRsNavContext:any = {}; + let RootdeptRsNavParams:any = {}; + let RootdeptRsParams:any = {}; + await this.fillRootdeptNodes(context, filter, list ,RootdeptRsNavContext,RootdeptRsNavParams,RootdeptRsParams); + } + } + + /** + * 填充 树视图节点[默认根节点] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof DeptExpService + */ + @Errorlog + public fillRootNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let treeNode: any = {}; + Object.assign(treeNode, { text: 'entities.company.deptexp_treeview.nodes.root' }); + Object.assign(treeNode, { isUseLangRes: true }); + Object.assign(treeNode,{srfappctx:context}); + Object.assign(treeNode, { srfmajortext: treeNode.text }); + let strNodeId: string = 'ROOT'; + + Object.assign(treeNode, { srfkey: 'root' }); + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += 'root'; + + Object.assign(treeNode, { id: strNodeId }); + + Object.assign(treeNode, { expanded: filter.isAutoexpand }); + Object.assign(treeNode, { leaf: false }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + }); + } + + /** + * 填充 树视图节点[默认根节点]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof DeptExpService + */ + @Errorlog + public async fillRootNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充所有部门 + let AlldeptRsNavContext:any = {}; + let AlldeptRsNavParams:any = {}; + let AlldeptRsParams:any = {}; + await this.fillAlldeptNodes(context, filter, list ,AlldeptRsNavContext,AlldeptRsNavParams,AlldeptRsParams); + } else { + // 填充所有部门 + let AlldeptRsNavContext:any = {}; + let AlldeptRsNavParams:any = {}; + let AlldeptRsParams:any = {}; + await this.fillAlldeptNodes(context, filter, list ,AlldeptRsNavContext,AlldeptRsNavParams,AlldeptRsParams); + } + } + + /** + * 填充 树视图节点[根部门] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof DeptExpService + */ + @Errorlog + public fillRootdeptNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let searchFilter: any = {}; + Object.assign(searchFilter, { total: false }); + let bFirst: boolean = true; + let records: any[] = []; + try { + this.searchRootdept(context, searchFilter, filter).then((records:any) =>{ + if(records && records.length >0){ + records.forEach((entity: any) => { + let treeNode: any = {}; + // 整理context + let strId: string = entity.id; + let strText: string = entity.name; + Object.assign(treeNode,{srfparentdename:'Dept',srfparentkey:entity.id}); + let tempContext:any = JSON.parse(JSON.stringify(context)); + Object.assign(tempContext,{srfparentdename:'Dept',srfparentkey:entity.id,dept:strId}) + Object.assign(treeNode,{srfappctx:tempContext}); + Object.assign(treeNode,{'dept':strId}); + Object.assign(treeNode, { srfkey: strId }); + Object.assign(treeNode, { text: strText, srfmajortext: strText }); + let strNodeId: string = 'RootDept'; + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += strId; + Object.assign(treeNode, { id: strNodeId }); + Object.assign(treeNode, { expanded: filter.isautoexpand }); + Object.assign(treeNode, { leaf: false }); + let objLeafFlag = entity.isleaf; + if (objLeafFlag != null ) { + let strLeafFlag: string = objLeafFlag.toString().toLowerCase(); + if (Object.is(strLeafFlag, '1') || Object.is(strLeafFlag, 'true')){ + Object.assign(treeNode, { leaf: true }); + } + } + Object.assign(treeNode, { navfilter: "n_parent_eq" }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + bFirst = false; + }); + }else{ + resolve(list); + } + }); + } catch (error) { + console.error(error); + } + }); + + } + + /** + * 获取查询集合 + * + * @public + * @param {any{}} context + * @param {*} searchFilter + * @param {*} filter + * @returns {any[]} + * @memberof TestEnetityDatasService + */ + @Errorlog + public searchRootdept(context:any={}, searchFilter: any, filter: any): Promise { + return new Promise((resolve:any,reject:any) =>{ + if(filter.viewparams){ + Object.assign(searchFilter,filter.viewparams); + } + if(!searchFilter.page){ + Object.assign(searchFilter,{page:0}); + } + if(!searchFilter.size){ + Object.assign(searchFilter,{size:1000}); + } + if(context && context.srfparentdename){ + Object.assign(searchFilter,{srfparentdename:JSON.parse(JSON.stringify(context)).srfparentdename}); + } + if(context && context.srfparentkey){ + Object.assign(searchFilter,{srfparentkey:JSON.parse(JSON.stringify(context)).srfparentkey}); + } + const _appEntityService: any = this.deptService; + let list: any[] = []; + if (_appEntityService['FetchRoot'] && _appEntityService['FetchRoot'] instanceof Function) { + const response: Promise = _appEntityService['FetchRoot'](context, searchFilter, false); + response.then((response: any) => { + if (!response.status || response.status !== 200) { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchRoot数据集异常!'); + } + const data: any = response.data; + if (Object.keys(data).length > 0) { + list = JSON.parse(JSON.stringify(data)); + resolve(list); + } else { + resolve([]); + } + }).catch((response: any) => { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchRoot数据集异常!'); + }); + } + }) + } + + /** + * 填充 树视图节点[根部门]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof DeptExpService + */ + @Errorlog + public async fillRootdeptNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充子部门 + let SubdeptRsNavContext:any = {}; + let SubdeptRsNavParams:any = {}; + let SubdeptRsParams:any = {}; + await this.fillSubdeptNodes(context, filter, list ,SubdeptRsNavContext,SubdeptRsNavParams,SubdeptRsParams); + } else { + // 填充子部门 + let SubdeptRsNavContext:any = {}; + let SubdeptRsNavParams:any = {}; + let SubdeptRsParams:any = {}; + await this.fillSubdeptNodes(context, filter, list ,SubdeptRsNavContext,SubdeptRsNavParams,SubdeptRsParams); + } + } + + + /** + * 处理代码表返回数据(树状结构) + * + * @param result 返回数组 + * @param context 应用上下文 + * @param callBack 回调 + * @memberof DeptExpService + */ + public handleDataSet(result:Array,context:any,callBack:any){ + let list:Array = []; + if(result.length === 0){ + return list; + } + result.forEach((codeItem:any) =>{ + if(!codeItem.pvalue){ + let valueField:string = codeItem.value; + this.setChildCodeItems(valueField,result,codeItem); + list.push(codeItem); + } + }) + this.setNodeData(list,context,callBack); + return list; + } + + /** + * 处理非根节点数据 + * + * @param result 返回数组 + * @param context 应用上下文 + * @param callBack 回调 + * @memberof DeptExpService + */ + public setChildCodeItems(pValue:string,result:Array,codeItem:any){ + result.forEach((item:any) =>{ + if(item.pvalue == pValue){ + let valueField:string = item.value; + this.setChildCodeItems(valueField,result,item); + if(!codeItem.children){ + codeItem.children = []; + } + codeItem.children.push(item); + } + }) + } + + /** + * 设置节点UI数据 + * + * @param result 返回数组 + * @param context 应用上下文 + * @param callBack 回调 + * @memberof DeptExpService + */ + public setNodeData(result:Array,context:any,callBack:any){ + result.forEach((item:any) =>{ + if(item.children){ + item.leaf = false; + this.setNodeData(item.children,context,callBack); + }else{ + item.leaf = true; + } + callBack(context,item); + }) + } + + /** + * 处理节点关系导航上下文 + * + * @param context 应用上下文 + * @param filter 参数 + * @param resNavContext 节点关系导航上下文 + * + * @memberof DeptExpService + */ + public handleResNavContext(context:any,filter:any,resNavContext:any){ + if(resNavContext && Object.keys(resNavContext).length > 0){ + let tempContextData:any = JSON.parse(JSON.stringify(context)); + let tempViewParams:any = {}; + if(filter && filter.viewparams){ + tempViewParams = filter.viewparams; + } + Object.keys(resNavContext).forEach((item:any) =>{ + let curDataObj:any = resNavContext[item]; + this.handleCustomDataLogic(context,tempViewParams,curDataObj,tempContextData,item); + }) + return tempContextData; + }else{ + return context; + } + } + + /** + * 处理关系导航参数 + * + * @param context 应用上下文 + * @param filter 参数 + * @param resNavParams 节点关系导航参数 + * @param resParams 节点关系参数 + * + * @memberof DeptExpService + */ + public handleResNavParams(context:any,filter:any,resNavParams:any,resParams:any){ + if((resNavParams && Object.keys(resNavParams).length >0) || (resParams && Object.keys(resParams).length >0)){ + let tempViewParamData:any = {}; + let tempViewParams:any = {}; + if(filter && filter.viewparams){ + tempViewParams = filter.viewparams; + tempViewParamData = JSON.parse(JSON.stringify(filter.viewparams)); + } + if( Object.keys(resNavParams).length > 0){ + Object.keys(resNavParams).forEach((item:any) =>{ + let curDataObj:any = resNavParams[item]; + this.handleCustomDataLogic(context,tempViewParams,curDataObj,tempViewParamData,item); + }) + } + if( Object.keys(resParams).length > 0){ + Object.keys(resParams).forEach((item:any) =>{ + let curDataObj:any = resParams[item]; + tempViewParamData[item.toLowerCase()] = curDataObj.value; + }) + } + Object.assign(filter,{viewparams:tempViewParamData}); + return filter; + }else{ + return filter; + } + } + + /** + * 处理自定义节点关系导航数据 + * + * @param context 应用上下文 + * @param viewparams 参数 + * @param curNavData 节点关系导航参数对象 + * @param tempData 返回数据 + * @param item 节点关系导航参数键值 + * + * @memberof DeptExpService + */ + public handleCustomDataLogic(context:any,viewparams:any,curNavData:any,tempData:any,item:string){ + // 直接值直接赋值 + if(curNavData.isRawValue){ + if(Object.is(curNavData.value,"null") || Object.is(curNavData.value,"")){ + Object.defineProperty(tempData, item.toLowerCase(), { + value: null, + writable : true, + enumerable : true, + configurable : true + }); + }else{ + Object.defineProperty(tempData, item.toLowerCase(), { + value: curNavData.value, + writable : true, + enumerable : true, + configurable : true + }); + } + }else{ + // 先从导航上下文取数,没有再从导航参数(URL)取数,如果导航上下文和导航参数都没有则为null + if(context[(curNavData.value).toLowerCase()]){ + Object.defineProperty(tempData, item.toLowerCase(), { + value: context[(curNavData.value).toLowerCase()], + writable : true, + enumerable : true, + configurable : true + }); + }else{ + if(viewparams[(curNavData.value).toLowerCase()]){ + Object.defineProperty(tempData, item.toLowerCase(), { + value: viewparams[(curNavData.value).toLowerCase()], + writable : true, + enumerable : true, + configurable : true + }); + }else{ + Object.defineProperty(tempData, item.toLowerCase(), { + value: null, + writable : true, + enumerable : true, + configurable : true + }); + } + } + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview.less b/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview.less new file mode 100644 index 0000000000000000000000000000000000000000..9fa8210b7d84fe9412aab2f27ca81bd2f9920b07 --- /dev/null +++ b/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview.less @@ -0,0 +1,4 @@ +.tree { + --tree: 0px; +} +// this is less diff --git a/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview.vue b/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview.vue new file mode 100644 index 0000000000000000000000000000000000000000..68ad66c18753da05f192f30629e092fbe8519bad --- /dev/null +++ b/app_Web/src/widgets/company/dept-exp-treeview/dept-exp-treeview.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar-base.vue b/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..51c039447ad8079794336a6cfb2cda4ef3c0e715 --- /dev/null +++ b/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar-base.vue @@ -0,0 +1,518 @@ + + + + diff --git a/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar-model.ts b/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..3c41e095b1ca860b59d88d2d854f7cd5878becf2 --- /dev/null +++ b/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar-model.ts @@ -0,0 +1,55 @@ +/** + * DeptTreeExpViewtreeexpbar 部件模型 + * + * @export + * @class DeptTreeExpViewtreeexpbarModel + */ +export default class DeptTreeExpViewtreeexpbarModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof DeptTreeExpViewtreeexpbarModel + */ + public getDataItems(): any[] { + return [ + { + name: 'admins', + }, + { + name: 'fax', + }, + { + name: 'deleted', + }, + { + name: 'website', + }, + { + name: 'company', + prop: 'id', + }, + { + name: 'zipcode', + }, + { + name: 'address', + }, + { + name: 'backyard', + }, + { + name: 'name', + }, + { + name: 'guest', + }, + { + name: 'phone', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar-service.ts b/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..f9b117f5167ef116fb357f85817f3c6c628e8d7b --- /dev/null +++ b/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * DeptTreeExpViewtreeexpbar 部件服务对象 + * + * @export + * @class DeptTreeExpViewtreeexpbarService + */ +export default class DeptTreeExpViewtreeexpbarService extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar.less b/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar.less new file mode 100644 index 0000000000000000000000000000000000000000..d215e8f8c645ee2b6c009f000b2441f64c34de3f --- /dev/null +++ b/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar.less @@ -0,0 +1,4 @@ +.app-tree-exp-bar { + --app-tree-exp-bar: 0; +} +// this is less diff --git a/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar.vue b/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar.vue new file mode 100644 index 0000000000000000000000000000000000000000..cd4f546f0b59b1c3e6b6377e1fc22be0346cd9fc --- /dev/null +++ b/app_Web/src/widgets/company/dept-tree-exp-viewtreeexpbar-treeexpbar/dept-tree-exp-viewtreeexpbar-treeexpbar.vue @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview-base.vue b/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..fe6ffea8ab18184e7f64b42554427edd4492df52 --- /dev/null +++ b/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview-base.vue @@ -0,0 +1,767 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview-model.ts b/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..f3b9f0a046ddc3f999aa36824ec9b8853c0e1cb3 --- /dev/null +++ b/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview-model.ts @@ -0,0 +1,55 @@ +/** + * DeptUserExp 部件模型 + * + * @export + * @class DeptUserExpModel + */ +export default class DeptUserExpModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof DeptUserExpModel + */ + public getDataItems(): any[] { + return [ + { + name: 'admins', + }, + { + name: 'fax', + }, + { + name: 'deleted', + }, + { + name: 'website', + }, + { + name: 'company', + prop: 'id', + }, + { + name: 'zipcode', + }, + { + name: 'address', + }, + { + name: 'backyard', + }, + { + name: 'name', + }, + { + name: 'guest', + }, + { + name: 'phone', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview-service.ts b/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..4695c5b80b6923e7178004e3f2c2362c9c4f8396 --- /dev/null +++ b/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview-service.ts @@ -0,0 +1,837 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import CompanyService from '@/service/company/company-service'; +import DeptUserExpModel from './dept-user-exp-treeview-model'; +import CodeListService from '@service/app/codelist-service'; +import i18n from '@/locale'; +import DeptService from '@service/dept/dept-service'; + + +/** + * DeptUserExp 部件服务对象 + * + * @export + * @class DeptUserExpService + */ +export default class DeptUserExpService extends ControlService { + + /** + * 公司服务对象 + * + * @type {CompanyService} + * @memberof DeptUserExpService + */ + public appEntityService: CompanyService = new CompanyService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof DeptUserExpService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of DeptUserExpService. + * + * @param {*} [opts={}] + * @memberof DeptUserExpService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new DeptUserExpModel(); + } + + + /** + * 代码表服务对象 + * + * @type {CodeListService} + * @memberof DeptUserExpService + */ + public codeListService:CodeListService = new CodeListService({ $store: this.getStore() }); + + + /** + * 部门服务对象 + * + * @type {DeptService} + * @memberof DeptUserExpService + */ + public deptService: DeptService = new DeptService({ $store: this.getStore() }); + + /** + * 节点分隔符号 + * + * @public + * @type {string} + * @memberof DeptUserExpService + */ + public TREENODE_SEPARATOR: string = ';'; + + /** + * 所有部门节点分隔符号 + * + * @public + * @type {string} + * @memberof DeptUserExpService + */ + public TREENODE_ALLDEPT: string = 'AllDept'; + + /** + * 默认根节点节点分隔符号 + * + * @public + * @type {string} + * @memberof DeptUserExpService + */ + public TREENODE_ROOT: string = 'ROOT'; + + /** + * 子部门节点分隔符号 + * + * @public + * @type {string} + * @memberof DeptUserExpService + */ + public TREENODE_SUBDEPT: string = 'SubDept'; + + /** + * 根部门节点分隔符号 + * + * @public + * @type {string} + * @memberof DeptUserExpService + */ + public TREENODE_ROOTDEPT: string = 'RootDept'; + + /** + * 获取节点数据 + * + * @param {string} action + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof DeptUserExpService + */ + @Errorlog + public async getNodes(context:any = {},data: any = {}, isloading?: boolean): Promise { + let { srfparentkey, srfcat, srfnodeid, srfnodefilter, query }: { srfparentkey: string, srfcat: string, srfnodeid: string, srfnodefilter: string, query:string } = data; + srfnodefilter = query ? query : srfnodefilter; + let list: any[] = []; + let filter: any = {}; + + + if (!srfnodeid || Object.is(srfnodeid, '#')) { + srfnodeid = this.TREENODE_ROOT; + } + + let strTreeNodeId: string = srfnodeid; + let strRealNodeId: string = ''; + let bRootSelect: boolean = false; + let strNodeType: string | null = null; + let strRootSelectNode: string = ''; + + if (Object.is(strTreeNodeId, this.TREENODE_ROOT)) { + strNodeType = this.TREENODE_ROOT; + if (srfparentkey) { + strRealNodeId = srfparentkey; + } + } else { + let nPos = strTreeNodeId.indexOf(this.TREENODE_SEPARATOR); + if (nPos === -1) { + return Promise.reject({ status: 500, data: { title: '失败', message: `树节点${strTreeNodeId}标识无效` } }); + } + strNodeType = strTreeNodeId.substring(0, nPos); + strRealNodeId = strTreeNodeId.substring(nPos + 1); + } + + Object.assign(filter, + { + srfparentkey: srfparentkey, + srfcat: srfcat, + srfnodefilter: srfnodefilter, + strRealNodeId: strRealNodeId, + srfnodeid: srfnodeid, + strNodeType: strNodeType, + viewparams: JSON.parse(JSON.stringify(data)).viewparams + } + ); + + // 分解节点标识 + let nodeid: string[] = strRealNodeId.split(this.TREENODE_SEPARATOR); + for (let i = 0; i < nodeid.length; i++) { + switch (i) { + case 0: + Object.assign(filter, { nodeid: nodeid[0] }); + break; + case 1: + Object.assign(filter, { nodeid2: nodeid[1] }); + break; + case 2: + Object.assign(filter, { nodeid3: nodeid[2] }); + break; + case 3: + Object.assign(filter, { nodeid4: nodeid[3] }); + break; + default: + break; + } + } + + if (Object.is(strNodeType, this.TREENODE_ALLDEPT)) { + await this.fillAlldeptNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + if (Object.is(strNodeType, this.TREENODE_ROOT)) { + await this.fillRootNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + if (Object.is(strNodeType, this.TREENODE_SUBDEPT)) { + await this.fillSubdeptNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + if (Object.is(strNodeType, this.TREENODE_ROOTDEPT)) { + await this.fillRootdeptNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + return Promise.resolve({ status: 500, data: { title: '失败', message: `树节点${strTreeNodeId}标识无效` } }); + } + + /** + * 填充 树视图节点[所有部门] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof DeptUserExpService + */ + @Errorlog + public fillAlldeptNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let treeNode: any = {}; + Object.assign(treeNode, { text: 'entities.company.deptuserexp_treeview.nodes.alldept' }); + Object.assign(treeNode, { isUseLangRes: true }); + Object.assign(treeNode,{srfappctx:context}); + Object.assign(treeNode, { srfmajortext: treeNode.text }); + let strNodeId: string = 'AllDept'; + + // 没有指定节点值,直接使用父节点值 + Object.assign(treeNode, { srfkey: filter.strRealNodeId }); + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += filter.strRealNodeId; + + Object.assign(treeNode, { id: strNodeId }); + + Object.assign(treeNode, { expanded: true }); + Object.assign(treeNode, { leaf: false }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + }); + } + + /** + * 填充 树视图节点[所有部门]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof DeptUserExpService + */ + @Errorlog + public async fillAlldeptNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充根部门 + let RootdeptRsNavContext:any = {}; + let RootdeptRsNavParams:any = {}; + let RootdeptRsParams:any = {}; + await this.fillRootdeptNodes(context, filter, list ,RootdeptRsNavContext,RootdeptRsNavParams,RootdeptRsParams); + } else { + // 填充根部门 + let RootdeptRsNavContext:any = {}; + let RootdeptRsNavParams:any = {}; + let RootdeptRsParams:any = {}; + await this.fillRootdeptNodes(context, filter, list ,RootdeptRsNavContext,RootdeptRsNavParams,RootdeptRsParams); + } + } + + /** + * 填充 树视图节点[默认根节点] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof DeptUserExpService + */ + @Errorlog + public fillRootNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let treeNode: any = {}; + Object.assign(treeNode, { text: 'entities.company.deptuserexp_treeview.nodes.root' }); + Object.assign(treeNode, { isUseLangRes: true }); + Object.assign(treeNode,{srfappctx:context}); + Object.assign(treeNode, { srfmajortext: treeNode.text }); + let strNodeId: string = 'ROOT'; + + Object.assign(treeNode, { srfkey: 'root' }); + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += 'root'; + + Object.assign(treeNode, { id: strNodeId }); + + Object.assign(treeNode, { expanded: filter.isAutoexpand }); + Object.assign(treeNode, { leaf: false }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + }); + } + + /** + * 填充 树视图节点[默认根节点]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof DeptUserExpService + */ + @Errorlog + public async fillRootNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充所有部门 + let AlldeptRsNavContext:any = {}; + let AlldeptRsNavParams:any = {}; + let AlldeptRsParams:any = {}; + await this.fillAlldeptNodes(context, filter, list ,AlldeptRsNavContext,AlldeptRsNavParams,AlldeptRsParams); + } else { + // 填充所有部门 + let AlldeptRsNavContext:any = {}; + let AlldeptRsNavParams:any = {}; + let AlldeptRsParams:any = {}; + await this.fillAlldeptNodes(context, filter, list ,AlldeptRsNavContext,AlldeptRsNavParams,AlldeptRsParams); + } + } + + /** + * 填充 树视图节点[子部门] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof DeptUserExpService + */ + @Errorlog + public fillSubdeptNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let searchFilter: any = {}; + + if (Object.is(filter.strNodeType, this.TREENODE_SUBDEPT)) { + Object.assign(searchFilter, { n_parent_eq: filter.nodeid }); + } + + + if (Object.is(filter.strNodeType, this.TREENODE_ROOTDEPT)) { + Object.assign(searchFilter, { n_parent_eq: filter.nodeid }); + } + + Object.assign(searchFilter, { total: false }); + let bFirst: boolean = true; + let records: any[] = []; + try { + this.searchSubdept(context, searchFilter, filter).then((records:any) =>{ + if(records && records.length >0){ + records.forEach((entity: any) => { + let treeNode: any = {}; + // 整理context + let strId: string = entity.id; + let strText: string = entity.name; + Object.assign(treeNode,{srfparentdename:'Dept',srfparentkey:entity.id}); + let tempContext:any = JSON.parse(JSON.stringify(context)); + Object.assign(tempContext,{srfparentdename:'Dept',srfparentkey:entity.id,dept:strId}) + Object.assign(treeNode,{srfappctx:tempContext}); + Object.assign(treeNode,{'dept':strId}); + Object.assign(treeNode, { srfkey: strId }); + Object.assign(treeNode, { text: strText, srfmajortext: strText }); + let strNodeId: string = 'SubDept'; + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += strId; + Object.assign(treeNode, { id: strNodeId }); + Object.assign(treeNode, { expanded: filter.isautoexpand }); + Object.assign(treeNode, { leaf: false }); + let objLeafFlag = entity.isleaf; + if (objLeafFlag != null ) { + let strLeafFlag: string = objLeafFlag.toString().toLowerCase(); + if (Object.is(strLeafFlag, '1') || Object.is(strLeafFlag, 'true')){ + Object.assign(treeNode, { leaf: true }); + } + } + Object.assign(treeNode, { navfilter: "n_dept_eq" }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + bFirst = false; + }); + }else{ + resolve(list); + } + }); + } catch (error) { + console.error(error); + } + }); + + } + + /** + * 获取查询集合 + * + * @public + * @param {any{}} context + * @param {*} searchFilter + * @param {*} filter + * @returns {any[]} + * @memberof TestEnetityDatasService + */ + @Errorlog + public searchSubdept(context:any={}, searchFilter: any, filter: any): Promise { + return new Promise((resolve:any,reject:any) =>{ + if(filter.viewparams){ + Object.assign(searchFilter,filter.viewparams); + } + if(!searchFilter.page){ + Object.assign(searchFilter,{page:0}); + } + if(!searchFilter.size){ + Object.assign(searchFilter,{size:1000}); + } + if(context && context.srfparentdename){ + Object.assign(searchFilter,{srfparentdename:JSON.parse(JSON.stringify(context)).srfparentdename}); + } + if(context && context.srfparentkey){ + Object.assign(searchFilter,{srfparentkey:JSON.parse(JSON.stringify(context)).srfparentkey}); + } + const _appEntityService: any = this.deptService; + let list: any[] = []; + if (_appEntityService['FetchDefault'] && _appEntityService['FetchDefault'] instanceof Function) { + const response: Promise = _appEntityService['FetchDefault'](context, searchFilter, false); + response.then((response: any) => { + if (!response.status || response.status !== 200) { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchDefault数据集异常!'); + } + const data: any = response.data; + if (Object.keys(data).length > 0) { + list = JSON.parse(JSON.stringify(data)); + resolve(list); + } else { + resolve([]); + } + }).catch((response: any) => { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchDefault数据集异常!'); + }); + } + }) + } + + /** + * 填充 树视图节点[子部门]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof DeptUserExpService + */ + @Errorlog + public async fillSubdeptNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充子部门 + let SubdeptRsNavContext:any = {}; + let SubdeptRsNavParams:any = {}; + let SubdeptRsParams:any = {}; + await this.fillSubdeptNodes(context, filter, list ,SubdeptRsNavContext,SubdeptRsNavParams,SubdeptRsParams); + } else { + // 填充子部门 + let SubdeptRsNavContext:any = {}; + let SubdeptRsNavParams:any = {}; + let SubdeptRsParams:any = {}; + await this.fillSubdeptNodes(context, filter, list ,SubdeptRsNavContext,SubdeptRsNavParams,SubdeptRsParams); + } + } + + /** + * 填充 树视图节点[根部门] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof DeptUserExpService + */ + @Errorlog + public fillRootdeptNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let searchFilter: any = {}; + Object.assign(searchFilter, { total: false }); + let bFirst: boolean = true; + let records: any[] = []; + try { + this.searchRootdept(context, searchFilter, filter).then((records:any) =>{ + if(records && records.length >0){ + records.forEach((entity: any) => { + let treeNode: any = {}; + // 整理context + let strId: string = entity.id; + let strText: string = entity.name; + Object.assign(treeNode,{srfparentdename:'Dept',srfparentkey:entity.id}); + let tempContext:any = JSON.parse(JSON.stringify(context)); + Object.assign(tempContext,{srfparentdename:'Dept',srfparentkey:entity.id,dept:strId}) + Object.assign(treeNode,{srfappctx:tempContext}); + Object.assign(treeNode,{'dept':strId}); + Object.assign(treeNode, { srfkey: strId }); + Object.assign(treeNode, { text: strText, srfmajortext: strText }); + let strNodeId: string = 'RootDept'; + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += strId; + Object.assign(treeNode, { id: strNodeId }); + Object.assign(treeNode, { expanded: filter.isautoexpand }); + Object.assign(treeNode, { leaf: false }); + let objLeafFlag = entity.isleaf; + if (objLeafFlag != null ) { + let strLeafFlag: string = objLeafFlag.toString().toLowerCase(); + if (Object.is(strLeafFlag, '1') || Object.is(strLeafFlag, 'true')){ + Object.assign(treeNode, { leaf: true }); + } + } + Object.assign(treeNode, { navfilter: "n_dept_eq" }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + bFirst = false; + }); + }else{ + resolve(list); + } + }); + } catch (error) { + console.error(error); + } + }); + + } + + /** + * 获取查询集合 + * + * @public + * @param {any{}} context + * @param {*} searchFilter + * @param {*} filter + * @returns {any[]} + * @memberof TestEnetityDatasService + */ + @Errorlog + public searchRootdept(context:any={}, searchFilter: any, filter: any): Promise { + return new Promise((resolve:any,reject:any) =>{ + if(filter.viewparams){ + Object.assign(searchFilter,filter.viewparams); + } + if(!searchFilter.page){ + Object.assign(searchFilter,{page:0}); + } + if(!searchFilter.size){ + Object.assign(searchFilter,{size:1000}); + } + if(context && context.srfparentdename){ + Object.assign(searchFilter,{srfparentdename:JSON.parse(JSON.stringify(context)).srfparentdename}); + } + if(context && context.srfparentkey){ + Object.assign(searchFilter,{srfparentkey:JSON.parse(JSON.stringify(context)).srfparentkey}); + } + const _appEntityService: any = this.deptService; + let list: any[] = []; + if (_appEntityService['FetchRoot'] && _appEntityService['FetchRoot'] instanceof Function) { + const response: Promise = _appEntityService['FetchRoot'](context, searchFilter, false); + response.then((response: any) => { + if (!response.status || response.status !== 200) { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchRoot数据集异常!'); + } + const data: any = response.data; + if (Object.keys(data).length > 0) { + list = JSON.parse(JSON.stringify(data)); + resolve(list); + } else { + resolve([]); + } + }).catch((response: any) => { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchRoot数据集异常!'); + }); + } + }) + } + + /** + * 填充 树视图节点[根部门]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof DeptUserExpService + */ + @Errorlog + public async fillRootdeptNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充子部门 + let SubdeptRsNavContext:any = {}; + let SubdeptRsNavParams:any = {}; + let SubdeptRsParams:any = {}; + await this.fillSubdeptNodes(context, filter, list ,SubdeptRsNavContext,SubdeptRsNavParams,SubdeptRsParams); + } else { + // 填充子部门 + let SubdeptRsNavContext:any = {}; + let SubdeptRsNavParams:any = {}; + let SubdeptRsParams:any = {}; + await this.fillSubdeptNodes(context, filter, list ,SubdeptRsNavContext,SubdeptRsNavParams,SubdeptRsParams); + } + } + + + /** + * 处理代码表返回数据(树状结构) + * + * @param result 返回数组 + * @param context 应用上下文 + * @param callBack 回调 + * @memberof DeptUserExpService + */ + public handleDataSet(result:Array,context:any,callBack:any){ + let list:Array = []; + if(result.length === 0){ + return list; + } + result.forEach((codeItem:any) =>{ + if(!codeItem.pvalue){ + let valueField:string = codeItem.value; + this.setChildCodeItems(valueField,result,codeItem); + list.push(codeItem); + } + }) + this.setNodeData(list,context,callBack); + return list; + } + + /** + * 处理非根节点数据 + * + * @param result 返回数组 + * @param context 应用上下文 + * @param callBack 回调 + * @memberof DeptUserExpService + */ + public setChildCodeItems(pValue:string,result:Array,codeItem:any){ + result.forEach((item:any) =>{ + if(item.pvalue == pValue){ + let valueField:string = item.value; + this.setChildCodeItems(valueField,result,item); + if(!codeItem.children){ + codeItem.children = []; + } + codeItem.children.push(item); + } + }) + } + + /** + * 设置节点UI数据 + * + * @param result 返回数组 + * @param context 应用上下文 + * @param callBack 回调 + * @memberof DeptUserExpService + */ + public setNodeData(result:Array,context:any,callBack:any){ + result.forEach((item:any) =>{ + if(item.children){ + item.leaf = false; + this.setNodeData(item.children,context,callBack); + }else{ + item.leaf = true; + } + callBack(context,item); + }) + } + + /** + * 处理节点关系导航上下文 + * + * @param context 应用上下文 + * @param filter 参数 + * @param resNavContext 节点关系导航上下文 + * + * @memberof DeptUserExpService + */ + public handleResNavContext(context:any,filter:any,resNavContext:any){ + if(resNavContext && Object.keys(resNavContext).length > 0){ + let tempContextData:any = JSON.parse(JSON.stringify(context)); + let tempViewParams:any = {}; + if(filter && filter.viewparams){ + tempViewParams = filter.viewparams; + } + Object.keys(resNavContext).forEach((item:any) =>{ + let curDataObj:any = resNavContext[item]; + this.handleCustomDataLogic(context,tempViewParams,curDataObj,tempContextData,item); + }) + return tempContextData; + }else{ + return context; + } + } + + /** + * 处理关系导航参数 + * + * @param context 应用上下文 + * @param filter 参数 + * @param resNavParams 节点关系导航参数 + * @param resParams 节点关系参数 + * + * @memberof DeptUserExpService + */ + public handleResNavParams(context:any,filter:any,resNavParams:any,resParams:any){ + if((resNavParams && Object.keys(resNavParams).length >0) || (resParams && Object.keys(resParams).length >0)){ + let tempViewParamData:any = {}; + let tempViewParams:any = {}; + if(filter && filter.viewparams){ + tempViewParams = filter.viewparams; + tempViewParamData = JSON.parse(JSON.stringify(filter.viewparams)); + } + if( Object.keys(resNavParams).length > 0){ + Object.keys(resNavParams).forEach((item:any) =>{ + let curDataObj:any = resNavParams[item]; + this.handleCustomDataLogic(context,tempViewParams,curDataObj,tempViewParamData,item); + }) + } + if( Object.keys(resParams).length > 0){ + Object.keys(resParams).forEach((item:any) =>{ + let curDataObj:any = resParams[item]; + tempViewParamData[item.toLowerCase()] = curDataObj.value; + }) + } + Object.assign(filter,{viewparams:tempViewParamData}); + return filter; + }else{ + return filter; + } + } + + /** + * 处理自定义节点关系导航数据 + * + * @param context 应用上下文 + * @param viewparams 参数 + * @param curNavData 节点关系导航参数对象 + * @param tempData 返回数据 + * @param item 节点关系导航参数键值 + * + * @memberof DeptUserExpService + */ + public handleCustomDataLogic(context:any,viewparams:any,curNavData:any,tempData:any,item:string){ + // 直接值直接赋值 + if(curNavData.isRawValue){ + if(Object.is(curNavData.value,"null") || Object.is(curNavData.value,"")){ + Object.defineProperty(tempData, item.toLowerCase(), { + value: null, + writable : true, + enumerable : true, + configurable : true + }); + }else{ + Object.defineProperty(tempData, item.toLowerCase(), { + value: curNavData.value, + writable : true, + enumerable : true, + configurable : true + }); + } + }else{ + // 先从导航上下文取数,没有再从导航参数(URL)取数,如果导航上下文和导航参数都没有则为null + if(context[(curNavData.value).toLowerCase()]){ + Object.defineProperty(tempData, item.toLowerCase(), { + value: context[(curNavData.value).toLowerCase()], + writable : true, + enumerable : true, + configurable : true + }); + }else{ + if(viewparams[(curNavData.value).toLowerCase()]){ + Object.defineProperty(tempData, item.toLowerCase(), { + value: viewparams[(curNavData.value).toLowerCase()], + writable : true, + enumerable : true, + configurable : true + }); + }else{ + Object.defineProperty(tempData, item.toLowerCase(), { + value: null, + writable : true, + enumerable : true, + configurable : true + }); + } + } + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview.less b/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview.less new file mode 100644 index 0000000000000000000000000000000000000000..9fa8210b7d84fe9412aab2f27ca81bd2f9920b07 --- /dev/null +++ b/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview.less @@ -0,0 +1,4 @@ +.tree { + --tree: 0px; +} +// this is less diff --git a/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview.vue b/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview.vue new file mode 100644 index 0000000000000000000000000000000000000000..ba9c2d4581ddd6722cc333f1b2c233e3eb656cb9 --- /dev/null +++ b/app_Web/src/widgets/company/dept-user-exp-treeview/dept-user-exp-treeview.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar-base.vue b/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..cc4bc824a90e71d879837629520c1d7494dc4cee --- /dev/null +++ b/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar-base.vue @@ -0,0 +1,518 @@ + + + + diff --git a/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar-model.ts b/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..d667aec96cdad9aced769dfd579e2a6ca8dcd646 --- /dev/null +++ b/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar-model.ts @@ -0,0 +1,55 @@ +/** + * DeptUserTreeExpViewtreeexpbar 部件模型 + * + * @export + * @class DeptUserTreeExpViewtreeexpbarModel + */ +export default class DeptUserTreeExpViewtreeexpbarModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof DeptUserTreeExpViewtreeexpbarModel + */ + public getDataItems(): any[] { + return [ + { + name: 'admins', + }, + { + name: 'fax', + }, + { + name: 'deleted', + }, + { + name: 'website', + }, + { + name: 'company', + prop: 'id', + }, + { + name: 'zipcode', + }, + { + name: 'address', + }, + { + name: 'backyard', + }, + { + name: 'name', + }, + { + name: 'guest', + }, + { + name: 'phone', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar-service.ts b/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..99106d94277deb5adc85e7dbcac464fe3b11d72c --- /dev/null +++ b/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * DeptUserTreeExpViewtreeexpbar 部件服务对象 + * + * @export + * @class DeptUserTreeExpViewtreeexpbarService + */ +export default class DeptUserTreeExpViewtreeexpbarService extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar.less b/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar.less new file mode 100644 index 0000000000000000000000000000000000000000..d215e8f8c645ee2b6c009f000b2441f64c34de3f --- /dev/null +++ b/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar.less @@ -0,0 +1,4 @@ +.app-tree-exp-bar { + --app-tree-exp-bar: 0; +} +// this is less diff --git a/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar.vue b/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar.vue new file mode 100644 index 0000000000000000000000000000000000000000..09a4e5a5f950bf4fb398dce8b7db3020138689fa --- /dev/null +++ b/app_Web/src/widgets/company/dept-user-tree-exp-viewtreeexpbar-treeexpbar/dept-user-tree-exp-viewtreeexpbar-treeexpbar.vue @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-dashboard/main-dashboard-base.vue b/app_Web/src/widgets/company/main-dashboard/main-dashboard-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..22d2dc2fb8af3176c91c182a76d0e9b46de9a33d --- /dev/null +++ b/app_Web/src/widgets/company/main-dashboard/main-dashboard-base.vue @@ -0,0 +1,385 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-dashboard/main-dashboard-model.ts b/app_Web/src/widgets/company/main-dashboard/main-dashboard-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..401ae88dc8cd8017f7d2d7e9ebd94dc7c0e1be45 --- /dev/null +++ b/app_Web/src/widgets/company/main-dashboard/main-dashboard-model.ts @@ -0,0 +1,55 @@ +/** + * Main 部件模型 + * + * @export + * @class MainModel + */ +export default class MainModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainModel + */ + public getDataItems(): any[] { + return [ + { + name: 'admins', + }, + { + name: 'fax', + }, + { + name: 'deleted', + }, + { + name: 'website', + }, + { + name: 'company', + prop: 'id', + }, + { + name: 'zipcode', + }, + { + name: 'address', + }, + { + name: 'backyard', + }, + { + name: 'name', + }, + { + name: 'guest', + }, + { + name: 'phone', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-dashboard/main-dashboard-service.ts b/app_Web/src/widgets/company/main-dashboard/main-dashboard-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..01dafde62e4e442eeccf0aba46b36c5381b80ea7 --- /dev/null +++ b/app_Web/src/widgets/company/main-dashboard/main-dashboard-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * Main 部件服务对象 + * + * @export + * @class MainService + */ +export default class MainService extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-dashboard/main-dashboard.less b/app_Web/src/widgets/company/main-dashboard/main-dashboard.less new file mode 100644 index 0000000000000000000000000000000000000000..5de8b00b879d5b4ec83486e385f889ea75bc9964 --- /dev/null +++ b/app_Web/src/widgets/company/main-dashboard/main-dashboard.less @@ -0,0 +1,4 @@ +.dashboard { + --dashboard: 0px; +} +// this is less diff --git a/app_Web/src/widgets/company/main-dashboard/main-dashboard.vue b/app_Web/src/widgets/company/main-dashboard/main-dashboard.vue new file mode 100644 index 0000000000000000000000000000000000000000..d8ee7b670fa53f91d72e2c26346dde5ee41770db --- /dev/null +++ b/app_Web/src/widgets/company/main-dashboard/main-dashboard.vue @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-form/main-form-base.vue b/app_Web/src/widgets/company/main-form/main-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..59b874dea01a1e54ff911ae0abcda819b413ee1f --- /dev/null +++ b/app_Web/src/widgets/company/main-form/main-form-base.vue @@ -0,0 +1,1760 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-form/main-form-model.ts b/app_Web/src/widgets/company/main-form/main-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..eb4b89abbdbb357940ede3a06e2d3d165c0a1ede --- /dev/null +++ b/app_Web/src/widgets/company/main-form/main-form-model.ts @@ -0,0 +1,106 @@ +/** + * Main 部件模型 + * + * @export + * @class MainModel + */ +export default class MainModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'name', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'phone', + prop: 'phone', + dataType: 'TEXT', + }, + { + name: 'fax', + prop: 'fax', + dataType: 'TEXT', + }, + { + name: 'address', + prop: 'address', + dataType: 'TEXT', + }, + { + name: 'zipcode', + prop: 'zipcode', + dataType: 'TEXT', + }, + { + name: 'website', + prop: 'website', + dataType: 'TEXT', + }, + { + name: 'backyard', + prop: 'backyard', + dataType: 'TEXT', + }, + { + name: 'guest', + prop: 'guest', + dataType: 'SSCODELIST', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'company', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-form/main-form-service.ts b/app_Web/src/widgets/company/main-form/main-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..9be34db4b53f9e5273b5764a10bc7c339cb832a6 --- /dev/null +++ b/app_Web/src/widgets/company/main-form/main-form-service.ts @@ -0,0 +1,371 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import CompanyService from '@/service/company/company-service'; +import MainModel from './main-form-model'; + + +/** + * Main 部件服务对象 + * + * @export + * @class MainService + */ +export default class MainService extends ControlService { + + /** + * 公司服务对象 + * + * @type {CompanyService} + * @memberof MainService + */ + public appEntityService: CompanyService = new CompanyService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof MainService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of MainService. + * + * @param {*} [opts={}] + * @memberof MainService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new MainModel(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof MainService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.company = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof MainService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-form/main-form.less b/app_Web/src/widgets/company/main-form/main-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/company/main-form/main-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/company/main-form/main-form.vue b/app_Web/src/widgets/company/main-form/main-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..62e1a826d86b318d31735af1fed3683f8de2e5fa --- /dev/null +++ b/app_Web/src/widgets/company/main-form/main-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel-base.vue b/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..4bdeab16d8309d7f120adb01c1ffe76efad7e7e1 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel-base.vue @@ -0,0 +1,404 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel-model.ts b/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..f3dae020b0ecd909125cf0a59ab40e46b0fd27a4 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel-model.ts @@ -0,0 +1,55 @@ +/** + * MainTabExpViewtabexppanel 部件模型 + * + * @export + * @class MainTabExpViewtabexppanelModel + */ +export default class MainTabExpViewtabexppanelModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainTabExpViewtabexppanelModel + */ + public getDataItems(): any[] { + return [ + { + name: 'admins', + }, + { + name: 'fax', + }, + { + name: 'deleted', + }, + { + name: 'website', + }, + { + name: 'company', + prop: 'id', + }, + { + name: 'zipcode', + }, + { + name: 'address', + }, + { + name: 'backyard', + }, + { + name: 'name', + }, + { + name: 'guest', + }, + { + name: 'phone', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel-service.ts b/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..43aa056d2be2329ba262dc4141926879a6cf624b --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel-service.ts @@ -0,0 +1,45 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import CompanyService from '@/service/company/company-service'; +import MainTabExpViewtabexppanelModel from './main-tab-exp-viewtabexppanel-tabexppanel-model'; + + +/** + * MainTabExpViewtabexppanel 部件服务对象 + * + * @export + * @class MainTabExpViewtabexppanelService + */ +export default class MainTabExpViewtabexppanelService extends ControlService { + + /** + * 公司服务对象 + * + * @type {CompanyService} + * @memberof MainTabExpViewtabexppanelService + */ + public appEntityService: CompanyService = new CompanyService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof MainTabExpViewtabexppanelService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of MainTabExpViewtabexppanelService. + * + * @param {*} [opts={}] + * @memberof MainTabExpViewtabexppanelService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new MainTabExpViewtabexppanelModel(); + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel.less b/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel.less new file mode 100644 index 0000000000000000000000000000000000000000..9d1f354d92bdb32efc53a8b247785f968f0b43ce --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel.less @@ -0,0 +1,4 @@ +.tabexppanel { + --tabexppanel: 0; +} +// this is less diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel.vue b/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel.vue new file mode 100644 index 0000000000000000000000000000000000000000..b33186e2fcb2c0ca23098e54f1e50d9b6976f982 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel.vue @@ -0,0 +1,24 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-base.vue b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..96125c589164860586acd345d435b7960fefe45c --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-base.vue @@ -0,0 +1,243 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-model.ts b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..617ff6baa5b4f4df598d5b09769b277f12c4c357 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-model.ts @@ -0,0 +1,55 @@ +/** + * MainTabExpViewtabviewpanel 部件模型 + * + * @export + * @class MainTabExpViewtabviewpanelModel + */ +export default class MainTabExpViewtabviewpanelModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainTabExpViewtabviewpanelModel + */ + public getDataItems(): any[] { + return [ + { + name: 'admins', + }, + { + name: 'fax', + }, + { + name: 'deleted', + }, + { + name: 'website', + }, + { + name: 'company', + prop: 'id', + }, + { + name: 'zipcode', + }, + { + name: 'address', + }, + { + name: 'backyard', + }, + { + name: 'name', + }, + { + name: 'guest', + }, + { + name: 'phone', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-service.ts b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..a3b6dd84840c840e64aff51cc59f1e2c553ca74d --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * MainTabExpViewtabviewpanel 部件服务对象 + * + * @export + * @class MainTabExpViewtabviewpanelService + */ +export default class MainTabExpViewtabviewpanelService extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel.less b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel.less new file mode 100644 index 0000000000000000000000000000000000000000..f726c4de6ee0d952479506759b59804aabe38405 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel.less @@ -0,0 +1 @@ +// this is less diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel.vue b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel.vue new file mode 100644 index 0000000000000000000000000000000000000000..c4b25ae730853c67dacf304507b3a0643484c49f --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-base.vue b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..29ce233283bc285fddf427377d2c9a1f12e5b6f3 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-base.vue @@ -0,0 +1,243 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-model.ts b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..837de2de494c84f7bf78389a008d2fe8f46dde04 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-model.ts @@ -0,0 +1,55 @@ +/** + * MainTabExpViewtabviewpanel2 部件模型 + * + * @export + * @class MainTabExpViewtabviewpanel2Model + */ +export default class MainTabExpViewtabviewpanel2Model { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainTabExpViewtabviewpanel2Model + */ + public getDataItems(): any[] { + return [ + { + name: 'admins', + }, + { + name: 'fax', + }, + { + name: 'deleted', + }, + { + name: 'website', + }, + { + name: 'company', + prop: 'id', + }, + { + name: 'zipcode', + }, + { + name: 'address', + }, + { + name: 'backyard', + }, + { + name: 'name', + }, + { + name: 'guest', + }, + { + name: 'phone', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-service.ts b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..90c5a533a9195c81e4cc47bc73da2ac84df9b678 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * MainTabExpViewtabviewpanel2 部件服务对象 + * + * @export + * @class MainTabExpViewtabviewpanel2Service + */ +export default class MainTabExpViewtabviewpanel2Service extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel.less b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel.less new file mode 100644 index 0000000000000000000000000000000000000000..f726c4de6ee0d952479506759b59804aabe38405 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel.less @@ -0,0 +1 @@ +// this is less diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel.vue b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel.vue new file mode 100644 index 0000000000000000000000000000000000000000..aa778bb17f012d2073dc20881a2e91f47053da87 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-base.vue b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..d384297840463d072a64715a33fa8750548f774d --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-base.vue @@ -0,0 +1,243 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-model.ts b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..f7fead3f7d5ef01534d0c0348f209d9460ff97de --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-model.ts @@ -0,0 +1,55 @@ +/** + * MainTabExpViewtabviewpanel3 部件模型 + * + * @export + * @class MainTabExpViewtabviewpanel3Model + */ +export default class MainTabExpViewtabviewpanel3Model { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainTabExpViewtabviewpanel3Model + */ + public getDataItems(): any[] { + return [ + { + name: 'admins', + }, + { + name: 'fax', + }, + { + name: 'deleted', + }, + { + name: 'website', + }, + { + name: 'company', + prop: 'id', + }, + { + name: 'zipcode', + }, + { + name: 'address', + }, + { + name: 'backyard', + }, + { + name: 'name', + }, + { + name: 'guest', + }, + { + name: 'phone', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-service.ts b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..b2fc466f5628fae82b2ab4c072618f425c1154a6 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * MainTabExpViewtabviewpanel3 部件服务对象 + * + * @export + * @class MainTabExpViewtabviewpanel3Service + */ +export default class MainTabExpViewtabviewpanel3Service extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel.less b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel.less new file mode 100644 index 0000000000000000000000000000000000000000..f726c4de6ee0d952479506759b59804aabe38405 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel.less @@ -0,0 +1 @@ +// this is less diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel.vue b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel.vue new file mode 100644 index 0000000000000000000000000000000000000000..680dc0f4b27aa454d9a2740f02daa31313d32e23 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-base.vue b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..c204adb21a0a7b3190592b0eac4d729527b3db63 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-base.vue @@ -0,0 +1,243 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-model.ts b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..a0d8897c5901b36c572eb010a5ab6d9373e6d6d0 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-model.ts @@ -0,0 +1,55 @@ +/** + * MainTabExpViewtabviewpanel4 部件模型 + * + * @export + * @class MainTabExpViewtabviewpanel4Model + */ +export default class MainTabExpViewtabviewpanel4Model { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainTabExpViewtabviewpanel4Model + */ + public getDataItems(): any[] { + return [ + { + name: 'admins', + }, + { + name: 'fax', + }, + { + name: 'deleted', + }, + { + name: 'website', + }, + { + name: 'company', + prop: 'id', + }, + { + name: 'zipcode', + }, + { + name: 'address', + }, + { + name: 'backyard', + }, + { + name: 'name', + }, + { + name: 'guest', + }, + { + name: 'phone', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-service.ts b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..04b77cceec93d3f695728d2a90481f7d2967ddb9 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * MainTabExpViewtabviewpanel4 部件服务对象 + * + * @export + * @class MainTabExpViewtabviewpanel4Service + */ +export default class MainTabExpViewtabviewpanel4Service extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel.less b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel.less new file mode 100644 index 0000000000000000000000000000000000000000..f726c4de6ee0d952479506759b59804aabe38405 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel.less @@ -0,0 +1 @@ +// this is less diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel.vue b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel.vue new file mode 100644 index 0000000000000000000000000000000000000000..1a9ae180d7feb919ec1dba9b277875a4326cad6a --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-base.vue b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..fe8a33646fb95536cc0da95885fcbda3cf72c92c --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-base.vue @@ -0,0 +1,243 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-model.ts b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..dc2bafbfcea99eb8e2678b886c7895dff319e446 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-model.ts @@ -0,0 +1,55 @@ +/** + * MainTabExpViewtabviewpanel5 部件模型 + * + * @export + * @class MainTabExpViewtabviewpanel5Model + */ +export default class MainTabExpViewtabviewpanel5Model { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainTabExpViewtabviewpanel5Model + */ + public getDataItems(): any[] { + return [ + { + name: 'admins', + }, + { + name: 'fax', + }, + { + name: 'deleted', + }, + { + name: 'website', + }, + { + name: 'company', + prop: 'id', + }, + { + name: 'zipcode', + }, + { + name: 'address', + }, + { + name: 'backyard', + }, + { + name: 'name', + }, + { + name: 'guest', + }, + { + name: 'phone', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-service.ts b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..995c69f73a4d1310a67bcc7b97c4666ac7255f1d --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * MainTabExpViewtabviewpanel5 部件服务对象 + * + * @export + * @class MainTabExpViewtabviewpanel5Service + */ +export default class MainTabExpViewtabviewpanel5Service extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel.less b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel.less new file mode 100644 index 0000000000000000000000000000000000000000..f726c4de6ee0d952479506759b59804aabe38405 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel.less @@ -0,0 +1 @@ +// this is less diff --git a/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel.vue b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel.vue new file mode 100644 index 0000000000000000000000000000000000000000..634125927e224d36fd6a576f4f228267d460e823 --- /dev/null +++ b/app_Web/src/widgets/company/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet-base.vue b/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..aa3150258e780f9f98582d0930d5b7012f0d5dcc --- /dev/null +++ b/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet-base.vue @@ -0,0 +1,225 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet-model.ts b/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..8c721eca6208f753d0e6ba72138cc1c33a84317d --- /dev/null +++ b/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet-model.ts @@ -0,0 +1,55 @@ +/** + * MainViewdashboard_companycontainer1 部件模型 + * + * @export + * @class MainViewdashboard_companycontainer1Model + */ +export default class MainViewdashboard_companycontainer1Model { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainViewdashboard_companycontainer1Model + */ + public getDataItems(): any[] { + return [ + { + name: 'admins', + }, + { + name: 'fax', + }, + { + name: 'deleted', + }, + { + name: 'website', + }, + { + name: 'company', + prop: 'id', + }, + { + name: 'zipcode', + }, + { + name: 'address', + }, + { + name: 'backyard', + }, + { + name: 'name', + }, + { + name: 'guest', + }, + { + name: 'phone', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet-service.ts b/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..8a2c631d7323a6f0fce13e056457a374ee346766 --- /dev/null +++ b/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * MainViewdashboard_companycontainer1 部件服务对象 + * + * @export + * @class MainViewdashboard_companycontainer1Service + */ +export default class MainViewdashboard_companycontainer1Service extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet.less b/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet.less new file mode 100644 index 0000000000000000000000000000000000000000..79fe0e3e9e4f43d98d8b98f5d0e7f1283e0fe7fc --- /dev/null +++ b/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet.less @@ -0,0 +1,4 @@ +.portlet { + --portlet: 0px; +} +// this is less diff --git a/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet.vue b/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet.vue new file mode 100644 index 0000000000000000000000000000000000000000..fb8c5152c5f2364de32f2bbac4643b771ce06f5b --- /dev/null +++ b/app_Web/src/widgets/company/main-viewdashboard-companycontainer1-portlet/main-viewdashboard-companycontainer1-portlet.vue @@ -0,0 +1,17 @@ + + \ No newline at end of file diff --git a/app_Web/src/widgets/dept/default-searchform/default-searchform-base.vue b/app_Web/src/widgets/dept/default-searchform/default-searchform-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..cbc805c33a730a3b717c5ac4c79f5e0243019f83 --- /dev/null +++ b/app_Web/src/widgets/dept/default-searchform/default-searchform-base.vue @@ -0,0 +1,703 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/dept/default-searchform/default-searchform-model.ts b/app_Web/src/widgets/dept/default-searchform/default-searchform-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..c9c58586df6a02fceaa5b7ccac738b50dc9e73c2 --- /dev/null +++ b/app_Web/src/widgets/dept/default-searchform/default-searchform-model.ts @@ -0,0 +1,31 @@ +/** + * Default 部件模型 + * + * @export + * @class DefaultModel + */ +export default class DefaultModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof DefaultModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/dept/default-searchform/default-searchform-service.ts b/app_Web/src/widgets/dept/default-searchform/default-searchform-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..5a36046396ddf7b445b54ec5eddf5e67f043fc75 --- /dev/null +++ b/app_Web/src/widgets/dept/default-searchform/default-searchform-service.ts @@ -0,0 +1,371 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import DeptService from '@/service/dept/dept-service'; +import DefaultModel from './default-searchform-model'; + + +/** + * Default 部件服务对象 + * + * @export + * @class DefaultService + */ +export default class DefaultService extends ControlService { + + /** + * 部门服务对象 + * + * @type {DeptService} + * @memberof DefaultService + */ + public appEntityService: DeptService = new DeptService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof DefaultService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of DefaultService. + * + * @param {*} [opts={}] + * @memberof DefaultService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new DefaultModel(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof DefaultService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof DefaultService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof DefaultService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof DefaultService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof DefaultService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof DefaultService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof DefaultService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof DefaultService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof DefaultService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.dept = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof DefaultService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof DefaultService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/dept/default-searchform/default-searchform.less b/app_Web/src/widgets/dept/default-searchform/default-searchform.less new file mode 100644 index 0000000000000000000000000000000000000000..f5ab5b547bc6efa5b22149c97068825e651b1070 --- /dev/null +++ b/app_Web/src/widgets/dept/default-searchform/default-searchform.less @@ -0,0 +1,47 @@ +.ivu-tabs-no-animation>.ivu-tabs-content{ + padding: 0 16px; +} +.ivu-card-head{ + padding: 14px 0; +} +.app-search-form { + padding: 8px 14px 0; + .ivu-form-item{ + margin-bottom: 8px; + } + .search_reset { + margin-right: 12px; + margin-bottom: 8px; + } + .search-button{ + text-align: right; + } +} +.app-search-form-flex { + height: 100%; + > .ivu-row { + height: 100%; + > .ivu-tabs { + height: 100%; + display: flex; + flex-direction: column; + > .ivu-tabs-content { + flex-grow: 1; + overflow: auto; + > .ivu-tabs-tabpane { + height: 100%; + } + } + } + } +} +.app-tabpanel-flex { + height: 100%; + > .ivu-tabs-content { + height: calc(100% - 52px); + > .ivu-tabs-tabpane { + height: 100%; + } + } +} +// this is less diff --git a/app_Web/src/widgets/dept/default-searchform/default-searchform.vue b/app_Web/src/widgets/dept/default-searchform/default-searchform.vue new file mode 100644 index 0000000000000000000000000000000000000000..eebfa90c0da7d9cd5f079791762c568be1bc18b6 --- /dev/null +++ b/app_Web/src/widgets/dept/default-searchform/default-searchform.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/dept/main-form/main-form-base.vue b/app_Web/src/widgets/dept/main-form/main-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..e4e64bd3f1c5a2cafad02eebfe84d462b45656c4 --- /dev/null +++ b/app_Web/src/widgets/dept/main-form/main-form-base.vue @@ -0,0 +1,1621 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/dept/main-form/main-form-model.ts b/app_Web/src/widgets/dept/main-form/main-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..9b67494a3aca2cb735da0791fe8a69416b4fce07 --- /dev/null +++ b/app_Web/src/widgets/dept/main-form/main-form-model.ts @@ -0,0 +1,86 @@ +/** + * Main 部件模型 + * + * @export + * @class MainModel + */ +export default class MainModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'name', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'parentname', + prop: 'parentname', + dataType: 'PICKUPTEXT', + }, + { + name: 'manager', + prop: 'manager', + dataType: 'TEXT', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'parent', + prop: 'parent', + dataType: 'PICKUP', + }, + { + name: 'dept', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/dept/main-form/main-form-service.ts b/app_Web/src/widgets/dept/main-form/main-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..cebcca99d80f56b50fef7ead2ae3f61bbb957643 --- /dev/null +++ b/app_Web/src/widgets/dept/main-form/main-form-service.ts @@ -0,0 +1,374 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import DeptService from '@/service/dept/dept-service'; +import MainModel from './main-form-model'; + + +/** + * Main 部件服务对象 + * + * @export + * @class MainService + */ +export default class MainService extends ControlService { + + /** + * 部门服务对象 + * + * @type {DeptService} + * @memberof MainService + */ + public appEntityService: DeptService = new DeptService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof MainService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of MainService. + * + * @param {*} [opts={}] + * @memberof MainService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new MainModel(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof MainService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + if (Object.is(serviceName, 'DeptService') && Object.is(interfaceName, 'FetchDefault')) { + return this.doItems(this.appEntityService.FetchDefault(JSON.parse(JSON.stringify(context)), data, isloading), 'id', 'dept'); + } + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.dept = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof MainService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/dept/main-form/main-form.less b/app_Web/src/widgets/dept/main-form/main-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/dept/main-form/main-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/dept/main-form/main-form.vue b/app_Web/src/widgets/dept/main-form/main-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..62e1a826d86b318d31735af1fed3683f8de2e5fa --- /dev/null +++ b/app_Web/src/widgets/dept/main-form/main-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/dept/main-grid/main-grid-base.vue b/app_Web/src/widgets/dept/main-grid/main-grid-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..c74e9c79f92b4e665b6271ddd8b749cd6f4cfb4c --- /dev/null +++ b/app_Web/src/widgets/dept/main-grid/main-grid-base.vue @@ -0,0 +1,1446 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/dept/main-grid/main-grid-model.ts b/app_Web/src/widgets/dept/main-grid/main-grid-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..145a5e43039189b9d9cc02270a14700ac15cac39 --- /dev/null +++ b/app_Web/src/widgets/dept/main-grid/main-grid-model.ts @@ -0,0 +1,109 @@ +/** + * Main 部件模型 + * + * @export + * @class MainModel + */ +export default class MainModel { + + /** + * 是否是实体数据导出 + * + * @returns {any[]} + * @memberof MainGridMode + */ + public isDEExport: boolean = false; + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainGridMode + */ + public getDataItems(): any[] { + if(this.isDEExport){ + return [ + ] + }else{ + return [ + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'manager', + prop: 'manager', + dataType: 'TEXT', + }, + { + name: 'order', + prop: 'order', + dataType: 'INT', + }, + { + name: 'name', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'parent', + prop: 'parent', + dataType: 'PICKUP', + }, + { + name: 'parentname', + prop: 'parentname', + dataType: 'PICKUPTEXT', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srfdataaccaction', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'dept', + prop: 'id', + }, + + { + name:'size', + prop:'size' + }, + { + name:'query', + prop:'query' + }, + { + name:'page', + prop:'page' + }, + { + name:'sort', + prop:'sort' + }, + { + name:'srfparentdata', + prop:'srfparentdata' + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + ] + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/dept/main-grid/main-grid-service.ts b/app_Web/src/widgets/dept/main-grid/main-grid-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..45fde0806fb1b51e1f6e66206e541eb4329ce86b --- /dev/null +++ b/app_Web/src/widgets/dept/main-grid/main-grid-service.ts @@ -0,0 +1,318 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import DeptService from '@/service/dept/dept-service'; +import MainModel from './main-grid-model'; + + +/** + * Main 部件服务对象 + * + * @export + * @class MainService + */ +export default class MainService extends ControlService { + + /** + * 部门服务对象 + * + * @type {DeptService} + * @memberof MainService + */ + public appEntityService: DeptService = new DeptService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof MainService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of MainService. + * + * @param {*} [opts={}] + * @memberof MainService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new MainModel(); + } + + + /** + * 处理数据 + * + * @public + * @param {Promise} promise + * @returns {Promise} + * @memberof MainService + */ + public doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Data,Context,isloading); + }else{ + result =_appEntityService.Update(Data,Context,isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 获取数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public get(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:0}); + } + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public search(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.FetchDefault(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public loadDraft(action: string, context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:'0'}); + //仿真主键数据 + response.data.id = Util.createUUID(); + } + this.handleResponse(action, response, true); + this.mergeDefaults(response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 合并配置的默认值 + * @param {*} + * @memberof MainService + */ + public mergeDefaults(response:any = {}){ + if(response.data){ + } + } + + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/dept/main-grid/main-grid.less b/app_Web/src/widgets/dept/main-grid/main-grid.less new file mode 100644 index 0000000000000000000000000000000000000000..6a7da728b17882d2231f0b993dbbfc09610c58fb --- /dev/null +++ b/app_Web/src/widgets/dept/main-grid/main-grid.less @@ -0,0 +1,4 @@ +.grid { + --grid: 0; +} +// this is less diff --git a/app_Web/src/widgets/dept/main-grid/main-grid.vue b/app_Web/src/widgets/dept/main-grid/main-grid.vue new file mode 100644 index 0000000000000000000000000000000000000000..c63fa029c9d0816f25dc2bf1d76d50ec20c611f2 --- /dev/null +++ b/app_Web/src/widgets/dept/main-grid/main-grid.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.vue b/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..21b9677d633b483ab18e071d965eb187827a36af --- /dev/null +++ b/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.vue @@ -0,0 +1,308 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts b/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..e30872e0c98a0f4461d6d56f66405e4dfb667034 --- /dev/null +++ b/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts @@ -0,0 +1,55 @@ +/** + * PickupViewpickupviewpanel 部件模型 + * + * @export + * @class PickupViewpickupviewpanelModel + */ +export default class PickupViewpickupviewpanelModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof PickupViewpickupviewpanelModel + */ + public getDataItems(): any[] { + return [ + { + name: 'manager', + }, + { + name: 'grade', + }, + { + name: 'function', + }, + { + name: 'order', + }, + { + name: 'path', + }, + { + name: 'position', + }, + { + name: 'dept', + prop: 'id', + }, + { + name: 'name', + }, + { + name: 'parentname', + }, + { + name: 'parent', + }, + { + name: 'isleaf', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts b/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..40156edd46744784954df27bebabf678443c5e70 --- /dev/null +++ b/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * PickupViewpickupviewpanel 部件服务对象 + * + * @export + * @class PickupViewpickupviewpanelService + */ +export default class PickupViewpickupviewpanelService extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less b/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less new file mode 100644 index 0000000000000000000000000000000000000000..76f5b384c21640f0691f606753bace1bdebc141f --- /dev/null +++ b/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less @@ -0,0 +1,4 @@ +// this is less +.pickupviewpanel{ + width: 100%; +} \ No newline at end of file diff --git a/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue b/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue new file mode 100644 index 0000000000000000000000000000000000000000..f1ae9f7113fd2eb7a6ea29bb9b3ac285a9f6ddae --- /dev/null +++ b/app_Web/src/widgets/dept/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/group/main-form/main-form-base.vue b/app_Web/src/widgets/group/main-form/main-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..a9f406b88fe26af4e812feef0f8313689c5e93e2 --- /dev/null +++ b/app_Web/src/widgets/group/main-form/main-form-base.vue @@ -0,0 +1,1554 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/group/main-form/main-form-model.ts b/app_Web/src/widgets/group/main-form/main-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..995f405c99fa9a83c42f1f0e9bd2940d6c4e1f60 --- /dev/null +++ b/app_Web/src/widgets/group/main-form/main-form-model.ts @@ -0,0 +1,76 @@ +/** + * Main 部件模型 + * + * @export + * @class MainModel + */ +export default class MainModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'name', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'desc', + prop: 'desc', + dataType: 'TEXT', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'group', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/group/main-form/main-form-service.ts b/app_Web/src/widgets/group/main-form/main-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..0da527aba19e7278cecc239fa979b0b62d92c969 --- /dev/null +++ b/app_Web/src/widgets/group/main-form/main-form-service.ts @@ -0,0 +1,371 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import GroupService from '@/service/group/group-service'; +import MainModel from './main-form-model'; + + +/** + * Main 部件服务对象 + * + * @export + * @class MainService + */ +export default class MainService extends ControlService { + + /** + * 群组服务对象 + * + * @type {GroupService} + * @memberof MainService + */ + public appEntityService: GroupService = new GroupService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof MainService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of MainService. + * + * @param {*} [opts={}] + * @memberof MainService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new MainModel(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof MainService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.group = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof MainService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/group/main-form/main-form.less b/app_Web/src/widgets/group/main-form/main-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/group/main-form/main-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/group/main-form/main-form.vue b/app_Web/src/widgets/group/main-form/main-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..62e1a826d86b318d31735af1fed3683f8de2e5fa --- /dev/null +++ b/app_Web/src/widgets/group/main-form/main-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/group/main-grid/main-grid-base.vue b/app_Web/src/widgets/group/main-grid/main-grid-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..b3858638a5a9583d4cc07b93c8f0b6f40f4bacc2 --- /dev/null +++ b/app_Web/src/widgets/group/main-grid/main-grid-base.vue @@ -0,0 +1,1559 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/group/main-grid/main-grid-model.ts b/app_Web/src/widgets/group/main-grid/main-grid-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..bd84f0967ed7bc22207a124a4bc8395a6378dcf2 --- /dev/null +++ b/app_Web/src/widgets/group/main-grid/main-grid-model.ts @@ -0,0 +1,93 @@ +/** + * Main 部件模型 + * + * @export + * @class MainModel + */ +export default class MainModel { + + /** + * 是否是实体数据导出 + * + * @returns {any[]} + * @memberof MainGridMode + */ + public isDEExport: boolean = false; + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainGridMode + */ + public getDataItems(): any[] { + if(this.isDEExport){ + return [ + ] + }else{ + return [ + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'desc', + prop: 'desc', + dataType: 'TEXT', + }, + { + name: 'name', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srfdataaccaction', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'group', + prop: 'id', + }, + { + name:'size', + prop:'size' + }, + { + name:'query', + prop:'query' + }, + { + name:'page', + prop:'page' + }, + { + name:'sort', + prop:'sort' + }, + { + name:'srfparentdata', + prop:'srfparentdata' + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + ] + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/group/main-grid/main-grid-service.ts b/app_Web/src/widgets/group/main-grid/main-grid-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..2e7ac4e87e2d966247f37a3faa0cf74364832463 --- /dev/null +++ b/app_Web/src/widgets/group/main-grid/main-grid-service.ts @@ -0,0 +1,318 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import GroupService from '@/service/group/group-service'; +import MainModel from './main-grid-model'; + + +/** + * Main 部件服务对象 + * + * @export + * @class MainService + */ +export default class MainService extends ControlService { + + /** + * 群组服务对象 + * + * @type {GroupService} + * @memberof MainService + */ + public appEntityService: GroupService = new GroupService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof MainService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of MainService. + * + * @param {*} [opts={}] + * @memberof MainService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new MainModel(); + } + + + /** + * 处理数据 + * + * @public + * @param {Promise} promise + * @returns {Promise} + * @memberof MainService + */ + public doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Data,Context,isloading); + }else{ + result =_appEntityService.Update(Data,Context,isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 获取数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public get(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:0}); + } + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public search(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.FetchDefault(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public loadDraft(action: string, context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:'0'}); + //仿真主键数据 + response.data.id = Util.createUUID(); + } + this.handleResponse(action, response, true); + this.mergeDefaults(response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 合并配置的默认值 + * @param {*} + * @memberof MainService + */ + public mergeDefaults(response:any = {}){ + if(response.data){ + } + } + + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/group/main-grid/main-grid.less b/app_Web/src/widgets/group/main-grid/main-grid.less new file mode 100644 index 0000000000000000000000000000000000000000..6a7da728b17882d2231f0b993dbbfc09610c58fb --- /dev/null +++ b/app_Web/src/widgets/group/main-grid/main-grid.less @@ -0,0 +1,4 @@ +.grid { + --grid: 0; +} +// this is less diff --git a/app_Web/src/widgets/group/main-grid/main-grid.vue b/app_Web/src/widgets/group/main-grid/main-grid.vue new file mode 100644 index 0000000000000000000000000000000000000000..c63fa029c9d0816f25dc2bf1d76d50ec20c611f2 --- /dev/null +++ b/app_Web/src/widgets/group/main-grid/main-grid.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/history/default-list/default-list-base.vue b/app_Web/src/widgets/history/default-list/default-list-base.vue index e6af7a8cff1d92297f2a2f00562d95c4c707cafb..33a3114e6923f36d3849cb2af296f8fe680ba19c 100644 --- a/app_Web/src/widgets/history/default-list/default-list-base.vue +++ b/app_Web/src/widgets/history/default-list/default-list-base.vue @@ -203,6 +203,29 @@ export default class DEFAULTBase extends Vue implements ControlInterface { */ @Prop() public fetchAction!: string; + /** + * 打开新建数据视图 + * + * @type {any} + * @memberof DEFAULT + */ + @Prop() public newdata: any; + /** + * 打开编辑数据视图 + * + * @type {any} + * @memberof DEFAULT + */ + @Prop() public opendata: any; + + /** + * this引用 + * + * @type {number} + * @memberof Main + */ + public thisRef: any = this; + /** * 当前页 * @@ -243,6 +266,14 @@ export default class DEFAULTBase extends Vue implements ControlInterface { */ public totalRecord: number = 0; + /** + * 加载的数据是否附加在items之后 + * + * @type {boolean} + * @memberof DEFAULT + */ + public isAddBehind:boolean = false; + /** * 排序方向 * @@ -287,6 +318,7 @@ export default class DEFAULTBase extends Vue implements ControlInterface { } }) } + /** * Vue声明周期,组件创建完毕 @@ -344,6 +376,7 @@ export default class DEFAULTBase extends Vue implements ControlInterface { if(this.totalRecord>this.items.length) { this.curPage = ++this.curPage; + this.isAddBehind = true; this.load({}); } } @@ -387,7 +420,9 @@ export default class DEFAULTBase extends Vue implements ControlInterface { this.$emit('beforeload', parentdata); Object.assign(arg, parentdata); let tempViewParams:any = parentdata.viewparams?parentdata.viewparams:{}; - Object.assign(tempViewParams,JSON.parse(JSON.stringify(this.viewparams))); + if(this.viewparams){ + Object.assign(tempViewParams,JSON.parse(JSON.stringify(this.viewparams))); + } Object.assign(arg,{viewparams:tempViewParams}); const post: Promise = this.service.search(this.fetchAction, this.context?JSON.parse(JSON.stringify(this.context)):{}, arg, this.showBusyIndicator); post.then((response: any) => { @@ -398,7 +433,9 @@ export default class DEFAULTBase extends Vue implements ControlInterface { return; } const data: any = response.data; - this.items = []; + if(!this.isAddBehind){ + this.items = []; + } if (Object.keys(data).length > 0) { let datas = JSON.parse(JSON.stringify(data)); datas.map((item: any) => { @@ -407,6 +444,7 @@ export default class DEFAULTBase extends Vue implements ControlInterface { this.totalRecord = response.total; this.items.push(...datas); } + this.isAddBehind = false; this.$emit('load', this.items); if(this.isSelectFirstDefault){ this.handleClick(this.items[0]); diff --git a/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid-base.vue b/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..009dcfa27fb6d1d1a1281452357763e91a0cb272 --- /dev/null +++ b/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid-base.vue @@ -0,0 +1,1777 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid-model.ts b/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..c2a853ce037ecbbcb09cab79c4d40e6fbd2f3376 --- /dev/null +++ b/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid-model.ts @@ -0,0 +1,153 @@ +/** + * SubTaskNew 部件模型 + * + * @export + * @class SubTaskNewModel + */ +export default class SubTaskNewModel { + + /** + * 是否是实体数据导出 + * + * @returns {any[]} + * @memberof SubTaskNewGridMode + */ + public isDEExport: boolean = false; + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof SubTaskNewGridMode + */ + public getDataItems(): any[] { + if(this.isDEExport){ + return [ + ] + }else{ + return [ + { + name: 'module', + prop: 'module', + dataType: 'PICKUP', + }, + { + name: 'desc', + prop: 'desc', + dataType: 'LONGTEXT', + }, + { + name: 'frombug', + prop: 'frombug', + dataType: 'PICKUP', + }, + { + name: 'parent', + prop: 'parent', + dataType: 'PICKUP', + }, + { + name: 'storyname', + prop: 'storyname', + dataType: 'PICKUPTEXT', + }, + { + name: 'type', + prop: 'type', + dataType: 'SSCODELIST', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srfdataaccaction', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'assignedto_text', + prop: 'assignedto', + dataType: 'TEXT', + }, + { + name: 'project', + prop: 'project', + dataType: 'PICKUP', + }, + { + name: 'modulename', + prop: 'modulename', + dataType: 'PICKUPTEXT', + }, + { + name: 'assignedto', + prop: 'assignedto', + dataType: 'TEXT', + }, + { + name: 'story', + prop: 'story', + dataType: 'PICKUP', + }, + { + name: 'pri', + prop: 'pri', + dataType: 'NSCODELIST', + }, + { + name: 'name', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'left', + prop: 'left', + dataType: 'FLOAT', + }, + { + name: 'task', + prop: 'id', + dataType: 'FONTKEY', + }, + { + name: 'ibz_subtask', + prop: 'id', + }, + { + name:'size', + prop:'size' + }, + { + name:'query', + prop:'query' + }, + { + name:'page', + prop:'page' + }, + { + name:'sort', + prop:'sort' + }, + { + name:'srfparentdata', + prop:'srfparentdata' + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + ] + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid-service.ts b/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..9a721766d58d7791ccdaf53eb8be3ad9eb9bfcb8 --- /dev/null +++ b/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid-service.ts @@ -0,0 +1,336 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import IBZ_SUBTASKService from '@/service/ibz-subtask/ibz-subtask-service'; +import SubTaskNewModel from './sub-task-new-grid-model'; +import ModuleService from '@/service/module/module-service'; +import StoryService from '@/service/story/story-service'; + + +/** + * SubTaskNew 部件服务对象 + * + * @export + * @class SubTaskNewService + */ +export default class SubTaskNewService extends ControlService { + + /** + * 任务服务对象 + * + * @type {IBZ_SUBTASKService} + * @memberof SubTaskNewService + */ + public appEntityService: IBZ_SUBTASKService = new IBZ_SUBTASKService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof SubTaskNewService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of SubTaskNewService. + * + * @param {*} [opts={}] + * @memberof SubTaskNewService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new SubTaskNewModel(); + } + + + /** + * 模块服务对象 + * + * @type {ModuleService} + * @memberof SubTaskNewService + */ + public moduleService: ModuleService = new ModuleService(); + + /** + * 需求服务对象 + * + * @type {StoryService} + * @memberof SubTaskNewService + */ + public storyService: StoryService = new StoryService(); + + /** + * 处理数据 + * + * @public + * @param {Promise} promise + * @returns {Promise} + * @memberof SubTaskNewService + */ + public doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Data,Context,isloading); + }else{ + result =_appEntityService.Update(Data,Context,isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 获取数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public get(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:0}); + } + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public search(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.FetchDefault(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public loadDraft(action: string, context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:'0'}); + //仿真主键数据 + response.data.id = Util.createUUID(); + } + this.handleResponse(action, response, true); + this.mergeDefaults(response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 合并配置的默认值 + * @param {*} + * @memberof SubTaskNewService + */ + public mergeDefaults(response:any = {}){ + if(response.data){ + } + } + + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid.less b/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid.less new file mode 100644 index 0000000000000000000000000000000000000000..6a7da728b17882d2231f0b993dbbfc09610c58fb --- /dev/null +++ b/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid.less @@ -0,0 +1,4 @@ +.grid { + --grid: 0; +} +// this is less diff --git a/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid.vue b/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid.vue new file mode 100644 index 0000000000000000000000000000000000000000..90e6be2ee72dc421899200a788ae69dfbbc9c198 --- /dev/null +++ b/app_Web/src/widgets/ibz-subtask/sub-task-new-grid/sub-task-new-grid.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/product-life/get-roadmap-list/get-roadmap-list-base.vue b/app_Web/src/widgets/product-life/get-roadmap-list/get-roadmap-list-base.vue index 53e9a35e7a20382d7ff3dfe65b9dd954392980cb..05f46ac139081b24c8aeb32af34438de920d740c 100644 --- a/app_Web/src/widgets/product-life/get-roadmap-list/get-roadmap-list-base.vue +++ b/app_Web/src/widgets/product-life/get-roadmap-list/get-roadmap-list-base.vue @@ -203,6 +203,29 @@ export default class GetRoadmapBase extends Vue implements ControlInterface { */ @Prop() public fetchAction!: string; + /** + * 打开新建数据视图 + * + * @type {any} + * @memberof GetRoadmap + */ + @Prop() public newdata: any; + /** + * 打开编辑数据视图 + * + * @type {any} + * @memberof GetRoadmap + */ + @Prop() public opendata: any; + + /** + * this引用 + * + * @type {number} + * @memberof Main + */ + public thisRef: any = this; + /** * 当前页 * @@ -243,6 +266,14 @@ export default class GetRoadmapBase extends Vue implements ControlInterface { */ public totalRecord: number = 0; + /** + * 加载的数据是否附加在items之后 + * + * @type {boolean} + * @memberof GetRoadmap + */ + public isAddBehind:boolean = false; + /** * 排序方向 * @@ -287,6 +318,7 @@ export default class GetRoadmapBase extends Vue implements ControlInterface { } }) } + /** * Vue声明周期,组件创建完毕 @@ -344,6 +376,7 @@ export default class GetRoadmapBase extends Vue implements ControlInterface { if(this.totalRecord>this.items.length) { this.curPage = ++this.curPage; + this.isAddBehind = true; this.load({}); } } @@ -387,7 +420,9 @@ export default class GetRoadmapBase extends Vue implements ControlInterface { this.$emit('beforeload', parentdata); Object.assign(arg, parentdata); let tempViewParams:any = parentdata.viewparams?parentdata.viewparams:{}; - Object.assign(tempViewParams,JSON.parse(JSON.stringify(this.viewparams))); + if(this.viewparams){ + Object.assign(tempViewParams,JSON.parse(JSON.stringify(this.viewparams))); + } Object.assign(arg,{viewparams:tempViewParams}); const post: Promise = this.service.search(this.fetchAction, this.context?JSON.parse(JSON.stringify(this.context)):{}, arg, this.showBusyIndicator); post.then((response: any) => { @@ -398,7 +433,9 @@ export default class GetRoadmapBase extends Vue implements ControlInterface { return; } const data: any = response.data; - this.items = []; + if(!this.isAddBehind){ + this.items = []; + } if (Object.keys(data).length > 0) { let datas = JSON.parse(JSON.stringify(data)); datas.map((item: any) => { @@ -407,6 +444,7 @@ export default class GetRoadmapBase extends Vue implements ControlInterface { this.totalRecord = response.total; this.items.push(...datas); } + this.isAddBehind = false; this.$emit('load', this.items); if(this.isSelectFirstDefault){ this.handleClick(this.items[0]); diff --git a/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview-base.vue b/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..e5ad1109ddc42936266365cb33738bbd4bc7292b --- /dev/null +++ b/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview-base.vue @@ -0,0 +1,767 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview-model.ts b/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..3f455fb5d90647beabd6f9dcc831540e6f3905da --- /dev/null +++ b/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview-model.ts @@ -0,0 +1,69 @@ +/** + * CaseExp 部件模型 + * + * @export + * @class CaseExpModel + */ +export default class CaseExpModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof CaseExpModel + */ + public getDataItems(): any[] { + return [ + { + name: 'path', + }, + { + name: 'deleted', + }, + { + name: 'name', + }, + { + name: 'branch', + }, + { + name: 'ibizshort', + }, + { + name: 'order', + }, + { + name: 'grade', + }, + { + name: 'type', + }, + { + name: 'owner', + }, + { + name: 'isleaf', + }, + { + name: 'productmodule', + prop: 'id', + }, + { + name: 'collector', + }, + { + name: 'root', + }, + { + name: 'parent', + }, + { + name: 'product', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview-service.ts b/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..953b09acbcd972c0615673e695483af929ed0e99 --- /dev/null +++ b/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview-service.ts @@ -0,0 +1,812 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import ProductModuleService from '@/service/product-module/product-module-service'; +import CaseExpModel from './case-exp-treeview-model'; +import CodeListService from '@service/app/codelist-service'; +import i18n from '@/locale'; + + +/** + * CaseExp 部件服务对象 + * + * @export + * @class CaseExpService + */ +export default class CaseExpService extends ControlService { + + /** + * 需求模块服务对象 + * + * @type {ProductModuleService} + * @memberof CaseExpService + */ + public appEntityService: ProductModuleService = new ProductModuleService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof CaseExpService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of CaseExpService. + * + * @param {*} [opts={}] + * @memberof CaseExpService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new CaseExpModel(); + } + + + /** + * 代码表服务对象 + * + * @type {CodeListService} + * @memberof CaseExpService + */ + public codeListService:CodeListService = new CodeListService({ $store: this.getStore() }); + + + /** + * 节点分隔符号 + * + * @public + * @type {string} + * @memberof CaseExpService + */ + public TREENODE_SEPARATOR: string = ';'; + + /** + * 根模块(动态)节点分隔符号 + * + * @public + * @type {string} + * @memberof CaseExpService + */ + public TREENODE_ROOTMODULE: string = 'ROOTMODULE'; + + /** + * 非根模块(动态)节点分隔符号 + * + * @public + * @type {string} + * @memberof CaseExpService + */ + public TREENODE_MODULE: string = 'MODULE'; + + /** + * 全部节点分隔符号 + * + * @public + * @type {string} + * @memberof CaseExpService + */ + public TREENODE_ALL: string = 'ALL'; + + /** + * 默认根节点节点分隔符号 + * + * @public + * @type {string} + * @memberof CaseExpService + */ + public TREENODE_ROOT: string = 'ROOT'; + + /** + * 获取节点数据 + * + * @param {string} action + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof CaseExpService + */ + @Errorlog + public async getNodes(context:any = {},data: any = {}, isloading?: boolean): Promise { + let { srfparentkey, srfcat, srfnodeid, srfnodefilter, query }: { srfparentkey: string, srfcat: string, srfnodeid: string, srfnodefilter: string, query:string } = data; + srfnodefilter = query ? query : srfnodefilter; + let list: any[] = []; + let filter: any = {}; + + + if (!srfnodeid || Object.is(srfnodeid, '#')) { + srfnodeid = this.TREENODE_ROOT; + } + + let strTreeNodeId: string = srfnodeid; + let strRealNodeId: string = ''; + let bRootSelect: boolean = false; + let strNodeType: string | null = null; + let strRootSelectNode: string = ''; + + if (Object.is(strTreeNodeId, this.TREENODE_ROOT)) { + strNodeType = this.TREENODE_ROOT; + if (srfparentkey) { + strRealNodeId = srfparentkey; + } + } else { + let nPos = strTreeNodeId.indexOf(this.TREENODE_SEPARATOR); + if (nPos === -1) { + return Promise.reject({ status: 500, data: { title: '失败', message: `树节点${strTreeNodeId}标识无效` } }); + } + strNodeType = strTreeNodeId.substring(0, nPos); + strRealNodeId = strTreeNodeId.substring(nPos + 1); + } + + Object.assign(filter, + { + srfparentkey: srfparentkey, + srfcat: srfcat, + srfnodefilter: srfnodefilter, + strRealNodeId: strRealNodeId, + srfnodeid: srfnodeid, + strNodeType: strNodeType, + viewparams: JSON.parse(JSON.stringify(data)).viewparams + } + ); + + // 分解节点标识 + let nodeid: string[] = strRealNodeId.split(this.TREENODE_SEPARATOR); + for (let i = 0; i < nodeid.length; i++) { + switch (i) { + case 0: + Object.assign(filter, { nodeid: nodeid[0] }); + break; + case 1: + Object.assign(filter, { nodeid2: nodeid[1] }); + break; + case 2: + Object.assign(filter, { nodeid3: nodeid[2] }); + break; + case 3: + Object.assign(filter, { nodeid4: nodeid[3] }); + break; + default: + break; + } + } + + if (Object.is(strNodeType, this.TREENODE_ROOTMODULE)) { + await this.fillRootmoduleNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + if (Object.is(strNodeType, this.TREENODE_MODULE)) { + await this.fillModuleNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + if (Object.is(strNodeType, this.TREENODE_ALL)) { + await this.fillAllNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + if (Object.is(strNodeType, this.TREENODE_ROOT)) { + await this.fillRootNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + return Promise.resolve({ status: 500, data: { title: '失败', message: `树节点${strTreeNodeId}标识无效` } }); + } + + /** + * 填充 树视图节点[根模块(动态)] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof CaseExpService + */ + @Errorlog + public fillRootmoduleNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let searchFilter: any = {}; + Object.assign(searchFilter, { total: false }); + let bFirst: boolean = true; + let records: any[] = []; + try { + this.searchRootmodule(context, searchFilter, filter).then((records:any) =>{ + if(records && records.length >0){ + records.forEach((entity: any) => { + let treeNode: any = {}; + // 整理context + let strId: string = entity.id; + let strText: string = entity.name; + Object.assign(treeNode,{srfparentdename:'ProductModule',srfparentkey:entity.id}); + let tempContext:any = JSON.parse(JSON.stringify(context)); + Object.assign(tempContext,{srfparentdename:'ProductModule',srfparentkey:entity.id,productmodule:strId}) + Object.assign(treeNode,{srfappctx:tempContext}); + Object.assign(treeNode,{'productmodule':strId}); + Object.assign(treeNode, { srfkey: strId }); + Object.assign(treeNode, { text: strText, srfmajortext: strText }); + let strNodeId: string = 'ROOTMODULE'; + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += strId; + Object.assign(treeNode, { id: strNodeId }); + Object.assign(treeNode, { expanded: bFirst }); + Object.assign(treeNode, { leaf: false }); + Object.assign(treeNode, { navfilter: "n_module_eq" }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + bFirst = false; + }); + }else{ + resolve(list); + } + }); + } catch (error) { + console.error(error); + } + }); + + } + + /** + * 获取查询集合 + * + * @public + * @param {any{}} context + * @param {*} searchFilter + * @param {*} filter + * @returns {any[]} + * @memberof TestEnetityDatasService + */ + @Errorlog + public searchRootmodule(context:any={}, searchFilter: any, filter: any): Promise { + return new Promise((resolve:any,reject:any) =>{ + if(filter.viewparams){ + Object.assign(searchFilter,filter.viewparams); + } + if(!searchFilter.page){ + Object.assign(searchFilter,{page:0}); + } + if(!searchFilter.size){ + Object.assign(searchFilter,{size:1000}); + } + if(context && context.srfparentdename){ + Object.assign(searchFilter,{srfparentdename:JSON.parse(JSON.stringify(context)).srfparentdename}); + } + if(context && context.srfparentkey){ + Object.assign(searchFilter,{srfparentkey:JSON.parse(JSON.stringify(context)).srfparentkey}); + } + const _appEntityService: any = this.appEntityService; + let list: any[] = []; + if (_appEntityService['FetchRoot'] && _appEntityService['FetchRoot'] instanceof Function) { + const response: Promise = _appEntityService['FetchRoot'](context, searchFilter, false); + response.then((response: any) => { + if (!response.status || response.status !== 200) { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchRoot数据集异常!'); + } + const data: any = response.data; + if (Object.keys(data).length > 0) { + list = JSON.parse(JSON.stringify(data)); + resolve(list); + } else { + resolve([]); + } + }).catch((response: any) => { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchRoot数据集异常!'); + }); + } + }) + } + + /** + * 填充 树视图节点[根模块(动态)]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof CaseExpService + */ + @Errorlog + public async fillRootmoduleNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充非根模块(动态) + let ModuleRsNavContext:any = {}; + let ModuleRsNavParams:any = {}; + let ModuleRsParams:any = {}; + await this.fillModuleNodes(context, filter, list ,ModuleRsNavContext,ModuleRsNavParams,ModuleRsParams); + } else { + // 填充非根模块(动态) + let ModuleRsNavContext:any = {}; + let ModuleRsNavParams:any = {}; + let ModuleRsParams:any = {}; + await this.fillModuleNodes(context, filter, list ,ModuleRsNavContext,ModuleRsNavParams,ModuleRsParams); + } + } + + /** + * 填充 树视图节点[非根模块(动态)] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof CaseExpService + */ + @Errorlog + public fillModuleNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let searchFilter: any = {}; + if (Object.is(filter.strNodeType, this.TREENODE_MODULE)) { + Object.assign(searchFilter, { n_parent_eq: filter.nodeid }); + } + + if (Object.is(filter.strNodeType, this.TREENODE_ROOTMODULE)) { + Object.assign(searchFilter, { n_parent_eq: filter.nodeid }); + } + + Object.assign(searchFilter, { total: false }); + let bFirst: boolean = true; + let records: any[] = []; + try { + this.searchModule(context, searchFilter, filter).then((records:any) =>{ + if(records && records.length >0){ + records.forEach((entity: any) => { + let treeNode: any = {}; + // 整理context + let strId: string = entity.id; + let strText: string = entity.name; + Object.assign(treeNode,{srfparentdename:'ProductModule',srfparentkey:entity.id}); + let tempContext:any = JSON.parse(JSON.stringify(context)); + Object.assign(tempContext,{srfparentdename:'ProductModule',srfparentkey:entity.id,productmodule:strId}) + Object.assign(treeNode,{srfappctx:tempContext}); + Object.assign(treeNode,{'productmodule':strId}); + Object.assign(treeNode, { srfkey: strId }); + Object.assign(treeNode, { text: strText, srfmajortext: strText }); + let strNodeId: string = 'MODULE'; + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += strId; + Object.assign(treeNode, { id: strNodeId }); + Object.assign(treeNode, { expanded: filter.isautoexpand }); + Object.assign(treeNode, { leaf: false }); + Object.assign(treeNode, { navfilter: "n_module_eq" }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + bFirst = false; + }); + }else{ + resolve(list); + } + }); + } catch (error) { + console.error(error); + } + }); + + } + + /** + * 获取查询集合 + * + * @public + * @param {any{}} context + * @param {*} searchFilter + * @param {*} filter + * @returns {any[]} + * @memberof TestEnetityDatasService + */ + @Errorlog + public searchModule(context:any={}, searchFilter: any, filter: any): Promise { + return new Promise((resolve:any,reject:any) =>{ + if(filter.viewparams){ + Object.assign(searchFilter,filter.viewparams); + } + if(!searchFilter.page){ + Object.assign(searchFilter,{page:0}); + } + if(!searchFilter.size){ + Object.assign(searchFilter,{size:1000}); + } + if(context && context.srfparentdename){ + Object.assign(searchFilter,{srfparentdename:JSON.parse(JSON.stringify(context)).srfparentdename}); + } + if(context && context.srfparentkey){ + Object.assign(searchFilter,{srfparentkey:JSON.parse(JSON.stringify(context)).srfparentkey}); + } + const _appEntityService: any = this.appEntityService; + let list: any[] = []; + if (_appEntityService['FetchDefault'] && _appEntityService['FetchDefault'] instanceof Function) { + const response: Promise = _appEntityService['FetchDefault'](context, searchFilter, false); + response.then((response: any) => { + if (!response.status || response.status !== 200) { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchDefault数据集异常!'); + } + const data: any = response.data; + if (Object.keys(data).length > 0) { + list = JSON.parse(JSON.stringify(data)); + resolve(list); + } else { + resolve([]); + } + }).catch((response: any) => { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchDefault数据集异常!'); + }); + } + }) + } + + /** + * 填充 树视图节点[非根模块(动态)]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof CaseExpService + */ + @Errorlog + public async fillModuleNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充非根模块(动态) + let ModuleRsNavContext:any = {}; + let ModuleRsNavParams:any = {}; + let ModuleRsParams:any = {}; + await this.fillModuleNodes(context, filter, list ,ModuleRsNavContext,ModuleRsNavParams,ModuleRsParams); + } else { + // 填充非根模块(动态) + let ModuleRsNavContext:any = {}; + let ModuleRsNavParams:any = {}; + let ModuleRsParams:any = {}; + await this.fillModuleNodes(context, filter, list ,ModuleRsNavContext,ModuleRsNavParams,ModuleRsParams); + } + } + + /** + * 填充 树视图节点[全部] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof CaseExpService + */ + @Errorlog + public fillAllNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let treeNode: any = {}; + Object.assign(treeNode, { text: 'entities.productmodule.caseexp_treeview.nodes.all' }); + Object.assign(treeNode, { isUseLangRes: true }); + Object.assign(treeNode,{srfappctx:context}); + Object.assign(treeNode, { srfmajortext: treeNode.text }); + let strNodeId: string = 'ALL'; + + // 没有指定节点值,直接使用父节点值 + Object.assign(treeNode, { srfkey: filter.strRealNodeId }); + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += filter.strRealNodeId; + + Object.assign(treeNode, { id: strNodeId }); + + Object.assign(treeNode, { expanded: true }); + Object.assign(treeNode, { leaf: false }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + }); + } + + /** + * 填充 树视图节点[全部]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof CaseExpService + */ + @Errorlog + public async fillAllNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充根模块(动态) + let RootmoduleRsNavContext:any = {}; + let RootmoduleRsNavParams:any = {}; + let RootmoduleRsParams:any = {}; + await this.fillRootmoduleNodes(context, filter, list ,RootmoduleRsNavContext,RootmoduleRsNavParams,RootmoduleRsParams); + } else { + // 填充根模块(动态) + let RootmoduleRsNavContext:any = {}; + let RootmoduleRsNavParams:any = {}; + let RootmoduleRsParams:any = {}; + await this.fillRootmoduleNodes(context, filter, list ,RootmoduleRsNavContext,RootmoduleRsNavParams,RootmoduleRsParams); + } + } + + /** + * 填充 树视图节点[默认根节点] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof CaseExpService + */ + @Errorlog + public fillRootNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let treeNode: any = {}; + Object.assign(treeNode, { text: 'entities.productmodule.caseexp_treeview.nodes.root' }); + Object.assign(treeNode, { isUseLangRes: true }); + Object.assign(treeNode,{srfappctx:context}); + Object.assign(treeNode, { srfmajortext: treeNode.text }); + let strNodeId: string = 'ROOT'; + + Object.assign(treeNode, { srfkey: 'root' }); + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += 'root'; + + Object.assign(treeNode, { id: strNodeId }); + + Object.assign(treeNode, { expanded: filter.isAutoexpand }); + Object.assign(treeNode, { leaf: false }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + }); + } + + /** + * 填充 树视图节点[默认根节点]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof CaseExpService + */ + @Errorlog + public async fillRootNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充全部 + let AllRsNavContext:any = {}; + let AllRsNavParams:any = {}; + let AllRsParams:any = {}; + await this.fillAllNodes(context, filter, list ,AllRsNavContext,AllRsNavParams,AllRsParams); + } else { + // 填充全部 + let AllRsNavContext:any = {}; + let AllRsNavParams:any = {}; + let AllRsParams:any = {}; + await this.fillAllNodes(context, filter, list ,AllRsNavContext,AllRsNavParams,AllRsParams); + } + } + + + /** + * 处理代码表返回数据(树状结构) + * + * @param result 返回数组 + * @param context 应用上下文 + * @param callBack 回调 + * @memberof CaseExpService + */ + public handleDataSet(result:Array,context:any,callBack:any){ + let list:Array = []; + if(result.length === 0){ + return list; + } + result.forEach((codeItem:any) =>{ + if(!codeItem.pvalue){ + let valueField:string = codeItem.value; + this.setChildCodeItems(valueField,result,codeItem); + list.push(codeItem); + } + }) + this.setNodeData(list,context,callBack); + return list; + } + + /** + * 处理非根节点数据 + * + * @param result 返回数组 + * @param context 应用上下文 + * @param callBack 回调 + * @memberof CaseExpService + */ + public setChildCodeItems(pValue:string,result:Array,codeItem:any){ + result.forEach((item:any) =>{ + if(item.pvalue == pValue){ + let valueField:string = item.value; + this.setChildCodeItems(valueField,result,item); + if(!codeItem.children){ + codeItem.children = []; + } + codeItem.children.push(item); + } + }) + } + + /** + * 设置节点UI数据 + * + * @param result 返回数组 + * @param context 应用上下文 + * @param callBack 回调 + * @memberof CaseExpService + */ + public setNodeData(result:Array,context:any,callBack:any){ + result.forEach((item:any) =>{ + if(item.children){ + item.leaf = false; + this.setNodeData(item.children,context,callBack); + }else{ + item.leaf = true; + } + callBack(context,item); + }) + } + + /** + * 处理节点关系导航上下文 + * + * @param context 应用上下文 + * @param filter 参数 + * @param resNavContext 节点关系导航上下文 + * + * @memberof CaseExpService + */ + public handleResNavContext(context:any,filter:any,resNavContext:any){ + if(resNavContext && Object.keys(resNavContext).length > 0){ + let tempContextData:any = JSON.parse(JSON.stringify(context)); + let tempViewParams:any = {}; + if(filter && filter.viewparams){ + tempViewParams = filter.viewparams; + } + Object.keys(resNavContext).forEach((item:any) =>{ + let curDataObj:any = resNavContext[item]; + this.handleCustomDataLogic(context,tempViewParams,curDataObj,tempContextData,item); + }) + return tempContextData; + }else{ + return context; + } + } + + /** + * 处理关系导航参数 + * + * @param context 应用上下文 + * @param filter 参数 + * @param resNavParams 节点关系导航参数 + * @param resParams 节点关系参数 + * + * @memberof CaseExpService + */ + public handleResNavParams(context:any,filter:any,resNavParams:any,resParams:any){ + if((resNavParams && Object.keys(resNavParams).length >0) || (resParams && Object.keys(resParams).length >0)){ + let tempViewParamData:any = {}; + let tempViewParams:any = {}; + if(filter && filter.viewparams){ + tempViewParams = filter.viewparams; + tempViewParamData = JSON.parse(JSON.stringify(filter.viewparams)); + } + if( Object.keys(resNavParams).length > 0){ + Object.keys(resNavParams).forEach((item:any) =>{ + let curDataObj:any = resNavParams[item]; + this.handleCustomDataLogic(context,tempViewParams,curDataObj,tempViewParamData,item); + }) + } + if( Object.keys(resParams).length > 0){ + Object.keys(resParams).forEach((item:any) =>{ + let curDataObj:any = resParams[item]; + tempViewParamData[item.toLowerCase()] = curDataObj.value; + }) + } + Object.assign(filter,{viewparams:tempViewParamData}); + return filter; + }else{ + return filter; + } + } + + /** + * 处理自定义节点关系导航数据 + * + * @param context 应用上下文 + * @param viewparams 参数 + * @param curNavData 节点关系导航参数对象 + * @param tempData 返回数据 + * @param item 节点关系导航参数键值 + * + * @memberof CaseExpService + */ + public handleCustomDataLogic(context:any,viewparams:any,curNavData:any,tempData:any,item:string){ + // 直接值直接赋值 + if(curNavData.isRawValue){ + if(Object.is(curNavData.value,"null") || Object.is(curNavData.value,"")){ + Object.defineProperty(tempData, item.toLowerCase(), { + value: null, + writable : true, + enumerable : true, + configurable : true + }); + }else{ + Object.defineProperty(tempData, item.toLowerCase(), { + value: curNavData.value, + writable : true, + enumerable : true, + configurable : true + }); + } + }else{ + // 先从导航上下文取数,没有再从导航参数(URL)取数,如果导航上下文和导航参数都没有则为null + if(context[(curNavData.value).toLowerCase()]){ + Object.defineProperty(tempData, item.toLowerCase(), { + value: context[(curNavData.value).toLowerCase()], + writable : true, + enumerable : true, + configurable : true + }); + }else{ + if(viewparams[(curNavData.value).toLowerCase()]){ + Object.defineProperty(tempData, item.toLowerCase(), { + value: viewparams[(curNavData.value).toLowerCase()], + writable : true, + enumerable : true, + configurable : true + }); + }else{ + Object.defineProperty(tempData, item.toLowerCase(), { + value: null, + writable : true, + enumerable : true, + configurable : true + }); + } + } + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview.less b/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview.less new file mode 100644 index 0000000000000000000000000000000000000000..9fa8210b7d84fe9412aab2f27ca81bd2f9920b07 --- /dev/null +++ b/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview.less @@ -0,0 +1,4 @@ +.tree { + --tree: 0px; +} +// this is less diff --git a/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview.vue b/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview.vue new file mode 100644 index 0000000000000000000000000000000000000000..4584f63aaf5d0a989c6a7347f1a46c5bfe9b2d95 --- /dev/null +++ b/app_Web/src/widgets/product-module/case-exp-treeview/case-exp-treeview.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview-base.vue b/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..5f75c3e242a57d244e3b4231cc25a5de4d9b9b04 --- /dev/null +++ b/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview-base.vue @@ -0,0 +1,767 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview-model.ts b/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..7f4f1af563f3204ddc8fe84fe2172b7d52dc71bb --- /dev/null +++ b/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview-model.ts @@ -0,0 +1,69 @@ +/** + * FeatureCaseExp 部件模型 + * + * @export + * @class FeatureCaseExpModel + */ +export default class FeatureCaseExpModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof FeatureCaseExpModel + */ + public getDataItems(): any[] { + return [ + { + name: 'path', + }, + { + name: 'deleted', + }, + { + name: 'name', + }, + { + name: 'branch', + }, + { + name: 'ibizshort', + }, + { + name: 'order', + }, + { + name: 'grade', + }, + { + name: 'type', + }, + { + name: 'owner', + }, + { + name: 'isleaf', + }, + { + name: 'productmodule', + prop: 'id', + }, + { + name: 'collector', + }, + { + name: 'root', + }, + { + name: 'parent', + }, + { + name: 'product', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview-service.ts b/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..44db1c45a2e7e02c656886e2ebb6adb988af904b --- /dev/null +++ b/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview-service.ts @@ -0,0 +1,812 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import ProductModuleService from '@/service/product-module/product-module-service'; +import FeatureCaseExpModel from './feature-case-exp-treeview-model'; +import CodeListService from '@service/app/codelist-service'; +import i18n from '@/locale'; + + +/** + * FeatureCaseExp 部件服务对象 + * + * @export + * @class FeatureCaseExpService + */ +export default class FeatureCaseExpService extends ControlService { + + /** + * 需求模块服务对象 + * + * @type {ProductModuleService} + * @memberof FeatureCaseExpService + */ + public appEntityService: ProductModuleService = new ProductModuleService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof FeatureCaseExpService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of FeatureCaseExpService. + * + * @param {*} [opts={}] + * @memberof FeatureCaseExpService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new FeatureCaseExpModel(); + } + + + /** + * 代码表服务对象 + * + * @type {CodeListService} + * @memberof FeatureCaseExpService + */ + public codeListService:CodeListService = new CodeListService({ $store: this.getStore() }); + + + /** + * 节点分隔符号 + * + * @public + * @type {string} + * @memberof FeatureCaseExpService + */ + public TREENODE_SEPARATOR: string = ';'; + + /** + * 根模块(动态)节点分隔符号 + * + * @public + * @type {string} + * @memberof FeatureCaseExpService + */ + public TREENODE_ROOTMODULE: string = 'ROOTMODULE'; + + /** + * 非根模块(动态)节点分隔符号 + * + * @public + * @type {string} + * @memberof FeatureCaseExpService + */ + public TREENODE_MODULE: string = 'MODULE'; + + /** + * 全部节点分隔符号 + * + * @public + * @type {string} + * @memberof FeatureCaseExpService + */ + public TREENODE_ALL: string = 'ALL'; + + /** + * 默认根节点节点分隔符号 + * + * @public + * @type {string} + * @memberof FeatureCaseExpService + */ + public TREENODE_ROOT: string = 'ROOT'; + + /** + * 获取节点数据 + * + * @param {string} action + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof FeatureCaseExpService + */ + @Errorlog + public async getNodes(context:any = {},data: any = {}, isloading?: boolean): Promise { + let { srfparentkey, srfcat, srfnodeid, srfnodefilter, query }: { srfparentkey: string, srfcat: string, srfnodeid: string, srfnodefilter: string, query:string } = data; + srfnodefilter = query ? query : srfnodefilter; + let list: any[] = []; + let filter: any = {}; + + + if (!srfnodeid || Object.is(srfnodeid, '#')) { + srfnodeid = this.TREENODE_ROOT; + } + + let strTreeNodeId: string = srfnodeid; + let strRealNodeId: string = ''; + let bRootSelect: boolean = false; + let strNodeType: string | null = null; + let strRootSelectNode: string = ''; + + if (Object.is(strTreeNodeId, this.TREENODE_ROOT)) { + strNodeType = this.TREENODE_ROOT; + if (srfparentkey) { + strRealNodeId = srfparentkey; + } + } else { + let nPos = strTreeNodeId.indexOf(this.TREENODE_SEPARATOR); + if (nPos === -1) { + return Promise.reject({ status: 500, data: { title: '失败', message: `树节点${strTreeNodeId}标识无效` } }); + } + strNodeType = strTreeNodeId.substring(0, nPos); + strRealNodeId = strTreeNodeId.substring(nPos + 1); + } + + Object.assign(filter, + { + srfparentkey: srfparentkey, + srfcat: srfcat, + srfnodefilter: srfnodefilter, + strRealNodeId: strRealNodeId, + srfnodeid: srfnodeid, + strNodeType: strNodeType, + viewparams: JSON.parse(JSON.stringify(data)).viewparams + } + ); + + // 分解节点标识 + let nodeid: string[] = strRealNodeId.split(this.TREENODE_SEPARATOR); + for (let i = 0; i < nodeid.length; i++) { + switch (i) { + case 0: + Object.assign(filter, { nodeid: nodeid[0] }); + break; + case 1: + Object.assign(filter, { nodeid2: nodeid[1] }); + break; + case 2: + Object.assign(filter, { nodeid3: nodeid[2] }); + break; + case 3: + Object.assign(filter, { nodeid4: nodeid[3] }); + break; + default: + break; + } + } + + if (Object.is(strNodeType, this.TREENODE_ROOTMODULE)) { + await this.fillRootmoduleNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + if (Object.is(strNodeType, this.TREENODE_MODULE)) { + await this.fillModuleNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + if (Object.is(strNodeType, this.TREENODE_ALL)) { + await this.fillAllNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + if (Object.is(strNodeType, this.TREENODE_ROOT)) { + await this.fillRootNodeChilds(context,filter, list); + return Promise.resolve({ status: 200, data: list }); + } + return Promise.resolve({ status: 500, data: { title: '失败', message: `树节点${strTreeNodeId}标识无效` } }); + } + + /** + * 填充 树视图节点[根模块(动态)] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof FeatureCaseExpService + */ + @Errorlog + public fillRootmoduleNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let searchFilter: any = {}; + Object.assign(searchFilter, { total: false }); + let bFirst: boolean = true; + let records: any[] = []; + try { + this.searchRootmodule(context, searchFilter, filter).then((records:any) =>{ + if(records && records.length >0){ + records.forEach((entity: any) => { + let treeNode: any = {}; + // 整理context + let strId: string = entity.id; + let strText: string = entity.name; + Object.assign(treeNode,{srfparentdename:'ProductModule',srfparentkey:entity.id}); + let tempContext:any = JSON.parse(JSON.stringify(context)); + Object.assign(tempContext,{srfparentdename:'ProductModule',srfparentkey:entity.id,productmodule:strId}) + Object.assign(treeNode,{srfappctx:tempContext}); + Object.assign(treeNode,{'productmodule':strId}); + Object.assign(treeNode, { srfkey: strId }); + Object.assign(treeNode, { text: strText, srfmajortext: strText }); + let strNodeId: string = 'ROOTMODULE'; + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += strId; + Object.assign(treeNode, { id: strNodeId }); + Object.assign(treeNode, { expanded: bFirst }); + Object.assign(treeNode, { leaf: false }); + Object.assign(treeNode, { navfilter: "n_module_eq" }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + bFirst = false; + }); + }else{ + resolve(list); + } + }); + } catch (error) { + console.error(error); + } + }); + + } + + /** + * 获取查询集合 + * + * @public + * @param {any{}} context + * @param {*} searchFilter + * @param {*} filter + * @returns {any[]} + * @memberof TestEnetityDatasService + */ + @Errorlog + public searchRootmodule(context:any={}, searchFilter: any, filter: any): Promise { + return new Promise((resolve:any,reject:any) =>{ + if(filter.viewparams){ + Object.assign(searchFilter,filter.viewparams); + } + if(!searchFilter.page){ + Object.assign(searchFilter,{page:0}); + } + if(!searchFilter.size){ + Object.assign(searchFilter,{size:1000}); + } + if(context && context.srfparentdename){ + Object.assign(searchFilter,{srfparentdename:JSON.parse(JSON.stringify(context)).srfparentdename}); + } + if(context && context.srfparentkey){ + Object.assign(searchFilter,{srfparentkey:JSON.parse(JSON.stringify(context)).srfparentkey}); + } + const _appEntityService: any = this.appEntityService; + let list: any[] = []; + if (_appEntityService['FetchRoot'] && _appEntityService['FetchRoot'] instanceof Function) { + const response: Promise = _appEntityService['FetchRoot'](context, searchFilter, false); + response.then((response: any) => { + if (!response.status || response.status !== 200) { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchRoot数据集异常!'); + } + const data: any = response.data; + if (Object.keys(data).length > 0) { + list = JSON.parse(JSON.stringify(data)); + resolve(list); + } else { + resolve([]); + } + }).catch((response: any) => { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchRoot数据集异常!'); + }); + } + }) + } + + /** + * 填充 树视图节点[根模块(动态)]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof FeatureCaseExpService + */ + @Errorlog + public async fillRootmoduleNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充非根模块(动态) + let ModuleRsNavContext:any = {}; + let ModuleRsNavParams:any = {}; + let ModuleRsParams:any = {}; + await this.fillModuleNodes(context, filter, list ,ModuleRsNavContext,ModuleRsNavParams,ModuleRsParams); + } else { + // 填充非根模块(动态) + let ModuleRsNavContext:any = {}; + let ModuleRsNavParams:any = {}; + let ModuleRsParams:any = {}; + await this.fillModuleNodes(context, filter, list ,ModuleRsNavContext,ModuleRsNavParams,ModuleRsParams); + } + } + + /** + * 填充 树视图节点[非根模块(动态)] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof FeatureCaseExpService + */ + @Errorlog + public fillModuleNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let searchFilter: any = {}; + if (Object.is(filter.strNodeType, this.TREENODE_MODULE)) { + Object.assign(searchFilter, { n_parent_eq: filter.nodeid }); + } + + if (Object.is(filter.strNodeType, this.TREENODE_ROOTMODULE)) { + Object.assign(searchFilter, { n_parent_eq: filter.nodeid }); + } + + Object.assign(searchFilter, { total: false }); + let bFirst: boolean = true; + let records: any[] = []; + try { + this.searchModule(context, searchFilter, filter).then((records:any) =>{ + if(records && records.length >0){ + records.forEach((entity: any) => { + let treeNode: any = {}; + // 整理context + let strId: string = entity.id; + let strText: string = entity.name; + Object.assign(treeNode,{srfparentdename:'ProductModule',srfparentkey:entity.id}); + let tempContext:any = JSON.parse(JSON.stringify(context)); + Object.assign(tempContext,{srfparentdename:'ProductModule',srfparentkey:entity.id,productmodule:strId}) + Object.assign(treeNode,{srfappctx:tempContext}); + Object.assign(treeNode,{'productmodule':strId}); + Object.assign(treeNode, { srfkey: strId }); + Object.assign(treeNode, { text: strText, srfmajortext: strText }); + let strNodeId: string = 'MODULE'; + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += strId; + Object.assign(treeNode, { id: strNodeId }); + Object.assign(treeNode, { expanded: filter.isautoexpand }); + Object.assign(treeNode, { leaf: false }); + Object.assign(treeNode, { navfilter: "n_module_eq" }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + bFirst = false; + }); + }else{ + resolve(list); + } + }); + } catch (error) { + console.error(error); + } + }); + + } + + /** + * 获取查询集合 + * + * @public + * @param {any{}} context + * @param {*} searchFilter + * @param {*} filter + * @returns {any[]} + * @memberof TestEnetityDatasService + */ + @Errorlog + public searchModule(context:any={}, searchFilter: any, filter: any): Promise { + return new Promise((resolve:any,reject:any) =>{ + if(filter.viewparams){ + Object.assign(searchFilter,filter.viewparams); + } + if(!searchFilter.page){ + Object.assign(searchFilter,{page:0}); + } + if(!searchFilter.size){ + Object.assign(searchFilter,{size:1000}); + } + if(context && context.srfparentdename){ + Object.assign(searchFilter,{srfparentdename:JSON.parse(JSON.stringify(context)).srfparentdename}); + } + if(context && context.srfparentkey){ + Object.assign(searchFilter,{srfparentkey:JSON.parse(JSON.stringify(context)).srfparentkey}); + } + const _appEntityService: any = this.appEntityService; + let list: any[] = []; + if (_appEntityService['FetchDefault'] && _appEntityService['FetchDefault'] instanceof Function) { + const response: Promise = _appEntityService['FetchDefault'](context, searchFilter, false); + response.then((response: any) => { + if (!response.status || response.status !== 200) { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchDefault数据集异常!'); + } + const data: any = response.data; + if (Object.keys(data).length > 0) { + list = JSON.parse(JSON.stringify(data)); + resolve(list); + } else { + resolve([]); + } + }).catch((response: any) => { + resolve([]); + console.log(JSON.stringify(context)); + console.error('查询FetchDefault数据集异常!'); + }); + } + }) + } + + /** + * 填充 树视图节点[非根模块(动态)]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof FeatureCaseExpService + */ + @Errorlog + public async fillModuleNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充非根模块(动态) + let ModuleRsNavContext:any = {}; + let ModuleRsNavParams:any = {}; + let ModuleRsParams:any = {}; + await this.fillModuleNodes(context, filter, list ,ModuleRsNavContext,ModuleRsNavParams,ModuleRsParams); + } else { + // 填充非根模块(动态) + let ModuleRsNavContext:any = {}; + let ModuleRsNavParams:any = {}; + let ModuleRsParams:any = {}; + await this.fillModuleNodes(context, filter, list ,ModuleRsNavContext,ModuleRsNavParams,ModuleRsParams); + } + } + + /** + * 填充 树视图节点[全部] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof FeatureCaseExpService + */ + @Errorlog + public fillAllNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let treeNode: any = {}; + Object.assign(treeNode, { text: 'entities.productmodule.featurecaseexp_treeview.nodes.all' }); + Object.assign(treeNode, { isUseLangRes: true }); + Object.assign(treeNode,{srfappctx:context}); + Object.assign(treeNode, { srfmajortext: treeNode.text }); + let strNodeId: string = 'ALL'; + + // 没有指定节点值,直接使用父节点值 + Object.assign(treeNode, { srfkey: filter.strRealNodeId }); + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += filter.strRealNodeId; + + Object.assign(treeNode, { id: strNodeId }); + + Object.assign(treeNode, { expanded: true }); + Object.assign(treeNode, { leaf: false }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + }); + } + + /** + * 填充 树视图节点[全部]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof FeatureCaseExpService + */ + @Errorlog + public async fillAllNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充根模块(动态) + let RootmoduleRsNavContext:any = {}; + let RootmoduleRsNavParams:any = {}; + let RootmoduleRsParams:any = {}; + await this.fillRootmoduleNodes(context, filter, list ,RootmoduleRsNavContext,RootmoduleRsNavParams,RootmoduleRsParams); + } else { + // 填充根模块(动态) + let RootmoduleRsNavContext:any = {}; + let RootmoduleRsNavParams:any = {}; + let RootmoduleRsParams:any = {}; + await this.fillRootmoduleNodes(context, filter, list ,RootmoduleRsNavContext,RootmoduleRsNavParams,RootmoduleRsParams); + } + } + + /** + * 填充 树视图节点[默认根节点] + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @param {*} rsNavContext + * @param {*} rsNavParams + * @param {*} rsParams + * @returns {Promise} + * @memberof FeatureCaseExpService + */ + @Errorlog + public fillRootNodes(context:any={},filter: any, list: any[],rsNavContext?:any,rsNavParams?:any,rsParams?:any): Promise { + context = this.handleResNavContext(context,filter,rsNavContext); + filter = this.handleResNavParams(context,filter,rsNavParams,rsParams); + return new Promise((resolve:any,reject:any) =>{ + let treeNode: any = {}; + Object.assign(treeNode, { text: 'entities.productmodule.featurecaseexp_treeview.nodes.root' }); + Object.assign(treeNode, { isUseLangRes: true }); + Object.assign(treeNode,{srfappctx:context}); + Object.assign(treeNode, { srfmajortext: treeNode.text }); + let strNodeId: string = 'ROOT'; + + Object.assign(treeNode, { srfkey: 'root' }); + strNodeId += this.TREENODE_SEPARATOR; + strNodeId += 'root'; + + Object.assign(treeNode, { id: strNodeId }); + + Object.assign(treeNode, { expanded: filter.isAutoexpand }); + Object.assign(treeNode, { leaf: false }); + Object.assign(treeNode, { navparams: '{}' }); + Object.assign(treeNode, { nodeid: treeNode.srfkey }); + Object.assign(treeNode, { nodeid2: filter.strRealNodeId }); + list.push(treeNode); + resolve(list); + }); + } + + /** + * 填充 树视图节点[默认根节点]子节点 + * + * @public + * @param {any{}} context + * @param {*} filter + * @param {any[]} list + * @returns {Promise} + * @memberof FeatureCaseExpService + */ + @Errorlog + public async fillRootNodeChilds(context:any={}, filter: any, list: any[]): Promise { + if (filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")) { + // 填充全部 + let AllRsNavContext:any = {}; + let AllRsNavParams:any = {}; + let AllRsParams:any = {}; + await this.fillAllNodes(context, filter, list ,AllRsNavContext,AllRsNavParams,AllRsParams); + } else { + // 填充全部 + let AllRsNavContext:any = {}; + let AllRsNavParams:any = {}; + let AllRsParams:any = {}; + await this.fillAllNodes(context, filter, list ,AllRsNavContext,AllRsNavParams,AllRsParams); + } + } + + + /** + * 处理代码表返回数据(树状结构) + * + * @param result 返回数组 + * @param context 应用上下文 + * @param callBack 回调 + * @memberof FeatureCaseExpService + */ + public handleDataSet(result:Array,context:any,callBack:any){ + let list:Array = []; + if(result.length === 0){ + return list; + } + result.forEach((codeItem:any) =>{ + if(!codeItem.pvalue){ + let valueField:string = codeItem.value; + this.setChildCodeItems(valueField,result,codeItem); + list.push(codeItem); + } + }) + this.setNodeData(list,context,callBack); + return list; + } + + /** + * 处理非根节点数据 + * + * @param result 返回数组 + * @param context 应用上下文 + * @param callBack 回调 + * @memberof FeatureCaseExpService + */ + public setChildCodeItems(pValue:string,result:Array,codeItem:any){ + result.forEach((item:any) =>{ + if(item.pvalue == pValue){ + let valueField:string = item.value; + this.setChildCodeItems(valueField,result,item); + if(!codeItem.children){ + codeItem.children = []; + } + codeItem.children.push(item); + } + }) + } + + /** + * 设置节点UI数据 + * + * @param result 返回数组 + * @param context 应用上下文 + * @param callBack 回调 + * @memberof FeatureCaseExpService + */ + public setNodeData(result:Array,context:any,callBack:any){ + result.forEach((item:any) =>{ + if(item.children){ + item.leaf = false; + this.setNodeData(item.children,context,callBack); + }else{ + item.leaf = true; + } + callBack(context,item); + }) + } + + /** + * 处理节点关系导航上下文 + * + * @param context 应用上下文 + * @param filter 参数 + * @param resNavContext 节点关系导航上下文 + * + * @memberof FeatureCaseExpService + */ + public handleResNavContext(context:any,filter:any,resNavContext:any){ + if(resNavContext && Object.keys(resNavContext).length > 0){ + let tempContextData:any = JSON.parse(JSON.stringify(context)); + let tempViewParams:any = {}; + if(filter && filter.viewparams){ + tempViewParams = filter.viewparams; + } + Object.keys(resNavContext).forEach((item:any) =>{ + let curDataObj:any = resNavContext[item]; + this.handleCustomDataLogic(context,tempViewParams,curDataObj,tempContextData,item); + }) + return tempContextData; + }else{ + return context; + } + } + + /** + * 处理关系导航参数 + * + * @param context 应用上下文 + * @param filter 参数 + * @param resNavParams 节点关系导航参数 + * @param resParams 节点关系参数 + * + * @memberof FeatureCaseExpService + */ + public handleResNavParams(context:any,filter:any,resNavParams:any,resParams:any){ + if((resNavParams && Object.keys(resNavParams).length >0) || (resParams && Object.keys(resParams).length >0)){ + let tempViewParamData:any = {}; + let tempViewParams:any = {}; + if(filter && filter.viewparams){ + tempViewParams = filter.viewparams; + tempViewParamData = JSON.parse(JSON.stringify(filter.viewparams)); + } + if( Object.keys(resNavParams).length > 0){ + Object.keys(resNavParams).forEach((item:any) =>{ + let curDataObj:any = resNavParams[item]; + this.handleCustomDataLogic(context,tempViewParams,curDataObj,tempViewParamData,item); + }) + } + if( Object.keys(resParams).length > 0){ + Object.keys(resParams).forEach((item:any) =>{ + let curDataObj:any = resParams[item]; + tempViewParamData[item.toLowerCase()] = curDataObj.value; + }) + } + Object.assign(filter,{viewparams:tempViewParamData}); + return filter; + }else{ + return filter; + } + } + + /** + * 处理自定义节点关系导航数据 + * + * @param context 应用上下文 + * @param viewparams 参数 + * @param curNavData 节点关系导航参数对象 + * @param tempData 返回数据 + * @param item 节点关系导航参数键值 + * + * @memberof FeatureCaseExpService + */ + public handleCustomDataLogic(context:any,viewparams:any,curNavData:any,tempData:any,item:string){ + // 直接值直接赋值 + if(curNavData.isRawValue){ + if(Object.is(curNavData.value,"null") || Object.is(curNavData.value,"")){ + Object.defineProperty(tempData, item.toLowerCase(), { + value: null, + writable : true, + enumerable : true, + configurable : true + }); + }else{ + Object.defineProperty(tempData, item.toLowerCase(), { + value: curNavData.value, + writable : true, + enumerable : true, + configurable : true + }); + } + }else{ + // 先从导航上下文取数,没有再从导航参数(URL)取数,如果导航上下文和导航参数都没有则为null + if(context[(curNavData.value).toLowerCase()]){ + Object.defineProperty(tempData, item.toLowerCase(), { + value: context[(curNavData.value).toLowerCase()], + writable : true, + enumerable : true, + configurable : true + }); + }else{ + if(viewparams[(curNavData.value).toLowerCase()]){ + Object.defineProperty(tempData, item.toLowerCase(), { + value: viewparams[(curNavData.value).toLowerCase()], + writable : true, + enumerable : true, + configurable : true + }); + }else{ + Object.defineProperty(tempData, item.toLowerCase(), { + value: null, + writable : true, + enumerable : true, + configurable : true + }); + } + } + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview.less b/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview.less new file mode 100644 index 0000000000000000000000000000000000000000..9fa8210b7d84fe9412aab2f27ca81bd2f9920b07 --- /dev/null +++ b/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview.less @@ -0,0 +1,4 @@ +.tree { + --tree: 0px; +} +// this is less diff --git a/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview.vue b/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview.vue new file mode 100644 index 0000000000000000000000000000000000000000..2d67ba2de85a8be4679b59dab4ebb60467aac3a2 --- /dev/null +++ b/app_Web/src/widgets/product-module/feature-case-exp-treeview/feature-case-exp-treeview.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/product-plan/info-form/info-form-base.vue b/app_Web/src/widgets/product-plan/info-form/info-form-base.vue index de14292942b42594e6a648f1e94e993a8845bc36..e6ec838c2671f6b3996f02ef0ce7c41f7d187be2 100644 --- a/app_Web/src/widgets/product-plan/info-form/info-form-base.vue +++ b/app_Web/src/widgets/product-plan/info-form/info-form-base.vue @@ -12,21 +12,33 @@ +:value="data.title" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.begin" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.end" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> @@ -38,7 +50,11 @@ +:value="data.desc" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> diff --git a/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel-tabviewpanel/main-tab-exptabviewpanel-tabviewpanel-base.vue b/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel-tabviewpanel/main-tab-exptabviewpanel-tabviewpanel-base.vue index 13f869397fbc6bab850766b86784acc3a647c60d..54fb2b8f3e2ec5acfc7f73c27fba4b7243855ecd 100644 --- a/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel-tabviewpanel/main-tab-exptabviewpanel-tabviewpanel-base.vue +++ b/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel-tabviewpanel/main-tab-exptabviewpanel-tabviewpanel-base.vue @@ -3,7 +3,7 @@ @@ -153,6 +153,14 @@ export default class MainTabExptabviewpanelBase extends Vue implements ControlIn * @memberof MainTabExptabviewpanel */ public isActivied: boolean = true; + + /** + * 视图面板过滤项 + * + * @type {string} + * @memberof MainTabExptabviewpanel + */ + public navfilter: string = ""; /** * vue 生命周期 @@ -181,6 +189,21 @@ export default class MainTabExptabviewpanelBase extends Vue implements ControlIn } } + /** + * 传入导航视图参数 + * + * @memberof MainTabExptabviewpanel + */ + public getNavViewParams(){ + if(Object.is(this.navfilter,"")){ + return this.viewparams; + }else{ + let tempViewParams:any = JSON.parse(JSON.stringify(this.viewparams)); + Object.assign(tempViewParams,{[this.navfilter]:this.context['productplan']}); + return tempViewParams; + } + } + /** * 视图数据变化 * diff --git a/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel2-tabviewpanel/main-tab-exptabviewpanel2-tabviewpanel-base.vue b/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel2-tabviewpanel/main-tab-exptabviewpanel2-tabviewpanel-base.vue index 3d10dcf7e4090f485ec8e1ebfc2e2259c7aba0d9..8ac1fd427dc72b2a5ff4771e89c81fff7657cfe6 100644 --- a/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel2-tabviewpanel/main-tab-exptabviewpanel2-tabviewpanel-base.vue +++ b/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel2-tabviewpanel/main-tab-exptabviewpanel2-tabviewpanel-base.vue @@ -3,7 +3,7 @@ @@ -153,6 +153,14 @@ export default class MainTabExptabviewpanel2Base extends Vue implements ControlI * @memberof MainTabExptabviewpanel2 */ public isActivied: boolean = true; + + /** + * 视图面板过滤项 + * + * @type {string} + * @memberof MainTabExptabviewpanel2 + */ + public navfilter: string = ""; /** * vue 生命周期 @@ -181,6 +189,21 @@ export default class MainTabExptabviewpanel2Base extends Vue implements ControlI } } + /** + * 传入导航视图参数 + * + * @memberof MainTabExptabviewpanel2 + */ + public getNavViewParams(){ + if(Object.is(this.navfilter,"")){ + return this.viewparams; + }else{ + let tempViewParams:any = JSON.parse(JSON.stringify(this.viewparams)); + Object.assign(tempViewParams,{[this.navfilter]:this.context['productplan']}); + return tempViewParams; + } + } + /** * 视图数据变化 * diff --git a/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel3-tabviewpanel/main-tab-exptabviewpanel3-tabviewpanel-base.vue b/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel3-tabviewpanel/main-tab-exptabviewpanel3-tabviewpanel-base.vue index ec0998da81528f8a9cdb0107156b61203caa49e4..426889e0dab466f928c35e57b9c4a316e6981c3f 100644 --- a/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel3-tabviewpanel/main-tab-exptabviewpanel3-tabviewpanel-base.vue +++ b/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel3-tabviewpanel/main-tab-exptabviewpanel3-tabviewpanel-base.vue @@ -3,7 +3,7 @@ @@ -153,6 +153,14 @@ export default class MainTabExptabviewpanel3Base extends Vue implements ControlI * @memberof MainTabExptabviewpanel3 */ public isActivied: boolean = true; + + /** + * 视图面板过滤项 + * + * @type {string} + * @memberof MainTabExptabviewpanel3 + */ + public navfilter: string = "PARENT"; /** * vue 生命周期 @@ -181,6 +189,21 @@ export default class MainTabExptabviewpanel3Base extends Vue implements ControlI } } + /** + * 传入导航视图参数 + * + * @memberof MainTabExptabviewpanel3 + */ + public getNavViewParams(){ + if(Object.is(this.navfilter,"")){ + return this.viewparams; + }else{ + let tempViewParams:any = JSON.parse(JSON.stringify(this.viewparams)); + Object.assign(tempViewParams,{[this.navfilter]:this.context['productplan']}); + return tempViewParams; + } + } + /** * 视图数据变化 * diff --git a/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel4-tabviewpanel/main-tab-exptabviewpanel4-tabviewpanel-base.vue b/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel4-tabviewpanel/main-tab-exptabviewpanel4-tabviewpanel-base.vue index a4b8d3b2ad9f2398b996fdbbf3984b7a407f086b..ec1e9faf4cb5e2bcb94bca98cfe97e043a44167f 100644 --- a/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel4-tabviewpanel/main-tab-exptabviewpanel4-tabviewpanel-base.vue +++ b/app_Web/src/widgets/product-plan/main-tab-exptabviewpanel4-tabviewpanel/main-tab-exptabviewpanel4-tabviewpanel-base.vue @@ -3,7 +3,7 @@ @@ -153,6 +153,14 @@ export default class MainTabExptabviewpanel4Base extends Vue implements ControlI * @memberof MainTabExptabviewpanel4 */ public isActivied: boolean = true; + + /** + * 视图面板过滤项 + * + * @type {string} + * @memberof MainTabExptabviewpanel4 + */ + public navfilter: string = ""; /** * vue 生命周期 @@ -181,6 +189,21 @@ export default class MainTabExptabviewpanel4Base extends Vue implements ControlI } } + /** + * 传入导航视图参数 + * + * @memberof MainTabExptabviewpanel4 + */ + public getNavViewParams(){ + if(Object.is(this.navfilter,"")){ + return this.viewparams; + }else{ + let tempViewParams:any = JSON.parse(JSON.stringify(this.viewparams)); + Object.assign(tempViewParams,{[this.navfilter]:this.context['productplan']}); + return tempViewParams; + } + } + /** * 视图数据变化 * diff --git a/app_Web/src/widgets/product-stats/main2-form/main2-form-base.vue b/app_Web/src/widgets/product-stats/main2-form/main2-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..0e917630650d4bc5df7120d441d5ca083ef85c99 --- /dev/null +++ b/app_Web/src/widgets/product-stats/main2-form/main2-form-base.vue @@ -0,0 +1,2210 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/product-stats/main2-form/main2-form-model.ts b/app_Web/src/widgets/product-stats/main2-form/main2-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..02fbc08430d3535e0144abf7fc4b548b1d5d1c64 --- /dev/null +++ b/app_Web/src/widgets/product-stats/main2-form/main2-form-model.ts @@ -0,0 +1,136 @@ +/** + * Main2 部件模型 + * + * @export + * @class Main2Model + */ +export default class Main2Model { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof Main2Model + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'storycnt', + prop: 'storycnt', + dataType: 'INT', + }, + { + name: 'waitstorycnt', + prop: 'waitstorycnt', + dataType: 'INT', + }, + { + name: 'plannedstorycnt', + prop: 'plannedstorycnt', + dataType: 'INT', + }, + { + name: 'developingstorycnt', + prop: 'developingstorycnt', + dataType: 'INT', + }, + { + name: 'testingstorycnt', + prop: 'testingstorycnt', + dataType: 'INT', + }, + { + name: 'releasedstorycnt', + prop: 'releasedstorycnt', + dataType: 'INT', + }, + { + name: 'productplancnt', + prop: 'productplancnt', + dataType: 'INT', + }, + { + name: 'unendproductplanrate', + prop: 'unendproductplanrate', + dataType: 'FLOAT', + }, + { + name: 'unendproductplancnt', + prop: 'unendproductplancnt', + dataType: 'INT', + }, + { + name: 'resprojectcnt', + prop: 'resprojectcnt', + dataType: 'INT', + }, + { + name: 'undoneresprojectrate', + prop: 'undoneresprojectrate', + dataType: 'INT', + }, + { + name: 'undoneresprojectcnt', + prop: 'undoneresprojectcnt', + dataType: 'INT', + }, + { + name: 'releasecnt', + prop: 'releasecnt', + dataType: 'INT', + }, + { + name: 'normalreleaserate', + prop: 'normalreleaserate', + dataType: 'INT', + }, + { + name: 'normalreleasecnt', + prop: 'normalreleasecnt', + dataType: 'INT', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'productstats', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/product-stats/main2-form/main2-form-service.ts b/app_Web/src/widgets/product-stats/main2-form/main2-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..456e3b91d86aac38260af9b542c7f3f20c90e54f --- /dev/null +++ b/app_Web/src/widgets/product-stats/main2-form/main2-form-service.ts @@ -0,0 +1,371 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import ProductStatsService from '@/service/product-stats/product-stats-service'; +import Main2Model from './main2-form-model'; + + +/** + * Main2 部件服务对象 + * + * @export + * @class Main2Service + */ +export default class Main2Service extends ControlService { + + /** + * 产品统计服务对象 + * + * @type {ProductStatsService} + * @memberof Main2Service + */ + public appEntityService: ProductStatsService = new ProductStatsService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof Main2Service + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of Main2Service. + * + * @param {*} [opts={}] + * @memberof Main2Service + */ + constructor(opts: any = {}) { + super(opts); + this.model = new Main2Model(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof Main2Service + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof Main2Service + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof Main2Service + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof Main2Service + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof Main2Service + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof Main2Service + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof Main2Service + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof Main2Service + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof Main2Service + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.productstats = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof Main2Service + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof Main2Service + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/product-stats/main2-form/main2-form.less b/app_Web/src/widgets/product-stats/main2-form/main2-form.less new file mode 100644 index 0000000000000000000000000000000000000000..ae4a424e3bd6d0223ff00ab4871769f8263a7154 --- /dev/null +++ b/app_Web/src/widgets/product-stats/main2-form/main2-form.less @@ -0,0 +1,19 @@ +.form { + --form: 0px; +} +// this is less +.MainInfo { + font-size:40px;font-weight:bold +} +.MainInfo { + .ivu-form-item-label { + position: relative; + line-height: 30px; + font-size: 20px; + } + .ivu-form-item-content { + position: relative; + line-height: 40px; + font-size: 30px; + } +} diff --git a/app_Web/src/widgets/product-stats/main2-form/main2-form.vue b/app_Web/src/widgets/product-stats/main2-form/main2-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..71a9b9fae865252990ebc8b1a36da799f7f431ba --- /dev/null +++ b/app_Web/src/widgets/product-stats/main2-form/main2-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/product/bug-tree-exp-viewtreeexpbar-treeexpbar/bug-tree-exp-viewtreeexpbar-treeexpbar-model.ts b/app_Web/src/widgets/product/bug-tree-exp-viewtreeexpbar-treeexpbar/bug-tree-exp-viewtreeexpbar-treeexpbar-model.ts index 5f79be473ec7b3d163b854350b8ea0047ff2fff8..b85defd300db7bdd860843c7e8d21f9581a7a2b1 100644 --- a/app_Web/src/widgets/product/bug-tree-exp-viewtreeexpbar-treeexpbar/bug-tree-exp-viewtreeexpbar-treeexpbar-model.ts +++ b/app_Web/src/widgets/product/bug-tree-exp-viewtreeexpbar-treeexpbar/bug-tree-exp-viewtreeexpbar-treeexpbar-model.ts @@ -72,6 +72,18 @@ export default class BugTreeExpViewtreeexpbarModel { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar-base.vue b/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..d2c61c861b440659a17d1d08092426a89dbaec70 --- /dev/null +++ b/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar-base.vue @@ -0,0 +1,524 @@ + + + + diff --git a/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar-model.ts b/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..e0cf01a45126846aaf26372e1c422b66dcf2dbb5 --- /dev/null +++ b/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar-model.ts @@ -0,0 +1,91 @@ +/** + * CaseTreeExpViewtreeexpbar 部件模型 + * + * @export + * @class CaseTreeExpViewtreeexpbarModel + */ +export default class CaseTreeExpViewtreeexpbarModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof CaseTreeExpViewtreeexpbarModel + */ + public getDataItems(): any[] { + return [ + { + name: 'qd', + }, + { + name: 'acl', + }, + { + name: 'name', + }, + { + name: 'product', + prop: 'id', + }, + { + name: 'deleted', + }, + { + name: 'whitelist', + }, + { + name: 'rd', + }, + { + name: 'order', + }, + { + name: 'type', + }, + { + name: 'po', + }, + { + name: 'desc', + }, + { + name: 'status', + }, + { + name: 'createdby', + }, + { + name: 'createdversion', + }, + { + name: 'substatus', + }, + { + name: 'code', + }, + { + name: 'createddate', + }, + { + name: 'linename', + }, + { + name: 'line', + }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar-service.ts b/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..baa4c22c58bfb9b4e7a3cc7ed44b982e5212618e --- /dev/null +++ b/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * CaseTreeExpViewtreeexpbar 部件服务对象 + * + * @export + * @class CaseTreeExpViewtreeexpbarService + */ +export default class CaseTreeExpViewtreeexpbarService extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar.less b/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar.less new file mode 100644 index 0000000000000000000000000000000000000000..d215e8f8c645ee2b6c009f000b2441f64c34de3f --- /dev/null +++ b/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar.less @@ -0,0 +1,4 @@ +.app-tree-exp-bar { + --app-tree-exp-bar: 0; +} +// this is less diff --git a/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar.vue b/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar.vue new file mode 100644 index 0000000000000000000000000000000000000000..46ccfde812ec20eee059b0d0cd5973dfa4ac321e --- /dev/null +++ b/app_Web/src/widgets/product/case-tree-exp-viewtreeexpbar-treeexpbar/case-tree-exp-viewtreeexpbar-treeexpbar.vue @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/product/dashboard-info-form/dashboard-info-form-base.vue b/app_Web/src/widgets/product/dashboard-info-form/dashboard-info-form-base.vue index 8237bf0001311d36885dfbfd448d69275624fa77..ce38d729ff57c00f1bb69d793938e270dfd0a9c1 100644 --- a/app_Web/src/widgets/product/dashboard-info-form/dashboard-info-form-base.vue +++ b/app_Web/src/widgets/product/dashboard-info-form/dashboard-info-form-base.vue @@ -9,7 +9,11 @@ +:value="data.name" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> @@ -24,21 +28,33 @@ +:value="data.po" tag='UserRealName' codelistType='DYNAMIC' renderMode="STR" valueSeparator="," textSeparator="," :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.rd" tag='UserRealName' codelistType='DYNAMIC' renderMode="STR" valueSeparator="," textSeparator="," :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.qd" tag='UserRealName' codelistType='DYNAMIC' renderMode="STR" valueSeparator="," textSeparator="," :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> @@ -53,28 +69,44 @@ +:value="data.linename" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.createdby" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.createddate" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.acl" tag='Product__acl' codelistType='STATIC' :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> diff --git a/app_Web/src/widgets/product/default-searchform/default-searchform-base.vue b/app_Web/src/widgets/product/default-searchform/default-searchform-base.vue index 4f3a78ec12c01c6da26d53f6ba4a1d8c0858a119..7b16fd09a17eeb46b69bb52848824a1d9c7fccb1 100644 --- a/app_Web/src/widgets/product/default-searchform/default-searchform-base.vue +++ b/app_Web/src/widgets/product/default-searchform/default-searchform-base.vue @@ -701,7 +701,7 @@ export default class DefaultBase extends Vue implements ControlInterface { */ public load(opt: any = {}): void { if(!this.loadAction){ - this.$Notice.error({ title: '错误', desc: 'ProductTestGridView视图搜索表单loadAction参数未配置' }); + this.$Notice.error({ title: '错误', desc: 'ProductPickupGridView视图搜索表单loadAction参数未配置' }); return; } const arg: any = { ...opt }; @@ -738,7 +738,7 @@ export default class DefaultBase extends Vue implements ControlInterface { */ public loadDraft(opt: any = {},mode?:string): void { if(!this.loaddraftAction){ - this.$Notice.error({ title: '错误', desc: 'ProductTestGridView视图搜索表单loaddraftAction参数未配置' }); + this.$Notice.error({ title: '错误', desc: 'ProductPickupGridView视图搜索表单loaddraftAction参数未配置' }); return; } const arg: any = { ...opt } ; diff --git a/app_Web/src/widgets/product/exp-list/exp-list-base.vue b/app_Web/src/widgets/product/exp-list/exp-list-base.vue index 869b487b773f17da88cccf48512bc52d994911b7..5ebe13754be20f88b01bb407a1bd49da88e43274 100644 --- a/app_Web/src/widgets/product/exp-list/exp-list-base.vue +++ b/app_Web/src/widgets/product/exp-list/exp-list-base.vue @@ -114,7 +114,7 @@ export default class ExpBase extends Vue implements ControlInterface { */ public listexpbar_list_quicktoolbar_click($event: any, $event2?: any) { if (Object.is($event.tag, 'deuiaction1')) { - this.listexpbar_list_quicktoolbar_deuiaction1_click($event, 'listexpbar_list_quicktoolbar', $event2); + this.listexpbar_list_quicktoolbar_deuiaction1_click(null, 'listexpbar_list_quicktoolbar', $event2); } } @@ -265,6 +265,29 @@ export default class ExpBase extends Vue implements ControlInterface { */ @Prop() public fetchAction!: string; + /** + * 打开新建数据视图 + * + * @type {any} + * @memberof Exp + */ + @Prop() public newdata: any; + /** + * 打开编辑数据视图 + * + * @type {any} + * @memberof Exp + */ + @Prop() public opendata: any; + + /** + * this引用 + * + * @type {number} + * @memberof Main + */ + public thisRef: any = this; + /** * 当前页 * @@ -305,6 +328,14 @@ export default class ExpBase extends Vue implements ControlInterface { */ public totalRecord: number = 0; + /** + * 加载的数据是否附加在items之后 + * + * @type {boolean} + * @memberof Exp + */ + public isAddBehind:boolean = false; + /** * 排序方向 * @@ -349,6 +380,7 @@ export default class ExpBase extends Vue implements ControlInterface { } }) } + /** * Vue声明周期,组件创建完毕 @@ -406,6 +438,7 @@ export default class ExpBase extends Vue implements ControlInterface { if(this.totalRecord>this.items.length) { this.curPage = ++this.curPage; + this.isAddBehind = true; this.load({}); } } @@ -449,7 +482,9 @@ export default class ExpBase extends Vue implements ControlInterface { this.$emit('beforeload', parentdata); Object.assign(arg, parentdata); let tempViewParams:any = parentdata.viewparams?parentdata.viewparams:{}; - Object.assign(tempViewParams,JSON.parse(JSON.stringify(this.viewparams))); + if(this.viewparams){ + Object.assign(tempViewParams,JSON.parse(JSON.stringify(this.viewparams))); + } Object.assign(arg,{viewparams:tempViewParams}); const post: Promise = this.service.search(this.fetchAction, this.context?JSON.parse(JSON.stringify(this.context)):{}, arg, this.showBusyIndicator); post.then((response: any) => { @@ -460,7 +495,9 @@ export default class ExpBase extends Vue implements ControlInterface { return; } const data: any = response.data; - this.items = []; + if(!this.isAddBehind){ + this.items = []; + } if (Object.keys(data).length > 0) { let datas = JSON.parse(JSON.stringify(data)); datas.map((item: any) => { @@ -469,6 +506,7 @@ export default class ExpBase extends Vue implements ControlInterface { this.totalRecord = response.total; this.items.push(...datas); } + this.isAddBehind = false; this.$emit('load', this.items); if(this.isSelectFirstDefault){ this.handleClick(this.items[0]); diff --git a/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar-base.vue b/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..d0c1873628f007c6a07b876ecd75be5b915f3015 --- /dev/null +++ b/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar-base.vue @@ -0,0 +1,524 @@ + + + + diff --git a/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar-model.ts b/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..13e6c74c21229a3c179dbe42f89bde98593ceb7c --- /dev/null +++ b/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar-model.ts @@ -0,0 +1,91 @@ +/** + * FeatureTreeExpViewtreeexpbar 部件模型 + * + * @export + * @class FeatureTreeExpViewtreeexpbarModel + */ +export default class FeatureTreeExpViewtreeexpbarModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof FeatureTreeExpViewtreeexpbarModel + */ + public getDataItems(): any[] { + return [ + { + name: 'qd', + }, + { + name: 'acl', + }, + { + name: 'name', + }, + { + name: 'product', + prop: 'id', + }, + { + name: 'deleted', + }, + { + name: 'whitelist', + }, + { + name: 'rd', + }, + { + name: 'order', + }, + { + name: 'type', + }, + { + name: 'po', + }, + { + name: 'desc', + }, + { + name: 'status', + }, + { + name: 'createdby', + }, + { + name: 'createdversion', + }, + { + name: 'substatus', + }, + { + name: 'code', + }, + { + name: 'createddate', + }, + { + name: 'linename', + }, + { + name: 'line', + }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar-service.ts b/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..6533f1835f1284a6be4fe248dc21913111feb239 --- /dev/null +++ b/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * FeatureTreeExpViewtreeexpbar 部件服务对象 + * + * @export + * @class FeatureTreeExpViewtreeexpbarService + */ +export default class FeatureTreeExpViewtreeexpbarService extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar.less b/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar.less new file mode 100644 index 0000000000000000000000000000000000000000..d215e8f8c645ee2b6c009f000b2441f64c34de3f --- /dev/null +++ b/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar.less @@ -0,0 +1,4 @@ +.app-tree-exp-bar { + --app-tree-exp-bar: 0; +} +// this is less diff --git a/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar.vue b/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar.vue new file mode 100644 index 0000000000000000000000000000000000000000..255fa01aa2ae8c35e042752f61e9db14f090ce23 --- /dev/null +++ b/app_Web/src/widgets/product/feature-tree-exp-viewtreeexpbar-treeexpbar/feature-tree-exp-viewtreeexpbar-treeexpbar.vue @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/product/list-exp-viewlistexpbar-listexpbar/list-exp-viewlistexpbar-listexpbar-base.vue b/app_Web/src/widgets/product/list-exp-viewlistexpbar-listexpbar/list-exp-viewlistexpbar-listexpbar-base.vue index eae68c8445fa0e1808f722ba35b9fb7dae3bae10..76e57760fb7d59d39c3227c6a6efe23da1909f99 100644 --- a/app_Web/src/widgets/product/list-exp-viewlistexpbar-listexpbar/list-exp-viewlistexpbar-listexpbar-base.vue +++ b/app_Web/src/widgets/product/list-exp-viewlistexpbar-listexpbar/list-exp-viewlistexpbar-listexpbar-base.vue @@ -14,6 +14,8 @@ fetchAction="FetchDefault" :showBusyIndicator="true" :isSelectFirstDefault="true" + :newdata="newdata" + :opendata="opendata" name="listexpbar_list" ref='listexpbar_list' @selectionchange="listexpbar_list_selectionchange($event)" @@ -239,13 +241,29 @@ export default class ListExpViewlistexpbarBase extends Vue implements ControlInt */ public split: number = 0.2; + /** + * 打开新建数据视图 + * + * @type {any} + * @memberof ListExpViewlistexpbar + */ + @Prop() public newdata: any; + + /** + * 打开编辑数据视图 + * + * @type {any} + * @memberof ListExpViewlistexpbar + */ + @Prop() public opendata: any; + /** * 导航视图名称 * * @type {string} * @memberof ListExpViewlistexpbarBase */ - public navViewName: string = "product-exp-edit-view"; + public navViewName: string = "product-stats-edit-view9"; /** * 导航视图参数 @@ -400,11 +418,11 @@ export default class ListExpViewlistexpbarBase extends Vue implements ControlInt return ; } const arg:any = args[0]; - Object.assign(data,{'product':arg['product']}); - Object.assign(data,{srfparentdename:'Product',srfparentkey:arg['product']}); if(this.context){ Object.assign(data,JSON.parse(JSON.stringify(this.context))); } + Object.assign(data,{'product':arg['product']}); + Object.assign(data,{srfparentdename:'Product',srfparentkey:arg['product']}); this.selection = {}; Object.assign(this.selection, { view: { viewname: this.navViewName }, data:data }); this.$emit('selectionchange',args); diff --git a/app_Web/src/widgets/product/main-dashboard-viewdashboard-container1-portlet/main-dashboard-viewdashboard-container1-portlet-model.ts b/app_Web/src/widgets/product/main-dashboard-viewdashboard-container1-portlet/main-dashboard-viewdashboard-container1-portlet-model.ts index bdb81f478dcb31f7b76407ecfe5654b289180428..9cec9446692dfa2eb167c463ebe1686b24446b35 100644 --- a/app_Web/src/widgets/product/main-dashboard-viewdashboard-container1-portlet/main-dashboard-viewdashboard-container1-portlet-model.ts +++ b/app_Web/src/widgets/product/main-dashboard-viewdashboard-container1-portlet/main-dashboard-viewdashboard-container1-portlet-model.ts @@ -72,6 +72,18 @@ export default class MainDashboardViewdashboard_container1Model { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/main-dashboard-viewdashboard-container2-portlet/main-dashboard-viewdashboard-container2-portlet-model.ts b/app_Web/src/widgets/product/main-dashboard-viewdashboard-container2-portlet/main-dashboard-viewdashboard-container2-portlet-model.ts index 236ef84cd03eb01d408c073f3a7198b20ae91576..ceb757440493c6ab07b3a0c1e1a6a1e38b6c02d5 100644 --- a/app_Web/src/widgets/product/main-dashboard-viewdashboard-container2-portlet/main-dashboard-viewdashboard-container2-portlet-model.ts +++ b/app_Web/src/widgets/product/main-dashboard-viewdashboard-container2-portlet/main-dashboard-viewdashboard-container2-portlet-model.ts @@ -72,6 +72,18 @@ export default class MainDashboardViewdashboard_container2Model { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/main-dashboard-viewdashboard-container3-portlet/main-dashboard-viewdashboard-container3-portlet-model.ts b/app_Web/src/widgets/product/main-dashboard-viewdashboard-container3-portlet/main-dashboard-viewdashboard-container3-portlet-model.ts index 2fe55618328207ca237d57d11bfdbfaa467de7a4..5155e8ca8c7b484890805948cb288f71dd171722 100644 --- a/app_Web/src/widgets/product/main-dashboard-viewdashboard-container3-portlet/main-dashboard-viewdashboard-container3-portlet-model.ts +++ b/app_Web/src/widgets/product/main-dashboard-viewdashboard-container3-portlet/main-dashboard-viewdashboard-container3-portlet-model.ts @@ -72,6 +72,18 @@ export default class MainDashboardViewdashboard_container3Model { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/main-dashboard/main-dashboard-base.vue b/app_Web/src/widgets/product/main-dashboard/main-dashboard-base.vue index 2985e1adfd4a111d9f9a98ab0926eb07bafce008..4652fcb9c2acb69526f363f0212b77463022ab0c 100644 --- a/app_Web/src/widgets/product/main-dashboard/main-dashboard-base.vue +++ b/app_Web/src/widgets/product/main-dashboard/main-dashboard-base.vue @@ -309,7 +309,7 @@ export default class MainBase extends Vue implements ControlInterface { public loadModel(){ if(this.isEnableCustomized){ this.utilService.getService(this.utilServiceName).then((service:any) =>{ - service.loadModelData(JSON.parse(JSON.stringify(this.context)),{modelid:this.modelId}).then((res:any) =>{ + service.loadModelData(JSON.parse(JSON.stringify(this.context)),{modelid:this.modelId,utilServiceName:this.utilServiceName}).then((res:any) =>{ if(res && res.status == 200){ const data:any = res.data; if(data && data.length >0){ diff --git a/app_Web/src/widgets/product/main-dashboard/main-dashboard-model.ts b/app_Web/src/widgets/product/main-dashboard/main-dashboard-model.ts index 5339df458ef17ee313bcb11781d1973b8ba06c2f..d95e10599ca424eb9903cd64994273a17d2873bb 100644 --- a/app_Web/src/widgets/product/main-dashboard/main-dashboard-model.ts +++ b/app_Web/src/widgets/product/main-dashboard/main-dashboard-model.ts @@ -72,6 +72,18 @@ export default class MainModel { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/main-form/main-form-base.vue b/app_Web/src/widgets/product/main-form/main-form-base.vue index 83ccbf3fbb85ab90088f9eb595db45310f48d68f..888d5479600d746ba08dcc4cfe0523d117c1102f 100644 --- a/app_Web/src/widgets/product/main-form/main-form-base.vue +++ b/app_Web/src/widgets/product/main-form/main-form-base.vue @@ -48,25 +48,65 @@ - + + - + + - + + - + + @@ -83,7 +123,17 @@ - + + diff --git a/app_Web/src/widgets/product/main-grid/main-grid-base.vue b/app_Web/src/widgets/product/main-grid/main-grid-base.vue index 851805dfd7726784f618c8a7d73372e3c977f1ff..6ca990617eec10755fcc861627c18b946e6a1ef8 100644 --- a/app_Web/src/widgets/product/main-grid/main-grid-base.vue +++ b/app_Web/src/widgets/product/main-grid/main-grid-base.vue @@ -291,20 +291,6 @@ export default class MainBase extends Vue implements ControlInterface { return this.selections[0]; } - /** - * 打开新建数据视图 - * - * @type {any} - * @memberof Main - */ - @Prop() public newdata: any; - /** - * 打开编辑数据视图 - * - * @type {any} - * @memberof Main - */ - @Prop() public opendata: any; /** * 显示处理提示 @@ -693,7 +679,7 @@ export default class MainBase extends Vue implements ControlInterface { */ public load(opt: any = {}, pageReset: boolean = false): void { if(!this.fetchAction){ - this.$Notice.error({ title: '错误', desc: 'ProductGridView视图表格fetchAction参数未配置' }); + this.$Notice.error({ title: '错误', desc: 'ProductPickupGridView视图表格fetchAction参数未配置' }); return; } if(pageReset){ @@ -770,7 +756,7 @@ export default class MainBase extends Vue implements ControlInterface { */ public async remove(datas: any[]): Promise { if(!this.removeAction){ - this.$Notice.error({ title: '错误', desc: 'ProductGridView视图表格removeAction参数未配置' }); + this.$Notice.error({ title: '错误', desc: 'ProductPickupGridView视图表格removeAction参数未配置' }); return; } let _datas:any[] = []; @@ -876,7 +862,7 @@ export default class MainBase extends Vue implements ControlInterface { */ public addBatch(arg: any = {}): void { if(!this.fetchAction){ - this.$Notice.error({ title: '错误', desc: 'ProductGridView视图表格fetchAction参数未配置' }); + this.$Notice.error({ title: '错误', desc: 'ProductPickupGridView视图表格fetchAction参数未配置' }); return; } if(!arg){ @@ -1429,7 +1415,7 @@ export default class MainBase extends Vue implements ControlInterface { try { if(Object.is(item.rowDataState, 'create')){ if(!this.createAction){ - this.$Notice.error({ title: '错误', desc: 'ProductGridView视图表格createAction参数未配置' }); + this.$Notice.error({ title: '错误', desc: 'ProductPickupGridView视图表格createAction参数未配置' }); }else{ Object.assign(item,{viewparams:this.viewparams}); let response = await this.service.add(this.createAction, JSON.parse(JSON.stringify(this.context)),item, this.showBusyIndicator); @@ -1437,7 +1423,7 @@ export default class MainBase extends Vue implements ControlInterface { } }else if(Object.is(item.rowDataState, 'update')){ if(!this.updateAction){ - this.$Notice.error({ title: '错误', desc: 'ProductGridView视图表格updateAction参数未配置' }); + this.$Notice.error({ title: '错误', desc: 'ProductPickupGridView视图表格updateAction参数未配置' }); }else{ Object.assign(item,{viewparams:this.viewparams}); if(item.product){ diff --git a/app_Web/src/widgets/product/main-grid/main-grid-model.ts b/app_Web/src/widgets/product/main-grid/main-grid-model.ts index 0051aa2cf985b5d3886d8aaed100dd7344b06921..4a1cea68fe4ba24e29e1835abd0c03559790df9c 100644 --- a/app_Web/src/widgets/product/main-grid/main-grid-model.ts +++ b/app_Web/src/widgets/product/main-grid/main-grid-model.ts @@ -75,6 +75,32 @@ export default class MainModel { name: 'product', prop: 'id', }, + { + name: 'n_acl_eq', + prop: 'n_acl_eq', + dataType: 'SSCODELIST', + }, + { + name: 'n_line_eq', + prop: 'n_line_eq', + dataType: 'PICKUP', + }, + { + name: 'n_linename_like', + prop: 'n_linename_like', + dataType: 'PICKUPTEXT', + }, + { + name: 'n_linename_eq', + prop: 'n_linename_eq', + dataType: 'PICKUPTEXT', + }, + { + name: 'n_name_like', + prop: 'n_name_like', + dataType: 'TEXT', + }, + { name:'size', prop:'size' diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel-model.ts b/app_Web/src/widgets/product/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel-model.ts index 5c7cabcf9ef3224254678c1c82ba0e68de90a6e5..ad56d2c8619f52c2616401973599eccd9e96efab 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel-model.ts +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabexppanel-tabexppanel/main-tab-exp-viewtabexppanel-tabexppanel-model.ts @@ -72,6 +72,18 @@ export default class MainTabExpViewtabexppanelModel { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-base.vue b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-base.vue index 28cbcbf1622b533eebddae1fb4a13da3756222a5..9840233de74880ebaac079767a96628ad90bb6f2 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-base.vue +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-base.vue @@ -3,7 +3,7 @@ @@ -153,6 +153,14 @@ export default class MainTabExpViewtabviewpanelBase extends Vue implements Contr * @memberof MainTabExpViewtabviewpanel */ public isActivied: boolean = true; + + /** + * 视图面板过滤项 + * + * @type {string} + * @memberof MainTabExpViewtabviewpanel + */ + public navfilter: string = ""; /** * vue 生命周期 @@ -181,6 +189,21 @@ export default class MainTabExpViewtabviewpanelBase extends Vue implements Contr } } + /** + * 传入导航视图参数 + * + * @memberof MainTabExpViewtabviewpanel + */ + public getNavViewParams(){ + if(Object.is(this.navfilter,"")){ + return this.viewparams; + }else{ + let tempViewParams:any = JSON.parse(JSON.stringify(this.viewparams)); + Object.assign(tempViewParams,{[this.navfilter]:this.context['product']}); + return tempViewParams; + } + } + /** * 视图数据变化 * diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-model.ts b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-model.ts index f242c5b9e51db62dfd7ff3d4ba65757faabfa99b..20329f807e33ea687b3cc9e179826bd587ba7a5b 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-model.ts +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel-tabviewpanel/main-tab-exp-viewtabviewpanel-tabviewpanel-model.ts @@ -72,6 +72,18 @@ export default class MainTabExpViewtabviewpanelModel { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-base.vue b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-base.vue index b933efa05f54667254664f127e7897ddbe243f84..4daeb0e7bde2b41d306dc92371cd740d4079780c 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-base.vue +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-base.vue @@ -3,7 +3,7 @@ @@ -153,6 +153,14 @@ export default class MainTabExpViewtabviewpanel2Base extends Vue implements Cont * @memberof MainTabExpViewtabviewpanel2 */ public isActivied: boolean = true; + + /** + * 视图面板过滤项 + * + * @type {string} + * @memberof MainTabExpViewtabviewpanel2 + */ + public navfilter: string = ""; /** * vue 生命周期 @@ -181,6 +189,21 @@ export default class MainTabExpViewtabviewpanel2Base extends Vue implements Cont } } + /** + * 传入导航视图参数 + * + * @memberof MainTabExpViewtabviewpanel2 + */ + public getNavViewParams(){ + if(Object.is(this.navfilter,"")){ + return this.viewparams; + }else{ + let tempViewParams:any = JSON.parse(JSON.stringify(this.viewparams)); + Object.assign(tempViewParams,{[this.navfilter]:this.context['product']}); + return tempViewParams; + } + } + /** * 视图数据变化 * diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-model.ts b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-model.ts index 5ad92acbe5cbcef810cbbe10c5c2c36ab9d2fe4b..0a5e351a87c3daf7a07497384858bac7680913d9 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-model.ts +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel2-tabviewpanel/main-tab-exp-viewtabviewpanel2-tabviewpanel-model.ts @@ -72,6 +72,18 @@ export default class MainTabExpViewtabviewpanel2Model { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-base.vue b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-base.vue index e8a52b6c2c797e7f0e9c73fb14fdd155317dc03c..8d49b1e63566ad13444f3e15e79298b600b9100e 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-base.vue +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-base.vue @@ -3,7 +3,7 @@ @@ -153,6 +153,14 @@ export default class MainTabExpViewtabviewpanel3Base extends Vue implements Cont * @memberof MainTabExpViewtabviewpanel3 */ public isActivied: boolean = true; + + /** + * 视图面板过滤项 + * + * @type {string} + * @memberof MainTabExpViewtabviewpanel3 + */ + public navfilter: string = ""; /** * vue 生命周期 @@ -181,6 +189,21 @@ export default class MainTabExpViewtabviewpanel3Base extends Vue implements Cont } } + /** + * 传入导航视图参数 + * + * @memberof MainTabExpViewtabviewpanel3 + */ + public getNavViewParams(){ + if(Object.is(this.navfilter,"")){ + return this.viewparams; + }else{ + let tempViewParams:any = JSON.parse(JSON.stringify(this.viewparams)); + Object.assign(tempViewParams,{[this.navfilter]:this.context['product']}); + return tempViewParams; + } + } + /** * 视图数据变化 * diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-model.ts b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-model.ts index 865b0d53ad1be22934d342792d85d0dde55ad85c..5e7ec01956a2a8a26ef57d1a6ab3655ebba19c54 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-model.ts +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel3-tabviewpanel/main-tab-exp-viewtabviewpanel3-tabviewpanel-model.ts @@ -72,6 +72,18 @@ export default class MainTabExpViewtabviewpanel3Model { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-base.vue b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-base.vue index c7fc65173af4a0ed962d37d2b07961da4a6f5513..c54366ab79596fb3af91382f78fbc0d3f83a8199 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-base.vue +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-base.vue @@ -3,7 +3,7 @@ @@ -153,6 +153,14 @@ export default class MainTabExpViewtabviewpanel4Base extends Vue implements Cont * @memberof MainTabExpViewtabviewpanel4 */ public isActivied: boolean = true; + + /** + * 视图面板过滤项 + * + * @type {string} + * @memberof MainTabExpViewtabviewpanel4 + */ + public navfilter: string = ""; /** * vue 生命周期 @@ -181,6 +189,21 @@ export default class MainTabExpViewtabviewpanel4Base extends Vue implements Cont } } + /** + * 传入导航视图参数 + * + * @memberof MainTabExpViewtabviewpanel4 + */ + public getNavViewParams(){ + if(Object.is(this.navfilter,"")){ + return this.viewparams; + }else{ + let tempViewParams:any = JSON.parse(JSON.stringify(this.viewparams)); + Object.assign(tempViewParams,{[this.navfilter]:this.context['product']}); + return tempViewParams; + } + } + /** * 视图数据变化 * diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-model.ts b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-model.ts index cfaeafe24c83a43b5b4b7f5dc8d82b4c287bd4e5..5452e1d3d0d774ca53584f2436dd256cd00d3f63 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-model.ts +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel4-tabviewpanel/main-tab-exp-viewtabviewpanel4-tabviewpanel-model.ts @@ -72,6 +72,18 @@ export default class MainTabExpViewtabviewpanel4Model { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-base.vue b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-base.vue index 0d79170fa8b63dbfc9306433dc709635f439db8a..862b8e91a6de5606afe823f82a12b50db84d70bc 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-base.vue +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-base.vue @@ -3,7 +3,7 @@ @@ -153,6 +153,14 @@ export default class MainTabExpViewtabviewpanel5Base extends Vue implements Cont * @memberof MainTabExpViewtabviewpanel5 */ public isActivied: boolean = true; + + /** + * 视图面板过滤项 + * + * @type {string} + * @memberof MainTabExpViewtabviewpanel5 + */ + public navfilter: string = ""; /** * vue 生命周期 @@ -181,6 +189,21 @@ export default class MainTabExpViewtabviewpanel5Base extends Vue implements Cont } } + /** + * 传入导航视图参数 + * + * @memberof MainTabExpViewtabviewpanel5 + */ + public getNavViewParams(){ + if(Object.is(this.navfilter,"")){ + return this.viewparams; + }else{ + let tempViewParams:any = JSON.parse(JSON.stringify(this.viewparams)); + Object.assign(tempViewParams,{[this.navfilter]:this.context['product']}); + return tempViewParams; + } + } + /** * 视图数据变化 * diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-model.ts b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-model.ts index 3fecc84b10dfa2cf9d2204bb8a2ff8dae25be8ac..8a47eeb8175bc0ee6e7770cc5e10566f91cb5662 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-model.ts +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel5-tabviewpanel/main-tab-exp-viewtabviewpanel5-tabviewpanel-model.ts @@ -72,6 +72,18 @@ export default class MainTabExpViewtabviewpanel5Model { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel6-tabviewpanel/main-tab-exp-viewtabviewpanel6-tabviewpanel-base.vue b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel6-tabviewpanel/main-tab-exp-viewtabviewpanel6-tabviewpanel-base.vue index 81a7c47c7fbfa3d449d02b55b3dedcad2d8b936b..1451247269e2a3dc5961a0765a8be18a12a74a41 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel6-tabviewpanel/main-tab-exp-viewtabviewpanel6-tabviewpanel-base.vue +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel6-tabviewpanel/main-tab-exp-viewtabviewpanel6-tabviewpanel-base.vue @@ -3,7 +3,7 @@ @@ -153,6 +153,14 @@ export default class MainTabExpViewtabviewpanel6Base extends Vue implements Cont * @memberof MainTabExpViewtabviewpanel6 */ public isActivied: boolean = true; + + /** + * 视图面板过滤项 + * + * @type {string} + * @memberof MainTabExpViewtabviewpanel6 + */ + public navfilter: string = ""; /** * vue 生命周期 @@ -181,6 +189,21 @@ export default class MainTabExpViewtabviewpanel6Base extends Vue implements Cont } } + /** + * 传入导航视图参数 + * + * @memberof MainTabExpViewtabviewpanel6 + */ + public getNavViewParams(){ + if(Object.is(this.navfilter,"")){ + return this.viewparams; + }else{ + let tempViewParams:any = JSON.parse(JSON.stringify(this.viewparams)); + Object.assign(tempViewParams,{[this.navfilter]:this.context['product']}); + return tempViewParams; + } + } + /** * 视图数据变化 * diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel6-tabviewpanel/main-tab-exp-viewtabviewpanel6-tabviewpanel-model.ts b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel6-tabviewpanel/main-tab-exp-viewtabviewpanel6-tabviewpanel-model.ts index bd7b8d58deeab589558ac183d036b48ff4eca886..87918c264ca48a81e64766561ad6d96557e99d25 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel6-tabviewpanel/main-tab-exp-viewtabviewpanel6-tabviewpanel-model.ts +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel6-tabviewpanel/main-tab-exp-viewtabviewpanel6-tabviewpanel-model.ts @@ -72,6 +72,18 @@ export default class MainTabExpViewtabviewpanel6Model { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel7-tabviewpanel/main-tab-exp-viewtabviewpanel7-tabviewpanel-base.vue b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel7-tabviewpanel/main-tab-exp-viewtabviewpanel7-tabviewpanel-base.vue index 66fd8a450091f665affce9f9cd46faf5c51375d5..64e04b68f49a3b3eaa36bf400bccaf3b8cd637ac 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel7-tabviewpanel/main-tab-exp-viewtabviewpanel7-tabviewpanel-base.vue +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel7-tabviewpanel/main-tab-exp-viewtabviewpanel7-tabviewpanel-base.vue @@ -3,7 +3,7 @@ @@ -153,6 +153,14 @@ export default class MainTabExpViewtabviewpanel7Base extends Vue implements Cont * @memberof MainTabExpViewtabviewpanel7 */ public isActivied: boolean = true; + + /** + * 视图面板过滤项 + * + * @type {string} + * @memberof MainTabExpViewtabviewpanel7 + */ + public navfilter: string = ""; /** * vue 生命周期 @@ -181,6 +189,21 @@ export default class MainTabExpViewtabviewpanel7Base extends Vue implements Cont } } + /** + * 传入导航视图参数 + * + * @memberof MainTabExpViewtabviewpanel7 + */ + public getNavViewParams(){ + if(Object.is(this.navfilter,"")){ + return this.viewparams; + }else{ + let tempViewParams:any = JSON.parse(JSON.stringify(this.viewparams)); + Object.assign(tempViewParams,{[this.navfilter]:this.context['product']}); + return tempViewParams; + } + } + /** * 视图数据变化 * diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel7-tabviewpanel/main-tab-exp-viewtabviewpanel7-tabviewpanel-model.ts b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel7-tabviewpanel/main-tab-exp-viewtabviewpanel7-tabviewpanel-model.ts index 3560e951be39a84fc0d05bc64516fe05daf31ca2..be61db0bbad37b26cd142a0b9d8e46077fe1f95f 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel7-tabviewpanel/main-tab-exp-viewtabviewpanel7-tabviewpanel-model.ts +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel7-tabviewpanel/main-tab-exp-viewtabviewpanel7-tabviewpanel-model.ts @@ -72,6 +72,18 @@ export default class MainTabExpViewtabviewpanel7Model { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel8-tabviewpanel/main-tab-exp-viewtabviewpanel8-tabviewpanel-base.vue b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel8-tabviewpanel/main-tab-exp-viewtabviewpanel8-tabviewpanel-base.vue index 4f4471be6ee356d65c435b8e3119db67b757f2b4..872cf3cf144262c615d9b0ad3c7e974a4f074ebc 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel8-tabviewpanel/main-tab-exp-viewtabviewpanel8-tabviewpanel-base.vue +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel8-tabviewpanel/main-tab-exp-viewtabviewpanel8-tabviewpanel-base.vue @@ -3,7 +3,7 @@ @@ -153,6 +153,14 @@ export default class MainTabExpViewtabviewpanel8Base extends Vue implements Cont * @memberof MainTabExpViewtabviewpanel8 */ public isActivied: boolean = true; + + /** + * 视图面板过滤项 + * + * @type {string} + * @memberof MainTabExpViewtabviewpanel8 + */ + public navfilter: string = ""; /** * vue 生命周期 @@ -181,6 +189,21 @@ export default class MainTabExpViewtabviewpanel8Base extends Vue implements Cont } } + /** + * 传入导航视图参数 + * + * @memberof MainTabExpViewtabviewpanel8 + */ + public getNavViewParams(){ + if(Object.is(this.navfilter,"")){ + return this.viewparams; + }else{ + let tempViewParams:any = JSON.parse(JSON.stringify(this.viewparams)); + Object.assign(tempViewParams,{[this.navfilter]:this.context['product']}); + return tempViewParams; + } + } + /** * 视图数据变化 * diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel8-tabviewpanel/main-tab-exp-viewtabviewpanel8-tabviewpanel-model.ts b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel8-tabviewpanel/main-tab-exp-viewtabviewpanel8-tabviewpanel-model.ts index e2c692f1904341c1e462dab45136f22f3a72f9e0..ca7b9c357a35398a3b12429efd49943aaaadd9f9 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel8-tabviewpanel/main-tab-exp-viewtabviewpanel8-tabviewpanel-model.ts +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel8-tabviewpanel/main-tab-exp-viewtabviewpanel8-tabviewpanel-model.ts @@ -72,6 +72,18 @@ export default class MainTabExpViewtabviewpanel8Model { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel9-tabviewpanel/main-tab-exp-viewtabviewpanel9-tabviewpanel-base.vue b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel9-tabviewpanel/main-tab-exp-viewtabviewpanel9-tabviewpanel-base.vue index bf7999ad92781df847b229a957a44372b5641e13..322b103f68e6b76eed0fdb94a7b69e4c19167e8e 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel9-tabviewpanel/main-tab-exp-viewtabviewpanel9-tabviewpanel-base.vue +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel9-tabviewpanel/main-tab-exp-viewtabviewpanel9-tabviewpanel-base.vue @@ -3,7 +3,7 @@ @@ -153,6 +153,14 @@ export default class MainTabExpViewtabviewpanel9Base extends Vue implements Cont * @memberof MainTabExpViewtabviewpanel9 */ public isActivied: boolean = true; + + /** + * 视图面板过滤项 + * + * @type {string} + * @memberof MainTabExpViewtabviewpanel9 + */ + public navfilter: string = ""; /** * vue 生命周期 @@ -181,6 +189,21 @@ export default class MainTabExpViewtabviewpanel9Base extends Vue implements Cont } } + /** + * 传入导航视图参数 + * + * @memberof MainTabExpViewtabviewpanel9 + */ + public getNavViewParams(){ + if(Object.is(this.navfilter,"")){ + return this.viewparams; + }else{ + let tempViewParams:any = JSON.parse(JSON.stringify(this.viewparams)); + Object.assign(tempViewParams,{[this.navfilter]:this.context['product']}); + return tempViewParams; + } + } + /** * 视图数据变化 * diff --git a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel9-tabviewpanel/main-tab-exp-viewtabviewpanel9-tabviewpanel-model.ts b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel9-tabviewpanel/main-tab-exp-viewtabviewpanel9-tabviewpanel-model.ts index b5bc415c48a1e7a2bdc20003cc873b6fd246de44..aefc307fcdada39d2b910173110721fad19634e0 100644 --- a/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel9-tabviewpanel/main-tab-exp-viewtabviewpanel9-tabviewpanel-model.ts +++ b/app_Web/src/widgets/product/main-tab-exp-viewtabviewpanel9-tabviewpanel/main-tab-exp-viewtabviewpanel9-tabviewpanel-model.ts @@ -72,6 +72,18 @@ export default class MainTabExpViewtabviewpanel9Model { { name: 'line', }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, ] } diff --git a/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.vue b/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..7460500de35f1d4287dc034f72bf72b2bc5b57f5 --- /dev/null +++ b/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-base.vue @@ -0,0 +1,308 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts b/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..db2f8a177333324e3c41be1906ad756fa52ccdc6 --- /dev/null +++ b/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-model.ts @@ -0,0 +1,91 @@ +/** + * PickupViewpickupviewpanel 部件模型 + * + * @export + * @class PickupViewpickupviewpanelModel + */ +export default class PickupViewpickupviewpanelModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof PickupViewpickupviewpanelModel + */ + public getDataItems(): any[] { + return [ + { + name: 'qd', + }, + { + name: 'acl', + }, + { + name: 'name', + }, + { + name: 'product', + prop: 'id', + }, + { + name: 'deleted', + }, + { + name: 'whitelist', + }, + { + name: 'rd', + }, + { + name: 'order', + }, + { + name: 'type', + }, + { + name: 'po', + }, + { + name: 'desc', + }, + { + name: 'status', + }, + { + name: 'createdby', + }, + { + name: 'createdversion', + }, + { + name: 'substatus', + }, + { + name: 'code', + }, + { + name: 'createddate', + }, + { + name: 'linename', + }, + { + name: 'line', + }, + { + name: 'activebugcnt', + }, + { + name: 'productplancnt', + }, + { + name: 'releasecnt', + }, + { + name: 'activestorycnt', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts b/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..40156edd46744784954df27bebabf678443c5e70 --- /dev/null +++ b/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * PickupViewpickupviewpanel 部件服务对象 + * + * @export + * @class PickupViewpickupviewpanelService + */ +export default class PickupViewpickupviewpanelService extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less b/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less new file mode 100644 index 0000000000000000000000000000000000000000..76f5b384c21640f0691f606753bace1bdebc141f --- /dev/null +++ b/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.less @@ -0,0 +1,4 @@ +// this is less +.pickupviewpanel{ + width: 100%; +} \ No newline at end of file diff --git a/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue b/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue new file mode 100644 index 0000000000000000000000000000000000000000..f1ae9f7113fd2eb7a6ea29bb9b3ac285a9f6ddae --- /dev/null +++ b/app_Web/src/widgets/product/pickup-viewpickupviewpanel-pickupviewpanel/pickup-viewpickupviewpanel-pickupviewpanel.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/product/product-exp-view-portlet/product-exp-view-portlet-base.vue b/app_Web/src/widgets/product/product-exp-view-portlet/product-exp-view-portlet-base.vue index 6ea2f7b24e14901582c4cfac63f1c58b1d5c864e..0ff658d25475a25ce96fce0e7888651cc1138d0d 100644 --- a/app_Web/src/widgets/product/product-exp-view-portlet/product-exp-view-portlet-base.vue +++ b/app_Web/src/widgets/product/product-exp-view-portlet/product-exp-view-portlet-base.vue @@ -1,5 +1,5 @@ @@ -1133,6 +1135,14 @@ export default class Main3Base extends Vue implements ControlInterface { textSeparator: '、', valueSeparator: ',', }, + { + name: 'assignedto', + srfkey: 'UserRealName', + codelistType : 'DYNAMIC', + textSeparator: ',', + renderMode: 'string', + valueSeparator: ",", + }, { name: 'status', srfkey: 'Story__status', diff --git a/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form-base.vue b/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..cf1db5ced5c78e2efb6a3e4502ce05ea84e94631 --- /dev/null +++ b/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form-base.vue @@ -0,0 +1,1762 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form-model.ts b/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..ef8b216699f4f335e352b67105a94249f9790390 --- /dev/null +++ b/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form-model.ts @@ -0,0 +1,100 @@ +/** + * StorySpec_EditMode 部件模型 + * + * @export + * @class StorySpec_EditModeModel + */ +export default class StorySpec_EditModeModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof StorySpec_EditModeModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'title', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'version', + prop: 'version', + dataType: 'INT', + }, + { + name: 'reviewedby', + prop: 'reviewedby', + dataType: 'TEXT', + }, + { + name: 'notreview', + }, + { + name: 'title', + prop: 'title', + dataType: 'TEXT', + }, + { + name: 'verify', + prop: 'verify', + dataType: 'TEXT', + }, + { + name: 'spec', + prop: 'spec', + dataType: 'TEXT', + }, + { + name: 'comment', + }, + { + name: 'files', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'story', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form-service.ts b/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..f6c95779428fd296f0d93cf7a11f21e31c2d7ff6 --- /dev/null +++ b/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form-service.ts @@ -0,0 +1,371 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import StoryService from '@/service/story/story-service'; +import StorySpec_EditModeModel from './story-spec-edit-mode-form-model'; + + +/** + * StorySpec_EditMode 部件服务对象 + * + * @export + * @class StorySpec_EditModeService + */ +export default class StorySpec_EditModeService extends ControlService { + + /** + * 需求服务对象 + * + * @type {StoryService} + * @memberof StorySpec_EditModeService + */ + public appEntityService: StoryService = new StoryService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof StorySpec_EditModeService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of StorySpec_EditModeService. + * + * @param {*} [opts={}] + * @memberof StorySpec_EditModeService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new StorySpec_EditModeModel(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof StorySpec_EditModeService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StorySpec_EditModeService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof StorySpec_EditModeService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof StorySpec_EditModeService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StorySpec_EditModeService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StorySpec_EditModeService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StorySpec_EditModeService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StorySpec_EditModeService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StorySpec_EditModeService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.story = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StorySpec_EditModeService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof StorySpec_EditModeService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form.less b/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form.vue b/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..a0c8e44af85c0db665ce1fa49135099bdbd09333 --- /dev/null +++ b/app_Web/src/widgets/story/story-spec-edit-mode-form/story-spec-edit-mode-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/story/story-spec-form/story-spec-form-base.vue b/app_Web/src/widgets/story/story-spec-form/story-spec-form-base.vue index eca25b84ef433184679552b443724a25fee1f817..fcf596292133d86a2e0acccd8d2b598471ab0044 100644 --- a/app_Web/src/widgets/story/story-spec-form/story-spec-form-base.vue +++ b/app_Web/src/widgets/story/story-spec-form/story-spec-form-base.vue @@ -9,18 +9,33 @@ +:value="data.version" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style="width:70px;"> - - + + + + + - - + + + + + + + + + + @@ -29,6 +44,11 @@ + + + + + +:value="data.parentname" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> @@ -278,7 +282,7 @@ export default class MainSubPlanBase extends Vue implements ControlInterface { } } /** - * 关闭 + * 返回 * * @param {any[]} args 当前数据 * @param {any} contextJO 行为附加上下文 diff --git a/app_Web/src/widgets/sub-product-plan/main-sub-plan-grid/main-sub-plan-grid-base.vue b/app_Web/src/widgets/sub-product-plan/main-sub-plan-grid/main-sub-plan-grid-base.vue index a0a119aebc627106bbfdc101cd1c0ed3ee401154..8297c0e0d67fd254ebe45155f546573c7d2c112e 100644 --- a/app_Web/src/widgets/sub-product-plan/main-sub-plan-grid/main-sub-plan-grid-base.vue +++ b/app_Web/src/widgets/sub-product-plan/main-sub-plan-grid/main-sub-plan-grid-base.vue @@ -1201,7 +1201,7 @@ export default class MainSubPlanBase extends Vue implements ControlInterface { } // 已选中则删除,没选中则添加 let selectIndex = this.selections.findIndex((item:any)=>{ - return Object.is(item.zt_productplan,$event.zt_productplan); + return Object.is(item.ibz_subproductplan,$event.ibz_subproductplan); }); if (Object.is(selectIndex,-1)){ this.selections.push(JSON.parse(JSON.stringify($event))); @@ -1317,7 +1317,7 @@ export default class MainSubPlanBase extends Vue implements ControlInterface { * @memberof MainSubPlan */ public setColState() { - const _data: any = localStorage.getItem('zt_productplan_mainsubplan_grid'); + const _data: any = localStorage.getItem('ibz_subproductplan_mainsubplan_grid'); if (_data) { let columns = JSON.parse(_data); columns.forEach((col: any) => { @@ -1335,7 +1335,7 @@ export default class MainSubPlanBase extends Vue implements ControlInterface { * @memberof MainSubPlan */ public onColChange() { - localStorage.setItem('zt_productplan_mainsubplan_grid', JSON.stringify(this.allColumns)); + localStorage.setItem('ibz_subproductplan_mainsubplan_grid', JSON.stringify(this.allColumns)); } /** diff --git a/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid-base.vue b/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..7ce36d1ea9d64bbddca498494fd4d55f538a6d50 --- /dev/null +++ b/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid-base.vue @@ -0,0 +1,1709 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid-model.ts b/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..81b4644f19591eea429cd2d82e2da23681284e94 --- /dev/null +++ b/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid-model.ts @@ -0,0 +1,153 @@ +/** + * SubTaskNew 部件模型 + * + * @export + * @class SubTaskNewModel + */ +export default class SubTaskNewModel { + + /** + * 是否是实体数据导出 + * + * @returns {any[]} + * @memberof SubTaskNewGridMode + */ + public isDEExport: boolean = false; + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof SubTaskNewGridMode + */ + public getDataItems(): any[] { + if(this.isDEExport){ + return [ + ] + }else{ + return [ + { + name: 'module', + prop: 'module', + dataType: 'PICKUP', + }, + { + name: 'desc', + prop: 'desc', + dataType: 'LONGTEXT', + }, + { + name: 'frombug', + prop: 'frombug', + dataType: 'PICKUP', + }, + { + name: 'parent', + prop: 'parent', + dataType: 'PICKUP', + }, + { + name: 'storyname', + prop: 'storyname', + dataType: 'PICKUPTEXT', + }, + { + name: 'type', + prop: 'type', + dataType: 'SSCODELIST', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srfdataaccaction', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'assignedto_text', + prop: 'assignedto', + dataType: 'TEXT', + }, + { + name: 'modulename', + prop: 'modulename', + dataType: 'PICKUPTEXT', + }, + { + name: 'assignedto', + prop: 'assignedto', + dataType: 'TEXT', + }, + { + name: 'story', + prop: 'story', + dataType: 'PICKUP', + }, + { + name: 'project', + prop: 'project', + dataType: 'PICKUP', + }, + { + name: 'pri', + prop: 'pri', + dataType: 'NSCODELIST', + }, + { + name: 'name', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'left', + prop: 'left', + dataType: 'FLOAT', + }, + { + name: 'task', + prop: 'id', + dataType: 'FONTKEY', + }, + { + name: 'subtask', + prop: 'id', + }, + { + name:'size', + prop:'size' + }, + { + name:'query', + prop:'query' + }, + { + name:'page', + prop:'page' + }, + { + name:'sort', + prop:'sort' + }, + { + name:'srfparentdata', + prop:'srfparentdata' + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + ] + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid-service.ts b/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..f75a174bcdcfd11b06b10de69aafeefccd1bca2e --- /dev/null +++ b/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid-service.ts @@ -0,0 +1,318 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import SubTaskService from '@/service/sub-task/sub-task-service'; +import SubTaskNewModel from './sub-task-new-grid-model'; + + +/** + * SubTaskNew 部件服务对象 + * + * @export + * @class SubTaskNewService + */ +export default class SubTaskNewService extends ControlService { + + /** + * 任务服务对象 + * + * @type {SubTaskService} + * @memberof SubTaskNewService + */ + public appEntityService: SubTaskService = new SubTaskService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof SubTaskNewService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of SubTaskNewService. + * + * @param {*} [opts={}] + * @memberof SubTaskNewService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new SubTaskNewModel(); + } + + + /** + * 处理数据 + * + * @public + * @param {Promise} promise + * @returns {Promise} + * @memberof SubTaskNewService + */ + public doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Data,Context,isloading); + }else{ + result =_appEntityService.Update(Data,Context,isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 获取数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public get(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:0}); + } + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public search(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.FetchDefault(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public loadDraft(action: string, context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:'0'}); + //仿真主键数据 + response.data.id = Util.createUUID(); + } + this.handleResponse(action, response, true); + this.mergeDefaults(response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 合并配置的默认值 + * @param {*} + * @memberof SubTaskNewService + */ + public mergeDefaults(response:any = {}){ + if(response.data){ + } + } + + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid.less b/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid.less new file mode 100644 index 0000000000000000000000000000000000000000..6a7da728b17882d2231f0b993dbbfc09610c58fb --- /dev/null +++ b/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid.less @@ -0,0 +1,4 @@ +.grid { + --grid: 0; +} +// this is less diff --git a/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid.vue b/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid.vue new file mode 100644 index 0000000000000000000000000000000000000000..90e6be2ee72dc421899200a788ae69dfbbc9c198 --- /dev/null +++ b/app_Web/src/widgets/sub-task/sub-task-new-grid/sub-task-new-grid.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/task/assign-form-form/assign-form-form-base.vue b/app_Web/src/widgets/task/assign-form-form/assign-form-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..1bd59f3c1f10ab452eb7cc2859a2aa895c30e1bb --- /dev/null +++ b/app_Web/src/widgets/task/assign-form-form/assign-form-form-base.vue @@ -0,0 +1,1649 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/task/assign-form-form/assign-form-form-model.ts b/app_Web/src/widgets/task/assign-form-form/assign-form-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..24d76fafcf4aa434730326cf41b4fdd56f19a1fb --- /dev/null +++ b/app_Web/src/widgets/task/assign-form-form/assign-form-form-model.ts @@ -0,0 +1,84 @@ +/** + * AssignForm 部件模型 + * + * @export + * @class AssignFormModel + */ +export default class AssignFormModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof AssignFormModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srfupdatedate', + prop: 'lastediteddate', + dataType: 'DATETIME', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'assignedto', + prop: 'assignedto', + dataType: 'TEXT', + }, + { + name: 'left', + prop: 'left', + dataType: 'FLOAT', + }, + { + name: 'formitem', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'task', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/assign-form-form/assign-form-form-service.ts b/app_Web/src/widgets/task/assign-form-form/assign-form-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..c0e7e5776e32d4b73c31349885d924c126e1ac8a --- /dev/null +++ b/app_Web/src/widgets/task/assign-form-form/assign-form-form-service.ts @@ -0,0 +1,371 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import TaskService from '@/service/task/task-service'; +import AssignFormModel from './assign-form-form-model'; + + +/** + * AssignForm 部件服务对象 + * + * @export + * @class AssignFormService + */ +export default class AssignFormService extends ControlService { + + /** + * 任务服务对象 + * + * @type {TaskService} + * @memberof AssignFormService + */ + public appEntityService: TaskService = new TaskService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof AssignFormService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of AssignFormService. + * + * @param {*} [opts={}] + * @memberof AssignFormService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new AssignFormModel(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof AssignFormService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof AssignFormService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof AssignFormService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof AssignFormService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof AssignFormService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof AssignFormService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof AssignFormService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof AssignFormService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof AssignFormService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.task = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof AssignFormService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof AssignFormService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/assign-form-form/assign-form-form.less b/app_Web/src/widgets/task/assign-form-form/assign-form-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/task/assign-form-form/assign-form-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/task/assign-form-form/assign-form-form.vue b/app_Web/src/widgets/task/assign-form-form/assign-form-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..3542fb2b20a4c07b117756ee35405f075f58a246 --- /dev/null +++ b/app_Web/src/widgets/task/assign-form-form/assign-form-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form-base.vue b/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..1a3a68751db0468a4f929127732f2b8c75eaa6e0 --- /dev/null +++ b/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form-base.vue @@ -0,0 +1,1583 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form-model.ts b/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..2ae600c479bd91336bf8327701c4b4ff5324ba2a --- /dev/null +++ b/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form-model.ts @@ -0,0 +1,74 @@ +/** + * ClosePauseCancelForm 部件模型 + * + * @export + * @class ClosePauseCancelFormModel + */ +export default class ClosePauseCancelFormModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof ClosePauseCancelFormModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srfupdatedate', + prop: 'lastediteddate', + dataType: 'DATETIME', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'formitem', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'task', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form-service.ts b/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..a8085baf6b00d820741e12a56a9a68a039315b3d --- /dev/null +++ b/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form-service.ts @@ -0,0 +1,371 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import TaskService from '@/service/task/task-service'; +import ClosePauseCancelFormModel from './close-pause-cancel-form-form-model'; + + +/** + * ClosePauseCancelForm 部件服务对象 + * + * @export + * @class ClosePauseCancelFormService + */ +export default class ClosePauseCancelFormService extends ControlService { + + /** + * 任务服务对象 + * + * @type {TaskService} + * @memberof ClosePauseCancelFormService + */ + public appEntityService: TaskService = new TaskService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof ClosePauseCancelFormService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of ClosePauseCancelFormService. + * + * @param {*} [opts={}] + * @memberof ClosePauseCancelFormService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new ClosePauseCancelFormModel(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof ClosePauseCancelFormService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof ClosePauseCancelFormService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof ClosePauseCancelFormService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof ClosePauseCancelFormService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof ClosePauseCancelFormService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof ClosePauseCancelFormService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof ClosePauseCancelFormService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof ClosePauseCancelFormService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof ClosePauseCancelFormService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.task = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof ClosePauseCancelFormService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof ClosePauseCancelFormService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form.less b/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form.vue b/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..4dee361e45e0c5a6b5f923bae8c322bb9a27a4cf --- /dev/null +++ b/app_Web/src/widgets/task/close-pause-cancel-form-form/close-pause-cancel-form-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/task/complete-form-form/complete-form-form-base.vue b/app_Web/src/widgets/task/complete-form-form/complete-form-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..73b11980996f601f5d17baccafb9881a4ebc8742 --- /dev/null +++ b/app_Web/src/widgets/task/complete-form-form/complete-form-form-base.vue @@ -0,0 +1,1761 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/task/complete-form-form/complete-form-form-model.ts b/app_Web/src/widgets/task/complete-form-form/complete-form-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..6f4c7d60f8794d3e5e2a05058b7c9a72a2d3be80 --- /dev/null +++ b/app_Web/src/widgets/task/complete-form-form/complete-form-form-model.ts @@ -0,0 +1,100 @@ +/** + * CompleteForm 部件模型 + * + * @export + * @class CompleteFormModel + */ +export default class CompleteFormModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof CompleteFormModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srfupdatedate', + prop: 'lastediteddate', + dataType: 'DATETIME', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'consumed', + prop: 'consumed', + dataType: 'FLOAT', + }, + { + name: 'consumption', + }, + { + name: 'consumed2', + prop: 'consumed', + dataType: 'FLOAT', + }, + { + name: 'assignedto', + prop: 'assignedto', + dataType: 'TEXT', + }, + { + name: 'finisheddate', + prop: 'finisheddate', + dataType: 'DATETIME', + }, + { + name: 'formitem', + }, + { + name: 'formitem1', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'task', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/complete-form-form/complete-form-form-service.ts b/app_Web/src/widgets/task/complete-form-form/complete-form-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..ff10090100c3e7b870948e1cfccf9a87a55872f1 --- /dev/null +++ b/app_Web/src/widgets/task/complete-form-form/complete-form-form-service.ts @@ -0,0 +1,371 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import TaskService from '@/service/task/task-service'; +import CompleteFormModel from './complete-form-form-model'; + + +/** + * CompleteForm 部件服务对象 + * + * @export + * @class CompleteFormService + */ +export default class CompleteFormService extends ControlService { + + /** + * 任务服务对象 + * + * @type {TaskService} + * @memberof CompleteFormService + */ + public appEntityService: TaskService = new TaskService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof CompleteFormService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of CompleteFormService. + * + * @param {*} [opts={}] + * @memberof CompleteFormService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new CompleteFormModel(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof CompleteFormService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof CompleteFormService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof CompleteFormService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof CompleteFormService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof CompleteFormService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof CompleteFormService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof CompleteFormService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof CompleteFormService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof CompleteFormService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.task = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof CompleteFormService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof CompleteFormService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/complete-form-form/complete-form-form.less b/app_Web/src/widgets/task/complete-form-form/complete-form-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/task/complete-form-form/complete-form-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/task/complete-form-form/complete-form-form.vue b/app_Web/src/widgets/task/complete-form-form/complete-form-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..3e0c89289a92fe8a7db06d358266f7e8b9100f82 --- /dev/null +++ b/app_Web/src/widgets/task/complete-form-form/complete-form-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/task/main-dashboard-viewdashboard-container2-portlet/main-dashboard-viewdashboard-container2-portlet-base.vue b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container2-portlet/main-dashboard-viewdashboard-container2-portlet-base.vue index 5859215b069a82ac8bd4227d54529b2694c98320..83f3402f69972bafbd1231c58027ae46570704f0 100644 --- a/app_Web/src/widgets/task/main-dashboard-viewdashboard-container2-portlet/main-dashboard-viewdashboard-container2-portlet-base.vue +++ b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container2-portlet/main-dashboard-viewdashboard-container2-portlet-base.vue @@ -26,14 +26,14 @@
- - +
diff --git a/app_Web/src/widgets/task/main-dashboard-viewdashboard-container2-portlet/main-dashboard-viewdashboard-container2-portlet.vue b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container2-portlet/main-dashboard-viewdashboard-container2-portlet.vue index 8a5868b2d3e6f4a767841c7d89bb064145ee216c..354f6162e95060de1716635562b97a6437ce3f39 100644 --- a/app_Web/src/widgets/task/main-dashboard-viewdashboard-container2-portlet/main-dashboard-viewdashboard-container2-portlet.vue +++ b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container2-portlet/main-dashboard-viewdashboard-container2-portlet.vue @@ -5,13 +5,13 @@ import TaskMainDashboardViewdashboard_container2Base from './main-dashboard-view import view_dashboard_sysportlet1 from '@/widgets/task/main-detail-portlet/main-detail-portlet.vue'; import view_dashboard_sysportlet4 from '@/widgets/action/action-history-portlet/action-history-portlet.vue'; -import view_dashboard_sysportlet2 from '@/widgets/task/toolbar-portlet/toolbar-portlet.vue'; +import view_dashboard_container4 from '@/widgets/task/main-dashboard-viewdashboard-container4-portlet/main-dashboard-viewdashboard-container4-portlet.vue'; @Component({ components: { view_dashboard_sysportlet1, view_dashboard_sysportlet4, -view_dashboard_sysportlet2, +view_dashboard_container4, } }) diff --git a/app_Web/src/widgets/task/main-dashboard-viewdashboard-container3-portlet/main-dashboard-viewdashboard-container3-portlet-base.vue b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container3-portlet/main-dashboard-viewdashboard-container3-portlet-base.vue index 930e457d73948eac1a85c19cc7147d4120340274..e093b80e0307452ee4628616e6cde87df816e1bd 100644 --- a/app_Web/src/widgets/task/main-dashboard-viewdashboard-container3-portlet/main-dashboard-viewdashboard-container3-portlet-base.vue +++ b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container3-portlet/main-dashboard-viewdashboard-container3-portlet-base.vue @@ -12,6 +12,18 @@ + +
+ + +
+
+ + \ No newline at end of file diff --git a/app_Web/src/widgets/task/main-dashboard-viewdashboard-container4-portlet/main-dashboard-viewdashboard-container4-portlet-model.ts b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container4-portlet/main-dashboard-viewdashboard-container4-portlet-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..52dac81cca81e9197ed373c213990b343a3121ef --- /dev/null +++ b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container4-portlet/main-dashboard-viewdashboard-container4-portlet-model.ts @@ -0,0 +1,151 @@ +/** + * MainDashboardViewdashboard_container4 部件模型 + * + * @export + * @class MainDashboardViewdashboard_container4Model + */ +export default class MainDashboardViewdashboard_container4Model { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainDashboardViewdashboard_container4Model + */ + public getDataItems(): any[] { + return [ + { + name: 'canceledby', + }, + { + name: 'left', + }, + { + name: 'openeddate', + }, + { + name: 'color', + }, + { + name: 'task', + prop: 'id', + }, + { + name: 'finishedby', + }, + { + name: 'finishedlist', + }, + { + name: 'realstarted', + }, + { + name: 'closedby', + }, + { + name: 'substatus', + }, + { + name: 'closedreason', + }, + { + name: 'lastediteddate', + }, + { + name: 'assigneddate', + }, + { + name: 'pri', + }, + { + name: 'lasteditedby', + }, + { + name: 'status', + }, + { + name: 'name', + }, + { + name: 'closeddate', + }, + { + name: 'type', + }, + { + name: 'assignedto', + }, + { + name: 'desc', + }, + { + name: 'eststarted', + }, + { + name: 'deadline', + }, + { + name: 'deleted', + }, + { + name: 'mailto', + }, + { + name: 'consumed', + }, + { + name: 'estimate', + }, + { + name: 'openedby', + }, + { + name: 'canceleddate', + }, + { + name: 'finisheddate', + }, + { + name: 'modulename', + }, + { + name: 'storyname', + }, + { + name: 'projectname', + }, + { + name: 'product', + }, + { + name: 'storyversion', + }, + { + name: 'productname', + }, + { + name: 'parentname', + }, + { + name: 'project', + }, + { + name: 'module', + }, + { + name: 'story', + }, + { + name: 'parent', + }, + { + name: 'frombug', + }, + { + name: 'duration', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/main-dashboard-viewdashboard-container4-portlet/main-dashboard-viewdashboard-container4-portlet-service.ts b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container4-portlet/main-dashboard-viewdashboard-container4-portlet-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..10edad2d2787f95783804da75136e8099f66634c --- /dev/null +++ b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container4-portlet/main-dashboard-viewdashboard-container4-portlet-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * MainDashboardViewdashboard_container4 部件服务对象 + * + * @export + * @class MainDashboardViewdashboard_container4Service + */ +export default class MainDashboardViewdashboard_container4Service extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/main-dashboard-viewdashboard-container4-portlet/main-dashboard-viewdashboard-container4-portlet.less b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container4-portlet/main-dashboard-viewdashboard-container4-portlet.less new file mode 100644 index 0000000000000000000000000000000000000000..79fe0e3e9e4f43d98d8b98f5d0e7f1283e0fe7fc --- /dev/null +++ b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container4-portlet/main-dashboard-viewdashboard-container4-portlet.less @@ -0,0 +1,4 @@ +.portlet { + --portlet: 0px; +} +// this is less diff --git a/app_Web/src/widgets/task/main-dashboard-viewdashboard-container4-portlet/main-dashboard-viewdashboard-container4-portlet.vue b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container4-portlet/main-dashboard-viewdashboard-container4-portlet.vue new file mode 100644 index 0000000000000000000000000000000000000000..9e6017f4fb881c1d45428cd34c26e7b4b1b01741 --- /dev/null +++ b/app_Web/src/widgets/task/main-dashboard-viewdashboard-container4-portlet/main-dashboard-viewdashboard-container4-portlet.vue @@ -0,0 +1,17 @@ + + \ No newline at end of file diff --git a/app_Web/src/widgets/task/main-dashboard/main-dashboard-base.vue b/app_Web/src/widgets/task/main-dashboard/main-dashboard-base.vue index 661df65cd9d3784c484495ab1562e6847c1d92a4..028a79d20ddf096a85b44a1cef230999f3761890 100644 --- a/app_Web/src/widgets/task/main-dashboard/main-dashboard-base.vue +++ b/app_Web/src/widgets/task/main-dashboard/main-dashboard-base.vue @@ -309,7 +309,7 @@ export default class MainBase extends Vue implements ControlInterface { public loadModel(){ if(this.isEnableCustomized){ this.utilService.getService(this.utilServiceName).then((service:any) =>{ - service.loadModelData(JSON.parse(JSON.stringify(this.context)),{modelid:this.modelId}).then((res:any) =>{ + service.loadModelData(JSON.parse(JSON.stringify(this.context)),{modelid:this.modelId,utilServiceName:this.utilServiceName}).then((res:any) =>{ if(res && res.status == 200){ const data:any = res.data; if(data && data.length >0){ diff --git a/app_Web/src/widgets/task/main-dashboard/main-dashboard.less b/app_Web/src/widgets/task/main-dashboard/main-dashboard.less index 5de8b00b879d5b4ec83486e385f889ea75bc9964..c52d33bd9e92a715d916339abc8e5b83af4f0698 100644 --- a/app_Web/src/widgets/task/main-dashboard/main-dashboard.less +++ b/app_Web/src/widgets/task/main-dashboard/main-dashboard.less @@ -2,3 +2,26 @@ --dashboard: 0px; } // this is less +.studio-view.view-container.deportalview { + + .portlet-container.dashboard-footer-button-wrapper { + display: flex; + justify-content: center; + + >div { + display: unset; + width: auto; + + >.portlet-without-title { + + >.portlet { + + >.portlet-without-title { + padding: 0px; + border: 0; + } + } + } + } + } +} diff --git a/app_Web/src/widgets/task/main-dashboard/main-dashboard.vue b/app_Web/src/widgets/task/main-dashboard/main-dashboard.vue index 53a00c4d90f14b0a72929d91f04d257c8df8a8f8..8557ec07912094158f8f98ad33172f8f57b974d0 100644 --- a/app_Web/src/widgets/task/main-dashboard/main-dashboard.vue +++ b/app_Web/src/widgets/task/main-dashboard/main-dashboard.vue @@ -1,10 +1,12 @@ + + \ No newline at end of file diff --git a/app_Web/src/widgets/task/main-edit-form/main-edit-form-model.ts b/app_Web/src/widgets/task/main-edit-form/main-edit-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..cf83fdc409a1b4a6936988faa117e82d6e03ead2 --- /dev/null +++ b/app_Web/src/widgets/task/main-edit-form/main-edit-form-model.ts @@ -0,0 +1,212 @@ +/** + * MainEdit 部件模型 + * + * @export + * @class MainEditModel + */ +export default class MainEditModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainEditModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srfupdatedate', + prop: 'lastediteddate', + dataType: 'DATETIME', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'name', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'desc', + prop: 'desc', + dataType: 'LONGTEXT', + }, + { + name: 'desc1', + }, + { + name: 'formitem', + }, + { + name: 'projectname', + prop: 'projectname', + dataType: 'PICKUPTEXT', + }, + { + name: 'project', + prop: 'project', + dataType: 'PICKUP', + }, + { + name: 'modulename', + prop: 'modulename', + dataType: 'PICKUPTEXT', + }, + { + name: 'module', + prop: 'module', + dataType: 'PICKUP', + }, + { + name: 'storyname', + prop: 'storyname', + dataType: 'PICKUPTEXT', + }, + { + name: 'story', + prop: 'story', + dataType: 'PICKUP', + }, + { + name: 'parentname', + prop: 'parentname', + dataType: 'PICKUPTEXT', + }, + { + name: 'parent', + prop: 'parent', + dataType: 'PICKUP', + }, + { + name: 'assignedto', + prop: 'assignedto', + dataType: 'TEXT', + }, + { + name: 'type', + prop: 'type', + dataType: 'SSCODELIST', + }, + { + name: 'status', + prop: 'status', + dataType: 'SSCODELIST', + }, + { + name: 'eststarted', + prop: 'eststarted', + dataType: 'DATE', + }, + { + name: 'deadline', + prop: 'deadline', + dataType: 'DATE', + }, + { + name: 'estimate', + prop: 'estimate', + dataType: 'FLOAT', + }, + { + name: 'consumed', + prop: 'consumed', + dataType: 'FLOAT', + }, + { + name: 'left', + prop: 'left', + dataType: 'FLOAT', + }, + { + name: 'openedby', + prop: 'openedby', + dataType: 'TEXT', + }, + { + name: 'realstarted', + prop: 'realstarted', + dataType: 'DATE', + }, + { + name: 'finishedby', + prop: 'finishedby', + dataType: 'TEXT', + }, + { + name: 'finisheddate', + prop: 'finisheddate', + dataType: 'DATETIME', + }, + { + name: 'canceledby', + prop: 'canceledby', + dataType: 'TEXT', + }, + { + name: 'canceleddate', + prop: 'canceleddate', + dataType: 'DATETIME', + }, + { + name: 'closedby', + prop: 'closedby', + dataType: 'TEXT', + }, + { + name: 'closedreason', + prop: 'closedreason', + dataType: 'SSCODELIST', + }, + { + name: 'closeddate', + prop: 'closeddate', + dataType: 'DATETIME', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'task', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/main-edit-form/main-edit-form-service.ts b/app_Web/src/widgets/task/main-edit-form/main-edit-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..f959de98c0fce4832e46652262d2eb1a0bf3cf2c --- /dev/null +++ b/app_Web/src/widgets/task/main-edit-form/main-edit-form-service.ts @@ -0,0 +1,410 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import TaskService from '@/service/task/task-service'; +import MainEditModel from './main-edit-form-model'; +import ProjectService from '@/service/project/project-service'; +import ModuleService from '@/service/module/module-service'; +import StoryService from '@/service/story/story-service'; + + +/** + * MainEdit 部件服务对象 + * + * @export + * @class MainEditService + */ +export default class MainEditService extends ControlService { + + /** + * 任务服务对象 + * + * @type {TaskService} + * @memberof MainEditService + */ + public appEntityService: TaskService = new TaskService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof MainEditService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of MainEditService. + * + * @param {*} [opts={}] + * @memberof MainEditService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new MainEditModel(); + } + + /** + * 项目服务对象 + * + * @type {ProjectService} + * @memberof MainEditService + */ + public projectService: ProjectService = new ProjectService(); + + /** + * 模块服务对象 + * + * @type {ModuleService} + * @memberof MainEditService + */ + public moduleService: ModuleService = new ModuleService(); + + /** + * 需求服务对象 + * + * @type {StoryService} + * @memberof MainEditService + */ + public storyService: StoryService = new StoryService(); + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof MainEditService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + if (Object.is(serviceName, 'ProjectService') && Object.is(interfaceName, 'FetchDefault')) { + return this.doItems(this.projectService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'id', 'project'); + } + if (Object.is(serviceName, 'ModuleService') && Object.is(interfaceName, 'FetchDefault')) { + return this.doItems(this.moduleService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'id', 'module'); + } + if (Object.is(serviceName, 'StoryService') && Object.is(interfaceName, 'FetchDefault')) { + return this.doItems(this.storyService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'id', 'story'); + } + if (Object.is(serviceName, 'TaskService') && Object.is(interfaceName, 'FetchDefault')) { + return this.doItems(this.appEntityService.FetchDefault(JSON.parse(JSON.stringify(context)), data, isloading), 'id', 'task'); + } + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.task = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainEditService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof MainEditService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/main-edit-form/main-edit-form.less b/app_Web/src/widgets/task/main-edit-form/main-edit-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/task/main-edit-form/main-edit-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/task/main-edit-form/main-edit-form.vue b/app_Web/src/widgets/task/main-edit-form/main-edit-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..57b0ad5891426ddf1dc04508aeb05f378ddeef9a --- /dev/null +++ b/app_Web/src/widgets/task/main-edit-form/main-edit-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/task/main-form/main-form-base.vue b/app_Web/src/widgets/task/main-form/main-form-base.vue index d6bbb6e30c5bfd7b9f717b74ba3332c287ae24e1..e606064ab6c4264de3eb2a4f706f1088824d5113 100644 --- a/app_Web/src/widgets/task/main-form/main-form-base.vue +++ b/app_Web/src/widgets/task/main-form/main-form-base.vue @@ -2,55 +2,154 @@ - - - + - + - - - + + + + - - - + + + + + + + + + + + + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - @@ -355,7 +454,22 @@ export default class MainBase extends Vue implements ControlInterface { srfuf: null, srfdeid: null, srfsourcekey: null, - name: null, + projectname: null, + project: null, + type: null, + module: null, + modulename: null, + formitem: null, + assignedto: null, + formitem1: null, + story: null, + storyname: null, + desc: null, + formitem2: null, + deadline: null, + estsarted: null, + formitemex1: null, + mailto: null, id: null, task:null, }; @@ -447,11 +561,101 @@ export default class MainBase extends Vue implements ControlInterface { { required: false, type: 'string', message: ' 值不能为空', trigger: 'change' }, { required: false, type: 'string', message: ' 值不能为空', trigger: 'blur' }, ], - name: [ - { type: 'string', message: '任务名称 值必须为字符串类型', trigger: 'change' }, - { type: 'string', message: '任务名称 值必须为字符串类型', trigger: 'blur' }, - { required: true, type: 'string', message: '任务名称 值不能为空', trigger: 'change' }, - { required: true, type: 'string', message: '任务名称 值不能为空', trigger: 'blur' }, + projectname: [ + { type: 'string', message: '所属项目 值必须为字符串类型', trigger: 'change' }, + { type: 'string', message: '所属项目 值必须为字符串类型', trigger: 'blur' }, + { required: true, type: 'string', message: '所属项目 值不能为空', trigger: 'change' }, + { required: true, type: 'string', message: '所属项目 值不能为空', trigger: 'blur' }, + ], + project: [ + { type: 'number', message: '所属项目 值必须为数值类型', trigger: 'change' }, + { type: 'number', message: '所属项目 值必须为数值类型', trigger: 'blur' }, + { required: false, type: 'number', message: '所属项目 值不能为空', trigger: 'change' }, + { required: false, type: 'number', message: '所属项目 值不能为空', trigger: 'blur' }, + ], + type: [ + { type: 'string', message: '任务类型 值必须为字符串类型', trigger: 'change' }, + { type: 'string', message: '任务类型 值必须为字符串类型', trigger: 'blur' }, + { required: true, type: 'string', message: '任务类型 值不能为空', trigger: 'change' }, + { required: true, type: 'string', message: '任务类型 值不能为空', trigger: 'blur' }, + ], + module: [ + { type: 'number', message: '所属模块 值必须为数值类型', trigger: 'change' }, + { type: 'number', message: '所属模块 值必须为数值类型', trigger: 'blur' }, + { required: false, type: 'number', message: '所属模块 值不能为空', trigger: 'change' }, + { required: false, type: 'number', message: '所属模块 值不能为空', trigger: 'blur' }, + ], + modulename: [ + { type: 'string', message: '所属模块 值必须为字符串类型', trigger: 'change' }, + { type: 'string', message: '所属模块 值必须为字符串类型', trigger: 'blur' }, + { required: false, type: 'string', message: '所属模块 值不能为空', trigger: 'change' }, + { required: false, type: 'string', message: '所属模块 值不能为空', trigger: 'blur' }, + ], + formitem: [ + { type: 'string', message: '所有模块 值必须为字符串类型', trigger: 'change' }, + { type: 'string', message: '所有模块 值必须为字符串类型', trigger: 'blur' }, + { required: false, type: 'string', message: '所有模块 值不能为空', trigger: 'change' }, + { required: false, type: 'string', message: '所有模块 值不能为空', trigger: 'blur' }, + ], + assignedto: [ + { type: 'string', message: '指派给 值必须为字符串类型', trigger: 'change' }, + { type: 'string', message: '指派给 值必须为字符串类型', trigger: 'blur' }, + { required: false, type: 'string', message: '指派给 值不能为空', trigger: 'change' }, + { required: false, type: 'string', message: '指派给 值不能为空', trigger: 'blur' }, + ], + formitem1: [ + { type: 'string', message: '多人任务 值必须为字符串类型', trigger: 'change' }, + { type: 'string', message: '多人任务 值必须为字符串类型', trigger: 'blur' }, + { required: false, type: 'string', message: '多人任务 值不能为空', trigger: 'change' }, + { required: false, type: 'string', message: '多人任务 值不能为空', trigger: 'blur' }, + ], + story: [ + { type: 'number', message: '相关需求 值必须为数值类型', trigger: 'change' }, + { type: 'number', message: '相关需求 值必须为数值类型', trigger: 'blur' }, + { required: false, type: 'number', message: '相关需求 值不能为空', trigger: 'change' }, + { required: false, type: 'number', message: '相关需求 值不能为空', trigger: 'blur' }, + ], + storyname: [ + { type: 'string', message: '相关需求 值必须为字符串类型', trigger: 'change' }, + { type: 'string', message: '相关需求 值必须为字符串类型', trigger: 'blur' }, + { required: false, type: 'string', message: '相关需求 值不能为空', trigger: 'change' }, + { required: false, type: 'string', message: '相关需求 值不能为空', trigger: 'blur' }, + ], + desc: [ + { type: 'string', message: '任务描述 值必须为字符串类型', trigger: 'change' }, + { type: 'string', message: '任务描述 值必须为字符串类型', trigger: 'blur' }, + { required: false, type: 'string', message: '任务描述 值不能为空', trigger: 'change' }, + { required: false, type: 'string', message: '任务描述 值不能为空', trigger: 'blur' }, + ], + formitem2: [ + { type: 'string', message: '附件 值必须为字符串类型', trigger: 'change' }, + { type: 'string', message: '附件 值必须为字符串类型', trigger: 'blur' }, + { required: false, type: 'string', message: '附件 值不能为空', trigger: 'change' }, + { required: false, type: 'string', message: '附件 值不能为空', trigger: 'blur' }, + ], + deadline: [ + { type: 'string', message: '截止日期 值必须为字符串类型', trigger: 'change' }, + { type: 'string', message: '截止日期 值必须为字符串类型', trigger: 'blur' }, + { required: false, type: 'string', message: '截止日期 值不能为空', trigger: 'change' }, + { required: false, type: 'string', message: '截止日期 值不能为空', trigger: 'blur' }, + ], + estsarted: [ + { type: 'string', message: '预计开始 值必须为字符串类型', trigger: 'change' }, + { type: 'string', message: '预计开始 值必须为字符串类型', trigger: 'blur' }, + { required: false, type: 'string', message: '预计开始 值不能为空', trigger: 'change' }, + { required: false, type: 'string', message: '预计开始 值不能为空', trigger: 'blur' }, + ], + formitemex1: [ + { type: 'string', message: '日程规划 值必须为字符串类型', trigger: 'change' }, + { type: 'string', message: '日程规划 值必须为字符串类型', trigger: 'blur' }, + { required: false, type: 'string', message: '日程规划 值不能为空', trigger: 'change' }, + { required: false, type: 'string', message: '日程规划 值不能为空', trigger: 'blur' }, + ], + mailto: [ + { type: 'string', message: '抄送给 值必须为字符串类型', trigger: 'change' }, + { type: 'string', message: '抄送给 值必须为字符串类型', trigger: 'blur' }, + { required: false, type: 'string', message: '抄送给 值不能为空', trigger: 'change' }, + { required: false, type: 'string', message: '抄送给 值不能为空', trigger: 'blur' }, ], id: [ { type: 'number', message: '编号 值必须为数值类型', trigger: 'change' }, @@ -468,13 +672,9 @@ export default class MainBase extends Vue implements ControlInterface { * @memberof Main */ public detailsModel: any = { - group1: new FormGroupPanelModel({ caption: 'task基本信息', detailType: 'GROUPPANEL', name: 'group1', visible: true, isShowCaption: true, form: this, uiActionGroup: { caption: '', langbase: 'entities.task.main_form', extractMode: 'ITEM', details: [] } }) + group1: new FormGroupPanelModel({ caption: 'task基本信息', detailType: 'GROUPPANEL', name: 'group1', visible: true, isShowCaption: false, form: this, uiActionGroup: { caption: '', langbase: 'entities.task.main_form', extractMode: 'ITEM', details: [] } }) , formpage1: new FormPageModel({ caption: '基本信息', detailType: 'FORMPAGE', name: 'formpage1', visible: true, isShowCaption: true, form: this }) -, - group2: new FormGroupPanelModel({ caption: '操作信息', detailType: 'GROUPPANEL', name: 'group2', visible: true, isShowCaption: true, form: this, uiActionGroup: { caption: '', langbase: 'entities.task.main_form', extractMode: 'ITEM', details: [] } }) -, - formpage2: new FormPageModel({ caption: '其它', detailType: 'FORMPAGE', name: 'formpage2', visible: true, isShowCaption: true, form: this }) , srfupdatedate: new FormItemModel({ caption: '最后修改日期', detailType: 'FORMITEM', name: 'srfupdatedate', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 0 }) , @@ -492,11 +692,40 @@ export default class MainBase extends Vue implements ControlInterface { , srfsourcekey: new FormItemModel({ caption: '', detailType: 'FORMITEM', name: 'srfsourcekey', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) , - name: new FormItemModel({ caption: '任务名称', detailType: 'FORMITEM', name: 'name', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) + projectname: new FormItemModel({ caption: '所属项目', detailType: 'FORMITEM', name: 'projectname', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + project: new FormItemModel({ caption: '所属项目', detailType: 'FORMITEM', name: 'project', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + type: new FormItemModel({ caption: '任务类型', detailType: 'FORMITEM', name: 'type', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + module: new FormItemModel({ caption: '所属模块', detailType: 'FORMITEM', name: 'module', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + modulename: new FormItemModel({ caption: '所属模块', detailType: 'FORMITEM', name: 'modulename', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + formitem: new FormItemModel({ caption: '所有模块', detailType: 'FORMITEM', name: 'formitem', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + assignedto: new FormItemModel({ caption: '指派给', detailType: 'FORMITEM', name: 'assignedto', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + formitem1: new FormItemModel({ caption: '多人任务', detailType: 'FORMITEM', name: 'formitem1', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + story: new FormItemModel({ caption: '相关需求', detailType: 'FORMITEM', name: 'story', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + storyname: new FormItemModel({ caption: '相关需求', detailType: 'FORMITEM', name: 'storyname', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + desc: new FormItemModel({ caption: '任务描述', detailType: 'FORMITEM', name: 'desc', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + formitem2: new FormItemModel({ caption: '附件', detailType: 'FORMITEM', name: 'formitem2', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + deadline: new FormItemModel({ caption: '截止日期', detailType: 'FORMITEM', name: 'deadline', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + estsarted: new FormItemModel({ caption: '预计开始', detailType: 'FORMITEM', name: 'estsarted', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + formitemex1: new FormItemModel({ caption: '日程规划', detailType: 'FORMITEM', name: 'formitemex1', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) +, + mailto: new FormItemModel({ caption: '抄送给', detailType: 'FORMITEM', name: 'mailto', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 }) , id: new FormItemModel({ caption: '编号', detailType: 'FORMITEM', name: 'id', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 0 }) , - form: new FormTabPanelModel({ caption: 'form', detailType: 'TABPANEL', name: 'form', visible: true, isShowCaption: true, form: this, tabPages: [{ name: 'formpage1', index: 0, visible: true }, { name: 'formpage2', index: 1, visible: true }] }), }; /** @@ -596,15 +825,195 @@ export default class MainBase extends Vue implements ControlInterface { } /** - * 监控表单属性 name 值 + * 监控表单属性 projectname 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.projectname') + onProjectnameChange(newVal: any, oldVal: any) { + this.formDataChange({ name: 'projectname', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 project 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.project') + onProjectChange(newVal: any, oldVal: any) { + this.formDataChange({ name: 'project', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 type 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.type') + onTypeChange(newVal: any, oldVal: any) { + this.formDataChange({ name: 'type', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 module 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.module') + onModuleChange(newVal: any, oldVal: any) { + this.formDataChange({ name: 'module', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 modulename 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.modulename') + onModulenameChange(newVal: any, oldVal: any) { + this.formDataChange({ name: 'modulename', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 formitem 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.formitem') + onFormitemChange(newVal: any, oldVal: any) { + this.formDataChange({ name: 'formitem', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 assignedto 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.assignedto') + onAssignedtoChange(newVal: any, oldVal: any) { + this.formDataChange({ name: 'assignedto', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 formitem1 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.formitem1') + onFormitem1Change(newVal: any, oldVal: any) { + this.formDataChange({ name: 'formitem1', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 story 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.story') + onStoryChange(newVal: any, oldVal: any) { + this.formDataChange({ name: 'story', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 storyname 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.storyname') + onStorynameChange(newVal: any, oldVal: any) { + this.formDataChange({ name: 'storyname', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 desc 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.desc') + onDescChange(newVal: any, oldVal: any) { + this.formDataChange({ name: 'desc', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 formitem2 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.formitem2') + onFormitem2Change(newVal: any, oldVal: any) { + this.formDataChange({ name: 'formitem2', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 deadline 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.deadline') + onDeadlineChange(newVal: any, oldVal: any) { + this.formDataChange({ name: 'deadline', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 estsarted 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.estsarted') + onEstsartedChange(newVal: any, oldVal: any) { + this.formDataChange({ name: 'estsarted', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 formitemex1 值 * * @param {*} newVal * @param {*} oldVal * @memberof Main */ - @Watch('data.name') - onNameChange(newVal: any, oldVal: any) { - this.formDataChange({ name: 'name', newVal: newVal, oldVal: oldVal }); + @Watch('data.formitemex1') + onFormitemex1Change(newVal: any, oldVal: any) { + this.formDataChange({ name: 'formitemex1', newVal: newVal, oldVal: oldVal }); + } + + /** + * 监控表单属性 mailto 值 + * + * @param {*} newVal + * @param {*} oldVal + * @memberof Main + */ + @Watch('data.mailto') + onMailtoChange(newVal: any, oldVal: any) { + this.formDataChange({ name: 'mailto', newVal: newVal, oldVal: oldVal }); } /** @@ -661,6 +1070,19 @@ export default class MainBase extends Vue implements ControlInterface { + + + + + + + + + + + + + diff --git a/app_Web/src/widgets/task/main-form/main-form-model.ts b/app_Web/src/widgets/task/main-form/main-form-model.ts index 9f7909dbed52c9d03fe8e21931e769d58e6255e9..91782839d93048225c094454ebe528b51ce670cf 100644 --- a/app_Web/src/widgets/task/main-form/main-form-model.ts +++ b/app_Web/src/widgets/task/main-form/main-form-model.ts @@ -56,10 +56,77 @@ export default class MainModel { name: 'srfsourcekey', }, { - name: 'name', - prop: 'name', + name: 'projectname', + prop: 'projectname', + dataType: 'PICKUPTEXT', + }, + { + name: 'project', + prop: 'project', + dataType: 'PICKUP', + }, + { + name: 'type', + prop: 'type', + dataType: 'SSCODELIST', + }, + { + name: 'module', + prop: 'module', + dataType: 'PICKUP', + }, + { + name: 'modulename', + prop: 'modulename', + dataType: 'PICKUPTEXT', + }, + { + name: 'formitem', + }, + { + name: 'assignedto', + prop: 'assignedto', dataType: 'TEXT', }, + { + name: 'formitem1', + }, + { + name: 'story', + prop: 'story', + dataType: 'PICKUP', + }, + { + name: 'storyname', + prop: 'storyname', + dataType: 'PICKUPTEXT', + }, + { + name: 'desc', + prop: 'desc', + dataType: 'LONGTEXT', + }, + { + name: 'formitem2', + }, + { + name: 'deadline', + prop: 'deadline', + dataType: 'DATE', + }, + { + name: 'estsarted', + prop: 'eststarted', + dataType: 'DATE', + }, + { + name: 'formitemex1', + }, + { + name: 'mailto', + prop: 'mailto', + dataType: 'LONGTEXT', + }, { name: 'id', prop: 'id', diff --git a/app_Web/src/widgets/task/main-form/main-form-service.ts b/app_Web/src/widgets/task/main-form/main-form-service.ts index 8447dc3b9ae4399ed70c15252d868768be5b679a..223d7c15fa2b158a21e6f1517308e955edeafd6e 100644 --- a/app_Web/src/widgets/task/main-form/main-form-service.ts +++ b/app_Web/src/widgets/task/main-form/main-form-service.ts @@ -2,6 +2,9 @@ import { Http,Util,Errorlog } from '@/utils'; import ControlService from '@/widgets/control-service'; import TaskService from '@/service/task/task-service'; import MainModel from './main-form-model'; +import ProjectService from '@/service/project/project-service'; +import ModuleService from '@/service/module/module-service'; +import StoryService from '@/service/story/story-service'; /** @@ -41,6 +44,30 @@ export default class MainService extends ControlService { this.model = new MainModel(); } + /** + * 项目服务对象 + * + * @type {ProjectService} + * @memberof MainService + */ + public projectService: ProjectService = new ProjectService(); + + /** + * 模块服务对象 + * + * @type {ModuleService} + * @memberof MainService + */ + public moduleService: ModuleService = new ModuleService(); + + /** + * 需求服务对象 + * + * @type {StoryService} + * @memberof MainService + */ + public storyService: StoryService = new StoryService(); + /** * 处理数据 * @@ -80,6 +107,15 @@ export default class MainService extends ControlService { */ @Errorlog public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + if (Object.is(serviceName, 'ProjectService') && Object.is(interfaceName, 'FetchDefault')) { + return this.doItems(this.projectService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'id', 'project'); + } + if (Object.is(serviceName, 'ModuleService') && Object.is(interfaceName, 'FetchDefault')) { + return this.doItems(this.moduleService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'id', 'module'); + } + if (Object.is(serviceName, 'StoryService') && Object.is(interfaceName, 'FetchDefault')) { + return this.doItems(this.storyService.FetchDefault(JSON.parse(JSON.stringify(context)),data, isloading), 'id', 'story'); + } return Promise.reject([]) } diff --git a/app_Web/src/widgets/task/main-grid/main-grid-base.vue b/app_Web/src/widgets/task/main-grid/main-grid-base.vue index 70b011565c668ec6dfe1c1dc1a0be36b6d2221ba..b02bdca6a9a5da5cc80a1d7d47ced43c05f461ff 100644 --- a/app_Web/src/widgets/task/main-grid/main-grid-base.vue +++ b/app_Web/src/widgets/task/main-grid/main-grid-base.vue @@ -57,7 +57,7 @@ + + + + + + @@ -134,6 +248,7 @@ import { UIActionTool,Util } from '@/utils'; import TaskService from '@/service/task/task-service'; import MainService from './main-grid-service'; +import TaskUIService from '@/uiservice/task/task-ui-service'; import CodeListService from "@service/app/codelist-service"; import { FormItemModel } from '@/model/form-detail'; @@ -223,6 +338,151 @@ export default class MainBase extends Vue implements ControlInterface { public appEntityService: TaskService = new TaskService({ $store: this.$store }); + /** + * 逻辑事件 + * + * @param {*} [params={}] + * @param {*} [tag] + * @param {*} [$event] + * @memberof + */ + public grid_uagridcolumn1_u7f3dc22_click(params: any = {}, tag?: any, $event?: any) { + // 取数 + let datas: any[] = []; + let xData: any = null; + // _this 指向容器对象 + const _this: any = this; + let paramJO:any = {}; + + let contextJO:any = {}; + xData = this; + if (_this.getDatas && _this.getDatas instanceof Function) { + datas = [..._this.getDatas()]; + } + if(params){ + datas = [params]; + } + // 界面行为 + const curUIService:TaskUIService = new TaskUIService(); + curUIService.Task_StartTask(datas,contextJO, paramJO, $event, xData,this,"Task"); + } + + /** + * 逻辑事件 + * + * @param {*} [params={}] + * @param {*} [tag] + * @param {*} [$event] + * @memberof + */ + public grid_uagridcolumn1_u164e1c8_click(params: any = {}, tag?: any, $event?: any) { + // 取数 + let datas: any[] = []; + let xData: any = null; + // _this 指向容器对象 + const _this: any = this; + let paramJO:any = {}; + + let contextJO:any = {}; + xData = this; + if (_this.getDatas && _this.getDatas instanceof Function) { + datas = [..._this.getDatas()]; + } + if(params){ + datas = [params]; + } + // 界面行为 + const curUIService:TaskUIService = new TaskUIService(); + curUIService.Task_CloseTask(datas,contextJO, paramJO, $event, xData,this,"Task"); + } + + /** + * 逻辑事件 + * + * @param {*} [params={}] + * @param {*} [tag] + * @param {*} [$event] + * @memberof + */ + public grid_uagridcolumn1_u2618d3d_click(params: any = {}, tag?: any, $event?: any) { + // 取数 + let datas: any[] = []; + let xData: any = null; + // _this 指向容器对象 + const _this: any = this; + let paramJO:any = {}; + + let contextJO:any = {}; + xData = this; + if (_this.getDatas && _this.getDatas instanceof Function) { + datas = [..._this.getDatas()]; + } + if(params){ + datas = [params]; + } + // 界面行为 + const curUIService:TaskUIService = new TaskUIService(); + curUIService.Task_DoneTask(datas,contextJO, paramJO, $event, xData,this,"Task"); + } + + /** + * 逻辑事件 + * + * @param {*} [params={}] + * @param {*} [tag] + * @param {*} [$event] + * @memberof + */ + public grid_uagridcolumn1_u90f5316_click(params: any = {}, tag?: any, $event?: any) { + // 取数 + let datas: any[] = []; + let xData: any = null; + // _this 指向容器对象 + const _this: any = this; + let paramJO:any = {}; + + let contextJO:any = {}; + xData = this; + if (_this.getDatas && _this.getDatas instanceof Function) { + datas = [..._this.getDatas()]; + } + if(params){ + datas = [params]; + } + // 界面行为 + const curUIService:TaskUIService = new TaskUIService(); + curUIService.Task_MainEdit(datas,contextJO, paramJO, $event, xData,this,"Task"); + } + + /** + * 逻辑事件 + * + * @param {*} [params={}] + * @param {*} [tag] + * @param {*} [$event] + * @memberof + */ + public grid_uagridcolumn1_ua6566df_click(params: any = {}, tag?: any, $event?: any) { + // 取数 + let datas: any[] = []; + let xData: any = null; + // _this 指向容器对象 + const _this: any = this; + let paramJO:any = {}; + + let contextJO:any = {}; + xData = this; + if (_this.getDatas && _this.getDatas instanceof Function) { + datas = [..._this.getDatas()]; + } + if(params){ + datas = [params]; + } + // 界面行为 + const curUIService:TaskUIService = new TaskUIService(); + curUIService.Task_NewSubTask(datas,contextJO, paramJO, $event, xData,this,"Task"); + } + /** * 关闭视图 @@ -562,7 +822,7 @@ export default class MainBase extends Vue implements ControlInterface { public allColumns: any[] = [ { name: 'id', - label: '编号', + label: 'ID', langtag: 'entities.task.main_grid.columns.id', show: true, util: 'PX' @@ -588,6 +848,55 @@ export default class MainBase extends Vue implements ControlInterface { show: true, util: 'PX' }, + { + name: 'assignedto', + label: '指派给', + langtag: 'entities.task.main_grid.columns.assignedto', + show: true, + util: 'PX' + }, + { + name: 'finishedby', + label: '完成者', + langtag: 'entities.task.main_grid.columns.finishedby', + show: true, + util: 'PX' + }, + { + name: 'estimate', + label: '预计', + langtag: 'entities.task.main_grid.columns.estimate', + show: true, + util: 'PX' + }, + { + name: 'consumed', + label: '消耗', + langtag: 'entities.task.main_grid.columns.consumed', + show: true, + util: 'PX' + }, + { + name: 'left', + label: '剩余', + langtag: 'entities.task.main_grid.columns.left', + show: true, + util: 'PX' + }, + { + name: 'deadline', + label: '截止日期', + langtag: 'entities.task.main_grid.columns.deadline', + show: true, + util: 'PX' + }, + { + name: 'uagridcolumn1', + label: '操作', + langtag: 'entities.task.main_grid.columns.uagridcolumn1', + show: true, + util: 'PX' + }, ] /** @@ -991,6 +1300,22 @@ export default class MainBase extends Vue implements ControlInterface { textSeparator: '、', valueSeparator: ',', }, + { + name: 'assignedto', + srfkey: 'UserRealName', + codelistType : 'DYNAMIC', + textSeparator: ',', + renderMode: 'string', + valueSeparator: ",", + }, + { + name: 'finishedby', + srfkey: 'UserRealName', + codelistType : 'DYNAMIC', + textSeparator: ',', + renderMode: 'string', + valueSeparator: ",", + }, ]; let _this = this; for (const codelist of codelistColumns) { @@ -1337,6 +1662,21 @@ export default class MainBase extends Vue implements ControlInterface { * @memberof Main */ public uiAction(row: any, tag: any, $event: any) { + if(Object.is('StartTask', tag)) { + this.grid_uagridcolumn1_u7f3dc22_click(row, tag, $event); + } + if(Object.is('CloseTask', tag)) { + this.grid_uagridcolumn1_u164e1c8_click(row, tag, $event); + } + if(Object.is('DoneTask', tag)) { + this.grid_uagridcolumn1_u2618d3d_click(row, tag, $event); + } + if(Object.is('MainEdit', tag)) { + this.grid_uagridcolumn1_u90f5316_click(row, tag, $event); + } + if(Object.is('NewSubTask', tag)) { + this.grid_uagridcolumn1_ua6566df_click(row, tag, $event); + } } /** diff --git a/app_Web/src/widgets/task/main-grid/main-grid-model.ts b/app_Web/src/widgets/task/main-grid/main-grid-model.ts index a8c6947f8c52c7e5adac662d5a809fa619e7e516..2116d6d85a8c5d187f526d1b89febdd630cc6a28 100644 --- a/app_Web/src/widgets/task/main-grid/main-grid-model.ts +++ b/app_Web/src/widgets/task/main-grid/main-grid-model.ts @@ -26,30 +26,15 @@ export default class MainModel { ] }else{ return [ - { - name: 'id', - prop: 'id', - dataType: 'ACID', - }, - { - name: 'story', - prop: 'story', - dataType: 'PICKUP', - }, - { - name: 'project', - prop: 'project', - dataType: 'PICKUP', - }, { name: 'module', prop: 'module', dataType: 'PICKUP', }, { - name: 'pri', - prop: 'pri', - dataType: 'NSCODELIST', + name: 'finishedby', + prop: 'finishedby', + dataType: 'TEXT', }, { name: 'frombug', @@ -61,31 +46,76 @@ export default class MainModel { prop: 'status', dataType: 'SSCODELIST', }, - { - name: 'name', - prop: 'name', - dataType: 'TEXT', - }, { name: 'parent', prop: 'parent', dataType: 'PICKUP', }, + { + name: 'estimate', + prop: 'estimate', + dataType: 'FLOAT', + }, { name: 'srfmajortext', prop: 'name', dataType: 'TEXT', }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, { name: 'srfdataaccaction', prop: 'id', dataType: 'ACID', }, { - name: 'srfkey', + name: 'id', prop: 'id', dataType: 'ACID', }, + { + name: 'story', + prop: 'story', + dataType: 'PICKUP', + }, + { + name: 'project', + prop: 'project', + dataType: 'PICKUP', + }, + { + name: 'assignedto', + prop: 'assignedto', + dataType: 'TEXT', + }, + { + name: 'pri', + prop: 'pri', + dataType: 'NSCODELIST', + }, + { + name: 'consumed', + prop: 'consumed', + dataType: 'FLOAT', + }, + { + name: 'name', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'left', + prop: 'left', + dataType: 'FLOAT', + }, + { + name: 'deadline', + prop: 'deadline', + dataType: 'DATE', + }, { name: 'task', prop: 'id', diff --git a/app_Web/src/widgets/task/main-info-form/main-info-form-base.vue b/app_Web/src/widgets/task/main-info-form/main-info-form-base.vue index dafb9f4a1f721cb244781405803543a557faf3aa..8aa9dae906960bcf02522dc14857f86438dfdbc2 100644 --- a/app_Web/src/widgets/task/main-info-form/main-info-form-base.vue +++ b/app_Web/src/widgets/task/main-info-form/main-info-form-base.vue @@ -19,7 +19,11 @@ +:value="data.name" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> @@ -48,49 +52,77 @@ +:value="data.modulename" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.storyname" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.assignedto" tag='UserRealName' codelistType='DYNAMIC' renderMode="STR" valueSeparator="," textSeparator="," :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.type" tag='Task__type' codelistType='STATIC' :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.status" tag='Task__status' codelistType='STATIC' :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.pri" tag='Task__pri' codelistType='STATIC' :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.mailto" tag='UserRealName' codelistType='DYNAMIC' renderMode="STR" valueSeparator="," textSeparator="," :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> @@ -117,14 +149,22 @@ +:value="data.openedby" tag='UserRealName' codelistType='DYNAMIC' renderMode="STR" valueSeparator="," textSeparator="," :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.openeddate" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> @@ -139,14 +179,22 @@ +:value="data.finishedby" tag='UserRealName' codelistType='DYNAMIC' renderMode="STR" valueSeparator="," textSeparator="," :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.finisheddate" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> @@ -161,14 +209,22 @@ +:value="data.canceledby" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.canceleddate" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> @@ -183,14 +239,22 @@ +:value="data.closedby" tag='UserRealName' codelistType='DYNAMIC' renderMode="STR" valueSeparator="," textSeparator="," :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.closeddate" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> @@ -202,7 +266,11 @@ +:value="data.closedreason" tag='Task__closed_reason' codelistType='STATIC' :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> @@ -212,14 +280,22 @@ +:value="data.lasteditedby" tag='UserRealName' codelistType='DYNAMIC' renderMode="STR" valueSeparator="," textSeparator="," :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> +:value="data.lastediteddate" :data="data" + :context="context" + :viewparams="viewparams" + :itemParam="{}" +style=""> diff --git a/app_Web/src/widgets/task/main2-grid/main2-grid-base.vue b/app_Web/src/widgets/task/main2-grid/main2-grid-base.vue index 8bfe755364555a3f07055c47ca68b53a3eba5681..95c911e1f697dad5ff24f89ca4ba32c011fb5c0b 100644 --- a/app_Web/src/widgets/task/main2-grid/main2-grid-base.vue +++ b/app_Web/src/widgets/task/main2-grid/main2-grid-base.vue @@ -57,7 +57,7 @@ + + + \ No newline at end of file diff --git a/app_Web/src/widgets/task/pivot-table-grid/pivot-table-grid-model.ts b/app_Web/src/widgets/task/pivot-table-grid/pivot-table-grid-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..bc37d5b3b2efd4405047d89bebe096db7051442f --- /dev/null +++ b/app_Web/src/widgets/task/pivot-table-grid/pivot-table-grid-model.ts @@ -0,0 +1,173 @@ +/** + * PivotTable 部件模型 + * + * @export + * @class PivotTableModel + */ +export default class PivotTableModel { + + /** + * 是否是实体数据导出 + * + * @returns {any[]} + * @memberof PivotTableGridMode + */ + public isDEExport: boolean = false; + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof PivotTableGridMode + */ + public getDataItems(): any[] { + if(this.isDEExport){ + return [ + ] + }else{ + return [ + { + name: 'module', + prop: 'module', + dataType: 'PICKUP', + }, + { + name: 'frombug', + prop: 'frombug', + dataType: 'PICKUP', + }, + { + name: 'status', + prop: 'status', + dataType: 'SSCODELIST', + }, + { + name: 'parent', + prop: 'parent', + dataType: 'PICKUP', + }, + { + name: 'projectname', + prop: 'projectname', + dataType: 'PICKUPTEXT', + }, + { + name: 'storyname', + prop: 'storyname', + dataType: 'PICKUPTEXT', + }, + { + name: 'parentname', + prop: 'parentname', + dataType: 'PICKUPTEXT', + }, + { + name: 'type', + prop: 'type', + dataType: 'SSCODELIST', + }, + { + name: 'estimate', + prop: 'estimate', + dataType: 'FLOAT', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srfdataaccaction', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'story', + prop: 'story', + dataType: 'PICKUP', + }, + { + name: 'project', + prop: 'project', + dataType: 'PICKUP', + }, + { + name: 'modulename', + prop: 'modulename', + dataType: 'PICKUPTEXT', + }, + { + name: 'assignedto', + prop: 'assignedto', + dataType: 'TEXT', + }, + { + name: 'pri', + prop: 'pri', + dataType: 'NSCODELIST', + }, + { + name: 'consumed', + prop: 'consumed', + dataType: 'FLOAT', + }, + { + name: 'name', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'left', + prop: 'left', + dataType: 'FLOAT', + }, + { + name: 'productname', + prop: 'productname', + dataType: 'PICKUPDATA', + }, + { + name: 'task', + prop: 'id', + }, + { + name:'size', + prop:'size' + }, + { + name:'query', + prop:'query' + }, + { + name:'page', + prop:'page' + }, + { + name:'sort', + prop:'sort' + }, + { + name:'srfparentdata', + prop:'srfparentdata' + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + ] + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/pivot-table-grid/pivot-table-grid-service.ts b/app_Web/src/widgets/task/pivot-table-grid/pivot-table-grid-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..53148244b8606ef863f7816eda9fdcfe4c78ba15 --- /dev/null +++ b/app_Web/src/widgets/task/pivot-table-grid/pivot-table-grid-service.ts @@ -0,0 +1,318 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import TaskService from '@/service/task/task-service'; +import PivotTableModel from './pivot-table-grid-model'; + + +/** + * PivotTable 部件服务对象 + * + * @export + * @class PivotTableService + */ +export default class PivotTableService extends ControlService { + + /** + * 任务服务对象 + * + * @type {TaskService} + * @memberof PivotTableService + */ + public appEntityService: TaskService = new TaskService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof PivotTableService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of PivotTableService. + * + * @param {*} [opts={}] + * @memberof PivotTableService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new PivotTableModel(); + } + + + /** + * 处理数据 + * + * @public + * @param {Promise} promise + * @returns {Promise} + * @memberof PivotTableService + */ + public doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof PivotTableService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof PivotTableService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof PivotTableService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof PivotTableService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Data,Context,isloading); + }else{ + result =_appEntityService.Update(Data,Context,isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 获取数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof PivotTableService + */ + @Errorlog + public get(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:0}); + } + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof PivotTableService + */ + @Errorlog + public search(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.FetchDefault(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof PivotTableService + */ + @Errorlog + public loadDraft(action: string, context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:'0'}); + //仿真主键数据 + response.data.id = Util.createUUID(); + } + this.handleResponse(action, response, true); + this.mergeDefaults(response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 合并配置的默认值 + * @param {*} + * @memberof PivotTableService + */ + public mergeDefaults(response:any = {}){ + if(response.data){ + } + } + + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/pivot-table-grid/pivot-table-grid.less b/app_Web/src/widgets/task/pivot-table-grid/pivot-table-grid.less new file mode 100644 index 0000000000000000000000000000000000000000..6a7da728b17882d2231f0b993dbbfc09610c58fb --- /dev/null +++ b/app_Web/src/widgets/task/pivot-table-grid/pivot-table-grid.less @@ -0,0 +1,4 @@ +.grid { + --grid: 0; +} +// this is less diff --git a/app_Web/src/widgets/task/pivot-table-grid/pivot-table-grid.vue b/app_Web/src/widgets/task/pivot-table-grid/pivot-table-grid.vue new file mode 100644 index 0000000000000000000000000000000000000000..fd3e245b8c3ae1b5e1f576867a2c075b13aa2ab8 --- /dev/null +++ b/app_Web/src/widgets/task/pivot-table-grid/pivot-table-grid.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/task/start-form-form/start-form-form-base.vue b/app_Web/src/widgets/task/start-form-form/start-form-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..dacfe72dd10e39d5d7d47089e0b01a1983ad9c10 --- /dev/null +++ b/app_Web/src/widgets/task/start-form-form/start-form-form-base.vue @@ -0,0 +1,1667 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/task/start-form-form/start-form-form-model.ts b/app_Web/src/widgets/task/start-form-form/start-form-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..7c596150449e2bbd91d6c8bb76c5015998378bd2 --- /dev/null +++ b/app_Web/src/widgets/task/start-form-form/start-form-form-model.ts @@ -0,0 +1,89 @@ +/** + * StartForm 部件模型 + * + * @export + * @class StartFormModel + */ +export default class StartFormModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof StartFormModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srfupdatedate', + prop: 'lastediteddate', + dataType: 'DATETIME', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'realstarted', + prop: 'realstarted', + dataType: 'DATE', + }, + { + name: 'consumed', + prop: 'consumed', + dataType: 'FLOAT', + }, + { + name: 'left', + prop: 'left', + dataType: 'FLOAT', + }, + { + name: 'formitem', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'task', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/start-form-form/start-form-form-service.ts b/app_Web/src/widgets/task/start-form-form/start-form-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..5698ac2e6ab30d995387a26358e52abdb6c2f3bf --- /dev/null +++ b/app_Web/src/widgets/task/start-form-form/start-form-form-service.ts @@ -0,0 +1,371 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import TaskService from '@/service/task/task-service'; +import StartFormModel from './start-form-form-model'; + + +/** + * StartForm 部件服务对象 + * + * @export + * @class StartFormService + */ +export default class StartFormService extends ControlService { + + /** + * 任务服务对象 + * + * @type {TaskService} + * @memberof StartFormService + */ + public appEntityService: TaskService = new TaskService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof StartFormService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of StartFormService. + * + * @param {*} [opts={}] + * @memberof StartFormService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new StartFormModel(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof StartFormService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StartFormService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof StartFormService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof StartFormService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StartFormService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StartFormService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StartFormService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StartFormService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StartFormService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.task = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof StartFormService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof StartFormService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/start-form-form/start-form-form.less b/app_Web/src/widgets/task/start-form-form/start-form-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/task/start-form-form/start-form-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/task/start-form-form/start-form-form.vue b/app_Web/src/widgets/task/start-form-form/start-form-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..3bd4a92d04de3ea390ab40a08f0ba9a33c22f949 --- /dev/null +++ b/app_Web/src/widgets/task/start-form-form/start-form-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid-base.vue b/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..ae03d27144a160942b3a96c719499fa4a3717408 --- /dev/null +++ b/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid-base.vue @@ -0,0 +1,1572 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid-model.ts b/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..08463745cd11120b9cc1e57a7cc447e34face043 --- /dev/null +++ b/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid-model.ts @@ -0,0 +1,148 @@ +/** + * SubTaskNew 部件模型 + * + * @export + * @class SubTaskNewModel + */ +export default class SubTaskNewModel { + + /** + * 是否是实体数据导出 + * + * @returns {any[]} + * @memberof SubTaskNewGridMode + */ + public isDEExport: boolean = false; + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof SubTaskNewGridMode + */ + public getDataItems(): any[] { + if(this.isDEExport){ + return [ + ] + }else{ + return [ + { + name: 'module', + prop: 'module', + dataType: 'PICKUP', + }, + { + name: 'desc', + prop: 'desc', + dataType: 'LONGTEXT', + }, + { + name: 'frombug', + prop: 'frombug', + dataType: 'PICKUP', + }, + { + name: 'parent', + prop: 'parent', + dataType: 'PICKUP', + }, + { + name: 'storyname', + prop: 'storyname', + dataType: 'PICKUPTEXT', + }, + { + name: 'type', + prop: 'type', + dataType: 'SSCODELIST', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srfdataaccaction', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'assignedto_text', + prop: 'assignedto', + dataType: 'TEXT', + }, + { + name: 'project', + prop: 'project', + dataType: 'PICKUP', + }, + { + name: 'modulename', + prop: 'modulename', + dataType: 'PICKUPTEXT', + }, + { + name: 'assignedto', + prop: 'assignedto', + dataType: 'TEXT', + }, + { + name: 'story', + prop: 'story', + dataType: 'PICKUP', + }, + { + name: 'pri', + prop: 'pri', + dataType: 'NSCODELIST', + }, + { + name: 'name', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'left', + prop: 'left', + dataType: 'FLOAT', + }, + { + name: 'task', + prop: 'id', + }, + { + name:'size', + prop:'size' + }, + { + name:'query', + prop:'query' + }, + { + name:'page', + prop:'page' + }, + { + name:'sort', + prop:'sort' + }, + { + name:'srfparentdata', + prop:'srfparentdata' + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + ] + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid-service.ts b/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..f0264782911d067584bb26edff69f0290ed4490d --- /dev/null +++ b/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid-service.ts @@ -0,0 +1,336 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import TaskService from '@/service/task/task-service'; +import SubTaskNewModel from './sub-task-new-grid-model'; +import ModuleService from '@/service/module/module-service'; +import StoryService from '@/service/story/story-service'; + + +/** + * SubTaskNew 部件服务对象 + * + * @export + * @class SubTaskNewService + */ +export default class SubTaskNewService extends ControlService { + + /** + * 任务服务对象 + * + * @type {TaskService} + * @memberof SubTaskNewService + */ + public appEntityService: TaskService = new TaskService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof SubTaskNewService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of SubTaskNewService. + * + * @param {*} [opts={}] + * @memberof SubTaskNewService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new SubTaskNewModel(); + } + + + /** + * 模块服务对象 + * + * @type {ModuleService} + * @memberof SubTaskNewService + */ + public moduleService: ModuleService = new ModuleService(); + + /** + * 需求服务对象 + * + * @type {StoryService} + * @memberof SubTaskNewService + */ + public storyService: StoryService = new StoryService(); + + /** + * 处理数据 + * + * @public + * @param {Promise} promise + * @returns {Promise} + * @memberof SubTaskNewService + */ + public doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Data,Context,isloading); + }else{ + result =_appEntityService.Update(Data,Context,isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 获取数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public get(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:0}); + } + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public search(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.FetchDefault(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof SubTaskNewService + */ + @Errorlog + public loadDraft(action: string, context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:'0'}); + //仿真主键数据 + response.data.id = Util.createUUID(); + } + this.handleResponse(action, response, true); + this.mergeDefaults(response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 合并配置的默认值 + * @param {*} + * @memberof SubTaskNewService + */ + public mergeDefaults(response:any = {}){ + if(response.data){ + } + } + + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid.less b/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid.less new file mode 100644 index 0000000000000000000000000000000000000000..6a7da728b17882d2231f0b993dbbfc09610c58fb --- /dev/null +++ b/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid.less @@ -0,0 +1,4 @@ +.grid { + --grid: 0; +} +// this is less diff --git a/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid.vue b/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid.vue new file mode 100644 index 0000000000000000000000000000000000000000..90e6be2ee72dc421899200a788ae69dfbbc9c198 --- /dev/null +++ b/app_Web/src/widgets/task/sub-task-new-grid/sub-task-new-grid.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/task/toolbar-portlet/toolbar-portlet-base.vue b/app_Web/src/widgets/task/toolbar-portlet/toolbar-portlet-base.vue index e26d9a93fc7861fcedd85a78d30a23158499fae2..b4200a4b80ab129cfc04c43f324f0db01e4ec12b 100644 --- a/app_Web/src/widgets/task/toolbar-portlet/toolbar-portlet-base.vue +++ b/app_Web/src/widgets/task/toolbar-portlet/toolbar-portlet-base.vue @@ -14,6 +14,7 @@ import { UIActionTool,Util } from '@/utils'; import TaskService from '@/service/task/task-service'; import ToolbarService from './toolbar-portlet-service'; +import TaskUIService from '@/uiservice/task/task-ui-service'; @Component({ @@ -129,6 +130,180 @@ export default class TaskToolbarBase extends Vue implements ControlInterface { this.Exit(datas, contextJO,paramJO, $event, xData,this,"Task"); } + /** + * 逻辑事件 + * + * @param {*} [params={}] + * @param {*} [tag] + * @param {*} [$event] + * @memberof + */ + public dashboard_sysportlet2_u6450522_click(params: any = {}, tag?: any, $event?: any) { + // 取数 + let datas: any[] = []; + let xData: any = null; + // _this 指向容器对象 + const _this: any = this; + let paramJO:any = {}; + + let contextJO:any = {}; + xData = this; + if (_this.getDatas && _this.getDatas instanceof Function) { + datas = [..._this.getDatas()]; + } + if(params){ + datas = [params]; + } + // 界面行为 + const curUIService:TaskUIService = new TaskUIService(); + curUIService.Task_NewSubTask(datas,contextJO, paramJO, $event, xData,this,"Task"); + } + + /** + * 逻辑事件 + * + * @param {*} [params={}] + * @param {*} [tag] + * @param {*} [$event] + * @memberof + */ + public dashboard_sysportlet2_ua266741_click(params: any = {}, tag?: any, $event?: any) { + // 取数 + let datas: any[] = []; + let xData: any = null; + // _this 指向容器对象 + const _this: any = this; + let paramJO:any = {}; + + let contextJO:any = {}; + xData = this; + if (_this.getDatas && _this.getDatas instanceof Function) { + datas = [..._this.getDatas()]; + } + if(params){ + datas = [params]; + } + // 界面行为 + const curUIService:TaskUIService = new TaskUIService(); + curUIService.Task_AssignTask(datas,contextJO, paramJO, $event, xData,this,"Task"); + } + + /** + * 逻辑事件 + * + * @param {*} [params={}] + * @param {*} [tag] + * @param {*} [$event] + * @memberof + */ + public dashboard_sysportlet2_ub4d331e_click(params: any = {}, tag?: any, $event?: any) { + // 取数 + let datas: any[] = []; + let xData: any = null; + // _this 指向容器对象 + const _this: any = this; + let paramJO:any = {}; + + let contextJO:any = {}; + xData = this; + if (_this.getDatas && _this.getDatas instanceof Function) { + datas = [..._this.getDatas()]; + } + if(params){ + datas = [params]; + } + // 界面行为 + const curUIService:TaskUIService = new TaskUIService(); + curUIService.Task_PauseTask(datas,contextJO, paramJO, $event, xData,this,"Task"); + } + + /** + * 逻辑事件 + * + * @param {*} [params={}] + * @param {*} [tag] + * @param {*} [$event] + * @memberof + */ + public dashboard_sysportlet2_ue3e1dd6_click(params: any = {}, tag?: any, $event?: any) { + // 取数 + let datas: any[] = []; + let xData: any = null; + // _this 指向容器对象 + const _this: any = this; + let paramJO:any = {}; + + let contextJO:any = {}; + xData = this; + if (_this.getDatas && _this.getDatas instanceof Function) { + datas = [..._this.getDatas()]; + } + if(params){ + datas = [params]; + } + // 界面行为 + const curUIService:TaskUIService = new TaskUIService(); + curUIService.Task_DoneTask(datas,contextJO, paramJO, $event, xData,this,"Task"); + } + + /** + * 逻辑事件 + * + * @param {*} [params={}] + * @param {*} [tag] + * @param {*} [$event] + * @memberof + */ + public dashboard_sysportlet2_u10fc642_click(params: any = {}, tag?: any, $event?: any) { + // 取数 + let datas: any[] = []; + let xData: any = null; + // _this 指向容器对象 + const _this: any = this; + let paramJO:any = {}; + + let contextJO:any = {}; + xData = this; + if (_this.getDatas && _this.getDatas instanceof Function) { + datas = [..._this.getDatas()]; + } + if(params){ + datas = [params]; + } + // 界面行为 + const curUIService:TaskUIService = new TaskUIService(); + curUIService.Task_CancelTask(datas,contextJO, paramJO, $event, xData,this,"Task"); + } + + /** + * 逻辑事件 + * + * @param {*} [params={}] + * @param {*} [tag] + * @param {*} [$event] + * @memberof + */ + public dashboard_sysportlet2_u6c059c5_click(params: any = {}, tag?: any, $event?: any) { + // 取数 + let datas: any[] = []; + let xData: any = null; + // _this 指向容器对象 + const _this: any = this; + let paramJO:any = {}; + + let contextJO:any = {}; + xData = this; + if (_this.getDatas && _this.getDatas instanceof Function) { + datas = [..._this.getDatas()]; + } + if(params){ + datas = [params]; + } + // 界面行为 + const curUIService:TaskUIService = new TaskUIService(); + curUIService.Task_MainEdit(datas,contextJO, paramJO, $event, xData,this,"Task"); + } + /** * 逻辑事件 * @@ -158,7 +333,7 @@ export default class TaskToolbarBase extends Vue implements ControlInterface { } /** - * 关闭 + * 返回 * * @param {any[]} args 当前数据 * @param {any} contextJO 行为附加上下文 @@ -176,7 +351,7 @@ export default class TaskToolbarBase extends Vue implements ControlInterface { } /** - * 删除并关闭 + * 删除 * * @param {any[]} args 当前数据 * @param {any} contextJO 行为附加上下文 @@ -245,10 +420,28 @@ export default class TaskToolbarBase extends Vue implements ControlInterface { */ public actionBarModelData:any[] =[ { viewlogicname:"dashboard_sysportlet2_udf09ee0_click", - actionName:"关闭", + actionName:"返回", + }, + { viewlogicname:"dashboard_sysportlet2_u6450522_click", + actionName:"子任务", + }, + { viewlogicname:"dashboard_sysportlet2_ua266741_click", + actionName:"指派", + }, + { viewlogicname:"dashboard_sysportlet2_ub4d331e_click", + actionName:"暂停", + }, + { viewlogicname:"dashboard_sysportlet2_ue3e1dd6_click", + actionName:"完成", + }, + { viewlogicname:"dashboard_sysportlet2_u10fc642_click", + actionName:"取消", + }, + { viewlogicname:"dashboard_sysportlet2_u6c059c5_click", + actionName:"编辑", }, { viewlogicname:"dashboard_sysportlet2_uc22aaa2_click", - actionName:"删除并关闭", + actionName:"删除", } ]; @@ -261,6 +454,24 @@ export default class TaskToolbarBase extends Vue implements ControlInterface { if(Object.is($event,'dashboard_sysportlet2_udf09ee0_click')){ this.dashboard_sysportlet2_udf09ee0_click(null); } + if(Object.is($event,'dashboard_sysportlet2_u6450522_click')){ + this.dashboard_sysportlet2_u6450522_click(null); + } + if(Object.is($event,'dashboard_sysportlet2_ua266741_click')){ + this.dashboard_sysportlet2_ua266741_click(null); + } + if(Object.is($event,'dashboard_sysportlet2_ub4d331e_click')){ + this.dashboard_sysportlet2_ub4d331e_click(null); + } + if(Object.is($event,'dashboard_sysportlet2_ue3e1dd6_click')){ + this.dashboard_sysportlet2_ue3e1dd6_click(null); + } + if(Object.is($event,'dashboard_sysportlet2_u10fc642_click')){ + this.dashboard_sysportlet2_u10fc642_click(null); + } + if(Object.is($event,'dashboard_sysportlet2_u6c059c5_click')){ + this.dashboard_sysportlet2_u6c059c5_click(null); + } if(Object.is($event,'dashboard_sysportlet2_uc22aaa2_click')){ this.dashboard_sysportlet2_uc22aaa2_click(null); } diff --git a/app_Web/src/widgets/task/type-gantt-gantt/type-gantt-gantt-base.vue b/app_Web/src/widgets/task/type-gantt-gantt/type-gantt-gantt-base.vue index 4de5eaa2bf46ba42f5b07eb82893d74a21598226..72d19bedbddf67df26c4cc56b6e96ae6a55c7ad6 100644 --- a/app_Web/src/widgets/task/type-gantt-gantt/type-gantt-gantt-base.vue +++ b/app_Web/src/widgets/task/type-gantt-gantt/type-gantt-gantt-base.vue @@ -220,7 +220,8 @@ export default class TypeGanttBase extends Vue implements ControlInterface { columns: [ { label: '任务类型分类', - value: (task: any) => { + value: 'text', + render: (task: any) => { return this.getColumnValue(task, 'text') }, expander: true, @@ -228,28 +229,32 @@ export default class TypeGanttBase extends Vue implements ControlInterface { }, { label: '指派给', - value: (task: any) => { + value: 'assignedto', + render: (task: any) => { return this.getColumnValue(task, 'assignedto') }, width: 100, }, { label: '开始时间', - value: (task: any) => { + value: 'start', + render: (task: any) => { return this.getColumnValue(task, 'start') }, width: 100, }, { label: '结束时间', - value: (task: any) => { + value: 'end', + render: (task: any) => { return this.getColumnValue(task, 'end') }, width: 100, }, { label: '持续时间', - value: (task: any) => { + value: 'taskduration', + render: (task: any) => { return this.getColumnValue(task, 'taskduration') }, width: 100, @@ -296,7 +301,7 @@ export default class TypeGanttBase extends Vue implements ControlInterface { public getColumnValue(task: any, field: string) { if(Object.is(task.id.split(';')[0], 'TaskTypes')) { if (Object.is(field, 'text')) { - let codelist: any[] = this.$store.getters.getCodeList('CodeList4'); + let codelist: any[] = this.$store.getters.getCodeList('Task__type'); if(codelist) { return this.getCodeListItem(codelist, task[field]); } diff --git a/app_Web/src/widgets/task/work-info-form-form/work-info-form-form-base.vue b/app_Web/src/widgets/task/work-info-form-form/work-info-form-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..04482b78e0ce0a1bf516ca2542e915f2643b2f64 --- /dev/null +++ b/app_Web/src/widgets/task/work-info-form-form/work-info-form-form-base.vue @@ -0,0 +1,1716 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/task/work-info-form-form/work-info-form-form-model.ts b/app_Web/src/widgets/task/work-info-form-form/work-info-form-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..4b6a53d0ee446214c0721b88e8ed9b8afe837370 --- /dev/null +++ b/app_Web/src/widgets/task/work-info-form-form/work-info-form-form-model.ts @@ -0,0 +1,101 @@ +/** + * WorkInfoForm 部件模型 + * + * @export + * @class WorkInfoFormModel + */ +export default class WorkInfoFormModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof WorkInfoFormModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srfupdatedate', + prop: 'lastediteddate', + dataType: 'DATETIME', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'name', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'estimate', + prop: 'estimate', + dataType: 'FLOAT', + }, + { + name: 'consumed', + prop: 'consumed', + dataType: 'FLOAT', + }, + { + name: 'left', + prop: 'left', + dataType: 'FLOAT', + }, + { + name: 'eststarted', + prop: 'eststarted', + dataType: 'DATE', + }, + { + name: 'realstarted', + prop: 'realstarted', + dataType: 'DATE', + }, + { + name: 'deadline', + prop: 'deadline', + dataType: 'DATE', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'task', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/work-info-form-form/work-info-form-form-service.ts b/app_Web/src/widgets/task/work-info-form-form/work-info-form-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..b04c954ff0970d51b3b8f56c69c7e0ce48061747 --- /dev/null +++ b/app_Web/src/widgets/task/work-info-form-form/work-info-form-form-service.ts @@ -0,0 +1,371 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import TaskService from '@/service/task/task-service'; +import WorkInfoFormModel from './work-info-form-form-model'; + + +/** + * WorkInfoForm 部件服务对象 + * + * @export + * @class WorkInfoFormService + */ +export default class WorkInfoFormService extends ControlService { + + /** + * 任务服务对象 + * + * @type {TaskService} + * @memberof WorkInfoFormService + */ + public appEntityService: TaskService = new TaskService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof WorkInfoFormService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of WorkInfoFormService. + * + * @param {*} [opts={}] + * @memberof WorkInfoFormService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new WorkInfoFormModel(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof WorkInfoFormService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof WorkInfoFormService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof WorkInfoFormService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof WorkInfoFormService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof WorkInfoFormService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof WorkInfoFormService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof WorkInfoFormService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof WorkInfoFormService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof WorkInfoFormService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.task = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof WorkInfoFormService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof WorkInfoFormService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/work-info-form-form/work-info-form-form.less b/app_Web/src/widgets/task/work-info-form-form/work-info-form-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/task/work-info-form-form/work-info-form-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/task/work-info-form-form/work-info-form-form.vue b/app_Web/src/widgets/task/work-info-form-form/work-info-form-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..21522654262f6de7f7819855a8e6398576e95383 --- /dev/null +++ b/app_Web/src/widgets/task/work-info-form-form/work-info-form-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/task/work-info-portlet/work-info-portlet-base.vue b/app_Web/src/widgets/task/work-info-portlet/work-info-portlet-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..661324c7750adc0334a401a5019537f957e73ee2 --- /dev/null +++ b/app_Web/src/widgets/task/work-info-portlet/work-info-portlet-base.vue @@ -0,0 +1,216 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/task/work-info-portlet/work-info-portlet-model.ts b/app_Web/src/widgets/task/work-info-portlet/work-info-portlet-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..38be09736ae96b373f5683c4b287b72044ee124f --- /dev/null +++ b/app_Web/src/widgets/task/work-info-portlet/work-info-portlet-model.ts @@ -0,0 +1,151 @@ +/** + * WorkInfo 部件模型 + * + * @export + * @class WorkInfoModel + */ +export default class WorkInfoModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof WorkInfoModel + */ + public getDataItems(): any[] { + return [ + { + name: 'canceledby', + }, + { + name: 'left', + }, + { + name: 'openeddate', + }, + { + name: 'color', + }, + { + name: 'task', + prop: 'id', + }, + { + name: 'finishedby', + }, + { + name: 'finishedlist', + }, + { + name: 'realstarted', + }, + { + name: 'closedby', + }, + { + name: 'substatus', + }, + { + name: 'closedreason', + }, + { + name: 'lastediteddate', + }, + { + name: 'assigneddate', + }, + { + name: 'pri', + }, + { + name: 'lasteditedby', + }, + { + name: 'status', + }, + { + name: 'name', + }, + { + name: 'closeddate', + }, + { + name: 'type', + }, + { + name: 'assignedto', + }, + { + name: 'desc', + }, + { + name: 'eststarted', + }, + { + name: 'deadline', + }, + { + name: 'deleted', + }, + { + name: 'mailto', + }, + { + name: 'consumed', + }, + { + name: 'estimate', + }, + { + name: 'openedby', + }, + { + name: 'canceleddate', + }, + { + name: 'finisheddate', + }, + { + name: 'modulename', + }, + { + name: 'storyname', + }, + { + name: 'projectname', + }, + { + name: 'product', + }, + { + name: 'storyversion', + }, + { + name: 'productname', + }, + { + name: 'parentname', + }, + { + name: 'project', + }, + { + name: 'module', + }, + { + name: 'story', + }, + { + name: 'parent', + }, + { + name: 'frombug', + }, + { + name: 'duration', + }, + ] + } + + +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/work-info-portlet/work-info-portlet-service.ts b/app_Web/src/widgets/task/work-info-portlet/work-info-portlet-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..b8b25a31fd0b7ab614cecf21e82593ed3feae848 --- /dev/null +++ b/app_Web/src/widgets/task/work-info-portlet/work-info-portlet-service.ts @@ -0,0 +1,11 @@ +import { Http } from '@/utils'; +import ControlService from '@/widgets/control-service'; + +/** + * WorkInfo 部件服务对象 + * + * @export + * @class WorkInfoService + */ +export default class WorkInfoService extends ControlService { +} \ No newline at end of file diff --git a/app_Web/src/widgets/task/work-info-portlet/work-info-portlet.less b/app_Web/src/widgets/task/work-info-portlet/work-info-portlet.less new file mode 100644 index 0000000000000000000000000000000000000000..79fe0e3e9e4f43d98d8b98f5d0e7f1283e0fe7fc --- /dev/null +++ b/app_Web/src/widgets/task/work-info-portlet/work-info-portlet.less @@ -0,0 +1,4 @@ +.portlet { + --portlet: 0px; +} +// this is less diff --git a/app_Web/src/widgets/task/work-info-portlet/work-info-portlet.vue b/app_Web/src/widgets/task/work-info-portlet/work-info-portlet.vue new file mode 100644 index 0000000000000000000000000000000000000000..c0c4352a02fc8a1f002929cafed9a01c05a4af8c --- /dev/null +++ b/app_Web/src/widgets/task/work-info-portlet/work-info-portlet.vue @@ -0,0 +1,15 @@ + + \ No newline at end of file diff --git a/app_Web/src/widgets/user/main-form/main-form-base.vue b/app_Web/src/widgets/user/main-form/main-form-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..cf2eb487a2c7f8f157bad539cd300e64aa73e5f1 --- /dev/null +++ b/app_Web/src/widgets/user/main-form/main-form-base.vue @@ -0,0 +1,1942 @@ + + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/user/main-form/main-form-model.ts b/app_Web/src/widgets/user/main-form/main-form-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..248f3309f1169edb76ea8b1a1582353fb95301c2 --- /dev/null +++ b/app_Web/src/widgets/user/main-form/main-form-model.ts @@ -0,0 +1,136 @@ +/** + * Main 部件模型 + * + * @export + * @class MainModel + */ +export default class MainModel { + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainModel + */ + public getDataItems(): any[] { + return [ + { + name: 'srfwfmemo', + prop: 'srfwfmemo', + dataType: 'TEXT', + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + { + name: 'srforikey', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfmajortext', + prop: 'realname', + dataType: 'TEXT', + }, + { + name: 'srftempmode', + }, + { + name: 'srfuf', + }, + { + name: 'srfdeid', + }, + { + name: 'srfsourcekey', + }, + { + name: 'realname', + prop: 'realname', + dataType: 'TEXT', + }, + { + name: 'join', + prop: 'join', + dataType: 'DATE', + }, + { + name: 'dept', + prop: 'dept', + dataType: 'INT', + }, + { + name: 'role', + prop: 'role', + dataType: 'TEXT', + }, + { + name: 'gender', + prop: 'gender', + dataType: 'SSCODELIST', + }, + { + name: 'account', + prop: 'account', + dataType: 'TEXT', + }, + { + name: 'email', + prop: 'email', + dataType: 'TEXT', + }, + { + name: 'password', + prop: 'password', + dataType: 'TEXT', + }, + { + name: 'mobile', + prop: 'mobile', + dataType: 'TEXT', + }, + { + name: 'phone', + prop: 'phone', + dataType: 'TEXT', + }, + { + name: 'qq', + prop: 'qq', + dataType: 'TEXT', + }, + { + name: 'dingding', + prop: 'dingding', + dataType: 'TEXT', + }, + { + name: 'weixin', + prop: 'weixin', + dataType: 'TEXT', + }, + { + name: 'address', + prop: 'address', + dataType: 'TEXT', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'user', + prop: 'id', + dataType: 'FONTKEY', + }, + ] + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/user/main-form/main-form-service.ts b/app_Web/src/widgets/user/main-form/main-form-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..9c5fc1d3f418cb0484ced8cfe679f9a0ceb0fd8c --- /dev/null +++ b/app_Web/src/widgets/user/main-form/main-form-service.ts @@ -0,0 +1,371 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import UserService from '@/service/user/user-service'; +import MainModel from './main-form-model'; + + +/** + * Main 部件服务对象 + * + * @export + * @class MainService + */ +export default class MainService extends ControlService { + + /** + * 用户服务对象 + * + * @type {UserService} + * @memberof MainService + */ + public appEntityService: UserService = new UserService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof MainService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of MainService. + * + * @param {*} [opts={}] + * @memberof MainService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new MainModel(); + } + + /** + * 处理数据 + * + * @private + * @param {Promise} promise + * @returns {Promise} + * @memberof MainService + */ + private doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 启动工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFStart(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 提交工作流 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @param {*} [localdata] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise { + data = this.handleWFData(data,true); + context = this.handleRequestData(action,context,data).context; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](context,data, isloading,localdata); + } else { + result = this.appEntityService.WFSubmit(context,data, isloading,localdata); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Update(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + //仿真主键数据 + const PrimaryKey = Util.createUUID(); + Data.id = PrimaryKey; + Data.user = PrimaryKey; + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + response.data.id = PrimaryKey; + this.handleResponse(action, response, true); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response,true); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + + /** + * 处理请求数据 + * + * @param action 行为 + * @param data 数据 + * @memberof MainService + */ + public handleRequestData(action: string,context:any, data: any = {}){ + let mode: any = this.getMode(); + if (!mode && mode.getDataItems instanceof Function) { + return data; + } + let formItemItems: any[] = mode.getDataItems(); + let requestData:any = {}; + formItemItems.forEach((item:any) =>{ + if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ + if(item && item.prop){ + requestData[item.prop] = context[item.name]; + } + }else{ + if(item && item.prop){ + requestData[item.prop] = data[item.name]; + } + } + }); + if(data && data.viewparams){ + Object.assign(requestData,data.viewparams); + } + let tempContext:any = JSON.parse(JSON.stringify(context)); + if(tempContext && tempContext.srfsessionid){ + tempContext.srfsessionkey = tempContext.srfsessionid; + delete tempContext.srfsessionid; + } + return {context:tempContext,data:requestData}; + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/user/main-form/main-form.less b/app_Web/src/widgets/user/main-form/main-form.less new file mode 100644 index 0000000000000000000000000000000000000000..64e0fc50b92fc4b53a136d717444baff5751c11d --- /dev/null +++ b/app_Web/src/widgets/user/main-form/main-form.less @@ -0,0 +1,4 @@ +.form { + --form: 0px; +} +// this is less diff --git a/app_Web/src/widgets/user/main-form/main-form.vue b/app_Web/src/widgets/user/main-form/main-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..62e1a826d86b318d31735af1fed3683f8de2e5fa --- /dev/null +++ b/app_Web/src/widgets/user/main-form/main-form.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/src/widgets/user/main-grid/main-grid-base.vue b/app_Web/src/widgets/user/main-grid/main-grid-base.vue new file mode 100644 index 0000000000000000000000000000000000000000..803c44dc3cc4822f03fa187e823f06ed4d4949d5 --- /dev/null +++ b/app_Web/src/widgets/user/main-grid/main-grid-base.vue @@ -0,0 +1,1731 @@ + + + + \ No newline at end of file diff --git a/app_Web/src/widgets/user/main-grid/main-grid-model.ts b/app_Web/src/widgets/user/main-grid/main-grid-model.ts new file mode 100644 index 0000000000000000000000000000000000000000..3c9b872c4e4574bb5bc081fa2f40c64164a1cbba --- /dev/null +++ b/app_Web/src/widgets/user/main-grid/main-grid-model.ts @@ -0,0 +1,133 @@ +/** + * Main 部件模型 + * + * @export + * @class MainModel + */ +export default class MainModel { + + /** + * 是否是实体数据导出 + * + * @returns {any[]} + * @memberof MainGridMode + */ + public isDEExport: boolean = false; + + /** + * 获取数据项集合 + * + * @returns {any[]} + * @memberof MainGridMode + */ + public getDataItems(): any[] { + if(this.isDEExport){ + return [ + ] + }else{ + return [ + { + name: 'phone', + prop: 'phone', + dataType: 'TEXT', + }, + { + name: 'last', + prop: 'last', + dataType: 'INT', + }, + { + name: 'srfmajortext', + prop: 'realname', + dataType: 'TEXT', + }, + { + name: 'srfdataaccaction', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'srfkey', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'id', + prop: 'id', + dataType: 'ACID', + }, + { + name: 'email', + prop: 'email', + dataType: 'TEXT', + }, + { + name: 'address', + prop: 'address', + dataType: 'TEXT', + }, + { + name: 'account', + prop: 'account', + dataType: 'TEXT', + }, + { + name: 'role', + prop: 'role', + dataType: 'TEXT', + }, + { + name: 'gender', + prop: 'gender', + dataType: 'SSCODELIST', + }, + { + name: 'realname', + prop: 'realname', + dataType: 'TEXT', + }, + { + name: 'visits', + prop: 'visits', + dataType: 'INT', + }, + { + name: 'qq', + prop: 'qq', + dataType: 'TEXT', + }, + { + name: 'user', + prop: 'id', + }, + { + name:'size', + prop:'size' + }, + { + name:'query', + prop:'query' + }, + { + name:'page', + prop:'page' + }, + { + name:'sort', + prop:'sort' + }, + { + name:'srfparentdata', + prop:'srfparentdata' + }, + // 前端新增修改标识,新增为"0",修改为"1"或未设值 + { + name: 'srffrontuf', + prop: 'srffrontuf', + dataType: 'TEXT', + }, + ] + } + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/user/main-grid/main-grid-service.ts b/app_Web/src/widgets/user/main-grid/main-grid-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..1ab2f9f9b1e7cb3b539ce4bf44ee930f571248b9 --- /dev/null +++ b/app_Web/src/widgets/user/main-grid/main-grid-service.ts @@ -0,0 +1,318 @@ +import { Http,Util,Errorlog } from '@/utils'; +import ControlService from '@/widgets/control-service'; +import UserService from '@/service/user/user-service'; +import MainModel from './main-grid-model'; + + +/** + * Main 部件服务对象 + * + * @export + * @class MainService + */ +export default class MainService extends ControlService { + + /** + * 用户服务对象 + * + * @type {UserService} + * @memberof MainService + */ + public appEntityService: UserService = new UserService({ $store: this.getStore() }); + + /** + * 设置从数据模式 + * + * @type {boolean} + * @memberof MainService + */ + public setTempMode(){ + this.isTempMode = false; + } + + /** + * Creates an instance of MainService. + * + * @param {*} [opts={}] + * @memberof MainService + */ + constructor(opts: any = {}) { + super(opts); + this.model = new MainModel(); + } + + + /** + * 处理数据 + * + * @public + * @param {Promise} promise + * @returns {Promise} + * @memberof MainService + */ + public doItems(promise: Promise, deKeyField: string, deName: string): Promise { + return new Promise((resolve, reject) => { + promise.then((response: any) => { + if (response && response.status === 200) { + const data = response.data; + data.forEach((item:any,index:number) =>{ + item[deName] = item[deKeyField]; + data[index] = item; + }); + resolve(data); + } else { + reject([]) + } + }).catch((response: any) => { + reject([]) + }); + }); + } + + /** + * 获取跨实体数据集合 + * + * @param {string} serviceName 服务名称 + * @param {string} interfaceName 接口名称 + * @param {*} data + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise { + + return Promise.reject([]) + } + + /** + * 添加数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Create(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 删除数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.Remove(Context,Data, isloading); + } + result.then((response) => { + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 修改数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Data,Context,isloading); + }else{ + result =_appEntityService.Update(Data,Context,isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 获取数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public get(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.Get(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:0}); + } + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 查询数据 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public search(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + const _appEntityService: any = this.appEntityService; + let result: Promise; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + }else{ + result =_appEntityService.FetchDefault(Context,Data, isloading); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + + /** + * 加载草稿 + * + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public loadDraft(action: string, context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any) => { + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + result = this.appEntityService.GetDraft(Context,Data, isloading); + } + result.then((response) => { + //处理返回数据,补充判断标识 + if(response.data){ + Object.assign(response.data,{srfuf:'0'}); + //仿真主键数据 + response.data.id = Util.createUUID(); + } + this.handleResponse(action, response, true); + this.mergeDefaults(response); + resolve(response); + }).catch(response => { + reject(response); + }); + }); + } + + /** + * 合并配置的默认值 + * @param {*} + * @memberof MainService + */ + public mergeDefaults(response:any = {}){ + if(response.data){ + } + } + + + /** + * 前台逻辑 + * @param {string} action + * @param {*} [context={}] + * @param {*} [data={}] + * @param {boolean} [isloading] + * @returns {Promise} + * @memberof MainService + */ + @Errorlog + public frontLogic(action:string,context: any = {}, data: any = {}, isloading?: boolean): Promise { + const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); + return new Promise((resolve: any, reject: any)=>{ + let result: Promise; + const _appEntityService: any = this.appEntityService; + if (_appEntityService[action] && _appEntityService[action] instanceof Function) { + result = _appEntityService[action](Context,Data, isloading); + } else { + return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); + } + result.then((response) => { + this.handleResponse(action, response); + resolve(response); + }).catch(response => { + reject(response); + }); + }) + } + +} \ No newline at end of file diff --git a/app_Web/src/widgets/user/main-grid/main-grid.less b/app_Web/src/widgets/user/main-grid/main-grid.less new file mode 100644 index 0000000000000000000000000000000000000000..6a7da728b17882d2231f0b993dbbfc09610c58fb --- /dev/null +++ b/app_Web/src/widgets/user/main-grid/main-grid.less @@ -0,0 +1,4 @@ +.grid { + --grid: 0; +} +// this is less diff --git a/app_Web/src/widgets/user/main-grid/main-grid.vue b/app_Web/src/widgets/user/main-grid/main-grid.vue new file mode 100644 index 0000000000000000000000000000000000000000..c63fa029c9d0816f25dc2bf1d76d50ec20c611f2 --- /dev/null +++ b/app_Web/src/widgets/user/main-grid/main-grid.vue @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app_Web/yarn.lock b/app_Web/yarn.lock index 7bdbaa0c3ebe106281f8257c8b2c6df874722663..a6d96a03fed07bda2c1965a95b91bf8063dde84d 100644 --- a/app_Web/yarn.lock +++ b/app_Web/yarn.lock @@ -2,6 +2,15 @@ # yarn lockfile v1 +"3d-view@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/3d-view/-/3d-view-2.0.0.tgz#831ae942d7508c50801e3e06fafe1e8c574e17be" + integrity sha1-gxrpQtdQjFCAHj4G+v4ejFdOF74= + dependencies: + matrix-camera-controller "^2.1.1" + orbit-camera-controller "^4.0.0" + turntable-camera-controller "^3.0.0" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" @@ -768,6 +777,13 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@choojs/findup@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@choojs/findup/-/findup-0.2.1.tgz#ac13c59ae7be6e1da64de0779a0a7f03d75615a3" + integrity sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw== + dependencies: + commander "^2.15.1" + "@cnakazawa/watch@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" @@ -1344,6 +1360,56 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" +"@mapbox/geojson-rewind@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.5.0.tgz#91f0ad56008c120caa19414b644d741249f4f560" + integrity sha512-73l/qJQgj/T/zO1JXVfuVvvKDgikD/7D/rHAD28S9BG1OTstgmftrmqfCx4U+zQAmtsB6HcDA3a7ymdnJZAQgg== + dependencies: + concat-stream "~2.0.0" + minimist "^1.2.5" + +"@mapbox/geojson-types@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6" + integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw== + +"@mapbox/jsonlint-lines-primitives@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" + integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ= + +"@mapbox/mapbox-gl-supported@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz#f60b6a55a5d8e5ee908347d2ce4250b15103dc8e" + integrity sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg== + +"@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" + integrity sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI= + +"@mapbox/tiny-sdf@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-1.1.1.tgz#16a20c470741bfe9191deb336f46e194da4a91ff" + integrity sha512-Ihn1nZcGIswJ5XGbgFAvVumOgWpvIjBX9jiRlIl46uQG9vJOF51ViBYHF95rEZupuyQbEmhLaDPLQlU7fUTsBg== + +"@mapbox/unitbezier@^0.0.0": + version "0.0.0" + resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e" + integrity sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4= + +"@mapbox/vector-tile@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666" + integrity sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw== + dependencies: + "@mapbox/point-geometry" "~0.1.0" + +"@mapbox/whoots-js@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" + integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -1357,6 +1423,25 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@plotly/d3-sankey-circular@0.33.1": + version "0.33.1" + resolved "https://registry.yarnpkg.com/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz#15d1e0337e0e4b1135bdf0e2195c88adacace1a7" + integrity sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ== + dependencies: + d3-array "^1.2.1" + d3-collection "^1.0.4" + d3-shape "^1.2.0" + elementary-circuits-directed-graph "^1.0.4" + +"@plotly/d3-sankey@0.7.2": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@plotly/d3-sankey/-/d3-sankey-0.7.2.tgz#ddd5290d3b02c60037ced018a162644a2ccef33b" + integrity sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw== + dependencies: + d3-array "1" + d3-collection "1" + d3-shape "^1.2.0" + "@soda/friendly-errors-webpack-plugin@^1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz#706f64bcb4a8b9642b48ae3ace444c70334d615d" @@ -1366,6 +1451,42 @@ error-stack-parser "^2.0.0" string-width "^2.0.0" +"@turf/area@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@turf/area/-/area-6.0.1.tgz#50ed63c70ef2bdb72952384f1594319d94f3b051" + integrity sha512-Zv+3N1ep9P5JvR0YOYagLANyapGWQBh8atdeR3bKpWcigVXFsEKNUw03U/5xnh+cKzm7yozHD6MFJkqQv55y0g== + dependencies: + "@turf/helpers" "6.x" + "@turf/meta" "6.x" + +"@turf/bbox@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.0.1.tgz#b966075771475940ee1c16be2a12cf389e6e923a" + integrity sha512-EGgaRLettBG25Iyx7VyUINsPpVj1x3nFQFiGS3ER8KCI1MximzNLsam3eXRabqQDjyAKyAE1bJ4EZEpGvspQxw== + dependencies: + "@turf/helpers" "6.x" + "@turf/meta" "6.x" + +"@turf/centroid@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@turf/centroid/-/centroid-6.0.2.tgz#c4eb16b4bc60b692f74e1809cf9a7c4a4f5ba1cc" + integrity sha512-auyDauOtC4eddH7GC3CHFTDu2PKhpSeKCRhwhHhXtJqn2dWCJQNIoCeJRmfXRIbzCWhWvgvQafvvhq8HNvmvWw== + dependencies: + "@turf/helpers" "6.x" + "@turf/meta" "6.x" + +"@turf/helpers@6.x": + version "6.1.4" + resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.1.4.tgz#d6fd7ebe6782dd9c87dca5559bda5c48ae4c3836" + integrity sha512-vJvrdOZy1ngC7r3MDA7zIGSoIgyrkWcGnNIEaqn/APmw+bVLF2gAW7HIsdTxd12s5wQMqEpqIQrmrbRRZ0xC7g== + +"@turf/meta@6.x": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.0.2.tgz#eb92951126d24a613ac1b7b99d733fcc20fd30cf" + integrity sha512-VA7HJkx7qF1l3+GNGkDVn2oXy4+QoLP6LktXAaZKjuT1JI0YESat7quUkbCMy4zP9lAUuvS4YMslLyTtr919FA== + dependencies: + "@turf/helpers" "6.x" + "@types/babel__core@^7.1.0": version "7.1.3" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30" @@ -1934,6 +2055,15 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== +a-big-triangle@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/a-big-triangle/-/a-big-triangle-1.0.3.tgz#eefd30b02a8f525e8b1f72bb6bb1b0c16751c794" + integrity sha1-7v0wsCqPUl6LH3K7a7GwwWdRx5Q= + dependencies: + gl-buffer "^2.1.1" + gl-vao "^1.2.0" + weak-map "^1.0.5" + abab@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" @@ -1944,6 +2074,11 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abs-svg-path@^0.1.1, abs-svg-path@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf" + integrity sha1-32Acjo0roQ1KdtYl4japo5wnI78= + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -1952,6 +2087,11 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + acorn-globals@^4.1.0, acorn-globals@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" @@ -1960,6 +2100,11 @@ acorn-globals@^4.1.0, acorn-globals@^4.3.2: acorn "^6.0.1" acorn-walk "^6.0.1" +acorn-jsx@^5.0.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + acorn-walk@^6.0.1, acorn-walk@^6.1.1: version "6.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" @@ -1980,6 +2125,18 @@ acorn@^7.1.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== +acorn@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe" + integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ== + +add-line-numbers@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/add-line-numbers/-/add-line-numbers-1.0.1.tgz#48dbbdea47dbd234deafeac6c93cea6f70b4b7e3" + integrity sha1-SNu96kfb0jTer+rGyTzqb3C0t+M= + dependencies: + pad-left "^1.0.2" + address@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -1993,6 +2150,13 @@ adler-32@~1.2.0: exit-on-epipe "~1.0.1" printj "~1.1.0" +affine-hull@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/affine-hull/-/affine-hull-1.0.0.tgz#763ff1d38d063ceb7e272f17ee4d7bbcaf905c5d" + integrity sha1-dj/x040GPOt+Jy8X7k17vK+QXF0= + dependencies: + robust-orientation "^1.1.3" + aggregate-error@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" @@ -2021,11 +2185,46 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +almost-equal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/almost-equal/-/almost-equal-1.1.0.tgz#f851c631138757994276aa2efbe8dfa3066cccdd" + integrity sha1-+FHGMROHV5lCdqou++jfowZszN0= + +alpha-complex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/alpha-complex/-/alpha-complex-1.0.0.tgz#90865870d6b0542ae73c0c131d4ef989669b72d2" + integrity sha1-kIZYcNawVCrnPAwTHU75iWabctI= + dependencies: + circumradius "^1.0.0" + delaunay-triangulate "^1.1.6" + +alpha-shape@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/alpha-shape/-/alpha-shape-1.0.0.tgz#c83109923ecfda667d2163fe4f26fe24726f64a9" + integrity sha1-yDEJkj7P2mZ9IWP+Tyb+JHJvZKk= + dependencies: + alpha-complex "^1.0.0" + simplicial-complex-boundary "^1.0.0" + alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" @@ -2133,6 +2332,11 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-bounds@^1.0.0, array-bounds@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-bounds/-/array-bounds-1.0.1.tgz#da11356b4e18e075a4f0c86e1f179a67b7d7ea31" + integrity sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ== + array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" @@ -2148,6 +2352,23 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== +array-normalize@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array-normalize/-/array-normalize-1.1.4.tgz#d75cec57383358af38efdf6a78071aa36ae4174c" + integrity sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg== + dependencies: + array-bounds "^1.0.0" + +array-range@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-range/-/array-range-1.0.1.tgz#f56e46591843611c6a56f77ef02eda7c50089bfc" + integrity sha1-9W5GWRhDYRxqVvd+8C7afFAIm/w= + +array-rearrange@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/array-rearrange/-/array-rearrange-2.2.2.tgz#fa1a2acf8d02e88dd0c9602aa0e06a79158b2283" + integrity sha512-UfobP5N12Qm4Qu4fwLDIi2v6+wZsSf6snYSxAMeKhrh37YGnNWZPRmVEKc/2wfms53TLQnzfpG8wCx2Y/6NG1w== + array-union@^1.0.1, array-union@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -2248,6 +2469,16 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +atob-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-1.0.0.tgz#b88dca6006922b962094f7556826bab31c4a296b" + integrity sha1-uI3KYAaSK5YglPdVaCa6sxxKKWs= + +atob-lite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" + integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -2450,6 +2681,13 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +barycentric@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/barycentric/-/barycentric-1.0.1.tgz#f1562bb891b26f4fec463a82eeda3657800ec688" + integrity sha1-8VYruJGyb0/sRjqC7to2V4AOxog= + dependencies: + robust-linear-solve "^1.0.0" + base64-js@^1.0.2: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" @@ -2495,6 +2733,15 @@ bfj@^6.1.1: hoopy "^0.1.4" tryer "^1.0.1" +big-rat@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/big-rat/-/big-rat-1.0.4.tgz#768d093bb57930dd18ed575c7fca27dc5391adea" + integrity sha1-do0JO7V5MN0Y7Vdcf8on3FORreo= + dependencies: + bit-twiddle "^1.0.2" + bn.js "^4.11.6" + double-bits "^1.1.1" + big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" @@ -2510,6 +2757,16 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-search-bounds@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/binary-search-bounds/-/binary-search-bounds-1.0.0.tgz#323ca317e3f2a40f4244c7255f5384a5b207bb69" + integrity sha1-MjyjF+PypA9CRMclX1OEpbIHu2k= + +binary-search-bounds@^2.0.3, binary-search-bounds@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/binary-search-bounds/-/binary-search-bounds-2.0.4.tgz#eea0e4081da93baa851c7d851a7e636c3d51307f" + integrity sha512-2hg5kgdKql5ClF2ErBcSx0U5bnl5hgS4v7wMnLFodyR47yMtj2w+UAZB+0CiqyHct2q543i7Bi4/aMIegorCCg== + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -2517,6 +2774,31 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bit-twiddle@^1.0.0, bit-twiddle@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e" + integrity sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4= + +bit-twiddle@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-0.0.2.tgz#c2eaebb952a3b94acc140497e1cdcd2f1a33f58e" + integrity sha1-wurruVKjuUrMFASX4c3NLxoz9Y4= + +bitmap-sdf@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bitmap-sdf/-/bitmap-sdf-1.0.3.tgz#c99913e5729357a6fd350de34158180c013880b2" + integrity sha512-ojYySSvWTx21cbgntR942zgEgqj38wHctN64vr4vYRFf3GKVmI23YlA94meWGkFslidwLwGCsMy2laJ3g/94Sg== + dependencies: + clamp "^1.0.1" + +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + bluebird@^3.1.1, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -2527,6 +2809,11 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== +bn.js@^4.11.6: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -2560,6 +2847,21 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= +boundary-cells@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/boundary-cells/-/boundary-cells-2.0.1.tgz#e905a8d1419cf47cb36be3dbf525db5e24de0042" + integrity sha1-6QWo0UGc9Hyza+Pb9SXbXiTeAEI= + dependencies: + tape "^4.0.0" + +box-intersect@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/box-intersect/-/box-intersect-1.0.2.tgz#4693ad63e828868d0654b114e09364d6281f3fbd" + integrity sha512-yJeMwlmFPG1gIa7Rs/cGXeI6iOj6Qz5MG5PE61xLKpElUGzmJ4abm+qsLpzxKJFpsSDq742BQEocr8dI2t8Nxw== + dependencies: + bit-twiddle "^1.0.2" + typedarray-pool "^1.1.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2690,6 +2992,27 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buble@^0.19.3: + version "0.19.8" + resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.8.tgz#d642f0081afab66dccd897d7b6360d94030b9d3d" + integrity sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA== + dependencies: + acorn "^6.1.1" + acorn-dynamic-import "^4.0.0" + acorn-jsx "^5.0.1" + chalk "^2.4.2" + magic-string "^0.25.3" + minimist "^1.2.0" + os-homedir "^2.0.0" + regexpu-core "^4.5.4" + +bubleify@^1.1.0, bubleify@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bubleify/-/bubleify-1.2.1.tgz#c11fa33fa59d5b9b747d4e486f43889084257f37" + integrity sha512-vp3NHmaQVoKaKWvi15FTMinPNjfp+47+/kFJ9ifezdMF/CBLArCxDVUh+FQE3qRxCRj1qyjJqilTBHHqlM8MaQ== + dependencies: + buble "^0.19.3" + buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2848,6 +3171,11 @@ camel-case@3.0.x: no-case "^2.2.0" upper-case "^1.1.1" +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -2873,6 +3201,13 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001017, caniuse-lite@^1.0.30001020: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001020.tgz#3f04c1737500ffda78be9beb0b5c1e2070e15926" integrity sha512-yWIvwA68wRHKanAVS1GjN8vajAv7MBFshullKCeq/eKpK7pJBVDgFFEqvgWTkcP2+wIDeQGYFRXECjKZnLkUjA== +canvas-fit@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/canvas-fit/-/canvas-fit-1.5.0.tgz#ae13be66ade42f5be0e487e345fce30a5e5b5e5f" + integrity sha1-rhO+Zq3kL1vg5IfjRfzjCl5bXl8= + dependencies: + element-size "^1.1.1" + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -2890,6 +3225,28 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +cdt2d@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cdt2d/-/cdt2d-1.0.0.tgz#4f212434bcd67bdb3d68b8fef4acdc2c54415141" + integrity sha1-TyEkNLzWe9s9aLj+9KzcLFRBUUE= + dependencies: + binary-search-bounds "^2.0.3" + robust-in-sphere "^1.1.3" + robust-orientation "^1.1.3" + +cell-orientation@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cell-orientation/-/cell-orientation-1.0.1.tgz#b504ad96a66ad286d9edd985a2253d03b80d2850" + integrity sha1-tQStlqZq0obZ7dmFoiU9A7gNKFA= + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + cfb@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.1.4.tgz#81fd35ede4c919d8f0962a94582e1dfaf7051e2a" @@ -2982,6 +3339,26 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +circumcenter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/circumcenter/-/circumcenter-1.0.0.tgz#20d7aa13b17fbac52f52da4f54c6ac8b906ee529" + integrity sha1-INeqE7F/usUvUtpPVMasi5Bu5Sk= + dependencies: + dup "^1.0.0" + robust-linear-solve "^1.0.0" + +circumradius@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/circumradius/-/circumradius-1.0.0.tgz#706c447e3e55cd1ed3d11bd133e37c252cc305b5" + integrity sha1-cGxEfj5VzR7T0RvRM+N8JSzDBbU= + dependencies: + circumcenter "^1.0.0" + +clamp@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/clamp/-/clamp-1.0.1.tgz#66a0e64011816e37196828fdc8c8c147312c8634" + integrity sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ= + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -2999,6 +3376,19 @@ clean-css@4.2.x: dependencies: source-map "~0.6.0" +clean-pslg@^1.1.0, clean-pslg@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/clean-pslg/-/clean-pslg-1.1.2.tgz#bd35c7460b7e8ab5a9f761a5ed51796aa3c86c11" + integrity sha1-vTXHRgt+irWp92Gl7VF5aqPIbBE= + dependencies: + big-rat "^1.0.3" + box-intersect "^1.0.1" + nextafter "^1.0.0" + rat-vec "^1.1.1" + robust-segment-intersect "^1.0.1" + union-find "^1.0.2" + uniq "^1.0.1" + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -3036,6 +3426,15 @@ clipboardy@^2.0.0: arch "^2.1.1" execa "^1.0.0" +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -3108,6 +3507,13 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" +color-alpha@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/color-alpha/-/color-alpha-1.0.4.tgz#c141dc926e95fc3db647d0e14e5bc3651c29e040" + integrity sha512-lr8/t5NPozTSqli+duAN+x+no/2WaKTeWvxhHGN+aXT6AJ8vPlzLa7UriyjWak0pSC2jHol9JgjBYnnHsGha9A== + dependencies: + color-parse "^1.3.8" + color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -3122,6 +3528,13 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" +color-id@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/color-id/-/color-id-1.1.0.tgz#5e9159b99a73ac98f74820cb98a15fde3d7e034c" + integrity sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g== + dependencies: + clamp "^1.0.1" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" @@ -3132,6 +3545,41 @@ color-name@^1.0.0, color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-normalize@1.5.0, color-normalize@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/color-normalize/-/color-normalize-1.5.0.tgz#ee610af9acb15daf73e77a945a847b18e40772da" + integrity sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw== + dependencies: + clamp "^1.0.1" + color-rgba "^2.1.1" + dtype "^2.0.0" + +color-parse@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/color-parse/-/color-parse-1.3.8.tgz#eaf54cd385cb34c0681f18c218aca38478082fa3" + integrity sha512-1Y79qFv0n1xair3lNMTNeoFvmc3nirMVBij24zbs1f13+7fPpQClMg5b4AuKXLt3szj7BRlHMCXHplkce6XlmA== + dependencies: + color-name "^1.0.0" + defined "^1.0.0" + is-plain-obj "^1.1.0" + +color-rgba@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/color-rgba/-/color-rgba-2.1.1.tgz#4633b83817c7406c90b3d7bf4d1acfa48dde5c83" + integrity sha512-VaX97wsqrMwLSOR6H7rU1Doa2zyVdmShabKrPEIFywLlHoibgD3QW9Dw6fSqM4+H/LfjprDNAUUW31qEQcGzNw== + dependencies: + clamp "^1.0.1" + color-parse "^1.3.8" + color-space "^1.14.6" + +color-space@^1.14.6: + version "1.16.0" + resolved "https://registry.yarnpkg.com/color-space/-/color-space-1.16.0.tgz#611781bca41cd8582a1466fd9e28a7d3d89772a2" + integrity sha512-A6WMiFzunQ8KEPFmj02OnnoUnqhmSaHaZ/0LVFcPTdlvm8+3aMJ5x1HRHy3bDHPkovkf4sS0f4wsVvwk71fKkg== + dependencies: + hsluv "^0.0.3" + mumath "^3.3.4" + color-string@^1.5.2: version "1.5.3" resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" @@ -3148,6 +3596,13 @@ color@^3.0.0: color-convert "^1.9.1" color-string "^1.5.2" +colormap@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/colormap/-/colormap-2.3.1.tgz#9f2ab643591c0728d32332d5480b2487a4e0f249" + integrity sha512-TEzNlo/qYp6pBoR2SK9JiV+DG1cmUcVO/+DEJqVPSHIKNlWh5L5L4FYog7b/h0bAnhKhpOAvx/c1dFp2QE9sFw== + dependencies: + lerp "^1.0.3" + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -3160,16 +3615,16 @@ commander@*: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83" integrity sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw== +commander@2, commander@^2.12.1, commander@^2.15.1, commander@^2.16.0, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@2.17.x, commander@~2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.12.1, commander@^2.16.0, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@~2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - commander@~2.14.1: version "2.14.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" @@ -3185,6 +3640,30 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +compare-angle@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/compare-angle/-/compare-angle-1.0.1.tgz#a4eb63416ea3c747fc6bd6c8b63668b4de4fa129" + integrity sha1-pOtjQW6jx0f8a9bItjZotN5PoSk= + dependencies: + robust-orientation "^1.0.2" + robust-product "^1.0.0" + robust-sum "^1.0.0" + signum "^0.0.0" + two-sum "^1.0.0" + +compare-cell@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/compare-cell/-/compare-cell-1.0.0.tgz#a9eb708f6e0e41aef7aa566b130f1968dc9e1aaa" + integrity sha1-qetwj24OQa73qlZrEw8ZaNyeGqo= + +compare-oriented-cell@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/compare-oriented-cell/-/compare-oriented-cell-1.0.1.tgz#6a149feef9dfc4f8fc62358e51dd42effbbdc39e" + integrity sha1-ahSf7vnfxPj8YjWOUd1C7/u9w54= + dependencies: + cell-orientation "^1.0.1" + compare-cell "^1.0.0" + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -3210,12 +3689,23 @@ compression@^1.7.4: safe-buffer "5.1.2" vary "~1.1.2" +compute-dims@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/compute-dims/-/compute-dims-1.1.0.tgz#6d5b712929b6c531af3b4d580ed5adacbbd77e0c" + integrity sha512-YHMiIKjH/8Eom8zATk3g8/lH3HxGCZcVQyEfEoVrfWI7od/WRpTgRGShnei3jArYSx77mQqPxZNokjGHCdLfxg== + dependencies: + utils-copy "^1.0.0" + validate.io-array "^1.0.6" + validate.io-matrix-like "^1.0.2" + validate.io-ndarray-like "^1.0.0" + validate.io-positive-integer "^1.0.0" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0: +concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@~1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -3225,6 +3715,16 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" +concat-stream@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + condense-newlines@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/condense-newlines/-/condense-newlines-0.2.1.tgz#3de985553139475d32502c83b02f60684d24c55f" @@ -3259,6 +3759,16 @@ consolidate@^0.15.1: dependencies: bluebird "^3.1.1" +const-max-uint32@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/const-max-uint32/-/const-max-uint32-1.0.2.tgz#f009bb6230e678ed874dd2d6a9cd9e3cbfabb676" + integrity sha1-8Am7YjDmeO2HTdLWqc2ePL+rtnY= + +const-pinf-float64@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/const-pinf-float64/-/const-pinf-float64-1.0.0.tgz#f6efb0d79f9c0986d3e79f2923abf9b70b63d726" + integrity sha1-9u+w15+cCYbT558pI6v5twtj1yY= + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -3283,6 +3793,15 @@ convert-source-map@^1.4.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" +convex-hull@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/convex-hull/-/convex-hull-1.0.3.tgz#20a3aa6ce87f4adea2ff7d17971c9fc1c67e1fff" + integrity sha1-IKOqbOh/St6i/30XlxyfwcZ+H/8= + dependencies: + affine-hull "^1.0.0" + incremental-convex-hull "^1.0.1" + monotone-convex-hull-2d "^1.0.1" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -3336,7 +3855,7 @@ core-js-compat@^3.4.4, core-js-compat@^3.6.2: browserslist "^4.8.3" semver "7.0.0" -core-js@^2.4.0: +core-js@^2.4.0, core-js@^2.6.5: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== @@ -3366,6 +3885,11 @@ cosmiconfig@^5.0.0: js-yaml "^3.13.1" parse-json "^4.0.0" +country-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/country-regex/-/country-regex-1.1.0.tgz#51c333dcdf12927b7e5eeb9c10ac8112a6120896" + integrity sha1-UcMz3N8Sknt+XuucEKyBEqYSCJY= + crc-32@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" @@ -3464,6 +3988,51 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" +css-element-queries@^1.0.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/css-element-queries/-/css-element-queries-1.2.3.tgz#e14940b1fcd4bf0da60ea4145d05742d7172e516" + integrity sha512-QK9uovYmKTsV2GXWQiMOByVNrLn2qz6m3P7vWpOR4IdD6I3iXoDw5qtgJEN3Xq7gIbdHVKvzHjdAtcl+4Arc4Q== + +css-font-size-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz#854875ace9aca6a8d2ee0d345a44aae9bb6db6cb" + integrity sha1-hUh1rOmspqjS7g00WkSq6btttss= + +css-font-stretch-keywords@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz#50cee9b9ba031fb5c952d4723139f1e107b54b10" + integrity sha1-UM7puboDH7XJUtRyMTnx4Qe1SxA= + +css-font-style-keywords@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz#5c3532813f63b4a1de954d13cea86ab4333409e4" + integrity sha1-XDUygT9jtKHelU0TzqhqtDM0CeQ= + +css-font-weight-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz#9bc04671ac85bc724b574ef5d3ac96b0d604fd97" + integrity sha1-m8BGcayFvHJLV07106yWsNYE/Zc= + +css-font@^1.0.0, css-font@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-font/-/css-font-1.2.0.tgz#e73cbdc11fd87c8e6c928ad7098a9771c8c2b6e3" + integrity sha512-V4U4Wps4dPDACJ4WpgofJ2RT5Yqwe1lEH6wlOOaIxMi0gTjdIijsc5FmxQlZ7ZZyKQkkutqqvULOp07l9c7ssA== + dependencies: + css-font-size-keywords "^1.0.0" + css-font-stretch-keywords "^1.0.1" + css-font-style-keywords "^1.0.1" + css-font-weight-keywords "^1.0.0" + css-global-keywords "^1.0.1" + css-system-font-keywords "^1.0.0" + pick-by-alias "^1.2.0" + string-split-by "^1.0.0" + unquote "^1.1.0" + +css-global-keywords@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-global-keywords/-/css-global-keywords-1.0.1.tgz#72a9aea72796d019b1d2a3252de4e5aaa37e4a69" + integrity sha1-cqmupyeW0Bmx0qMlLeTlqqN+Smk= + css-loader@^3.1.0: version "3.4.2" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.4.2.tgz#d3fdb3358b43f233b78501c5ed7b1c6da6133202" @@ -3507,6 +4076,11 @@ css-select@^2.0.0: domutils "^1.7.0" nth-check "^1.0.2" +css-system-font-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz#85c6f086aba4eb32c571a3086affc434b84823ed" + integrity sha1-hcbwhquk6zLFcaMIav/ENLhII+0= + css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" @@ -3540,6 +4114,11 @@ css@^2.1.0: source-map-resolve "^0.5.2" urix "^0.1.0" +csscolorparser@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" + integrity sha1-s085HupNqPPpgjHizNjfnAQfFxs= + cssesc@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" @@ -3649,36 +4228,143 @@ cssstyle@^2.0.0: dependencies: cssom "~0.3.6" +cubic-hermite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cubic-hermite/-/cubic-hermite-1.0.0.tgz#84e3b2f272b31454e8393b99bb6aed45168c14e5" + integrity sha1-hOOy8nKzFFToOTuZu2rtRRaMFOU= + current-script-polyfill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz#f31cf7e4f3e218b0726e738ca92a02d3488ef615" integrity sha1-8xz35PPiGLBybnOMqSoC00iO9hU= +cwise-compiler@^1.0.0, cwise-compiler@^1.1.1, cwise-compiler@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/cwise-compiler/-/cwise-compiler-1.1.3.tgz#f4d667410e850d3a313a7d2db7b1e505bb034cc5" + integrity sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU= + dependencies: + uniq "^1.0.0" + +cwise-parser@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cwise-parser/-/cwise-parser-1.0.3.tgz#8e493c17d54f97cb030a9e9854bc86c9dfb354fe" + integrity sha1-jkk8F9VPl8sDCp6YVLyGyd+zVP4= + dependencies: + esprima "^1.0.3" + uniq "^1.0.0" + +cwise@^1.0.10, cwise@^1.0.4: + version "1.0.10" + resolved "https://registry.yarnpkg.com/cwise/-/cwise-1.0.10.tgz#24eee6072ebdfd6b8c6f5dadb17090b649b12bef" + integrity sha1-JO7mBy69/WuMb12tsXCQtkmxK+8= + dependencies: + cwise-compiler "^1.1.1" + cwise-parser "^1.0.0" + static-module "^1.0.0" + uglify-js "^2.6.0" + cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" +d3-array@1, d3-array@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== -data-urls@^1.0.0, data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== +d3-collection@1, d3-collection@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" + integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== + +d3-color@1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" + integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== + +d3-dispatch@1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58" + integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA== + +d3-force@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.2.1.tgz#fd29a5d1ff181c9e7f0669e4bd72bdb0e914ec0b" + integrity sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg== dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" + d3-collection "1" + d3-dispatch "1" + d3-quadtree "1" + d3-timer "1" -dayjs@^1.8.16: - version "1.8.27" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.27.tgz#a8ae63ee990af28c05c430f0e160ae835a0fbbf8" - integrity sha512-Jpa2acjWIeOkg8KURUHICk0EqnEFSSF5eMEscsOgyJ92ZukXwmpmRkPSUka7KHSfbj5eKH30ieosYip+ky9emQ== +d3-hierarchy@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83" + integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ== + +d3-interpolate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" + integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== + dependencies: + d3-color "1" + +d3-path@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" + integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== + +d3-quadtree@1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.7.tgz#ca8b84df7bb53763fe3c2f24bd435137f4e53135" + integrity sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA== + +d3-shape@^1.2.0: + version "1.3.7" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" + integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== + dependencies: + d3-path "1" + +d3-timer@1: + version "1.0.10" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5" + integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw== + +d3@^3.5.17: + version "3.5.17" + resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" + integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^1.0.0, data-urls@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + +dayjs@^1.8.16: + version "1.8.27" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.27.tgz#a8ae63ee990af28c05c430f0e160ae835a0fbbf8" + integrity sha512-Jpa2acjWIeOkg8KURUHICk0EqnEFSSF5eMEscsOgyJ92ZukXwmpmRkPSUka7KHSfbj5eKH30ieosYip+ky9emQ== de-indent@^1.0.2: version "1.0.2" @@ -3713,7 +4399,7 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -decamelize@^1.2.0: +decamelize@^1.0.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -3723,7 +4409,7 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -deep-equal@^1.0.1: +deep-equal@^1.0.1, deep-equal@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== @@ -3806,6 +4492,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defined@^1.0.0, defined@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -3819,6 +4510,14 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" +delaunay-triangulate@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/delaunay-triangulate/-/delaunay-triangulate-1.1.6.tgz#5bbca21b078198d4bc3c75796a35cbb98c25954c" + integrity sha1-W7yiGweBmNS8PHV5ajXLuYwllUw= + dependencies: + incremental-convex-hull "^1.0.1" + uniq "^1.0.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -3842,6 +4541,11 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +detect-kerning@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-kerning/-/detect-kerning-2.1.2.tgz#4ecd548e4a5a3fc880fe2a50609312d000fa9fc2" + integrity sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw== + detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -3980,12 +4684,49 @@ dotenv@^8.2.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== +dotignore@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" + integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== + dependencies: + minimatch "^3.0.4" + +double-bits@^1.1.0, double-bits@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/double-bits/-/double-bits-1.1.1.tgz#58abba45494da4d0fa36b73ad11a286c9184b1c6" + integrity sha1-WKu6RUlNpND6Nrc60RoobJGEscY= + +draw-svg-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/draw-svg-path/-/draw-svg-path-1.0.0.tgz#6f116d962dd314b99ea534d6f58dd66cdbd69379" + integrity sha1-bxFtli3TFLmepTTW9Y3WbNvWk3k= + dependencies: + abs-svg-path "~0.1.1" + normalize-svg-path "~0.1.0" + +dtype@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dtype/-/dtype-2.0.0.tgz#cd052323ce061444ecd2e8f5748f69a29be28434" + integrity sha1-zQUjI84GFETs0uj1dI9popvihDQ= + +dup@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dup/-/dup-1.0.0.tgz#51fc5ac685f8196469df0b905e934b20af5b4029" + integrity sha1-UfxaxoX4GWRp3wuQXpNLIK9bQCk= + +duplexer2@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + integrity sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds= + dependencies: + readable-stream "~1.1.9" + duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= -duplexify@^3.4.2, duplexify@^3.6.0: +duplexify@^3.4.2, duplexify@^3.4.5, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== @@ -3995,6 +4736,11 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +earcut@^2.1.5, earcut@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.2.tgz#41b0bc35f63e0fe80da7cddff28511e7e2e80d11" + integrity sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ== + easy-stack@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788" @@ -4015,6 +4761,13 @@ echarts@^4.6.0: dependencies: zrender "4.3.0" +edges-to-adjacency-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/edges-to-adjacency-list/-/edges-to-adjacency-list-1.0.0.tgz#c146d2e084addfba74a51293c6e0199a49f757f1" + integrity sha1-wUbS4ISt37p0pRKTxuAZmkn3V/E= + dependencies: + uniq "^1.0.0" + editorconfig@^0.15.3: version "0.15.3" resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" @@ -4054,6 +4807,11 @@ element-resize-detector@^1.2.0: dependencies: batch-processor "1.0.0" +element-size@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/element-size/-/element-size-1.1.1.tgz#64e5f159d97121631845bcbaecaf279c39b5e34e" + integrity sha1-ZOXxWdlxIWMYRby67K8nnDm1404= + element-ui@^2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/element-ui/-/element-ui-2.13.0.tgz#f6bb04e5b0a76ea5f62466044b774407ba4ebd2d" @@ -4078,6 +4836,13 @@ element-ui@^2.13.2: resize-observer-polyfill "^1.5.0" throttle-debounce "^1.0.1" +elementary-circuits-directed-graph@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/elementary-circuits-directed-graph/-/elementary-circuits-directed-graph-1.2.0.tgz#c6507f42566507c646b5bb144b892fbce1656371" + integrity sha512-eOQofnrNqebPtC29PvyNMGUBdMrIw5i8nOoC/2VOlSF84tf5+ZXnRkIk7TgdT22jFXK68CC7aA881KRmNYf/Pg== + dependencies: + strongly-connected-components "^1.0.1" + elliptic@^6.0.0: version "6.5.2" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" @@ -4184,6 +4949,47 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@^2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +es6-weak-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -4206,6 +5012,27 @@ escodegen@^1.11.1, escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" +escodegen@~0.0.24: + version "0.0.28" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-0.0.28.tgz#0e4ff1715f328775d6cab51ac44a406cd7abffd3" + integrity sha1-Dk/xcV8yh3XWyrUaxEpAbNer/9M= + dependencies: + esprima "~1.0.2" + estraverse "~1.3.0" + optionalDependencies: + source-map ">= 0.1.2" + +escodegen@~1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.3.3.tgz#f024016f5a88e046fd12005055e939802e6c5f23" + integrity sha1-8CQBb1qI4Eb9EgBQVek5gC5sXyM= + dependencies: + esprima "~1.1.1" + estraverse "~1.5.0" + esutils "~1.0.0" + optionalDependencies: + source-map "~0.1.33" + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -4214,6 +5041,11 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" +esprima@^1.0.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9" + integrity sha1-CZNQL+r2aBODJXVvMPmlH+7sEek= + esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -4224,6 +5056,16 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +esprima@~1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" + integrity sha1-n1V+CPw7TSbs6d00+Pv0drYlha0= + +esprima@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.1.1.tgz#5b6f1547f4d102e670e140c509be6771d6aeb549" + integrity sha1-W28VR/TRAuZw4UDFCb5ncdautUk= + esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" @@ -4236,11 +5078,26 @@ estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@~1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.3.2.tgz#37c2b893ef13d723f276d878d60d8535152a6c42" + integrity sha1-N8K4k+8T1yPydth41g2FNRUqbEI= + +estraverse@~1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71" + integrity sha1-hno+jlip+EYYr7bC3bzZFrfLr3E= + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +esutils@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570" + integrity sha1-gVHTWOIMisx/t0XnRywAJf5JZXA= + etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -4256,6 +5113,11 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== +events@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + events@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" @@ -4394,6 +5256,13 @@ express@^4.16.3, express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -4435,6 +5304,11 @@ extract-from-css@^0.4.4: dependencies: css "^2.1.0" +extract-frustum-planes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/extract-frustum-planes/-/extract-frustum-planes-1.0.0.tgz#97d5703ff0564c8c3c6838cac45f9e7bc52c9ef5" + integrity sha1-l9VwP/BWTIw8aDjKxF+ee8UsnvU= + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -4445,6 +5319,16 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= +falafel@^2.1.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.2.4.tgz#b5d86c060c2412a43166243cb1bce44d1abd2819" + integrity sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ== + dependencies: + acorn "^7.1.1" + foreach "^2.0.5" + isarray "^2.0.1" + object-keys "^1.0.6" + fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" @@ -4462,6 +5346,13 @@ fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" +fast-isnumeric@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/fast-isnumeric/-/fast-isnumeric-1.1.4.tgz#e165786ff471c439e9ace2b8c8e66cceb47e2ea4" + integrity sha512-1mM8qOr2LYz8zGaUdmiqRDiuue00Dxjgcb1NQR7TnhLVh6sQyngP9xvLo7Sl7LZpP/sk5eb+bcyWXw530NTBZw== + dependencies: + is-string-blank "^1.0.1" + fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -4538,6 +5429,14 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +filtered-vector@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/filtered-vector/-/filtered-vector-1.2.4.tgz#56453c034df4302d293ca8ecdeac3f90abc678d3" + integrity sha1-VkU8A030MC0pPKjs3qw/kKvGeNM= + dependencies: + binary-search-bounds "^1.0.0" + cubic-hermite "^1.0.0" + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -4592,6 +5491,18 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +flatten-vertex-data@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz#889fd60bea506006ca33955ee1105175fb620219" + integrity sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw== + dependencies: + dtype "^2.0.0" + +flip-pixels@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flip-pixels/-/flip-pixels-1.0.2.tgz#aad7b7d9fc65932d5f27e2e4dac4b494140845e4" + integrity sha512-oXbJGbjDnfJRWPC7Va38EFhd+A8JWE5/hCiKcK8qjCdbLj9DTpsq6MEudwpRTH+V4qq+Jw7d3pUgQdSr3x3mTA== + flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -4614,16 +5525,42 @@ follow-redirects@^1.0.0: dependencies: debug "^3.0.0" +font-atlas@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/font-atlas/-/font-atlas-2.1.0.tgz#aa2d6dcf656a6c871d66abbd3dfbea2f77178348" + integrity sha512-kP3AmvX+HJpW4w3d+PiPR2X6E1yvsBXt2yhuCw+yReO9F1WYhvZwx3c95DGZGwg9xYzDGrgJYa885xmVA+28Cg== + dependencies: + css-font "^1.0.0" + font-awesome@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" integrity sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM= +font-measure@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/font-measure/-/font-measure-1.2.2.tgz#41dbdac5d230dbf4db08865f54da28a475e83026" + integrity sha512-mRLEpdrWzKe9hbfaF3Qpr06TAjquuBVP5cHy4b3hyeNdjc9i0PO6HniGsX5vjL5OWv7+Bd++NiooNpT/s8BvIA== + dependencies: + css-font "^1.2.0" + +for-each@~0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -4674,7 +5611,7 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: +from2@^2.1.0, from2@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= @@ -4721,16 +5658,31 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -function-bind@^1.1.1: +function-bind@^1.1.1, function-bind@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +functional-red-black-tree@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gamma@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/gamma/-/gamma-0.1.0.tgz#3315643403bf27906ca80ab37c36ece9440ef330" + integrity sha1-MxVkNAO/J5BsqAqzfDbs6UQO8zA= + gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== +geojson-vt@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7" + integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg== + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -4741,6 +5693,11 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-canvas-context@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-canvas-context/-/get-canvas-context-1.0.2.tgz#d6e7b50bc4e4c86357cd39f22647a84b73601e93" + integrity sha1-1ue1C8TkyGNXzTnyJkeoS3NgHpM= + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -4772,6 +5729,393 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +gl-axes3d@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/gl-axes3d/-/gl-axes3d-1.5.3.tgz#47e3dd6c21356a59349910ec01af58e28ea69fe9" + integrity sha512-KRYbguKQcDQ6PcB9g1pgqB8Ly4TY1DQODpPKiDTasyWJ8PxQk0t2Q7XoQQijNqvsguITCpVVCzNb5GVtIWiVlQ== + dependencies: + bit-twiddle "^1.0.2" + dup "^1.0.0" + extract-frustum-planes "^1.0.0" + gl-buffer "^2.1.2" + gl-mat4 "^1.2.0" + gl-shader "^4.2.1" + gl-state "^1.0.0" + gl-vao "^1.3.0" + gl-vec4 "^1.0.1" + glslify "^7.0.0" + robust-orientation "^1.1.3" + split-polygon "^1.0.0" + vectorize-text "^3.2.1" + +gl-buffer@^2.1.1, gl-buffer@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/gl-buffer/-/gl-buffer-2.1.2.tgz#2db8d9c1a5527fba0cdb91289c206e882b889cdb" + integrity sha1-LbjZwaVSf7oM25EonCBuiCuInNs= + dependencies: + ndarray "^1.0.15" + ndarray-ops "^1.1.0" + typedarray-pool "^1.0.0" + +gl-cone3d@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/gl-cone3d/-/gl-cone3d-1.5.2.tgz#66af5c33b7d5174034dfa3654a88e995998d92bc" + integrity sha512-1JNeHH4sUtUmDA4ZK7Om8/kShwb8IZVAsnxaaB7IPRJsNGciLj1sTpODrJGeMl41RNkex5kXD2SQFrzyEAR2Rw== + dependencies: + colormap "^2.3.1" + gl-buffer "^2.1.2" + gl-mat4 "^1.2.0" + gl-shader "^4.2.1" + gl-texture2d "^2.1.0" + gl-vao "^1.3.0" + gl-vec3 "^1.1.3" + glsl-inverse "^1.0.0" + glsl-out-of-range "^1.0.4" + glsl-specular-cook-torrance "^2.0.1" + glslify "^7.0.0" + ndarray "^1.0.18" + +gl-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gl-constants/-/gl-constants-1.0.0.tgz#597a504e364750ff50253aa35f8dea7af4a5d233" + integrity sha1-WXpQTjZHUP9QJTqjX43qevSl0jM= + +gl-contour2d@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/gl-contour2d/-/gl-contour2d-1.1.7.tgz#ca330cf8449673a9ca0b3f6726c83f8d35c7a50c" + integrity sha512-GdebvJ9DtT3pJDpoE+eU2q+Wo9S3MijPpPz5arZbhK85w2bARmpFpVfPaDlZqWkB644W3BlH8TVyvAo1KE4Bhw== + dependencies: + binary-search-bounds "^2.0.4" + cdt2d "^1.0.0" + clean-pslg "^1.1.2" + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + glslify "^7.0.0" + iota-array "^1.0.0" + ndarray "^1.0.18" + surface-nets "^1.0.2" + +gl-error3d@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/gl-error3d/-/gl-error3d-1.0.16.tgz#88a94952f5303d9cf5cb86806789a360777c5446" + integrity sha512-TGJewnKSp7ZnqGgG3XCF9ldrDbxZrO+OWlx6oIet4OdOM//n8xJ5isArnIV/sdPJnFbhfoLxWrW9f5fxHFRQ1A== + dependencies: + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + gl-vao "^1.3.0" + glsl-out-of-range "^1.0.4" + glslify "^7.0.0" + +gl-fbo@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/gl-fbo/-/gl-fbo-2.0.5.tgz#0fa75a497cf787695530691c8f04abb6fb55fa22" + integrity sha1-D6daSXz3h2lVMGkcjwSrtvtV+iI= + dependencies: + gl-texture2d "^2.0.0" + +gl-format-compiler-error@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/gl-format-compiler-error/-/gl-format-compiler-error-1.0.3.tgz#0c79b1751899ce9732e86240f090aa41e98471a8" + integrity sha1-DHmxdRiZzpcy6GJA8JCqQemEcag= + dependencies: + add-line-numbers "^1.0.1" + gl-constants "^1.0.0" + glsl-shader-name "^1.0.0" + sprintf-js "^1.0.3" + +gl-heatmap2d@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/gl-heatmap2d/-/gl-heatmap2d-1.0.6.tgz#d0a2d9e8f5975534224b3b2be2ffe683f6b7e961" + integrity sha512-+agzSv4R5vsaH+AGYVz5RVzBK10amqAa+Bwj205F13JjNSGS91M1L9Yb8zssCv2FIjpP+1Mp73cFBYrQFfS1Jg== + dependencies: + binary-search-bounds "^2.0.4" + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + glslify "^7.0.0" + iota-array "^1.0.0" + typedarray-pool "^1.1.0" + +gl-line3d@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/gl-line3d/-/gl-line3d-1.2.1.tgz#632fc5b931a84a315995322b271aaf497e292609" + integrity sha512-eeb0+RI2ZBRqMYJK85SgsRiJK7c4aiOjcnirxv0830A3jmOc99snY3AbPcV8KvKmW0Yaf3KA4e+qNCbHiTOTnA== + dependencies: + binary-search-bounds "^2.0.4" + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + gl-texture2d "^2.1.0" + gl-vao "^1.3.0" + glsl-out-of-range "^1.0.4" + glslify "^7.0.0" + ndarray "^1.0.18" + +gl-mat2@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gl-mat2/-/gl-mat2-1.0.1.tgz#142505730a5c2fe1e9f25d9ece3d0d6cc2710a30" + integrity sha1-FCUFcwpcL+Hp8l2ezj0NbMJxCjA= + +gl-mat3@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gl-mat3/-/gl-mat3-1.0.0.tgz#89633219ca429379a16b9185d95d41713453b912" + integrity sha1-iWMyGcpCk3mha5GF2V1BcTRTuRI= + +gl-mat4@^1.0.0, gl-mat4@^1.0.1, gl-mat4@^1.0.2, gl-mat4@^1.0.3, gl-mat4@^1.1.2, gl-mat4@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gl-mat4/-/gl-mat4-1.2.0.tgz#49d8a7636b70aa00819216635f4a3fd3f4669b26" + integrity sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA== + +gl-matrix-invert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gl-matrix-invert/-/gl-matrix-invert-1.0.0.tgz#a36d7bde3654c4590a127ee7c68f6e13fea8c63d" + integrity sha1-o2173jZUxFkKEn7nxo9uE/6oxj0= + dependencies: + gl-mat2 "^1.0.0" + gl-mat3 "^1.0.0" + gl-mat4 "^1.0.0" + +gl-matrix@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.3.0.tgz#232eef60b1c8b30a28cbbe75b2caf6c48fd6358b" + integrity sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA== + +gl-mesh3d@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/gl-mesh3d/-/gl-mesh3d-2.3.1.tgz#087a93c5431df923570ca51cfc691bab0d21a6b8" + integrity sha512-pXECamyGgu4/9HeAQSE5OEUuLBGS1aq9V4BCsTcxsND4fNLaajEkYKUz/WY2QSYElqKdsMBVsldGiKRKwlybqA== + dependencies: + barycentric "^1.0.1" + colormap "^2.3.1" + gl-buffer "^2.1.2" + gl-mat4 "^1.2.0" + gl-shader "^4.2.1" + gl-texture2d "^2.1.0" + gl-vao "^1.3.0" + glsl-out-of-range "^1.0.4" + glsl-specular-cook-torrance "^2.0.1" + glslify "^7.0.0" + ndarray "^1.0.18" + normals "^1.1.0" + polytope-closest-point "^1.0.0" + simplicial-complex-contour "^1.0.2" + typedarray-pool "^1.1.0" + +gl-plot2d@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/gl-plot2d/-/gl-plot2d-1.4.4.tgz#2dbe40776051436baf0947f828ee2c8c303d2bdb" + integrity sha512-0UhKiiqeampLtydv6NMNrKEilc0Ui5oaJtvHLbLZ5u/1ttT1XjOY5Yk8LzfqozA/No4a9omxjSKnH+tvSn+rQQ== + dependencies: + binary-search-bounds "^2.0.4" + gl-buffer "^2.1.2" + gl-select-static "^2.0.6" + gl-shader "^4.2.1" + glsl-inverse "^1.0.0" + glslify "^7.0.0" + text-cache "^4.2.2" + +gl-plot3d@^2.4.5: + version "2.4.5" + resolved "https://registry.yarnpkg.com/gl-plot3d/-/gl-plot3d-2.4.5.tgz#962e99c3e55862e0ad77e99114566eadb28bf224" + integrity sha512-cKAqMXFRHTCFxH8r1/ACdk5hyfnA9djfiAM8zVQrqu0qLEttUu0i1fq0pr+d5m0HPuNcK8wEc4F3VjL2hrDcGQ== + dependencies: + "3d-view" "^2.0.0" + a-big-triangle "^1.0.3" + gl-axes3d "^1.5.3" + gl-fbo "^2.0.5" + gl-mat4 "^1.2.0" + gl-select-static "^2.0.6" + gl-shader "^4.2.1" + gl-spikes3d "^1.0.10" + glslify "^7.0.0" + has-passive-events "^1.0.0" + is-mobile "^2.2.1" + mouse-change "^1.4.0" + mouse-event-offset "^3.0.2" + mouse-wheel "^1.2.0" + ndarray "^1.0.18" + right-now "^1.0.0" + +gl-pointcloud2d@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/gl-pointcloud2d/-/gl-pointcloud2d-1.0.3.tgz#f37e215f21ccb2e17f0604664e99fc3d6a4e611d" + integrity sha512-OS2e1irvJXVRpg/GziXj10xrFJm9kkRfFoB6BLUvkjCQV7ZRNNcs2CD+YSK1r0gvMwTg2T3lfLM3UPwNtz+4Xw== + dependencies: + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + glslify "^7.0.0" + typedarray-pool "^1.1.0" + +gl-quat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gl-quat/-/gl-quat-1.0.0.tgz#0945ec923386f45329be5dc357b1c8c2d47586c5" + integrity sha1-CUXskjOG9FMpvl3DV7HIwtR1hsU= + dependencies: + gl-mat3 "^1.0.0" + gl-vec3 "^1.0.3" + gl-vec4 "^1.0.0" + +gl-scatter3d@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/gl-scatter3d/-/gl-scatter3d-1.2.3.tgz#83d63700ec2fe4e95b3d1cd613e86de9a6b5f603" + integrity sha512-nXqPlT1w5Qt51dTksj+DUqrZqwWAEWg0PocsKcoDnVNv0X8sGA+LBZ0Y+zrA+KNXUL0PPCX9WR9cF2uJAZl1Sw== + dependencies: + gl-buffer "^2.1.2" + gl-mat4 "^1.2.0" + gl-shader "^4.2.1" + gl-vao "^1.3.0" + glsl-out-of-range "^1.0.4" + glslify "^7.0.0" + is-string-blank "^1.0.1" + typedarray-pool "^1.1.0" + vectorize-text "^3.2.1" + +gl-select-box@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/gl-select-box/-/gl-select-box-1.0.4.tgz#47c11caa2b84f81e8bbfde08c6e39eeebb53d3d8" + integrity sha512-mKsCnglraSKyBbQiGq0Ila0WF+m6Tr+EWT2yfaMn/Sh9aMHq5Wt0F/l6Cf/Ed3CdERq5jHWAY5yxLviZteYu2w== + dependencies: + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + glslify "^7.0.0" + +gl-select-static@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/gl-select-static/-/gl-select-static-2.0.6.tgz#43194a348613a693d4097e5ab9ceb0685003f036" + integrity sha512-p4DmBG1DMo/47/fV3oqPcU6uTqHy0eI1vATH1fm8OVDqlzWnLv3786tdEunZWG6Br7DUdH6NgWhuy4gAlt+TAQ== + dependencies: + bit-twiddle "^1.0.2" + cwise "^1.0.10" + gl-fbo "^2.0.5" + ndarray "^1.0.18" + typedarray-pool "^1.1.0" + +gl-shader@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/gl-shader/-/gl-shader-4.2.1.tgz#bc9b808e9293c51b668e88de615b0c113708dc2f" + integrity sha1-vJuAjpKTxRtmjojeYVsMETcI3C8= + dependencies: + gl-format-compiler-error "^1.0.2" + weakmap-shim "^1.1.0" + +gl-spikes2d@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/gl-spikes2d/-/gl-spikes2d-1.0.2.tgz#ef8dbcff6c7451dec2b751d7a3c593d09ad5457f" + integrity sha512-QVeOZsi9nQuJJl7NB3132CCv5KA10BWxAY2QgJNsKqbLsG53B/TrGJpjIAohnJftdZ4fT6b3ZojWgeaXk8bOOA== + +gl-spikes3d@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/gl-spikes3d/-/gl-spikes3d-1.0.10.tgz#e3b2b677a6f51750f23c064447af4f093da79305" + integrity sha512-lT3xroowOFxMvlhT5Mof76B2TE02l5zt/NIWljhczV2FFHgIVhA4jMrd5dIv1so1RXMBDJIKu0uJI3QKliDVLg== + dependencies: + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + gl-vao "^1.3.0" + glslify "^7.0.0" + +gl-state@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gl-state/-/gl-state-1.0.0.tgz#262faa75835b0b9c532c12f38adc425d1d30cd17" + integrity sha1-Ji+qdYNbC5xTLBLzitxCXR0wzRc= + dependencies: + uniq "^1.0.0" + +gl-streamtube3d@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/gl-streamtube3d/-/gl-streamtube3d-1.4.1.tgz#bd2b725e00aa96989ce34b06ebf66a76f93e35ae" + integrity sha512-rH02v00kgwgdpkXVo7KsSoPp38bIAYR9TE1iONjcQ4cQAlDhrGRauqT/P5sUaOIzs17A2DxWGcXM+EpNQs9pUA== + dependencies: + gl-cone3d "^1.5.2" + gl-vec3 "^1.1.3" + gl-vec4 "^1.0.1" + glsl-inverse "^1.0.0" + glsl-out-of-range "^1.0.4" + glsl-specular-cook-torrance "^2.0.1" + glslify "^7.0.0" + +gl-surface3d@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/gl-surface3d/-/gl-surface3d-1.5.2.tgz#a283b98d3473fca4e8552f0f6ac40a6f0dc88b00" + integrity sha512-rWSQwEQDkB0T5CDEDFJwJc4VgwwJaAyFRSJ92NJlrTSwDlsEsWdzG9+APx6FWJMwkOpIoZGWqv+csswK2kMMLQ== + dependencies: + binary-search-bounds "^2.0.4" + bit-twiddle "^1.0.2" + colormap "^2.3.1" + dup "^1.0.0" + gl-buffer "^2.1.2" + gl-mat4 "^1.2.0" + gl-shader "^4.2.1" + gl-texture2d "^2.1.0" + gl-vao "^1.3.0" + glsl-out-of-range "^1.0.4" + glsl-specular-beckmann "^1.1.2" + glslify "^7.0.0" + ndarray "^1.0.18" + ndarray-gradient "^1.0.0" + ndarray-ops "^1.2.2" + ndarray-pack "^1.2.1" + ndarray-scratch "^1.2.0" + surface-nets "^1.0.2" + typedarray-pool "^1.1.0" + +gl-text@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/gl-text/-/gl-text-1.1.8.tgz#67a19bec72915acc422300aad8f727a09f98b550" + integrity sha512-whnq9DEFYbW92C4ONwk2eT0YkzmVPHoADnEtuzMOmit87XhgAhBrNs3lK9EgGjU/MoWYvlF6RkI8Kl7Yuo1hUw== + dependencies: + bit-twiddle "^1.0.2" + color-normalize "^1.5.0" + css-font "^1.2.0" + detect-kerning "^2.1.2" + es6-weak-map "^2.0.3" + flatten-vertex-data "^1.0.2" + font-atlas "^2.1.0" + font-measure "^1.2.2" + gl-util "^3.1.2" + is-plain-obj "^1.1.0" + object-assign "^4.1.1" + parse-rect "^1.2.0" + parse-unit "^1.0.1" + pick-by-alias "^1.2.0" + regl "^1.3.11" + to-px "^1.0.1" + typedarray-pool "^1.1.0" + +gl-texture2d@^2.0.0, gl-texture2d@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/gl-texture2d/-/gl-texture2d-2.1.0.tgz#ff6824e7e7c31a8ba6fdcdbe9e5c695d7e2187c7" + integrity sha1-/2gk5+fDGoum/c2+nlxpXX4hh8c= + dependencies: + ndarray "^1.0.15" + ndarray-ops "^1.2.2" + typedarray-pool "^1.1.0" + +gl-util@^3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/gl-util/-/gl-util-3.1.3.tgz#1e9a724f844b802597c6e30565d4c1e928546861" + integrity sha512-dvRTggw5MSkJnCbh74jZzSoTOGnVYK+Bt+Ckqm39CVcl6+zSsxqWk4lr5NKhkqXHL6qvZAU9h17ZF8mIskY9mA== + dependencies: + is-browser "^2.0.1" + is-firefox "^1.0.3" + is-plain-obj "^1.1.0" + number-is-integer "^1.0.1" + object-assign "^4.1.0" + pick-by-alias "^1.2.0" + weak-map "^1.0.5" + +gl-vao@^1.2.0, gl-vao@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/gl-vao/-/gl-vao-1.3.0.tgz#e9e92aa95588cab9d5c2f04b693440c3df691923" + integrity sha1-6ekqqVWIyrnVwvBLaTRAw99pGSM= + +gl-vec3@^1.0.2, gl-vec3@^1.0.3, gl-vec3@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gl-vec3/-/gl-vec3-1.1.3.tgz#a47c62f918774a06cbed1b65bcd0288ecbb03826" + integrity sha512-jduKUqT0SGH02l8Yl+mV1yVsDfYgQAJyXGxkJQGyxPLHRiW25DwVIRPt6uvhrEMHftJfqhqKthRcyZqNEl9Xdw== + +gl-vec4@^1.0.0, gl-vec4@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gl-vec4/-/gl-vec4-1.0.1.tgz#97d96878281b14b532cbce101785dfd1cb340964" + integrity sha1-l9loeCgbFLUyy84QF4Xf0cs0CWQ= + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -4785,7 +6129,7 @@ glob-to-regexp@^0.3.0: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -4844,11 +6188,173 @@ globby@^9.2.0: pify "^4.0.1" slash "^2.0.0" +glsl-inject-defines@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz#dd1aacc2c17fcb2bd3fc32411c6633d0d7b60fd4" + integrity sha1-3RqswsF/yyvT/DJBHGYz0Ne2D9Q= + dependencies: + glsl-token-inject-block "^1.0.0" + glsl-token-string "^1.0.1" + glsl-tokenizer "^2.0.2" + +glsl-inverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glsl-inverse/-/glsl-inverse-1.0.0.tgz#12c0b1d065f558444d1e6feaf79b5ddf8a918ae6" + integrity sha1-EsCx0GX1WERNHm/q95td34qRiuY= + +glsl-out-of-range@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/glsl-out-of-range/-/glsl-out-of-range-1.0.4.tgz#3d73d083bc9ecc73efd45dfc7063c29e92c9c873" + integrity sha512-fCcDu2LCQ39VBvfe1FbhuazXEf0CqMZI9OYXrYlL6uUARG48CTAbL04+tZBtVM0zo1Ljx4OLu2AxNquq++lxWQ== + +glsl-resolve@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/glsl-resolve/-/glsl-resolve-0.0.1.tgz#894bef73910d792c81b5143180035d0a78af76d3" + integrity sha1-iUvvc5ENeSyBtRQxgANdCnivdtM= + dependencies: + resolve "^0.6.1" + xtend "^2.1.2" + +glsl-shader-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glsl-shader-name/-/glsl-shader-name-1.0.0.tgz#a2c30b3ba73499befb0cc7184d7c7733dd4b487d" + integrity sha1-osMLO6c0mb77DMcYTXx3M91LSH0= + dependencies: + atob-lite "^1.0.0" + glsl-tokenizer "^2.0.2" + +glsl-specular-beckmann@^1.1.1, glsl-specular-beckmann@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/glsl-specular-beckmann/-/glsl-specular-beckmann-1.1.2.tgz#fce9056933ecdf2456278376a54d082893e775f1" + integrity sha1-/OkFaTPs3yRWJ4N2pU0IKJPndfE= + +glsl-specular-cook-torrance@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/glsl-specular-cook-torrance/-/glsl-specular-cook-torrance-2.0.1.tgz#a891cc06c8c7b4f4728702b4824fdacbb967d78f" + integrity sha1-qJHMBsjHtPRyhwK0gk/ay7ln148= + dependencies: + glsl-specular-beckmann "^1.1.1" + +glsl-token-assignments@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz#a5d82ab78499c2e8a6b83cb69495e6e665ce019f" + integrity sha1-pdgqt4SZwuimuDy2lJXm5mXOAZ8= + +glsl-token-defines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz#cb892aa959936231728470d4f74032489697fa9d" + integrity sha1-y4kqqVmTYjFyhHDU90AySJaX+p0= + dependencies: + glsl-tokenizer "^2.0.0" + +glsl-token-depth@^1.1.0, glsl-token-depth@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz#23c5e30ee2bd255884b4a28bc850b8f791e95d84" + integrity sha1-I8XjDuK9JViEtKKLyFC495HpXYQ= + +glsl-token-descope@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz#0fc90ab326186b82f597b2e77dc9e21efcd32076" + integrity sha1-D8kKsyYYa4L1l7LnfcniHvzTIHY= + dependencies: + glsl-token-assignments "^2.0.0" + glsl-token-depth "^1.1.0" + glsl-token-properties "^1.0.0" + glsl-token-scope "^1.1.0" + +glsl-token-inject-block@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz#e1015f5980c1091824adaa2625f1dfde8bd00034" + integrity sha1-4QFfWYDBCRgkraomJfHf3ovQADQ= + +glsl-token-properties@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz#483dc3d839f0d4b5c6171d1591f249be53c28a9e" + integrity sha1-SD3D2Dnw1LXGFx0VkfJJvlPCip4= + +glsl-token-scope@^1.1.0, glsl-token-scope@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz#a1728e78df24444f9cb93fd18ef0f75503a643b1" + integrity sha1-oXKOeN8kRE+cuT/RjvD3VQOmQ7E= + +glsl-token-string@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/glsl-token-string/-/glsl-token-string-1.0.1.tgz#59441d2f857de7c3449c945666021ece358e48ec" + integrity sha1-WUQdL4V958NEnJRWZgIezjWOSOw= + +glsl-token-whitespace-trim@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz#46d1dfe98c75bd7d504c05d7d11b1b3e9cc93b10" + integrity sha1-RtHf6Yx1vX1QTAXX0RsbPpzJOxA= + +glsl-tokenizer@^2.0.0, glsl-tokenizer@^2.0.2: + version "2.1.5" + resolved "https://registry.yarnpkg.com/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz#1c2e78c16589933c274ba278d0a63b370c5fee1a" + integrity sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA== + dependencies: + through2 "^0.6.3" + +glslify-bundle@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glslify-bundle/-/glslify-bundle-5.1.1.tgz#30d2ddf2e6b935bf44d1299321e3b729782c409a" + integrity sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A== + dependencies: + glsl-inject-defines "^1.0.1" + glsl-token-defines "^1.0.0" + glsl-token-depth "^1.1.1" + glsl-token-descope "^1.0.2" + glsl-token-scope "^1.1.1" + glsl-token-string "^1.0.1" + glsl-token-whitespace-trim "^1.0.0" + glsl-tokenizer "^2.0.2" + murmurhash-js "^1.0.0" + shallow-copy "0.0.1" + +glslify-deps@^1.2.5: + version "1.3.1" + resolved "https://registry.yarnpkg.com/glslify-deps/-/glslify-deps-1.3.1.tgz#dfa6962322454a91ecc4de25b5e710415b0c89ad" + integrity sha512-Ogm179MCazwIRyEqs3g3EOY4Y3XIAa0yl8J5RE9rJC6QH1w8weVOp2RZu0mvnYy/2xIas1w166YR2eZdDkWQxg== + dependencies: + "@choojs/findup" "^0.2.0" + events "^1.0.2" + glsl-resolve "0.0.1" + glsl-tokenizer "^2.0.0" + graceful-fs "^4.1.2" + inherits "^2.0.1" + map-limit "0.0.1" + resolve "^1.0.0" + +glslify@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/glslify/-/glslify-7.0.0.tgz#10d5db9541ee07c6548ea55c679edda20307653d" + integrity sha512-yw8jDQIe9FlSH5NiZEqSAsCPj9HI7nhXgXLAgSv2Nm9eBPsFJmyN9+rNwbiozJapcj9xtc/71rMYlN9cxp1B8Q== + dependencies: + bl "^1.0.0" + concat-stream "^1.5.2" + duplexify "^3.4.5" + falafel "^2.1.0" + from2 "^2.3.0" + glsl-resolve "0.0.1" + glsl-token-whitespace-trim "^1.0.0" + glslify-bundle "^5.0.0" + glslify-deps "^1.2.5" + minimist "^1.2.0" + resolve "^1.1.5" + stack-trace "0.0.9" + static-eval "^2.0.0" + through2 "^2.0.1" + xtend "^4.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== +grid-index@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7" + integrity sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA== + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -4908,6 +6414,20 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-hover@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-hover/-/has-hover-1.0.1.tgz#3d97437aeb199c62b8ac08acbdc53d3bc52c17f7" + integrity sha1-PZdDeusZnGK4rAisvcU9O8UsF/c= + dependencies: + is-browser "^2.0.1" + +has-passive-events@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-passive-events/-/has-passive-events-1.0.0.tgz#75fc3dc6dada182c58f24ebbdc018276d1ea3515" + integrity sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw== + dependencies: + is-browser "^2.0.1" + has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" @@ -4944,7 +6464,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.0, has@^1.0.3: +has@^1.0.0, has@^1.0.3, has@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -5028,6 +6548,11 @@ hsla-regex@^1.0.0: resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= +hsluv@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/hsluv/-/hsluv-0.0.3.tgz#829107dafb4a9f8b52a1809ed02e091eade6754c" + integrity sha1-gpEH2vtKn4tSoYCe0C4JHq3mdUw= + html-comment-regex@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" @@ -5173,10 +6698,10 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -ibiz-gantt-elastic@^1.0.15: - version "1.0.15" - resolved "https://registry.npm.taobao.org/ibiz-gantt-elastic/download/ibiz-gantt-elastic-1.0.15.tgz#e57736254aaf5baea28225bce2d29d8bd8adcc2d" - integrity sha1-5Xc2JUqvW66igiW84tKdi9itzC0= +ibiz-gantt-elastic@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/ibiz-gantt-elastic/-/ibiz-gantt-elastic-1.0.16.tgz#e2de7e8d4bdb3c292cfbc97c4f970c8ecfe6c43b" + integrity sha512-0bhchLicDYuBj9IsdC3mvbEHQXQ6fLLo0hMqSMW0jKAbn7DMSGYg7HUgJWEFqiPdPgKaDHzK2nVl1s9B+s2qgw== dependencies: dayjs "^1.8.16" resize-observer-polyfill "^1.5.1" @@ -5184,10 +6709,10 @@ ibiz-gantt-elastic@^1.0.15: vue-slider-component "^3.0.40" vue-switches "^2.0.1" -ibiz-vue-lib@^0.1.9: - version "0.1.9" - resolved "https://registry.yarnpkg.com/ibiz-vue-lib/-/ibiz-vue-lib-0.1.9.tgz#d7088deb5577af3095887ca897c1710bae174682" - integrity sha512-CotV3xIB04+QUUeMlfsVj5BseVPQ+IHyKdwU+MXGh+2e91Nt7N/z/LElakhAiGkSpaaKoMdlKCOdhD0qqJ3wNQ== +ibiz-vue-lib@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/ibiz-vue-lib/-/ibiz-vue-lib-0.1.10.tgz#660f6f7fb73b5c63e3daa0921faf13c0cdc96de5" + integrity sha512-qhZYFL4n/HszAWZ75a3WYjKkmXvaRsX4DKmbaNssSuNXJ70wnrpCMKXF2Wv5ZXosacU692t4zBKXuXTLXOHj2g== dependencies: axios "^0.19.2" core-js "^3.6.4" @@ -5195,6 +6720,16 @@ ibiz-vue-lib@^0.1.9: view-design "^4.1.0" vue "^2.6.11" +ibiz-vue-pivottable@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/ibiz-vue-pivottable/-/ibiz-vue-pivottable-1.0.6.tgz#35139f2016b6def22e8a81eaf5c63385bf33c602" + integrity sha512-lNPw0QmHqpl1lMKRoW4pj9M9J4Y55duXtpedYl8lgfZE5yMxKqNJ3jwFhwpA8Ty94nB6QCnt0tQw5kMcDeFOWA== + dependencies: + core-js "^2.6.5" + vue "^2.6.10" + vue-plotly "^1.1.0" + vuedraggable "^2.23.0" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -5209,7 +6744,7 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: dependencies: postcss "^7.0.14" -ieee754@^1.1.4: +ieee754@^1.1.12, ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== @@ -5229,6 +6764,15 @@ ignore@^4.0.3: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +image-palette@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/image-palette/-/image-palette-2.1.0.tgz#d976525a1df75964ca125d2dba2741e92905547f" + integrity sha512-3ImSEWD26+xuQFdP0RWR4WSXadZwvgrFhjGNpMEapTG1tf2XrBFS2dlKK5hNgH4UIaSQlSUFRn1NeA+zULIWbQ== + dependencies: + color-id "^1.1.0" + pxls "^2.0.0" + quantize "^1.0.2" + image-size@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" @@ -5269,6 +6813,14 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +incremental-convex-hull@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/incremental-convex-hull/-/incremental-convex-hull-1.0.1.tgz#51428c14cb9d9a6144bfe69b2851fb377334be1e" + integrity sha1-UUKMFMudmmFEv+abKFH7N3M0vh4= + dependencies: + robust-orientation "^1.1.2" + simplicial-complex "^1.0.0" + indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -5292,7 +6844,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5336,6 +6888,18 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" +intersection-observer@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.5.1.tgz#e340fc56ce74290fe2b2394d1ce88c4353ac6dfa" + integrity sha512-Zd7Plneq82kiXFixs7bX62YnuZ0BMRci9br7io88LwDyF3V43cQMI+G5IiTlTNTt+LsDUppl19J/M2Fp9UkH6g== + +interval-tree-1d@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/interval-tree-1d/-/interval-tree-1d-1.0.3.tgz#8fdbde02b6b2c7dbdead636bcbed8e08710d85c1" + integrity sha1-j9veArayx9verWNry+2OCHENhcE= + dependencies: + binary-search-bounds "^1.0.0" + invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -5348,6 +6912,16 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== +invert-permutation@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-permutation/-/invert-permutation-1.0.0.tgz#a0a78042eadb36bc17551e787efd1439add54933" + integrity sha1-oKeAQurbNrwXVR54fv0UOa3VSTM= + +iota-array@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/iota-array/-/iota-array-1.0.0.tgz#81ef57fe5d05814cd58c2483632a99c30a0e8087" + integrity sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc= + ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -5407,6 +6981,11 @@ is-arrayish@^0.3.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== +is-base64@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-base64/-/is-base64-0.1.0.tgz#a6f20610c6ef4863a51cba32bc0222544b932622" + integrity sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg== + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -5414,11 +6993,31 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-buffer@^1.1.5: +is-blob@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-blob/-/is-blob-2.1.0.tgz#e36cd82c90653f1e1b930f11baf9c64216a05385" + integrity sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw== + +is-browser@^2.0.1, is-browser@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-browser/-/is-browser-2.1.0.tgz#fc084d59a5fced307d6708c59356bad7007371a9" + integrity sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ== + +is-buffer@^1.0.2, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-buffer@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + +is-callable@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + is-callable@^1.1.4, is-callable@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" @@ -5509,6 +7108,21 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-finite@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-firefox@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-firefox/-/is-firefox-1.0.3.tgz#2a2a1567783a417f6e158323108f3861b0918562" + integrity sha1-KioVZ3g6QX9uFYMjEI84YbCRhWI= + +is-float-array@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-float-array/-/is-float-array-1.0.0.tgz#96d67b1cbadf47ab1e05be208933acd386978a09" + integrity sha512-4ew1Sx6B6kEAl3T3NOM0yB94J3NZnBdNt4paw0e8nY73yHHTeTEhyQ3Lj7EQEnv5LD+GxNTaT4L46jcKjjpLiQ== + is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -5545,6 +7159,16 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" +is-iexplorer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-iexplorer/-/is-iexplorer-1.0.0.tgz#1d72bc66d3fe22eaf6170dda8cf10943248cfc76" + integrity sha1-HXK8ZtP+Iur2Fw3ajPEJQySM/HY= + +is-mobile@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-mobile/-/is-mobile-2.2.1.tgz#10f2320012c410cc285feecb13406bd586f1b2f8" + integrity sha512-6zELsfVFr326eq2CI53yvqq6YBanOxKBybwDT+MbMS2laBnK6Ez8m5XHSuTQQbnKRfpDzCod1CMWW5q3wZYMvA== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -5557,7 +7181,7 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.0: +is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= @@ -5581,7 +7205,7 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-plain-obj@^1.0.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= @@ -5593,7 +7217,7 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.0.4, is-regex@^1.0.5: +is-regex@^1.0.4, is-regex@^1.0.5, is-regex@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== @@ -5615,6 +7239,16 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== +is-string-blank@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-string-blank/-/is-string-blank-1.0.1.tgz#866dca066d41d2894ebdfd2d8fe93e586e583a03" + integrity sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw== + +is-svg-path@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-svg-path/-/is-svg-path-1.0.2.tgz#77ab590c12b3d20348e5c7a13d0040c87784dda0" + integrity sha1-d6tZDBKz0gNI5cehPQBAyHeE3aA= + is-svg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" @@ -5649,11 +7283,21 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +isarray@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -6303,6 +7947,11 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +kdbush@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0" + integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew== + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -6352,6 +8001,11 @@ launch-editor@^2.2.1: chalk "^2.3.0" shell-quote "^1.6.1" +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= + lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -6364,6 +8018,11 @@ left-pad@^1.3.0: resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== +lerp@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/lerp/-/lerp-1.0.3.tgz#a18c8968f917896de15ccfcc28d55a6b731e776e" + integrity sha1-oYyJaPkXiW3hXM/MKNVaa3Med24= + less-loader@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-5.0.0.tgz#498dde3a6c6c4f887458ee9ed3f086a12ad1b466" @@ -6463,6 +8122,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + lodash.defaultsdeep@^4.6.1: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" @@ -6520,6 +8184,11 @@ loglevel@^1.6.6: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ== +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -6547,6 +8216,13 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +magic-string@^0.25.3: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -6591,6 +8267,13 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= +map-limit@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/map-limit/-/map-limit-0.0.1.tgz#eb7961031c0f0e8d001bf2d56fab685d58822f38" + integrity sha1-63lhAxwPDo0AG/LVb6toXViCLzg= + dependencies: + once "~1.3.0" + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -6598,6 +8281,83 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +mapbox-gl@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-1.10.0.tgz#c33e74d1f328e820e245ff8ed7b5dbbbc4be204f" + integrity sha512-SrJXcR9s5yEsPuW2kKKumA1KqYW9RrL8j7ZcIh6glRQ/x3lwNMfwz/UEJAJcVNgeX+fiwzuBoDIdeGB/vSkZLQ== + dependencies: + "@mapbox/geojson-rewind" "^0.5.0" + "@mapbox/geojson-types" "^1.0.2" + "@mapbox/jsonlint-lines-primitives" "^2.0.2" + "@mapbox/mapbox-gl-supported" "^1.5.0" + "@mapbox/point-geometry" "^0.1.0" + "@mapbox/tiny-sdf" "^1.1.1" + "@mapbox/unitbezier" "^0.0.0" + "@mapbox/vector-tile" "^1.3.1" + "@mapbox/whoots-js" "^3.1.0" + csscolorparser "~1.0.3" + earcut "^2.2.2" + geojson-vt "^3.2.1" + gl-matrix "^3.2.1" + grid-index "^1.1.0" + minimist "^1.2.5" + murmurhash-js "^1.0.0" + pbf "^3.2.1" + potpack "^1.0.1" + quickselect "^2.0.0" + rw "^1.3.3" + supercluster "^7.0.0" + tinyqueue "^2.0.3" + vt-pbf "^3.1.1" + +marching-simplex-table@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/marching-simplex-table/-/marching-simplex-table-1.0.0.tgz#bc16256e0f8f9b558aa9b2872f8832d9433f52ea" + integrity sha1-vBYlbg+Pm1WKqbKHL4gy2UM/Uuo= + dependencies: + convex-hull "^1.0.3" + +mat4-decompose@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mat4-decompose/-/mat4-decompose-1.0.4.tgz#65eb4fe39d70878f7a444eb4624d52f7e7eb2faf" + integrity sha1-ZetP451wh496RE60Yk1S9+frL68= + dependencies: + gl-mat4 "^1.0.1" + gl-vec3 "^1.0.2" + +mat4-interpolate@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mat4-interpolate/-/mat4-interpolate-1.0.4.tgz#55ffe9eb3c35295e2c0d5a9f7725d9068a89ff74" + integrity sha1-Vf/p6zw1KV4sDVqfdyXZBoqJ/3Q= + dependencies: + gl-mat4 "^1.0.1" + gl-vec3 "^1.0.2" + mat4-decompose "^1.0.3" + mat4-recompose "^1.0.3" + quat-slerp "^1.0.0" + +mat4-recompose@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mat4-recompose/-/mat4-recompose-1.0.4.tgz#3953c230ff2473dc772ee014a52c925cf81b0e4d" + integrity sha1-OVPCMP8kc9x3LuAUpSySXPgbDk0= + dependencies: + gl-mat4 "^1.0.1" + +math-log2@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/math-log2/-/math-log2-1.0.1.tgz#fb8941be5f5ebe8979e718e6273b178e58694565" + integrity sha1-+4lBvl9evol55xjmJzsXjlhpRWU= + +matrix-camera-controller@^2.1.1, matrix-camera-controller@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/matrix-camera-controller/-/matrix-camera-controller-2.1.3.tgz#35e5260cc1cd550962ba799f2d8d4e94b1a39370" + integrity sha1-NeUmDMHNVQliunmfLY1OlLGjk3A= + dependencies: + binary-search-bounds "^1.0.0" + gl-mat4 "^1.1.2" + gl-vec3 "^1.0.3" + mat4-interpolate "^1.0.3" + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -6778,6 +8538,11 @@ minimist@^1.1.1, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minimist@^1.2.5, minimist@~1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -6854,6 +8619,39 @@ moment@^2.24.0: resolved "https://registry.npm.taobao.org/moment/download/moment-2.24.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" integrity sha1-DQVdU/UFKqZTyfbraLtdEr9cK1s= +monotone-convex-hull-2d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/monotone-convex-hull-2d/-/monotone-convex-hull-2d-1.0.1.tgz#47f5daeadf3c4afd37764baa1aa8787a40eee08c" + integrity sha1-R/Xa6t88Sv03dkuqGqh4ekDu4Iw= + dependencies: + robust-orientation "^1.1.3" + +mouse-change@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/mouse-change/-/mouse-change-1.4.0.tgz#c2b77e5bfa34a43ce1445c8157a4e4dc9895c14f" + integrity sha1-wrd+W/o0pDzhRFyBV6Tk3JiVwU8= + dependencies: + mouse-event "^1.0.0" + +mouse-event-offset@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz#dfd86a6e248c6ba8cad53b905d5037a2063e9984" + integrity sha1-39hqbiSMa6jK1TuQXVA3ogY+mYQ= + +mouse-event@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/mouse-event/-/mouse-event-1.0.5.tgz#b3789edb7109997d5a932d1d01daa1543a501732" + integrity sha1-s3ie23EJmX1aky0dAdqhVDpQFzI= + +mouse-wheel@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mouse-wheel/-/mouse-wheel-1.2.0.tgz#6d2903b1ea8fb48e61f1b53b9036773f042cdb5c" + integrity sha1-bSkDseqPtI5h8bU7kDZ3PwQs21w= + dependencies: + right-now "^1.0.0" + signum "^1.0.0" + to-px "^1.0.1" + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -6894,6 +8692,18 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" +mumath@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/mumath/-/mumath-3.3.4.tgz#48d4a0f0fd8cad4e7b32096ee89b161a63d30bbf" + integrity sha1-SNSg8P2MrU57Mglu6JsWGmPTC78= + dependencies: + almost-equal "^1.1.0" + +murmurhash-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" + integrity sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E= + mz@^2.4.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -6930,6 +8740,96 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +ndarray-extract-contour@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ndarray-extract-contour/-/ndarray-extract-contour-1.0.1.tgz#0aee113a3a33b226b90c4888cf877bf4751305e4" + integrity sha1-Cu4ROjozsia5DEiIz4d79HUTBeQ= + dependencies: + typedarray-pool "^1.0.0" + +ndarray-fill@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ndarray-fill/-/ndarray-fill-1.0.2.tgz#a30a60f7188e0c9582fcdd58896acdcb522a1ed6" + integrity sha1-owpg9xiODJWC/N1YiWrNy1IqHtY= + dependencies: + cwise "^1.0.10" + +ndarray-gradient@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ndarray-gradient/-/ndarray-gradient-1.0.0.tgz#b7491a515c6a649f19a62324fff6f27fc8c25393" + integrity sha1-t0kaUVxqZJ8ZpiMk//byf8jCU5M= + dependencies: + cwise-compiler "^1.0.0" + dup "^1.0.0" + +ndarray-homography@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ndarray-homography/-/ndarray-homography-1.0.0.tgz#c35516ea86bc2862b4e804a236a2707309fe296b" + integrity sha1-w1UW6oa8KGK06ASiNqJwcwn+KWs= + dependencies: + gl-matrix-invert "^1.0.0" + ndarray-warp "^1.0.0" + +ndarray-linear-interpolate@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ndarray-linear-interpolate/-/ndarray-linear-interpolate-1.0.0.tgz#78bc92b85b9abc15b6e67ee65828f9e2137ae72b" + integrity sha1-eLySuFuavBW25n7mWCj54hN65ys= + +ndarray-ops@^1.1.0, ndarray-ops@^1.2.1, ndarray-ops@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ndarray-ops/-/ndarray-ops-1.2.2.tgz#59e88d2c32a7eebcb1bc690fae141579557a614e" + integrity sha1-WeiNLDKn7ryxvGkPrhQVeVV6YU4= + dependencies: + cwise-compiler "^1.0.0" + +ndarray-pack@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ndarray-pack/-/ndarray-pack-1.2.1.tgz#8caebeaaa24d5ecf70ff86020637977da8ee585a" + integrity sha1-jK6+qqJNXs9w/4YCBjeXfajuWFo= + dependencies: + cwise-compiler "^1.1.2" + ndarray "^1.0.13" + +ndarray-scratch@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ndarray-scratch/-/ndarray-scratch-1.2.0.tgz#6304636d62eba93db4727ac13c693341dba50e01" + integrity sha1-YwRjbWLrqT20cnrBPGkzQdulDgE= + dependencies: + ndarray "^1.0.14" + ndarray-ops "^1.2.1" + typedarray-pool "^1.0.2" + +ndarray-sort@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ndarray-sort/-/ndarray-sort-1.0.1.tgz#fea05b4cb834c7f4e0216a354f3ca751300dfd6a" + integrity sha1-/qBbTLg0x/TgIWo1TzynUTAN/Wo= + dependencies: + typedarray-pool "^1.0.0" + +ndarray-warp@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ndarray-warp/-/ndarray-warp-1.0.1.tgz#a8a125aaabba0bebf93bd6ca83e6abd6822a34e0" + integrity sha1-qKElqqu6C+v5O9bKg+ar1oIqNOA= + dependencies: + cwise "^1.0.4" + ndarray-linear-interpolate "^1.0.0" + +ndarray@1.0.18: + version "1.0.18" + resolved "https://registry.yarnpkg.com/ndarray/-/ndarray-1.0.18.tgz#b60d3a73224ec555d0faa79711e502448fd3f793" + integrity sha1-tg06cyJOxVXQ+qeXEeUCRI/T95M= + dependencies: + iota-array "^1.0.0" + is-buffer "^1.0.2" + +ndarray@^1.0.11, ndarray@^1.0.13, ndarray@^1.0.14, ndarray@^1.0.15, ndarray@^1.0.18: + version "1.0.19" + resolved "https://registry.yarnpkg.com/ndarray/-/ndarray-1.0.19.tgz#6785b5f5dfa58b83e31ae5b2a058cfd1ab3f694e" + integrity sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ== + dependencies: + iota-array "^1.0.0" + is-buffer "^1.0.2" + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -6940,6 +8840,18 @@ neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nextafter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nextafter/-/nextafter-1.0.0.tgz#b7d77b535310e3e097e6025abb0a903477ec1a3a" + integrity sha1-t9d7U1MQ4+CX5gJauwqQNHfsGjo= + dependencies: + double-bits "^1.1.0" + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -7071,6 +8983,18 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= +normalize-svg-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-1.0.1.tgz#6f729ad6b70bb4ca4eff2fe4b107489efe1d56fe" + integrity sha1-b3Ka1rcLtMpO/y/ksQdInv4dVv4= + dependencies: + svg-arc-to-cubic-bezier "^3.0.0" + +normalize-svg-path@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-0.1.0.tgz#456360e60ece75fbef7b5d7e160480e7ffd16fe5" + integrity sha1-RWNg5g7Odfvve11+FgSA5//Rb+U= + normalize-url@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" @@ -7091,6 +9015,11 @@ normalize-wheel@^1.0.1: resolved "https://registry.yarnpkg.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz#aec886affdb045070d856447df62ecf86146ec45" integrity sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU= +normals@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/normals/-/normals-1.1.0.tgz#325b595ed34afe467a6c55a14fd9085787ff59c0" + integrity sha1-MltZXtNK/kZ6bFWhT9kIV4f/WcA= + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -7117,11 +9046,23 @@ num2fraction@^1.2.2: resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= +number-is-integer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-integer/-/number-is-integer-1.0.1.tgz#e59bca172ffed27318e79c7ceb6cb72c095b2152" + integrity sha1-5ZvKFy/+0nMY55x862y3LAlbIVI= + dependencies: + is-finite "^1.0.1" + number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= +numeric@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/numeric/-/numeric-1.2.6.tgz#765b02bef97988fcf880d4eb3f36b80fa31335aa" + integrity sha1-dlsCvvl5iPz4gNTrPza4D6MTNao= + nwsapi@^2.0.7, nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -7146,21 +9087,31 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.7.0: +object-inspect@^1.7.0, object-inspect@~1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== +object-inspect@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-0.4.0.tgz#f5157c116c1455b243b06ee97703392c5ad89fec" + integrity sha1-9RV8EWwUVbJDsG7pdwM5LFrYn+w= + object-is@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.0.6, object-keys@^1.0.9, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -7227,6 +9178,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA= + dependencies: + wrappy "1" + onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -7292,6 +9250,14 @@ ora@^3.4.0: strip-ansi "^5.2.0" wcwidth "^1.0.1" +orbit-camera-controller@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/orbit-camera-controller/-/orbit-camera-controller-4.0.0.tgz#6e2b36f0e7878663c330f50da9b7ce686c277005" + integrity sha1-bis28OeHhmPDMPUNqbfOaGwncAU= + dependencies: + filtered-vector "^1.2.1" + gl-mat4 "^1.0.3" + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -7309,6 +9275,11 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= +os-homedir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-2.0.0.tgz#a0c76bb001a8392a503cbd46e7e650b3423a923c" + integrity sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q== + os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -7408,6 +9379,13 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pad-left@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pad-left/-/pad-left-1.0.2.tgz#19e5735ea98395a26cedc6ab926ead10f3100d4c" + integrity sha1-GeVzXqmDlaJs7carkm6tEPMQDUw= + dependencies: + repeat-string "^1.3.0" + pako@~1.0.5: version "1.0.10" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" @@ -7429,6 +9407,11 @@ param-case@2.1.x: dependencies: no-case "^2.2.0" +parenthesis@^3.1.5: + version "3.1.7" + resolved "https://registry.yarnpkg.com/parenthesis/-/parenthesis-3.1.7.tgz#01c89b603a2a6a262ec47554e74ed154a9be2aa6" + integrity sha512-iMtu+HCbLXVrpf6Ys/4YKhcFxbux3xK4ZVB9r+a2kMSqeeQWQoDNYlXIsOjwlT2ldYXZ3k5PVeBnYn7fbAo/Bg== + parse-asn1@^5.0.0: version "5.1.5" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" @@ -7459,6 +9442,23 @@ parse-json@^5.0.0: json-parse-better-errors "^1.0.1" lines-and-columns "^1.1.6" +parse-rect@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parse-rect/-/parse-rect-1.2.0.tgz#e0a5b0dbaaaee637a0a1eb9779969e19399d8dec" + integrity sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA== + dependencies: + pick-by-alias "^1.2.0" + +parse-svg-path@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb" + integrity sha1-en7A0esG+lMlx9PgCbhZoJtdSes= + +parse-unit@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-unit/-/parse-unit-1.0.1.tgz#7e1bb6d5bef3874c28e392526a2541170291eecf" + integrity sha1-fhu21b7zh0wo45JSaiVBFwKR7s8= + parse5-htmlparser2-tree-adapter@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz#e8c743d4e92194d5293ecde2b08be31e67461cbc" @@ -7553,6 +9553,14 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +pbf@^3.0.5, pbf@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a" + integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ== + dependencies: + ieee754 "^1.1.12" + resolve-protobuf-schema "^2.1.0" + pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -7569,6 +9577,26 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +permutation-parity@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/permutation-parity/-/permutation-parity-1.0.0.tgz#0174d51fca704b11b9a4b152b23d537fdc6b5ef4" + integrity sha1-AXTVH8pwSxG5pLFSsj1Tf9xrXvQ= + dependencies: + typedarray-pool "^1.0.0" + +permutation-rank@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/permutation-rank/-/permutation-rank-1.0.0.tgz#9fd98bbcecf08fbf5994b5eadc94a62e679483b5" + integrity sha1-n9mLvOzwj79ZlLXq3JSmLmeUg7U= + dependencies: + invert-permutation "^1.0.0" + typedarray-pool "^1.0.0" + +pick-by-alias@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pick-by-alias/-/pick-by-alias-1.2.0.tgz#5f7cb2b1f21a6e1e884a0c87855aa4a37361107b" + integrity sha1-X3yysfIabh6ISgyHhVqko3NhEHs= + picomatch@^2.0.5: version "2.2.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" @@ -7622,11 +9650,143 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" +planar-dual@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/planar-dual/-/planar-dual-1.0.2.tgz#b6a4235523b1b0cb79e5f926f8ea335dd982d563" + integrity sha1-tqQjVSOxsMt55fkm+OozXdmC1WM= + dependencies: + compare-angle "^1.0.0" + dup "^1.0.0" + +planar-graph-to-polyline@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/planar-graph-to-polyline/-/planar-graph-to-polyline-1.0.5.tgz#882b8605199ba88bfd464c9553303556c52b988a" + integrity sha1-iCuGBRmbqIv9RkyVUzA1VsUrmIo= + dependencies: + edges-to-adjacency-list "^1.0.0" + planar-dual "^1.0.0" + point-in-big-polygon "^2.0.0" + robust-orientation "^1.0.1" + robust-sum "^1.0.0" + two-product "^1.0.0" + uniq "^1.0.0" + +plotly.js@^1.52.1: + version "1.54.1" + resolved "https://registry.yarnpkg.com/plotly.js/-/plotly.js-1.54.1.tgz#7aed029e80b39c4b095957e837ee24a737b49b93" + integrity sha512-1tlsEQkUgX2BaQr3Eu+5drki3eyor5EhpolFRteuQouRFX9mrg9Pms39Lak29lbAx4W3ZQoCZm8DcKkQCOe9YQ== + dependencies: + "@plotly/d3-sankey" "0.7.2" + "@plotly/d3-sankey-circular" "0.33.1" + "@turf/area" "^6.0.1" + "@turf/bbox" "^6.0.1" + "@turf/centroid" "^6.0.2" + alpha-shape "^1.0.0" + canvas-fit "^1.5.0" + color-normalize "^1.5.0" + color-rgba "^2.1.1" + convex-hull "^1.0.3" + country-regex "^1.1.0" + d3 "^3.5.17" + d3-force "^1.2.1" + d3-hierarchy "^1.1.9" + d3-interpolate "^1.4.0" + delaunay-triangulate "^1.1.6" + es6-promise "^4.2.8" + fast-isnumeric "^1.1.4" + gl-cone3d "^1.5.2" + gl-contour2d "^1.1.7" + gl-error3d "^1.0.16" + gl-heatmap2d "^1.0.6" + gl-line3d "1.2.1" + gl-mat4 "^1.2.0" + gl-mesh3d "^2.3.1" + gl-plot2d "^1.4.4" + gl-plot3d "^2.4.5" + gl-pointcloud2d "^1.0.3" + gl-scatter3d "^1.2.3" + gl-select-box "^1.0.4" + gl-spikes2d "^1.0.2" + gl-streamtube3d "^1.4.1" + gl-surface3d "^1.5.2" + gl-text "^1.1.8" + glslify "^7.0.0" + has-hover "^1.0.1" + has-passive-events "^1.0.0" + is-mobile "^2.2.1" + mapbox-gl "1.10.0" + matrix-camera-controller "^2.1.3" + mouse-change "^1.4.0" + mouse-event-offset "^3.0.2" + mouse-wheel "^1.2.0" + ndarray "1.0.18" + ndarray-fill "^1.0.2" + ndarray-homography "^1.0.0" + parse-svg-path "^0.1.2" + point-cluster "^3.1.8" + polybooljs "^1.2.0" + regl "1.3.11" + regl-error2d "^2.0.8" + regl-line2d "^3.0.15" + regl-scatter2d "^3.1.8" + regl-splom "^1.0.8" + right-now "^1.0.0" + robust-orientation "^1.1.3" + sane-topojson "^4.0.0" + strongly-connected-components "^1.0.1" + superscript-text "^1.0.0" + svg-path-sdf "^1.1.3" + tinycolor2 "^1.4.1" + to-px "1.0.1" + topojson-client "^3.1.0" + webgl-context "^2.2.0" + world-calendars "^1.0.3" + pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== +point-cluster@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/point-cluster/-/point-cluster-3.1.8.tgz#a63625fd8964f2a5b446025a1acf8bcac42500c0" + integrity sha512-7klIr45dpMeZuqjIK9+qBg3m2IhyZJNJkdqjJFw0Olq75FM8ojrTMjClVUrMjNYRVqtwztxCHH71Fyjhg+YwyQ== + dependencies: + array-bounds "^1.0.1" + array-normalize "^1.1.4" + binary-search-bounds "^2.0.4" + bubleify "^1.1.0" + clamp "^1.0.1" + defined "^1.0.0" + dtype "^2.0.0" + flatten-vertex-data "^1.0.2" + is-obj "^1.0.1" + math-log2 "^1.0.1" + parse-rect "^1.2.0" + pick-by-alias "^1.2.0" + +point-in-big-polygon@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/point-in-big-polygon/-/point-in-big-polygon-2.0.0.tgz#39b613ea6cf17d6b43e188f77f34c44c6b33ba55" + integrity sha1-ObYT6mzxfWtD4Yj3fzTETGszulU= + dependencies: + binary-search-bounds "^1.0.0" + interval-tree-1d "^1.0.1" + robust-orientation "^1.1.3" + slab-decomposition "^1.0.1" + +polybooljs@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/polybooljs/-/polybooljs-1.2.0.tgz#b4390c2e079d4c262d3b2504c6288d95ba7a4758" + integrity sha1-tDkMLgedTCYtOyUExiiNlbp6R1g= + +polytope-closest-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/polytope-closest-point/-/polytope-closest-point-1.0.0.tgz#e6e57f4081ab5e8c778b811ef06e2c48ae338c3f" + integrity sha1-5uV/QIGrXox3i4Ee8G4sSK4zjD8= + dependencies: + numeric "^1.2.6" + popper.js@^1.14.6: version "1.16.0" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.0.tgz#2e1816bcbbaa518ea6c2e15a466f4cb9c6e2fbb3" @@ -7991,6 +10151,11 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.2 source-map "^0.6.1" supports-color "^6.1.0" +potpack@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.1.tgz#d1b1afd89e4c8f7762865ec30bd112ab767e2ebf" + integrity sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -8078,6 +10243,11 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= +protocol-buffers-schema@^3.3.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz#2f0ea31ca96627d680bf2fefae7ebfa2b6453eae" + integrity sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA== + proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" @@ -8153,6 +10323,18 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +pxls@^2.0.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/pxls/-/pxls-2.3.2.tgz#79100d2cc95089fc6e00053a9d93c1ddddb2c7b4" + integrity sha512-pQkwgbLqWPcuES5iEmGa10OlCf5xG0blkIF3dg7PpRZShbTYcvAdfFfGL03SMrkaSUaa/V0UpN9HWg40O2AIIw== + dependencies: + arr-flatten "^1.1.0" + compute-dims "^1.1.0" + flip-pixels "^1.0.2" + is-browser "^2.1.0" + is-buffer "^2.0.3" + to-uint8 "^1.4.1" + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -8173,6 +10355,18 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +quantize@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/quantize/-/quantize-1.0.2.tgz#d25ac200a77b6d70f40127ca171a10e33c8546de" + integrity sha1-0lrCAKd7bXD0ASfKFxoQ4zyFRt4= + +quat-slerp@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/quat-slerp/-/quat-slerp-1.0.1.tgz#2baa15ce3a6bbdc3241d972eb17283139ed69f29" + integrity sha1-K6oVzjprvcMkHZcusXKDE57Wnyk= + dependencies: + gl-quat "^1.0.0" + query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" @@ -8196,6 +10390,26 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== +quickselect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" + integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== + +quote-stream@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/quote-stream/-/quote-stream-0.0.0.tgz#cde29e94c409b16e19dc7098b89b6658f9721d3b" + integrity sha1-zeKelMQJsW4Z3HCYuJtmWPlyHTs= + dependencies: + minimist "0.0.8" + through2 "~0.4.1" + +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -8216,6 +10430,13 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== +rat-vec@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/rat-vec/-/rat-vec-1.1.1.tgz#0dde2b66b7b34bb1bcd2a23805eac806d87fd17f" + integrity sha1-Dd4rZrezS7G80qI4BerIBth/0X8= + dependencies: + big-rat "^1.0.3" + raw-body@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" @@ -8263,7 +10484,7 @@ read-pkg@^5.1.1: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -8276,6 +10497,25 @@ read-pkg@^5.1.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" +"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17, readable-stream@~1.0.27-1: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^3.0.2: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@^3.0.6, readable-stream@^3.1.1: version "3.4.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" @@ -8285,6 +10525,16 @@ readable-stream@^3.0.6, readable-stream@^3.1.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -8301,6 +10551,15 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" +reduce-simplicial-complex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/reduce-simplicial-complex/-/reduce-simplicial-complex-1.0.0.tgz#74d696a2f835f7a6dcd92065fd8c5181f2edf8bc" + integrity sha1-dNaWovg196bc2SBl/YxRgfLt+Lw= + dependencies: + cell-orientation "^1.0.1" + compare-cell "^1.0.0" + compare-oriented-cell "^1.0.1" + regenerate-unicode-properties@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" @@ -8308,6 +10567,13 @@ regenerate-unicode-properties@^8.1.0: dependencies: regenerate "^1.4.0" +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" @@ -8338,6 +10604,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regex-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regex-regex/-/regex-regex-1.0.0.tgz#9048a1eaeb870f4d480dabc76fc42cdcc0bc3a72" + integrity sha1-kEih6uuHD01IDavHb8Qs3MC8OnI= + regexp.prototype.flags@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" @@ -8346,6 +10617,18 @@ regexp.prototype.flags@^1.2.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" +regexpu-core@^4.5.4: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + regexpu-core@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" @@ -8363,6 +10646,11 @@ regjsgen@^0.5.0: resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + regjsparser@^0.6.0: version "0.6.2" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.2.tgz#fd62c753991467d9d1ffe0a9f67f27a529024b96" @@ -8370,6 +10658,95 @@ regjsparser@^0.6.0: dependencies: jsesc "~0.5.0" +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +regl-error2d@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/regl-error2d/-/regl-error2d-2.0.8.tgz#0f26371ee99c78d42e9c5a197387e32034bcf640" + integrity sha512-5nszdicXbimRUnYB42i+O7KPcla7PzI62nZLCP6qVRKlQCf3rSrWbikMNd1S84LE8+deWHWcb8rZ/v7rZ9qmmw== + dependencies: + array-bounds "^1.0.1" + bubleify "^1.2.0" + color-normalize "^1.5.0" + flatten-vertex-data "^1.0.2" + object-assign "^4.1.1" + pick-by-alias "^1.2.0" + to-float32 "^1.0.1" + update-diff "^1.1.0" + +regl-line2d@^3.0.15: + version "3.0.15" + resolved "https://registry.yarnpkg.com/regl-line2d/-/regl-line2d-3.0.15.tgz#5baf2a0ed5024cec2ec038c6ada601c98ac579e3" + integrity sha512-RuQbg9iZ6MyuInG8izF6zjQ/2g4qL6sg1egiuFalWzaGSvuve/IWBsIcqKTlwpiEsRt9b4cHu9NYs2fLt1gYJw== + dependencies: + array-bounds "^1.0.1" + array-normalize "^1.1.4" + bubleify "^1.2.0" + color-normalize "^1.5.0" + earcut "^2.1.5" + es6-weak-map "^2.0.3" + flatten-vertex-data "^1.0.2" + glslify "^7.0.0" + object-assign "^4.1.1" + parse-rect "^1.2.0" + pick-by-alias "^1.2.0" + to-float32 "^1.0.1" + +regl-scatter2d@^3.1.2, regl-scatter2d@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/regl-scatter2d/-/regl-scatter2d-3.1.8.tgz#5fdf77f9cee7e71497d038dc1b654dc4340b6bfb" + integrity sha512-Z9MYAUx9t8e3MsiHBbJAEstbIqauXxzcL9DmuKXQuRWfCMF2DBytYJtE0FpbQU6639wEMAJ54SEIlISWF8sQ2g== + dependencies: + array-range "^1.0.1" + array-rearrange "^2.2.2" + clamp "^1.0.1" + color-id "^1.1.0" + color-normalize "1.5.0" + color-rgba "^2.1.1" + flatten-vertex-data "^1.0.2" + glslify "^7.0.0" + image-palette "^2.1.0" + is-iexplorer "^1.0.0" + object-assign "^4.1.1" + parse-rect "^1.2.0" + pick-by-alias "^1.2.0" + point-cluster "^3.1.8" + to-float32 "^1.0.1" + update-diff "^1.1.0" + +regl-splom@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/regl-splom/-/regl-splom-1.0.8.tgz#05f165a6f0b8afc6b6b97fafa775282d44387db3" + integrity sha512-4GQTgcArCbGLsXhgalWVBxeW7OXllnu+Gvil/4SbQQmtiqLCl+xgF79pISKY9mLXTlobxiX7cVKdjGjp25559A== + dependencies: + array-bounds "^1.0.1" + array-range "^1.0.1" + bubleify "^1.2.0" + color-alpha "^1.0.4" + defined "^1.0.0" + flatten-vertex-data "^1.0.2" + left-pad "^1.3.0" + parse-rect "^1.2.0" + pick-by-alias "^1.2.0" + point-cluster "^3.1.8" + raf "^3.4.1" + regl-scatter2d "^3.1.2" + +regl@1.3.11: + version "1.3.11" + resolved "https://registry.yarnpkg.com/regl/-/regl-1.3.11.tgz#515e5173ffdc0618f908dd4e338a34ae9555f745" + integrity sha512-tmt6CRhRqbcsYDWNwv+iG7GGOXdgoOBC7lKzoPMgnzpt3WKBQ3c8i7AxgbvTRZzty29hrW92fAJeZkPFQehfWA== + +regl@^1.3.11: + version "1.6.1" + resolved "https://registry.yarnpkg.com/regl/-/regl-1.6.1.tgz#6930172cda9b8fb65724abc0d4930d79333f5460" + integrity sha512-7Z9rmpEqmLNwC9kCYCyfyu47eWZaQWeNpwZfwz99QueXN8B/Ow40DB0N+OeUeM/yu9pZAB01+JgJ+XghGveVoA== + relateurl@0.2.x: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -8396,7 +10773,7 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.6.1: +repeat-string@^1.3.0, repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -8480,6 +10857,13 @@ resolve-from@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha1-six699nWiBvItuZTM17rywoYh0g= +resolve-protobuf-schema@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" + integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== + dependencies: + protocol-buffers-schema "^3.3.1" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -8497,6 +10881,18 @@ resolve@1.x, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1: dependencies: path-parse "^1.0.6" +resolve@^0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46" + integrity sha1-3ZV5gufnNt699TtYpN2RdUV13UY= + +resolve@^1.0.0, resolve@^1.1.5, resolve@~1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -8505,6 +10901,13 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +resumer@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= + dependencies: + through "~2.3.4" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -8520,10 +10923,22 @@ rgb-regex@^1.0.1: resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= -rgba-regex@^1.0.0: +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + dependencies: + align-text "^0.1.1" + +right-now@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + resolved "https://registry.yarnpkg.com/right-now/-/right-now-1.0.0.tgz#6e89609deebd7dcdaf8daecc9aea39cf585a0918" + integrity sha1-bolgne69fc2vja7Mmuo5z1haCRg= rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" @@ -8540,6 +10955,89 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +robust-compress@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/robust-compress/-/robust-compress-1.0.0.tgz#4cf62c4b318d8308516012bb8c11752f39329b1b" + integrity sha1-TPYsSzGNgwhRYBK7jBF1Lzkymxs= + +robust-determinant@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/robust-determinant/-/robust-determinant-1.1.0.tgz#8ecae79b79caab3e74f6debe2237e5391a27e9c7" + integrity sha1-jsrnm3nKqz509t6+IjflORon6cc= + dependencies: + robust-compress "^1.0.0" + robust-scale "^1.0.0" + robust-sum "^1.0.0" + two-product "^1.0.0" + +robust-dot-product@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/robust-dot-product/-/robust-dot-product-1.0.0.tgz#c9ba0178bd2c304bfd725f58e889f1d946004553" + integrity sha1-yboBeL0sMEv9cl9Y6Inx2UYARVM= + dependencies: + robust-sum "^1.0.0" + two-product "^1.0.0" + +robust-in-sphere@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/robust-in-sphere/-/robust-in-sphere-1.1.3.tgz#1c5883d16a4e923929476ef34819857bf2a9cf75" + integrity sha1-HFiD0WpOkjkpR27zSBmFe/Kpz3U= + dependencies: + robust-scale "^1.0.0" + robust-subtract "^1.0.0" + robust-sum "^1.0.0" + two-product "^1.0.0" + +robust-linear-solve@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/robust-linear-solve/-/robust-linear-solve-1.0.0.tgz#0cd6ac5040691a6f2aa3cd6311d728905ca3a1f1" + integrity sha1-DNasUEBpGm8qo81jEdcokFyjofE= + dependencies: + robust-determinant "^1.1.0" + +robust-orientation@^1.0.1, robust-orientation@^1.0.2, robust-orientation@^1.1.2, robust-orientation@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/robust-orientation/-/robust-orientation-1.1.3.tgz#daff5b00d3be4e60722f0e9c0156ef967f1c2049" + integrity sha1-2v9bANO+TmByLw6cAVbvln8cIEk= + dependencies: + robust-scale "^1.0.2" + robust-subtract "^1.0.0" + robust-sum "^1.0.0" + two-product "^1.0.2" + +robust-product@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/robust-product/-/robust-product-1.0.0.tgz#685250007cdbba7cf1de75bff6d2927011098abe" + integrity sha1-aFJQAHzbunzx3nW/9tKScBEJir4= + dependencies: + robust-scale "^1.0.0" + robust-sum "^1.0.0" + +robust-scale@^1.0.0, robust-scale@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/robust-scale/-/robust-scale-1.0.2.tgz#775132ed09542d028e58b2cc79c06290bcf78c32" + integrity sha1-d1Ey7QlULQKOWLLMecBikLz3jDI= + dependencies: + two-product "^1.0.2" + two-sum "^1.0.0" + +robust-segment-intersect@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/robust-segment-intersect/-/robust-segment-intersect-1.0.1.tgz#3252b6a0fc1ba14ade6915ccbe09cbce9aab1c1c" + integrity sha1-MlK2oPwboUreaRXMvgnLzpqrHBw= + dependencies: + robust-orientation "^1.1.3" + +robust-subtract@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/robust-subtract/-/robust-subtract-1.0.0.tgz#e0b164e1ed8ba4e3a5dda45a12038348dbed3e9a" + integrity sha1-4LFk4e2LpOOl3aRaEgODSNvtPpo= + +robust-sum@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/robust-sum/-/robust-sum-1.0.0.tgz#16646e525292b4d25d82757a286955e0bbfa53d9" + integrity sha1-FmRuUlKStNJdgnV6KGlV4Lv6U9k= + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -8552,6 +11050,11 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +rw@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= + rxjs@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" @@ -8581,6 +11084,11 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sane-topojson@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/sane-topojson/-/sane-topojson-4.0.0.tgz#624cdb26fc6d9392c806897bfd1a393f29bb5308" + integrity sha512-bJILrpBboQfabG3BNnHI2hZl52pbt80BE09u4WhnrmzuF2JbMKZdl62G5glXskJ46p+gxE2IzOwGj/awR4g8AA== + sane@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" @@ -8744,6 +11252,11 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-copy@0.0.1, shallow-copy@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" + integrity sha1-QV9CcC1z2BAzApLMXuhurhoRoXA= + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -8788,6 +11301,16 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +signum@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/signum/-/signum-0.0.0.tgz#ab551b1003351070a704783f1a09c5e7691f9cf6" + integrity sha1-q1UbEAM1EHCnBHg/GgnF52kfnPY= + +signum@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/signum/-/signum-1.0.0.tgz#74a7d2bf2a20b40eba16a92b152124f1d559fa77" + integrity sha1-dKfSvyogtA66FqkrFSEk8dVZ+nc= + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -8795,11 +11318,62 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +simplicial-complex-boundary@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simplicial-complex-boundary/-/simplicial-complex-boundary-1.0.1.tgz#72c9ff1e24deaa374c9bb2fa0cbf0c081ebef815" + integrity sha1-csn/HiTeqjdMm7L6DL8MCB6++BU= + dependencies: + boundary-cells "^2.0.0" + reduce-simplicial-complex "^1.0.0" + +simplicial-complex-contour@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/simplicial-complex-contour/-/simplicial-complex-contour-1.0.2.tgz#890aacac284365340110545cf2629a26e04bf9d1" + integrity sha1-iQqsrChDZTQBEFRc8mKaJuBL+dE= + dependencies: + marching-simplex-table "^1.0.0" + ndarray "^1.0.15" + ndarray-sort "^1.0.0" + typedarray-pool "^1.1.0" + +simplicial-complex@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/simplicial-complex/-/simplicial-complex-0.3.3.tgz#4c30cad57f9e45729dd8f306c8753579f46be99e" + integrity sha1-TDDK1X+eRXKd2PMGyHU1efRr6Z4= + dependencies: + bit-twiddle "~0.0.1" + union-find "~0.0.3" + +simplicial-complex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simplicial-complex/-/simplicial-complex-1.0.0.tgz#6c33a4ed69fcd4d91b7bcadd3b30b63683eae241" + integrity sha1-bDOk7Wn81Nkbe8rdOzC2NoPq4kE= + dependencies: + bit-twiddle "^1.0.0" + union-find "^1.0.0" + +simplify-planar-graph@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/simplify-planar-graph/-/simplify-planar-graph-2.0.1.tgz#bc85893725f32e8fa8ae25681398446d2cbcf766" + integrity sha1-vIWJNyXzLo+oriVoE5hEbSy892Y= + dependencies: + robust-orientation "^1.0.1" + simplicial-complex "^0.3.3" + sisteransi@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig== +slab-decomposition@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/slab-decomposition/-/slab-decomposition-1.0.2.tgz#1ded56754d408b10739f145103dfc61807f65134" + integrity sha1-He1WdU1AixBznxRRA9/GGAf2UTQ= + dependencies: + binary-search-bounds "^1.0.0" + functional-red-black-tree "^1.0.0" + robust-orientation "^1.1.3" + slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" @@ -8906,7 +11480,12 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.0, source-map@^0.5.6: +"source-map@>= 0.1.2": + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -8916,6 +11495,18 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@~0.1.33: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= + dependencies: + amdefine ">=0.0.4" + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -8965,6 +11556,14 @@ spdy@^4.0.1: select-hose "^2.0.0" spdy-transport "^3.0.0" +split-polygon@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/split-polygon/-/split-polygon-1.0.0.tgz#0eacc8a136a76b12a3d95256ea7da45db0c2d247" + integrity sha1-DqzIoTanaxKj2VJW6n2kXbDC0kc= + dependencies: + robust-dot-product "^1.0.0" + robust-sum "^1.0.0" + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -8972,6 +11571,11 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +sprintf-js@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -9019,6 +11623,11 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== +stack-trace@0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" + integrity sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU= + stack-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" @@ -9029,6 +11638,20 @@ stackframe@^1.1.1: resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.1.1.tgz#ffef0a3318b1b60c3b58564989aca5660729ec71" integrity sha512-0PlYhdKh6AfFxRyK/v+6/k+/mMfyiEBbTM5L94D0ZytQnJ166wuwoTYLHFWGbs2dpA8Rgq763KGWmN1EQEYHRQ== +static-eval@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.5.tgz#f0782e66999c4b3651cda99d9ce59c507d188f71" + integrity sha512-nNbV6LbGtMBgv7e9LFkt5JV8RVlRsyJrphfAt9tOtBBW/SfnzZDf2KnS72an8e434A+9e/BmJuTxeGPvrAK7KA== + dependencies: + escodegen "^1.11.1" + +static-eval@~0.2.0: + version "0.2.4" + resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-0.2.4.tgz#b7d34d838937b969f9641ca07d48f8ede263ea7b" + integrity sha1-t9NNg4k3uWn5ZBygfUj47eJj6ns= + dependencies: + escodegen "~0.0.24" + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -9037,6 +11660,23 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +static-module@^1.0.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/static-module/-/static-module-1.5.0.tgz#27da9883c41a8cd09236f842f0c1ebc6edf63d86" + integrity sha1-J9qYg8QajNCSNvhC8MHrxu32PYY= + dependencies: + concat-stream "~1.6.0" + duplexer2 "~0.0.2" + escodegen "~1.3.2" + falafel "^2.1.0" + has "^1.0.0" + object-inspect "~0.4.0" + quote-stream "~0.0.0" + readable-stream "~1.0.27-1" + shallow-copy "~0.0.1" + static-eval "~0.2.0" + through2 "~0.4.1" + "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" @@ -9100,6 +11740,21 @@ string-length@^3.1.0: astral-regex "^1.0.0" strip-ansi "^5.2.0" +string-split-by@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string-split-by/-/string-split-by-1.0.0.tgz#53895fb3397ebc60adab1f1e3a131f5372586812" + integrity sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A== + dependencies: + parenthesis "^3.1.5" + +string-to-arraybuffer@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-to-arraybuffer/-/string-to-arraybuffer-1.0.2.tgz#161147fbadea02e28b0935002cec4c40f1ca7f0a" + integrity sha512-DaGZidzi93dwjQen5I2osxR9ERS/R7B1PFyufNMnzhj+fmlDQAc1DSDIJVJhgI8Oq221efIMbABUBdPHDRt43Q== + dependencies: + atob-lite "^2.0.0" + is-base64 "^0.1.0" + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -9135,6 +11790,15 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.trim@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782" + integrity sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + string.prototype.trimleft@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" @@ -9158,6 +11822,11 @@ string_decoder@^1.0.0, string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -9218,6 +11887,11 @@ strip-json-comments@^2.0.0: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strongly-connected-components@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz#0920e2b4df67c8eaee96c6b6234fe29e873dba99" + integrity sha1-CSDitN9nyOrulsa2I0/inoc9upk= + stylehacks@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" @@ -9227,6 +11901,18 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +supercluster@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-7.1.0.tgz#f0a457426ec0ab95d69c5f03b51e049774b94479" + integrity sha512-LDasImUAFMhTqhK+cUXfy9C2KTUqJ3gucLjmNLNFmKWOnDUBxLFLH9oKuXOTCLveecmxh8fbk8kgh6Q0gsfe2w== + dependencies: + kdbush "^3.0.0" + +superscript-text@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/superscript-text/-/superscript-text-1.0.0.tgz#e7cb2752567360df50beb0610ce8df3d71d8dfd8" + integrity sha1-58snUlZzYN9QvrBhDOjfPXHY39g= + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -9253,6 +11939,41 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +surface-nets@^1.0.0, surface-nets@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/surface-nets/-/surface-nets-1.0.2.tgz#e433c8cbba94a7274c6f4c99552b461bf1fc7a4b" + integrity sha1-5DPIy7qUpydMb0yZVStGG/H8eks= + dependencies: + ndarray-extract-contour "^1.0.0" + triangulate-hypercube "^1.0.0" + zero-crossings "^1.0.0" + +svg-arc-to-cubic-bezier@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz#390c450035ae1c4a0104d90650304c3bc814abe6" + integrity sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g== + +svg-path-bounds@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/svg-path-bounds/-/svg-path-bounds-1.0.1.tgz#bf458b783726bf53431b4633f2792f60748d9f74" + integrity sha1-v0WLeDcmv1NDG0Yz8nkvYHSNn3Q= + dependencies: + abs-svg-path "^0.1.1" + is-svg-path "^1.0.1" + normalize-svg-path "^1.0.0" + parse-svg-path "^0.1.2" + +svg-path-sdf@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/svg-path-sdf/-/svg-path-sdf-1.1.3.tgz#92957a31784c0eaf68945472c8dc6bf9e6d126fc" + integrity sha512-vJJjVq/R5lSr2KLfVXVAStktfcfa1pNFjFOgyJnzZFXlO/fDZ5DmM8FpnSKKzLPfEYTVeXuVBTHF296TpxuJVg== + dependencies: + bitmap-sdf "^1.0.0" + draw-svg-path "^1.0.0" + is-svg-path "^1.0.1" + parse-svg-path "^0.1.2" + svg-path-bounds "^1.0.1" + svg-tags@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" @@ -9287,6 +12008,27 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tape@^4.0.0: + version "4.13.3" + resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.3.tgz#51b3d91c83668c7a45b1a594b607dee0a0b46278" + integrity sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw== + dependencies: + deep-equal "~1.1.1" + defined "~1.0.0" + dotignore "~0.1.2" + for-each "~0.3.3" + function-bind "~1.1.1" + glob "~7.1.6" + has "~1.0.3" + inherits "~2.0.4" + is-regex "~1.0.5" + minimist "~1.2.5" + object-inspect "~1.7.0" + resolve "~1.17.0" + resumer "~0.0.0" + string.prototype.trim "~1.2.1" + through "~2.3.8" + terser-webpack-plugin@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" @@ -9335,6 +12077,13 @@ test-exclude@^5.2.3: read-pkg-up "^4.0.0" require-main-filename "^2.0.0" +text-cache@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/text-cache/-/text-cache-4.2.2.tgz#d0d30ba89b7312ea1c1a31cd9a4db56c1cef7fe7" + integrity sha512-zky+UDYiX0a/aPw/YTBD+EzKMlCTu1chFuCMZeAkgoRiceySdROu1V2kJXhCbtEdBhiOviYnAdGiSYl58HW0ZQ== + dependencies: + vectorize-text "^3.2.1" + thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -9368,7 +12117,15 @@ throttle-debounce@^1.0.1: resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz#51853da37be68a155cb6e827b3514a3c422e89cd" integrity sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg== -through2@^2.0.0: +through2@^0.6.3: + version "0.6.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" + integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg= + dependencies: + readable-stream ">=1.0.33-1 <1.1.0-0" + xtend ">=4.0.0 <4.1.0-0" + +through2@^2.0.0, through2@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -9376,6 +12133,19 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" +through2@~0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b" + integrity sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s= + dependencies: + readable-stream "~1.0.17" + xtend "~2.1.1" + +through@~2.3.4, through@~2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -9403,11 +12173,25 @@ tinymce@4.8.5: resolved "https://registry.yarnpkg.com/tinymce/-/tinymce-4.8.5.tgz#a80ea66c4f90078bd93625b0f0914a4f774e0af3" integrity sha512-1V6+PxP5Kp8H/Kuf+EOe6vyrtj1Dlj98q33DgiKGoGPTmbcQaVZWiT+lhqj8ICXKVLV3YxAieOJyJXai4SLHQg== +tinyqueue@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08" + integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA== + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= +to-array-buffer@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/to-array-buffer/-/to-array-buffer-3.2.0.tgz#cb684dd691a7368c3b249c2348d75227f7d4dbb4" + integrity sha512-zN33mwi0gpL+7xW1ITLfJ48CEj6ZQW0ZAP0MU+2W3kEY0PAIncyuxmD4OqkUVhPAbTP7amq9j/iwvZKYS+lzSQ== + dependencies: + flatten-vertex-data "^1.0.2" + is-blob "^2.0.1" + string-to-arraybuffer "^1.0.0" + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -9423,6 +12207,11 @@ to-fast-properties@^2.0.0: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= +to-float32@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-float32/-/to-float32-1.0.1.tgz#22d5921f38183164b9e7e9876158c0c16cb9753a" + integrity sha512-nOy2WSwae3xhZbc+05xiCuU3ZPPmH0L4Rg4Q1qiOGFSuNSCTB9nVJaGgGl3ZScxAclX/L8hJuDHJGDAzbfuKCQ== + to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -9430,6 +12219,20 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" +to-px@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-px/-/to-px-1.0.1.tgz#5bbaed5e5d4f76445bcc903c293a2307dd324646" + integrity sha1-W7rtXl1PdkRbzJA8KTojB90yRkY= + dependencies: + parse-unit "^1.0.1" + +to-px@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/to-px/-/to-px-1.1.0.tgz#b6b269ed5db0cc9aefc15272a4c8bcb2ca1e99ca" + integrity sha512-bfg3GLYrGoEzrGoE05TAL/Uw+H/qrf2ptr9V3W7U0lkjjyYnIfgxmVLUfhQ1hZpIQwin81uxhDjvUkDYsC0xWw== + dependencies: + parse-unit "^1.0.1" + to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -9455,11 +12258,29 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +to-uint8@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/to-uint8/-/to-uint8-1.4.1.tgz#9f45694905b827f247d37bc8ec83b2818d81fac9" + integrity sha512-o+ochsMlTZyucbww8It401FC2Rx+OP2RpDeYbA6h+y9HgedDl1UjdsJ9CmzKEG7AFP9es5PmJ4eDWeeeXihESg== + dependencies: + arr-flatten "^1.1.0" + clamp "^1.0.1" + is-base64 "^0.1.0" + is-float-array "^1.0.0" + to-array-buffer "^3.0.0" + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +topojson-client@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.1.0.tgz#22e8b1ed08a2b922feeb4af6f53b6ef09a467b99" + integrity sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw== + dependencies: + commander "2" + toposort@^1.0.0: version "1.0.7" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" @@ -9497,6 +12318,22 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +triangulate-hypercube@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/triangulate-hypercube/-/triangulate-hypercube-1.0.1.tgz#d8071db2ebfcfd51f308d0bcf2a5c48a5b36d137" + integrity sha1-2Acdsuv8/VHzCNC88qXEils20Tc= + dependencies: + gamma "^0.1.0" + permutation-parity "^1.0.0" + permutation-rank "^1.0.0" + +triangulate-polyline@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/triangulate-polyline/-/triangulate-polyline-1.0.3.tgz#bf8ba877a85054103feb9fa5a61b4e8d7017814d" + integrity sha1-v4uod6hQVBA/65+lphtOjXAXgU0= + dependencies: + cdt2d "^1.0.0" + tryer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" @@ -9582,11 +12419,30 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +turntable-camera-controller@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/turntable-camera-controller/-/turntable-camera-controller-3.0.1.tgz#8dbd3fe00550191c65164cb888971049578afd99" + integrity sha1-jb0/4AVQGRxlFky4iJcQSVeK/Zk= + dependencies: + filtered-vector "^1.2.1" + gl-mat4 "^1.0.2" + gl-vec3 "^1.0.2" + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +two-product@^1.0.0, two-product@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/two-product/-/two-product-1.0.2.tgz#67d95d4b257a921e2cb4bd7af9511f9088522eaa" + integrity sha1-Z9ldSyV6kh4stL16+VEfkIhSLqo= + +two-sum@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/two-sum/-/two-sum-1.0.0.tgz#31d3f32239e4f731eca9df9155e2b297f008ab64" + integrity sha1-MdPzIjnk9zHsqd+RVeKyl/AIq2Q= + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -9612,6 +12468,29 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +type-name@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4" + integrity sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q= + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" + integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== + +typedarray-pool@^1.0.0, typedarray-pool@^1.0.2, typedarray-pool@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/typedarray-pool/-/typedarray-pool-1.2.0.tgz#e7e90720144ba02b9ed660438af6f3aacfe33ac3" + integrity sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ== + dependencies: + bit-twiddle "^1.0.0" + dup "^1.0.0" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -9630,6 +12509,16 @@ uglify-js@3.4.x: commander "~2.19.0" source-map "~0.6.1" +uglify-js@^2.6.0: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + uglify-js@^3.1.4: version "3.7.5" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.5.tgz#278c7c24927ac5a32d3336fc68fd4ae1177a486a" @@ -9638,6 +12527,11 @@ uglify-js@^3.1.4: commander "~2.20.3" source-map "~0.6.1" +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -9656,11 +12550,26 @@ unicode-match-property-value-ecmascript@^1.1.0: resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + unicode-property-aliases-ecmascript@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== +union-find@^1.0.0, union-find@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/union-find/-/union-find-1.0.2.tgz#292bac415e6ad3a89535d237010db4a536284e58" + integrity sha1-KSusQV5q06iVNdI3AQ20pTYoTlg= + +union-find@~0.0.3: + version "0.0.4" + resolved "https://registry.yarnpkg.com/union-find/-/union-find-0.0.4.tgz#b854b3301619bdad144b0014c78f96eac0d2f0f6" + integrity sha1-uFSzMBYZva0USwAUx4+W6sDS8PY= + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -9671,7 +12580,7 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -uniq@^1.0.1: +uniq@^1.0.0, uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= @@ -9705,7 +12614,7 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unquote@~1.1.1: +unquote@^1.1.0, unquote@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= @@ -9723,6 +12632,11 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-diff@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-diff/-/update-diff-1.1.0.tgz#f510182d81ee819fb82c3a6b22b62bbdeda7808f" + integrity sha1-9RAYLYHugZ+4LDprIrYrve2ngI8= + upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" @@ -9802,11 +12716,50 @@ utila@^0.4.0, utila@~0.4: resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= +utils-copy-error@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-copy-error/-/utils-copy-error-1.0.1.tgz#791de393c0f09890afd59f3cbea635f079a94fa5" + integrity sha1-eR3jk8DwmJCv1Z88vqY18HmpT6U= + dependencies: + object-keys "^1.0.9" + utils-copy "^1.1.0" + +utils-copy@^1.0.0, utils-copy@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/utils-copy/-/utils-copy-1.1.1.tgz#6e2b97982aa8cd73e1182a3e6f8bec3c0f4058a7" + integrity sha1-biuXmCqozXPhGCo+b4vsPA9AWKc= + dependencies: + const-pinf-float64 "^1.0.0" + object-keys "^1.0.9" + type-name "^2.0.0" + utils-copy-error "^1.0.0" + utils-indexof "^1.0.0" + utils-regex-from-string "^1.0.0" + validate.io-array "^1.0.3" + validate.io-buffer "^1.0.1" + validate.io-nonnegative-integer "^1.0.0" + +utils-indexof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-indexof/-/utils-indexof-1.0.0.tgz#20feabf09ef1018b523643e8380e7bc83ec61b5c" + integrity sha1-IP6r8J7xAYtSNkPoOA57yD7GG1w= + dependencies: + validate.io-array-like "^1.0.1" + validate.io-integer-primitive "^1.0.0" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +utils-regex-from-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-regex-from-string/-/utils-regex-from-string-1.0.0.tgz#fe1a2909f8de0ff0d5182c80fbc654d6a687d189" + integrity sha1-/hopCfjeD/DVGCyA+8ZU1qaH0Yk= + dependencies: + regex-regex "^1.0.0" + validate.io-string-primitive "^1.0.0" + uuid@^3.0.1, uuid@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" @@ -9825,11 +12778,95 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validate.io-array-like@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/validate.io-array-like/-/validate.io-array-like-1.0.2.tgz#7af9f7eb7b51715beb2215668ec5cce54faddb5a" + integrity sha1-evn363tRcVvrIhVmjsXM5U+t21o= + dependencies: + const-max-uint32 "^1.0.2" + validate.io-integer-primitive "^1.0.0" + +validate.io-array@^1.0.3, validate.io-array@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" + integrity sha1-W1osr9j4uFq7L4hroVPy2Tond00= + +validate.io-buffer@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/validate.io-buffer/-/validate.io-buffer-1.0.2.tgz#852d6734021914d5d13afc32531761e3720ed44e" + integrity sha1-hS1nNAIZFNXROvwyUxdh43IO1E4= + +validate.io-integer-primitive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/validate.io-integer-primitive/-/validate.io-integer-primitive-1.0.0.tgz#a9aa010355fe8681c0fea6c1a74ad2419cadddc6" + integrity sha1-qaoBA1X+hoHA/qbBp0rSQZyt3cY= + dependencies: + validate.io-number-primitive "^1.0.0" + +validate.io-integer@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068" + integrity sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg= + dependencies: + validate.io-number "^1.0.3" + +validate.io-matrix-like@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/validate.io-matrix-like/-/validate.io-matrix-like-1.0.2.tgz#5ec32a75d0889dac736dea68bdd6145b155edfc3" + integrity sha1-XsMqddCInaxzbepovdYUWxVe38M= + +validate.io-ndarray-like@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/validate.io-ndarray-like/-/validate.io-ndarray-like-1.0.0.tgz#d8a3b0ed165bbf1d2fc0d0073270cfa552295919" + integrity sha1-2KOw7RZbvx0vwNAHMnDPpVIpWRk= + +validate.io-nonnegative-integer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/validate.io-nonnegative-integer/-/validate.io-nonnegative-integer-1.0.0.tgz#8069243a08c5f98e95413c929dfd7b18f3f6f29f" + integrity sha1-gGkkOgjF+Y6VQTySnf17GPP28p8= + dependencies: + validate.io-integer "^1.0.5" + +validate.io-number-primitive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/validate.io-number-primitive/-/validate.io-number-primitive-1.0.0.tgz#d2e01f202989369dcf1155449564203afe584e55" + integrity sha1-0uAfICmJNp3PEVVElWQgOv5YTlU= + +validate.io-number@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8" + integrity sha1-9j/+2iSL8opnqNSODjtGGhZluvg= + +validate.io-positive-integer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/validate.io-positive-integer/-/validate.io-positive-integer-1.0.0.tgz#7ed2d03b4c27558cc66a00aab0f0e921814a6582" + integrity sha1-ftLQO0wnVYzGagCqsPDpIYFKZYI= + dependencies: + validate.io-integer "^1.0.5" + +validate.io-string-primitive@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz#b8135b9fb1372bde02fdd53ad1d0ccd6de798fee" + integrity sha1-uBNbn7E3K94C/dU60dDM1t55j+4= + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +vectorize-text@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/vectorize-text/-/vectorize-text-3.2.1.tgz#85921abd9685af775fd20a01041a2837fe51bdb5" + integrity sha512-rGojF+D9BB96iPZPUitfq5kaiS6eCJmfEel0NXOK/MzZSuXGiwhoop80PtaDas9/Hg/oaox1tI9g3h93qpuspg== + dependencies: + cdt2d "^1.0.0" + clean-pslg "^1.1.0" + ndarray "^1.0.11" + planar-graph-to-polyline "^1.0.0" + simplify-planar-graph "^2.0.1" + surface-nets "^1.0.0" + triangulate-polyline "^1.0.0" + vendors@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0" @@ -9863,6 +12900,15 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +vt-pbf@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.1.tgz#b0f627e39a10ce91d943b898ed2363d21899fb82" + integrity sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA== + dependencies: + "@mapbox/point-geometry" "0.1.0" + "@mapbox/vector-tile" "^1.3.1" + pbf "^3.0.5" + vue-class-component@^7.0.2, vue-class-component@^7.1.0: version "7.2.2" resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.2.2.tgz#aecc6d28801f64c61eb04407cf3a5476da26b0c0" @@ -9913,6 +12959,16 @@ vue-loader@^15.7.2: vue-hot-reload-api "^2.3.0" vue-style-loader "^4.1.0" +vue-plotly@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vue-plotly/-/vue-plotly-1.1.0.tgz#2ba9e2735c9124dde4de3eb2658fe7f6c07ce5ec" + integrity sha512-GW52p+ZD0AKHgtE7vdkljJ79fiRugkhFkcE+Es5Ok9YWulHq8KxywQdO0rK1ejGIfVv1yAQKiKxhzYcYE/lXyw== + dependencies: + core-js "^3.6.4" + plotly.js "^1.52.1" + vue "^2.6.11" + vue-resize-directive "^1.2.0" + vue-property-decorator@^8.0.0: version "8.4.2" resolved "https://registry.yarnpkg.com/vue-property-decorator/-/vue-property-decorator-8.4.2.tgz#016e17f259f73bc547e77a50ce282ba18db4ee41" @@ -9927,6 +12983,15 @@ vue-property-decorator@^8.3.0: dependencies: vue-class-component "^7.1.0" +vue-resize-directive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/vue-resize-directive/-/vue-resize-directive-1.2.0.tgz#4214ca8a80a425529b036ea868cad54a38f613e4" + integrity sha512-LmpFexQcl1XYyz3DQrTrq3Efgj50MKEON60nR9MMAq1D2ZtXFg1WDcy1wy1T0SeduNtIu9hos2aLTsJUplvjlQ== + dependencies: + css-element-queries "^1.0.2" + intersection-observer "^0.5.0" + lodash.debounce "^4.0.8" + vue-router@^3.1.3: version "3.1.4" resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.1.4.tgz#98a6a4dd38fca0db3b9f3c04bfbd008a3b6d958d" @@ -9972,7 +13037,7 @@ vue@^2.2.6, vue@^2.6.10, vue@^2.6.11: resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5" integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ== -vuedraggable@^2.23.2: +vuedraggable@^2.23.0, vuedraggable@^2.23.2: version "2.23.2" resolved "https://registry.yarnpkg.com/vuedraggable/-/vuedraggable-2.23.2.tgz#0d95d7fdf4f02f56755a26b3c9dca5c7ca9cfa72" integrity sha512-PgHCjUpxEAEZJq36ys49HfQmXglattf/7ofOzUrW2/rRdG7tu6fK84ir14t1jYv4kdXewTEa2ieKEAhhEMdwkQ== @@ -10030,6 +13095,23 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +weak-map@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/weak-map/-/weak-map-1.0.5.tgz#79691584d98607f5070bd3b70a40e6bb22e401eb" + integrity sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes= + +weakmap-shim@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/weakmap-shim/-/weakmap-shim-1.1.1.tgz#d65afd784109b2166e00ff571c33150ec2a40b49" + integrity sha1-1lr9eEEJshZuAP9XHDMVDsKkC0k= + +webgl-context@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webgl-context/-/webgl-context-2.2.0.tgz#8f37d7257cf6df1cd0a49e6a7b1b721b94cc86a0" + integrity sha1-jzfXJXz23xzQpJ5qextyG5TMhqA= + dependencies: + get-canvas-context "^1.0.1" + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -10227,6 +13309,11 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + wmf@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/wmf/-/wmf-1.0.2.tgz#7d19d621071a08c2bdc6b7e688a9c435298cc2da" @@ -10237,6 +13324,11 @@ word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" @@ -10256,6 +13348,13 @@ worker-rpc@^0.1.0: dependencies: microevent.ts "~0.1.1" +world-calendars@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/world-calendars/-/world-calendars-1.0.3.tgz#b25c5032ba24128ffc41d09faf4a5ec1b9c14335" + integrity sha1-slxQMrokEo/8QdCfr0pewbnBQzU= + dependencies: + object-assign "^4.1.0" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -10339,11 +13438,23 @@ xmlchars@^2.1.1: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@^4.0.0, xtend@~4.0.1: +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +xtend@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" + integrity sha1-7vax8ZjByN6vrYsXZaBNrUoBxak= + +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= + dependencies: + object-keys "~0.4.0" + "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" @@ -10446,6 +13557,16 @@ yargs@^15.0.0: y18n "^4.0.0" yargs-parser "^16.1.0" +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + yorkie@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" @@ -10456,6 +13577,13 @@ yorkie@^2.0.0: normalize-path "^1.0.0" strip-indent "^2.0.0" +zero-crossings@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/zero-crossings/-/zero-crossings-1.0.1.tgz#c562bd3113643f3443a245d12406b88b69b9a9ff" + integrity sha1-xWK9MRNkPzRDokXRJAa4i2m5qf8= + dependencies: + cwise-compiler "^1.0.0" + zrender@4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/zrender/-/zrender-4.3.0.tgz#9f056121b20bbae44414d287bf6a119ff7042661" diff --git a/config.xml b/config.xml index 76206fddd88eb626867dac901b019b7e48f788b0..bb89f6d73ed28ab9accb212a24e9d334783b0f1f 100644 --- a/config.xml +++ b/config.xml @@ -37,11 +37,11 @@ git clone -b dev $para2 pms/ export NODE_OPTIONS=--max-old-space-size=4096 cd pms/ - mvn clean package -Pwebapi - cd ibizpms-provider/ibizpms-provider-webapi - mvn -Pwebapi docker:build - mvn -Pwebapi docker:push - docker -H $para1 stack deploy --compose-file=src/main/docker/ibizpms-provider-webapi.yaml iBizDemo --with-registry-auth + mvn clean package -Pweb + cd ibizpms-app/ibizpms-app-web + mvn -Pweb docker:build + mvn -Pweb docker:push + docker -H $para1 stack deploy --compose-file=src/main/docker/ibizpms-app-web.yaml iBizDemo --with-registry-auth diff --git a/ibizpms-app/ibizpms-app-web/src/main/docker/Dockerfile b/ibizpms-app/ibizpms-app-web/src/main/docker/Dockerfile index 1e46cf37b19659f8af8bf4caf96c45ace9ba62af..66c78a7ae7ed437d98078e7f0a39df809f4febf0 100644 --- a/ibizpms-app/ibizpms-app-web/src/main/docker/Dockerfile +++ b/ibizpms-app/ibizpms-app-web/src/main/docker/Dockerfile @@ -9,6 +9,6 @@ CMD echo "The application will start in ${IBIZ_SLEEP}s..." && \ sleep ${IBIZ_SLEEP} && \ java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /ibizpms-app-web.jar -EXPOSE 8080 +EXPOSE 30120 ADD ibizpms-app-web.jar /ibizpms-app-web.jar diff --git a/ibizpms-app/ibizpms-app-web/src/main/docker/ibizpms-app-web.yaml b/ibizpms-app/ibizpms-app-web/src/main/docker/ibizpms-app-web.yaml index a08052fb4a1bd7be34a1d446f2116290ef35ff84..02c976d5d8f040f686e360d5dd0d459008003d86 100644 --- a/ibizpms-app/ibizpms-app-web/src/main/docker/ibizpms-app-web.yaml +++ b/ibizpms-app/ibizpms-app-web/src/main/docker/ibizpms-app-web.yaml @@ -3,9 +3,21 @@ services: ibizpms-app-web: image: registry.cn-shanghai.aliyuncs.com/ibizsys/ibizpms-app-web:latest ports: - - "8080:8080" + - "30120:30120" networks: - agent_network + environment: + - SPRING_CLOUD_NACOS_DISCOVERY_IP=172.16.240.110 + - SERVER_PORT=30120 + - SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR=172.16.102.211:8848 + - SPRING_REDIS_HOST=172.16.100.243 + - SPRING_REDIS_PORT=6379 + - SPRING_REDIS_DATABASE=0 + - SPRING_DATASOURCE_USERNAME=zentao + - SPRING_DATASOURCE_PASSWORD=123456 + - SPRING_DATASOURCE_URL=jdbc:mysql://172.16.102.102:3306/zentao?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true&zeroDateTimeBehavior=convertToNull + - SPRING_DATASOURCE_DRIVER-CLASS-NAME=com.mysql.jdbc.Driver + - SPRING_DATASOURCE_DEFAULTSCHEMA=zentao deploy: resources: limits: diff --git a/ibizpms-app/ibizpms-app-web/src/main/java/cn/ibizlab/pms/web/config/WebSecurityConfig.java b/ibizpms-app/ibizpms-app-web/src/main/java/cn/ibizlab/pms/web/config/WebSecurityConfig.java index dc6a5f57a8eabe7b36d5f2b3c89ffa891da37a56..272d798018be55b4150729d67cccb1641eac9ce2 100644 --- a/ibizpms-app/ibizpms-app-web/src/main/java/cn/ibizlab/pms/web/config/WebSecurityConfig.java +++ b/ibizpms-app/ibizpms-app-web/src/main/java/cn/ibizlab/pms/web/config/WebSecurityConfig.java @@ -48,9 +48,15 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Value("${ibiz.file.uploadpath:ibizutil/upload}") private String uploadpath; + @Value("${ibiz.file.uploadpath:ibizutil/ztupload}") + private String ztuploadpath; + @Value("${ibiz.file.downloadpath:ibizutil/download}") private String downloadpath; + @Value("${ibiz.file.downloadpath:ibizutil/ztdownload}") + private String ztdownloadpath; + @Value("${ibiz.file.previewpath:ibizutil/preview}") private String previewpath; @@ -114,7 +120,9 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers( HttpMethod.GET,"/"+logoutPath).permitAll() // 文件操作 .antMatchers("/"+downloadpath+"/**").permitAll() + .antMatchers("/"+ztdownloadpath+"/**").permitAll() .antMatchers("/"+uploadpath).permitAll() + .antMatchers("/"+ztuploadpath).permitAll() .antMatchers("/"+previewpath+"/**").permitAll() // 所有请求都需要认证 .anyRequest().authenticated() diff --git a/ibizpms-app/ibizpms-app-web/src/main/resources/application-web-prod.yml b/ibizpms-app/ibizpms-app-web/src/main/resources/application-web-prod.yml index de6344aa5ccd385aac390fbada056b74025c0415..7739b5f45891c03ba2bc7381d6746d56c4bf5ea2 100644 --- a/ibizpms-app/ibizpms-app-web/src/main/resources/application-web-prod.yml +++ b/ibizpms-app/ibizpms-app-web/src/main/resources/application-web-prod.yml @@ -31,18 +31,38 @@ zuul: path: /branches/** serviceId: pms-webapi stripPrefix: false + ibz_productstats: + path: /productstats/** + serviceId: pms-webapi + stripPrefix: false zt_action: path: /actions/** serviceId: pms-webapi stripPrefix: false + zt_group: + path: /groups/** + serviceId: pms-webapi + stripPrefix: false zt_casestep: path: /casesteps/** serviceId: pms-webapi stripPrefix: false + zt_dept: + path: /depts/** + serviceId: pms-webapi + stripPrefix: false + zt_company: + path: /companies/** + serviceId: pms-webapi + stripPrefix: false zt_story: path: /stories/** serviceId: pms-webapi stripPrefix: false + ibz_subtask: + path: /subtasks/** + serviceId: pms-webapi + stripPrefix: false zt_project: path: /projects/** serviceId: pms-webapi @@ -79,6 +99,10 @@ zuul: path: /testtasks/** serviceId: pms-webapi stripPrefix: false + ibz_projectstats: + path: /projectstats/** + serviceId: pms-webapi + stripPrefix: false zt_bug: path: /bugs/** serviceId: pms-webapi diff --git a/ibizpms-boot/src/main/java/cn/ibizlab/pms/config/DevBootSecurityConfig.java b/ibizpms-boot/src/main/java/cn/ibizlab/pms/config/DevBootSecurityConfig.java index 3859732d363940f85129b4e9de864b436bf42a62..a72882aea0b699fb3b4a0462745f25eeda2d5065 100644 --- a/ibizpms-boot/src/main/java/cn/ibizlab/pms/config/DevBootSecurityConfig.java +++ b/ibizpms-boot/src/main/java/cn/ibizlab/pms/config/DevBootSecurityConfig.java @@ -47,9 +47,15 @@ public class DevBootSecurityConfig extends WebSecurityConfigurerAdapter { @Value("${ibiz.file.uploadpath:ibizutil/upload}") private String uploadpath; + @Value("${ibiz.file.uploadpath:ibizutil/ztupload}") + private String ztuploadpath; + @Value("${ibiz.file.downloadpath:ibizutil/download}") private String downloadpath; + @Value("${ibiz.file.downloadpath:ibizutil/ztdownload}") + private String ztdownloadpath; + @Value("${ibiz.file.previewpath:ibizutil/preview}") private String previewpath; @@ -112,7 +118,9 @@ public class DevBootSecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers( HttpMethod.GET,"/"+logoutPath).permitAll() // 文件操作 .antMatchers("/"+downloadpath+"/**").permitAll() + .antMatchers("/"+ztdownloadpath+"/**").permitAll() .antMatchers("/"+uploadpath).permitAll() + .antMatchers("/"+ztuploadpath).permitAll() .antMatchers("/"+previewpath+"/**").permitAll() .anyRequest().authenticated() // 防止iframe 造成跨域 diff --git a/ibizpms-boot/src/main/resources/application.yml b/ibizpms-boot/src/main/resources/application.yml index e20892a08e9ab84193405b648bd96f7c0469014a..19c9bf5187773ff42aa0cd5fc621a0703175069b 100644 --- a/ibizpms-boot/src/main/resources/application.yml +++ b/ibizpms-boot/src/main/resources/application.yml @@ -1,7 +1,7 @@ spring: profiles: - include: sys , web-dev, webapi-dev, dev + include: sys, zentao, web-dev, webapi-dev, dev application: name: pms main: - allow-bean-definition-overriding: true \ No newline at end of file + allow-bean-definition-overriding: true diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/IBzDoc.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/IBzDoc.java index 51bd21fee94fddf01339e036e3528b75a42535a6..fde1a9b817af7e48425190d276a81fcc2470b92c 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/IBzDoc.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/IBzDoc.java @@ -21,13 +21,16 @@ import java.io.Serializable; import lombok.*; import org.springframework.data.annotation.Transient; -import cn.ibizlab.pms.util.domain.EntityClient; /** - * ServiceApi [文档] 对象 + * [文档] 对象 */ -@Data -public class IBzDoc extends EntityClient implements Serializable { +@Builder +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class IBzDoc extends EntityBase implements Serializable { /** * 文档标识 @@ -146,77 +149,6 @@ public class IBzDoc extends EntityClient implements Serializable { - /** - * 设置 [由谁添加] - */ - public void setAddedby(String addedby){ - this.addedby = addedby ; - this.modify("addedby",addedby); - } - /** - * 设置 [由谁更新] - */ - public void setEditedby(String editedby){ - this.editedby = editedby ; - this.modify("editedby",editedby); - } - /** - * 设置 [添加时间] - */ - public void setAddeddate(String addeddate){ - this.addeddate = addeddate ; - this.modify("addeddate",addeddate); - } - /** - * 设置 [大小] - */ - public void setSize(String size){ - this.size = size ; - this.modify("size",size); - } - /** - * 设置 [所属文档库] - */ - public void setLib(String lib){ - this.lib = lib ; - this.modify("lib",lib); - } - /** - * 设置 [文档名称] - */ - public void setIbzdocname(String ibzdocname){ - this.ibzdocname = ibzdocname ; - this.modify("ibz_docname",ibzdocname); - } - /** - * 设置 [排序] - */ - public void setOrder(String order){ - this.order = order ; - this.modify("order",order); - } - /** - * 设置 [是否已收藏] - */ - public void setIscollect(Integer iscollect){ - this.iscollect = iscollect ; - this.modify("iscollect",iscollect); - } - /** - * 设置 [更新时间] - */ - public void setEditeddate(String editeddate){ - this.editeddate = editeddate ; - this.modify("editeddate",editeddate); - } - /** - * 设置 [对象类型] - */ - public void setObjecttype(String objecttype){ - this.objecttype = objecttype ; - this.modify("objecttype",objecttype); - } - } diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProductLine.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProductLine.java index d46a83dbae22106e8bb70040334ce61e1b1dff70..f171e273561410ac6b7e850527b1cdb13abf153c 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProductLine.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProductLine.java @@ -21,13 +21,16 @@ import java.io.Serializable; import lombok.*; import org.springframework.data.annotation.Transient; -import cn.ibizlab.pms.util.domain.EntityClient; /** - * ServiceApi [产品线] 对象 + * [产品线] 对象 */ -@Data -public class ProductLine extends EntityClient implements Serializable { +@Builder +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class ProductLine extends EntityBase implements Serializable { /** * 产品线名称 @@ -83,14 +86,6 @@ public class ProductLine extends EntityClient implements Serializable { - /** - * 设置 [产品线名称] - */ - public void setProductlinename(String productlinename){ - this.productlinename = productlinename ; - this.modify("ibz_productlinename",productlinename); - } - } diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProductModule.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProductModule.java index 9b71108a5cb9df275c26e68e8cd92ddb46553797..22fc2111ba4e137c8cc0af1cdc73ed3b7f6b107d 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProductModule.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProductModule.java @@ -119,7 +119,7 @@ public class ProductModule extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProductStats.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProductStats.java new file mode 100644 index 0000000000000000000000000000000000000000..379ffb4d0103d8d7e6a594f7793d46f014ca0f36 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProductStats.java @@ -0,0 +1,183 @@ +package cn.ibizlab.pms.core.ibiz.domain; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.math.BigInteger; +import java.util.HashMap; +import java.math.BigDecimal; +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.util.ObjectUtils; +import org.springframework.util.DigestUtils; +import cn.ibizlab.pms.util.domain.EntityBase; +import cn.ibizlab.pms.util.annotation.DEField; +import cn.ibizlab.pms.util.enums.DEPredefinedFieldType; +import cn.ibizlab.pms.util.enums.DEFieldDefaultValueType; +import java.io.Serializable; +import lombok.*; +import org.springframework.data.annotation.Transient; + + +import com.baomidou.mybatisplus.annotation.*; +import cn.ibizlab.pms.util.domain.EntityMP; + + +/** + * 实体[产品统计] + */ +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "zt_product",resultMap = "ProductStatsResultMap") +public class ProductStats extends EntityMP implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 产品编号 + */ + @DEField(isKeyField=true) + @TableId(value= "id",type=IdType.AUTO) + @JSONField(name = "id") + @JsonProperty("id") + private BigInteger id; + /** + * 已删除 + */ + @DEField(defaultValue = "0" , preType = DEPredefinedFieldType.LOGICVALID, logicval = "1" , logicdelval="0") + @TableLogic(value= "1",delval="0") + @TableField(value = "deleted") + @JSONField(name = "deleted") + @JsonProperty("deleted") + private String deleted; + /** + * 需求总数 + */ + @TableField(exist = false) + @JSONField(name = "storycnt") + @JsonProperty("storycnt") + private Integer storycnt; + /** + * 计划总数 + */ + @TableField(exist = false) + @JSONField(name = "productplancnt") + @JsonProperty("productplancnt") + private Integer productplancnt; + /** + * 发布总数 + */ + @TableField(exist = false) + @JSONField(name = "releasecnt") + @JsonProperty("releasecnt") + private Integer releasecnt; + /** + * 未开始需求数 + */ + @TableField(exist = false) + @JSONField(name = "waitstorycnt") + @JsonProperty("waitstorycnt") + private Integer waitstorycnt; + /** + * 已计划需求数 + */ + @TableField(exist = false) + @JSONField(name = "plannedstorycnt") + @JsonProperty("plannedstorycnt") + private Integer plannedstorycnt; + /** + * 开发中需求数 + */ + @TableField(exist = false) + @JSONField(name = "developingstorycnt") + @JsonProperty("developingstorycnt") + private Integer developingstorycnt; + /** + * 测试中需求数 + */ + @TableField(exist = false) + @JSONField(name = "testingstorycnt") + @JsonProperty("testingstorycnt") + private Integer testingstorycnt; + /** + * 已发布需求数 + */ + @TableField(exist = false) + @JSONField(name = "releasedstorycnt") + @JsonProperty("releasedstorycnt") + private Integer releasedstorycnt; + /** + * 未过期计划数 + */ + @TableField(exist = false) + @JSONField(name = "unendproductplancnt") + @JsonProperty("unendproductplancnt") + private Integer unendproductplancnt; + /** + * 剩余计划率 + */ + @TableField(exist = false) + @JSONField(name = "unendproductplanrate") + @JsonProperty("unendproductplanrate") + private Double unendproductplanrate; + /** + * 关联项目数 + */ + @TableField(exist = false) + @JSONField(name = "resprojectcnt") + @JsonProperty("resprojectcnt") + private Integer resprojectcnt; + /** + * 未完成关联项目数 + */ + @TableField(exist = false) + @JSONField(name = "undoneresprojectcnt") + @JsonProperty("undoneresprojectcnt") + private Integer undoneresprojectcnt; + /** + * 进行项目率 + */ + @TableField(exist = false) + @JSONField(name = "undoneresprojectrate") + @JsonProperty("undoneresprojectrate") + private Integer undoneresprojectrate; + /** + * 维护中发布数 + */ + @TableField(exist = false) + @JSONField(name = "normalreleasecnt") + @JsonProperty("normalreleasecnt") + private Integer normalreleasecnt; + /** + * 维护发布率 + */ + @TableField(exist = false) + @JSONField(name = "normalreleaserate") + @JsonProperty("normalreleaserate") + private Integer normalreleaserate; + /** + * 激活需求数 + */ + @TableField(exist = false) + @JSONField(name = "activestorycnt") + @JsonProperty("activestorycnt") + private Integer activestorycnt; + /** + * 未解决Bug数 + */ + @TableField(exist = false) + @JSONField(name = "activebugcnt") + @JsonProperty("activebugcnt") + private Integer activebugcnt; + + + + +} + + diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProjectStats.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProjectStats.java new file mode 100644 index 0000000000000000000000000000000000000000..ca2a75d7ff6f9281835d31d230de6a3137c40a54 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/domain/ProjectStats.java @@ -0,0 +1,183 @@ +package cn.ibizlab.pms.core.ibiz.domain; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.math.BigInteger; +import java.util.HashMap; +import java.math.BigDecimal; +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.util.ObjectUtils; +import org.springframework.util.DigestUtils; +import cn.ibizlab.pms.util.domain.EntityBase; +import cn.ibizlab.pms.util.annotation.DEField; +import cn.ibizlab.pms.util.enums.DEPredefinedFieldType; +import cn.ibizlab.pms.util.enums.DEFieldDefaultValueType; +import java.io.Serializable; +import lombok.*; +import org.springframework.data.annotation.Transient; + + +import com.baomidou.mybatisplus.annotation.*; +import cn.ibizlab.pms.util.domain.EntityMP; + + +/** + * 实体[项目统计] + */ +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "zt_project",resultMap = "ProjectStatsResultMap") +public class ProjectStats extends EntityMP implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 项目编号 + */ + @DEField(isKeyField=true) + @TableId(value= "id",type=IdType.AUTO) + @JSONField(name = "id") + @JsonProperty("id") + private BigInteger id; + /** + * 需求总数 + */ + @TableField(exist = false) + @JSONField(name = "storycnt") + @JsonProperty("storycnt") + private Integer storycnt; + /** + * 任务总数 + */ + @TableField(exist = false) + @JSONField(name = "taskcnt") + @JsonProperty("taskcnt") + private Integer taskcnt; + /** + * 任务最初预计总工时 + */ + @TableField(exist = false) + @JSONField(name = "totalestimate") + @JsonProperty("totalestimate") + private Double totalestimate; + /** + * 任务消耗总工时 + */ + @TableField(exist = false) + @JSONField(name = "totalconsumed") + @JsonProperty("totalconsumed") + private Double totalconsumed; + /** + * 任务预计剩余总工时 + */ + @TableField(exist = false) + @JSONField(name = "totalleft") + @JsonProperty("totalleft") + private Double totalleft; + /** + * 未完成任务总数 + */ + @TableField(exist = false) + @JSONField(name = "undonetaskcnt") + @JsonProperty("undonetaskcnt") + private Integer undonetaskcnt; + /** + * 关闭需求总数 + */ + @TableField(exist = false) + @JSONField(name = "closedstorycnt") + @JsonProperty("closedstorycnt") + private Integer closedstorycnt; + /** + * Bug总数 + */ + @TableField(exist = false) + @JSONField(name = "bugcnt") + @JsonProperty("bugcnt") + private Integer bugcnt; + /** + * 未解决Bug总数 + */ + @TableField(exist = false) + @JSONField(name = "activebugcnt") + @JsonProperty("activebugcnt") + private Integer activebugcnt; + /** + * 未关闭需求总数 + */ + @TableField(exist = false) + @JSONField(name = "unclosedstorycnt") + @JsonProperty("unclosedstorycnt") + private Integer unclosedstorycnt; + /** + * 已结束任务总数 + */ + @TableField(exist = false) + @JSONField(name = "finishtaskcnt") + @JsonProperty("finishtaskcnt") + private Integer finishtaskcnt; + /** + * 已解决Bug总数 + */ + @TableField(exist = false) + @JSONField(name = "finishbugcnt") + @JsonProperty("finishbugcnt") + private Integer finishbugcnt; + /** + * 完成任务率 + */ + @TableField(exist = false) + @JSONField(name = "donetaskrate") + @JsonProperty("donetaskrate") + private Double donetaskrate; + /** + * 关闭需求率 + */ + @TableField(exist = false) + @JSONField(name = "closedstoryrate") + @JsonProperty("closedstoryrate") + private Double closedstoryrate; + /** + * 解决Bug率 + */ + @TableField(exist = false) + @JSONField(name = "finishbugrate") + @JsonProperty("finishbugrate") + private Double finishbugrate; + /** + * 已删除 + */ + @DEField(defaultValue = "0" , preType = DEPredefinedFieldType.LOGICVALID, logicval = "1" , logicdelval="0") + @TableLogic(value= "1",delval="0") + @TableField(value = "deleted") + @JSONField(name = "deleted") + @JsonProperty("deleted") + private String deleted; + /** + * 工时 + */ + @TableField(exist = false) + @JSONField(name = "time") + @JsonProperty("time") + private Double time; + /** + * 工时类型 + */ + @TableField(exist = false) + @JSONField(name = "type") + @JsonProperty("type") + private String type; + + + + +} + + diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/filter/ProductStatsSearchContext.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/filter/ProductStatsSearchContext.java new file mode 100644 index 0000000000000000000000000000000000000000..612883745a3d1d81ae5c844727fee6198543fb47 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/filter/ProductStatsSearchContext.java @@ -0,0 +1,44 @@ +package cn.ibizlab.pms.core.ibiz.filter; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.HashMap; + +import lombok.*; +import lombok.extern.slf4j.Slf4j; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.fastjson.annotation.JSONField; + +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + + +import cn.ibizlab.pms.util.filter.QueryWrapperContext; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import cn.ibizlab.pms.core.ibiz.domain.ProductStats; +/** + * 关系型数据实体[ProductStats] 查询条件对象 + */ +@Slf4j +@Data +public class ProductStatsSearchContext extends QueryWrapperContext { + + + /** + * 启用快速搜索 + */ + public void setQuery(String query) + { + this.query=query; + if(!StringUtils.isEmpty(query)){ + } + } +} + + + + diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/filter/ProjectStatsSearchContext.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/filter/ProjectStatsSearchContext.java new file mode 100644 index 0000000000000000000000000000000000000000..8ea7b07a1daeef40a7ed056cf6b06598ecbe9547 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/filter/ProjectStatsSearchContext.java @@ -0,0 +1,44 @@ +package cn.ibizlab.pms.core.ibiz.filter; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.HashMap; + +import lombok.*; +import lombok.extern.slf4j.Slf4j; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.fastjson.annotation.JSONField; + +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + + +import cn.ibizlab.pms.util.filter.QueryWrapperContext; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import cn.ibizlab.pms.core.ibiz.domain.ProjectStats; +/** + * 关系型数据实体[ProjectStats] 查询条件对象 + */ +@Slf4j +@Data +public class ProjectStatsSearchContext extends QueryWrapperContext { + + + /** + * 启用快速搜索 + */ + public void setQuery(String query) + { + this.query=query; + if(!StringUtils.isEmpty(query)){ + } + } +} + + + + diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/mapper/ProductStatsMapper.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/mapper/ProductStatsMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..4656417855c9b4261388637bc446c6b2f0fdcb09 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/mapper/ProductStatsMapper.java @@ -0,0 +1,65 @@ +package cn.ibizlab.pms.core.ibiz.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.*; +import java.util.Map; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import java.util.HashMap; +import org.apache.ibatis.annotations.Select; +import cn.ibizlab.pms.core.ibiz.domain.ProductStats; +import cn.ibizlab.pms.core.ibiz.filter.ProductStatsSearchContext; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import java.io.Serializable; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.alibaba.fastjson.JSONObject; + +public interface ProductStatsMapper extends BaseMapper{ + + Page searchDefault(IPage page, @Param("srf") ProductStatsSearchContext context, @Param("ew") Wrapper wrapper) ; + @Override + ProductStats selectById(Serializable id); + @Override + int insert(ProductStats entity); + @Override + int updateById(@Param(Constants.ENTITY) ProductStats entity); + @Override + int update(@Param(Constants.ENTITY) ProductStats entity, @Param("ew") Wrapper updateWrapper); + @Override + int deleteById(Serializable id); + /** + * 自定义查询SQL + * @param sql + * @return + */ + @Select("${sql}") + List selectBySQL(@Param("sql") String sql, @Param("et")Map param); + + /** + * 自定义更新SQL + * @param sql + * @return + */ + @Update("${sql}") + boolean updateBySQL(@Param("sql") String sql, @Param("et")Map param); + + /** + * 自定义插入SQL + * @param sql + * @return + */ + @Insert("${sql}") + boolean insertBySQL(@Param("sql") String sql, @Param("et")Map param); + + /** + * 自定义删除SQL + * @param sql + * @return + */ + @Delete("${sql}") + boolean deleteBySQL(@Param("sql") String sql, @Param("et")Map param); + +} diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/mapper/ProjectStatsMapper.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/mapper/ProjectStatsMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..6f8fed4b8ecdca696ddc751532cc3e2d51d54924 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/mapper/ProjectStatsMapper.java @@ -0,0 +1,66 @@ +package cn.ibizlab.pms.core.ibiz.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.*; +import java.util.Map; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import java.util.HashMap; +import org.apache.ibatis.annotations.Select; +import cn.ibizlab.pms.core.ibiz.domain.ProjectStats; +import cn.ibizlab.pms.core.ibiz.filter.ProjectStatsSearchContext; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import java.io.Serializable; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.alibaba.fastjson.JSONObject; + +public interface ProjectStatsMapper extends BaseMapper{ + + Page searchTaskTime(IPage page, @Param("srf") ProjectStatsSearchContext context, @Param("ew") Wrapper wrapper) ; + Page searchDefault(IPage page, @Param("srf") ProjectStatsSearchContext context, @Param("ew") Wrapper wrapper) ; + @Override + ProjectStats selectById(Serializable id); + @Override + int insert(ProjectStats entity); + @Override + int updateById(@Param(Constants.ENTITY) ProjectStats entity); + @Override + int update(@Param(Constants.ENTITY) ProjectStats entity, @Param("ew") Wrapper updateWrapper); + @Override + int deleteById(Serializable id); + /** + * 自定义查询SQL + * @param sql + * @return + */ + @Select("${sql}") + List selectBySQL(@Param("sql") String sql, @Param("et")Map param); + + /** + * 自定义更新SQL + * @param sql + * @return + */ + @Update("${sql}") + boolean updateBySQL(@Param("sql") String sql, @Param("et")Map param); + + /** + * 自定义插入SQL + * @param sql + * @return + */ + @Insert("${sql}") + boolean insertBySQL(@Param("sql") String sql, @Param("et")Map param); + + /** + * 自定义删除SQL + * @param sql + * @return + */ + @Delete("${sql}") + boolean deleteBySQL(@Param("sql") String sql, @Param("et")Map param); + +} diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/IProductStatsService.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/IProductStatsService.java new file mode 100644 index 0000000000000000000000000000000000000000..b1309a3e76e9c3698543d77ca9138fcf215bb6d6 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/IProductStatsService.java @@ -0,0 +1,58 @@ +package cn.ibizlab.pms.core.ibiz.service; + +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.Collection; +import java.math.BigInteger; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import com.alibaba.fastjson.JSONObject; +import org.springframework.cache.annotation.CacheEvict; + +import cn.ibizlab.pms.core.ibiz.domain.ProductStats; +import cn.ibizlab.pms.core.ibiz.filter.ProductStatsSearchContext; + + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 实体[ProductStats] 服务对象接口 + */ +public interface IProductStatsService extends IService{ + + boolean update(ProductStats et) ; + void updateBatch(List list) ; + ProductStats getDraft(ProductStats et) ; + boolean save(ProductStats et) ; + void saveBatch(List list) ; + boolean create(ProductStats et) ; + void createBatch(List list) ; + ProductStats get(BigInteger key) ; + boolean checkKey(ProductStats et) ; + boolean remove(BigInteger key) ; + void removeBatch(Collection idList) ; + Page searchDefault(ProductStatsSearchContext context) ; + /** + *自定义查询SQL + * @param sql select * from table where id =#{et.param} + * @param param 参数列表 param.put("param","1"); + * @return select * from table where id = '1' + */ + List select(String sql, Map param); + /** + *自定义SQL + * @param sql update table set name ='test' where id =#{et.param} + * @param param 参数列表 param.put("param","1"); + * @return update table set name ='test' where id = '1' + */ + boolean execute(String sql, Map param); + + +} + + diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/IProjectStatsService.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/IProjectStatsService.java new file mode 100644 index 0000000000000000000000000000000000000000..28b5f91bea0d903883e1e123976b98d348ecbdb7 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/IProjectStatsService.java @@ -0,0 +1,59 @@ +package cn.ibizlab.pms.core.ibiz.service; + +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.Collection; +import java.math.BigInteger; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import com.alibaba.fastjson.JSONObject; +import org.springframework.cache.annotation.CacheEvict; + +import cn.ibizlab.pms.core.ibiz.domain.ProjectStats; +import cn.ibizlab.pms.core.ibiz.filter.ProjectStatsSearchContext; + + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 实体[ProjectStats] 服务对象接口 + */ +public interface IProjectStatsService extends IService{ + + ProjectStats get(BigInteger key) ; + boolean update(ProjectStats et) ; + void updateBatch(List list) ; + boolean remove(BigInteger key) ; + void removeBatch(Collection idList) ; + boolean save(ProjectStats et) ; + void saveBatch(List list) ; + boolean create(ProjectStats et) ; + void createBatch(List list) ; + boolean checkKey(ProjectStats et) ; + ProjectStats getDraft(ProjectStats et) ; + Page searchTaskTime(ProjectStatsSearchContext context) ; + Page searchDefault(ProjectStatsSearchContext context) ; + /** + *自定义查询SQL + * @param sql select * from table where id =#{et.param} + * @param param 参数列表 param.put("param","1"); + * @return select * from table where id = '1' + */ + List select(String sql, Map param); + /** + *自定义SQL + * @param sql update table set name ='test' where id =#{et.param} + * @param param 参数列表 param.put("param","1"); + * @return update table set name ='test' where id = '1' + */ + boolean execute(String sql, Map param); + + +} + + diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProductLifeServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProductLifeServiceImpl.java index fef247bfd5b6a28e4caa6cb1c20facb50812300b..eceb1a42508f46f7baccbe91f29eb65fc69e5f40 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProductLifeServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProductLifeServiceImpl.java @@ -173,6 +173,7 @@ public class ProductLifeServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProductModuleServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProductModuleServiceImpl.java index 98032fe1b4eac10abee567cc55f2e48eac129663..ab5886a125af5777d8b2d9a5519b6959bcb53343 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProductModuleServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProductModuleServiceImpl.java @@ -201,6 +201,7 @@ public class ProductModuleServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProductStatsServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProductStatsServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..0079b5d6d9a2f57b49dce0d1fe4ef174dd7cb7d4 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProductStatsServiceImpl.java @@ -0,0 +1,186 @@ +package cn.ibizlab.pms.core.ibiz.service.impl; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.Map; +import java.util.HashSet; +import java.util.HashMap; +import java.util.Collection; +import java.util.Objects; +import java.util.Optional; +import java.math.BigInteger; + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cglib.beans.BeanCopier; +import org.springframework.stereotype.Service; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.util.ObjectUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.context.annotation.Lazy; +import cn.ibizlab.pms.core.ibiz.domain.ProductStats; +import cn.ibizlab.pms.core.ibiz.filter.ProductStatsSearchContext; +import cn.ibizlab.pms.core.ibiz.service.IProductStatsService; + +import cn.ibizlab.pms.util.helper.CachedBeanCopier; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.ibizlab.pms.core.ibiz.mapper.ProductStatsMapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.alibaba.fastjson.JSONObject; +import org.springframework.util.StringUtils; + +/** + * 实体[产品统计] 服务对象接口实现 + */ +@Slf4j +@Service("ProductStatsServiceImpl") +public class ProductStatsServiceImpl extends ServiceImpl implements IProductStatsService { + + + private int batchSize = 500; + + @Override + @Transactional + public boolean update(ProductStats et) { + if(!update(et,(Wrapper) et.getUpdateWrapper(true).eq("id",et.getId()))) + return false; + CachedBeanCopier.copy(get(et.getId()),et); + return true; + } + + @Override + public void updateBatch(List list) { + updateBatchById(list,batchSize); + } + + @Override + public ProductStats getDraft(ProductStats et) { + return et; + } + + @Override + @Transactional + public boolean save(ProductStats et) { + if(!saveOrUpdate(et)) + return false; + return true; + } + + @Override + @Transactional( + rollbackFor = {Exception.class} + ) + public boolean saveOrUpdate(ProductStats et) { + if (null == et) { + return false; + } else { + return checkKey(et) ? this.update(et) : this.create(et); + } + } + + @Override + public boolean saveBatch(Collection list) { + saveOrUpdateBatch(list,batchSize); + return true; + } + + @Override + public void saveBatch(List list) { + saveOrUpdateBatch(list,batchSize); + } + + @Override + @Transactional + public boolean create(ProductStats et) { + if(!this.retBool(this.baseMapper.insert(et))) + return false; + CachedBeanCopier.copy(get(et.getId()),et); + return true; + } + + @Override + public void createBatch(List list) { + this.saveBatch(list,batchSize); + } + + @Override + @Transactional + public ProductStats get(BigInteger key) { + ProductStats et = getById(key); + if(et==null){ + et=new ProductStats(); + et.setId(key); + } + else{ + } + return et; + } + + @Override + public boolean checkKey(ProductStats et) { + return (!ObjectUtils.isEmpty(et.getId()))&&(!Objects.isNull(this.getById(et.getId()))); + } + + @Override + @Transactional + public boolean remove(BigInteger key) { + boolean result=removeById(key); + return result ; + } + + @Override + public void removeBatch(Collection idList) { + removeByIds(idList); + } + + + + /** + * 查询集合 DEFAULT + */ + @Override + public Page searchDefault(ProductStatsSearchContext context) { + com.baomidou.mybatisplus.extension.plugins.pagination.Page pages=baseMapper.searchDefault(context.getPages(),context,context.getSelectCond()); + return new PageImpl(pages.getRecords(), context.getPageable(), pages.getTotal()); + } + + + + + + @Override + public List select(String sql, Map param){ + return this.baseMapper.selectBySQL(sql,param); + } + + @Override + @Transactional + public boolean execute(String sql , Map param){ + if (sql == null || sql.isEmpty()) { + return false; + } + if (sql.toLowerCase().trim().startsWith("insert")) { + return this.baseMapper.insertBySQL(sql,param); + } + if (sql.toLowerCase().trim().startsWith("update")) { + return this.baseMapper.updateBySQL(sql,param); + } + if (sql.toLowerCase().trim().startsWith("delete")) { + return this.baseMapper.deleteBySQL(sql,param); + } + log.warn("暂未支持的SQL语法"); + return true; + } + + +} + + diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProjectStatsServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProjectStatsServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..6c209a36cd6fb3161a2eca105f003f0b536d0485 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/ibiz/service/impl/ProjectStatsServiceImpl.java @@ -0,0 +1,195 @@ +package cn.ibizlab.pms.core.ibiz.service.impl; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.Map; +import java.util.HashSet; +import java.util.HashMap; +import java.util.Collection; +import java.util.Objects; +import java.util.Optional; +import java.math.BigInteger; + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cglib.beans.BeanCopier; +import org.springframework.stereotype.Service; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.util.ObjectUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.context.annotation.Lazy; +import cn.ibizlab.pms.core.ibiz.domain.ProjectStats; +import cn.ibizlab.pms.core.ibiz.filter.ProjectStatsSearchContext; +import cn.ibizlab.pms.core.ibiz.service.IProjectStatsService; + +import cn.ibizlab.pms.util.helper.CachedBeanCopier; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.ibizlab.pms.core.ibiz.mapper.ProjectStatsMapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.alibaba.fastjson.JSONObject; +import org.springframework.util.StringUtils; + +/** + * 实体[项目统计] 服务对象接口实现 + */ +@Slf4j +@Service("ProjectStatsServiceImpl") +public class ProjectStatsServiceImpl extends ServiceImpl implements IProjectStatsService { + + + private int batchSize = 500; + + @Override + @Transactional + public ProjectStats get(BigInteger key) { + ProjectStats et = getById(key); + if(et==null){ + et=new ProjectStats(); + et.setId(key); + } + else{ + } + return et; + } + + @Override + @Transactional + public boolean update(ProjectStats et) { + if(!update(et,(Wrapper) et.getUpdateWrapper(true).eq("id",et.getId()))) + return false; + CachedBeanCopier.copy(get(et.getId()),et); + return true; + } + + @Override + public void updateBatch(List list) { + updateBatchById(list,batchSize); + } + + @Override + @Transactional + public boolean remove(BigInteger key) { + boolean result=removeById(key); + return result ; + } + + @Override + public void removeBatch(Collection idList) { + removeByIds(idList); + } + + @Override + @Transactional + public boolean save(ProjectStats et) { + if(!saveOrUpdate(et)) + return false; + return true; + } + + @Override + @Transactional( + rollbackFor = {Exception.class} + ) + public boolean saveOrUpdate(ProjectStats et) { + if (null == et) { + return false; + } else { + return checkKey(et) ? this.update(et) : this.create(et); + } + } + + @Override + public boolean saveBatch(Collection list) { + saveOrUpdateBatch(list,batchSize); + return true; + } + + @Override + public void saveBatch(List list) { + saveOrUpdateBatch(list,batchSize); + } + + @Override + @Transactional + public boolean create(ProjectStats et) { + if(!this.retBool(this.baseMapper.insert(et))) + return false; + CachedBeanCopier.copy(get(et.getId()),et); + return true; + } + + @Override + public void createBatch(List list) { + this.saveBatch(list,batchSize); + } + + @Override + public boolean checkKey(ProjectStats et) { + return (!ObjectUtils.isEmpty(et.getId()))&&(!Objects.isNull(this.getById(et.getId()))); + } + + @Override + public ProjectStats getDraft(ProjectStats et) { + return et; + } + + + + /** + * 查询集合 任务工时消耗剩余查询 + */ + @Override + public Page searchTaskTime(ProjectStatsSearchContext context) { + com.baomidou.mybatisplus.extension.plugins.pagination.Page pages=baseMapper.searchTaskTime(context.getPages(),context,context.getSelectCond()); + return new PageImpl(pages.getRecords(), context.getPageable(), pages.getTotal()); + } + + /** + * 查询集合 DEFAULT + */ + @Override + public Page searchDefault(ProjectStatsSearchContext context) { + com.baomidou.mybatisplus.extension.plugins.pagination.Page pages=baseMapper.searchDefault(context.getPages(),context,context.getSelectCond()); + return new PageImpl(pages.getRecords(), context.getPageable(), pages.getTotal()); + } + + + + + + @Override + public List select(String sql, Map param){ + return this.baseMapper.selectBySQL(sql,param); + } + + @Override + @Transactional + public boolean execute(String sql , Map param){ + if (sql == null || sql.isEmpty()) { + return false; + } + if (sql.toLowerCase().trim().startsWith("insert")) { + return this.baseMapper.insertBySQL(sql,param); + } + if (sql.toLowerCase().trim().startsWith("update")) { + return this.baseMapper.updateBySQL(sql,param); + } + if (sql.toLowerCase().trim().startsWith("delete")) { + return this.baseMapper.deleteBySQL(sql,param); + } + log.warn("暂未支持的SQL语法"); + return true; + } + + +} + + diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/bean/ZTDownloadFile.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/bean/ZTDownloadFile.java new file mode 100644 index 0000000000000000000000000000000000000000..78a76fcd88125ebed27b56c6ee15680e55b44f95 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/bean/ZTDownloadFile.java @@ -0,0 +1,12 @@ +package cn.ibizlab.pms.core.util.zentao.bean; + +import lombok.Data; + +import java.io.File; + +@Data +public class ZTDownloadFile { + private File file; + private String fileName; + +} diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/constants/ZenTaoConstants.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/constants/ZenTaoConstants.java index 7a1542cbb2bd2f4bb8c579e991eae46bd504d99f..5add72c43d73c927aa50255f9032b43112072a52 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/constants/ZenTaoConstants.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/constants/ZenTaoConstants.java @@ -1,22 +1,30 @@ package cn.ibizlab.pms.core.util.zentao.constants; +import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpMethod; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.Map; +@Component +final public class ZenTaoConstants implements InitializingBean { + @Value("${zentao.url:http://172.16.102.102/zentao/}") + private String ztUrl; -//@Component -final public class ZenTaoConstants { -// @Value("${zentao.url:http://172.16.100.202/zentao/}") - public static String ZT_URL = "http://172.16.102.102/zentao/"; + @Value("${zentao.needretry:false}") + private boolean needRetry; + + @Value("${zentao.retrycount:0}") + private int retryCount; + + + public static String ZT_URL; + public static boolean ZT_NEED_RETRY; + public static int ZT_RETRY_COUNT; final public static String ZT_URL_EXT = ".json"; - final public static String ZT_TMP_USERNAME = "admin"; - final public static String ZT_TMP_PASSWORD = "ibiz@123"; - final public static int ZT_RETRY_COUNT = 1; - final public static int ZT_ACTION_TYPE_NORMAL = 0; - final public static int ZT_ACTION_TYPE_GETSESSION = 1; - final public static int ZT_ACTION_TYPE_LOGIN = 2; + @Override + public void afterPropertiesSet() throws Exception { + ZT_URL = ztUrl; + ZT_NEED_RETRY = needRetry; + ZT_RETRY_COUNT = retryCount; + } } diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTAPIHelper.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTAPIHelper.java index 30182dbfe422a4639b8d09fb8a62136f4a4c5606..8226fb4dd1b4aa555cb3855868c0fc9797a3a719 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTAPIHelper.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTAPIHelper.java @@ -1,5 +1,6 @@ package cn.ibizlab.pms.core.util.zentao.helper; +import cn.ibizlab.pms.core.util.zentao.bean.ZTResult; import cn.ibizlab.pms.core.util.zentao.constants.ZenTaoConstants; import com.alibaba.fastjson.JSONObject; import org.springframework.beans.factory.annotation.Autowired; @@ -41,23 +42,24 @@ public class ZTAPIHelper { // 接口实现 // ---------- - final static public boolean getSessionID(JSONObject rst) { - // 后期从session获取,前期使用admin - String account = ZenTaoConstants.ZT_TMP_USERNAME; - String url = MODULE_NAME + "-" + ACTION_GETSESSIONID + ZenTaoConstants.ZT_URL_EXT; - rst = ZenTaoHttpHelper.doRequest(account, url, ACTION_HTTPMETHOD_GETSESSIONID, ZenTaoConstants.ZT_ACTION_TYPE_GETSESSION); - if (!"success".equals(rst.getString("status"))) { + final static public boolean getSessionID(ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_GETSESSIONID, ZenTaoConstants.ZT_URL_EXT); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(null, url, ACTION_HTTPMETHOD_GETSESSIONID); + rst.setResult(rstJO); + if (!"success".equals(rstJO.getString("status"))) { + rst.setSuccess(false); return false; } - if (!rst.containsKey("data")) { + if (!rstJO.containsKey("data")) { + rst.setSuccess(false); return false; } - String dataStr = rst.getString("data"); + String dataStr = rstJO.getString("data"); if (!dataStr.contains("zentaosid")) { + rst.setSuccess(false); return false; } - JSONObject data = JSONObject.parseObject(dataStr); - return account.equals(data.getString("sessionID")); + return true; } } diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTBurnHelper.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTBurnHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..2ea2f671229f91b9360d18e5e0c4d410d0d4a476 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTBurnHelper.java @@ -0,0 +1,56 @@ +package cn.ibizlab.pms.core.util.zentao.helper; + +import cn.ibizlab.pms.core.util.zentao.bean.ZTResult; +import cn.ibizlab.pms.core.util.zentao.constants.ZenTaoConstants; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.springframework.http.HttpMethod; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 【禅道接口-Burn】 辅助类
+ * 注意:该类比较特殊,不作为参照写法(请求后缀为html,并非json) + */ +public class ZTBurnHelper { + // ---------- + // 接口模块 + // ---------- + + /** + * 接口模块名,burn使用的是project + */ + private final static String MODULE_NAME = "product"; + + /** + * + */ + private final static String ZT_URL_EXT = ".html"; + + // ---------- + // 接口ACTION + // ---------- + + private final static String ACTION_COMPUTEBURN = "computeBurn"; + + // ---------- + // 接口行为HTTP方法(GET、POST) + // ---------- + + private final static HttpMethod ACTION_HTTPMETHOD_COMPUTEBURN = HttpMethod.GET; + + // ---------- + // 接口实现 + // ---------- + + final static public boolean computeBurn(String zentaoSid, JSONObject jo, ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_COMPUTEBURN, ZT_URL_EXT); + ZenTaoHttpHelper.doRequest(zentaoSid, url, ACTION_HTTPMETHOD_COMPUTEBURN); + rst.setSuccess(true); + return true; + } +} diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTProductHelper.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTProductHelper.java index b5bbc195dab625534b8d1a5fb5da1b226abc4d8a..f8a8b3d5b51c4af705d8b66b00b13754df3cf878 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTProductHelper.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTProductHelper.java @@ -56,6 +56,7 @@ public class ZTProductHelper { private final static HttpMethod ACTION_HTTPMETHOD_CREATE = HttpMethod.POST; private final static HttpMethod ACTION_HTTPMETHOD_EDIT = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_CLOSE = HttpMethod.POST; // ---------- // 接口行为POST参数 @@ -63,12 +64,14 @@ public class ZTProductHelper { private final static Map ACTION_PARAMS_CREATE = new HashMap<>(); private final static Map ACTION_PARAMS_EDIT = new HashMap<>(); + private final static Map ACTION_PARAMS_CLOSE = new HashMap<>(); // ---------- // 接口行为URL参数 // ---------- private final static List ACTION_URL_PARAMS_EDIT = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_CLOSE = new ArrayList<>(); // ---------- // 接口行为POST参数设置 @@ -78,9 +81,9 @@ public class ZTProductHelper { // CREATE ACTION_PARAMS_CREATE.put("name", null); ACTION_PARAMS_CREATE.put("code", null); - ACTION_PARAMS_CREATE.put("qd", null); - ACTION_PARAMS_CREATE.put("rd", null); - ACTION_PARAMS_CREATE.put("po", null); + ACTION_PARAMS_CREATE.put("QD", null); + ACTION_PARAMS_CREATE.put("RD", null); + ACTION_PARAMS_CREATE.put("PO", null); ACTION_PARAMS_CREATE.put("type", "normal"); ACTION_PARAMS_CREATE.put("acl", "open"); ACTION_PARAMS_CREATE.put("line", 0); @@ -89,13 +92,16 @@ public class ZTProductHelper { // EDIT ACTION_PARAMS_EDIT.put("name", null); ACTION_PARAMS_EDIT.put("code", null); - ACTION_PARAMS_EDIT.put("qd", null); - ACTION_PARAMS_EDIT.put("rd", null); - ACTION_PARAMS_EDIT.put("po", null); + ACTION_PARAMS_EDIT.put("QD", null); + ACTION_PARAMS_EDIT.put("RD", null); + ACTION_PARAMS_EDIT.put("PO", null); ACTION_PARAMS_EDIT.put("type", "normal"); ACTION_PARAMS_EDIT.put("acl", "open"); ACTION_PARAMS_EDIT.put("line", 0); ACTION_PARAMS_EDIT.put("status", "normal"); + + // CLOSE + ACTION_PARAMS_CLOSE.put("comment", null); } // ---------- @@ -105,87 +111,35 @@ public class ZTProductHelper { static { // EDIT ACTION_URL_PARAMS_EDIT.add("id"); + + // CLOSE + ACTION_URL_PARAMS_CLOSE.add("id"); + } // ---------- // 接口实现 // ---------- - final static public boolean create(JSONObject jo, ZTResult rst) { - // 后期从session获取,前期使用admin - String account = ZenTaoConstants.ZT_TMP_USERNAME; - String url = MODULE_NAME + "-" + ACTION_CREATE + ZenTaoConstants.ZT_URL_EXT; - // 注意,后期如果API返回结构都是一样的,再做抽象(当前使用到的参照标本数量不足) - JSONObject rstJO = new JSONObject(); - rstJO = ZenTaoHttpHelper.doRequest(account, url, ACTION_HTTPMETHOD_CREATE, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_CREATE)); - if ("fail".equals(rstJO.getString("result"))) { - JSONObject message = rstJO.getJSONObject("message"); - List msgList = new ArrayList<>(); - if (!message.isEmpty()) { - for (String key : message.keySet()) { - JSONArray ja = message.getJSONArray(key); - for (int i = 0; i < ja.size(); i++) { - msgList.add(ja.getString(i)); - } - } - } - String msgStr = "创建数据失败。\n"; - if (!msgList.isEmpty()) { - msgStr += String.join("\n", msgList); - } - rst.setSuccess(false); - rst.setResult(rstJO); - rst.setMessage(msgStr); - return false; - } - rst.setSuccess(true); - rst.setResult(rstJO); - rst.setMessage(rstJO.getString("message")); - String locate = rstJO.getString("locate"); - String idStr = locate.substring("/zentao/product-browse-".length(), locate.indexOf(".json")); - rst.setEtId(new BigInteger(idStr)); - return true; + final static public boolean create(String zentaoSid, JSONObject jo, ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_CREATE, ZenTaoConstants.ZT_URL_EXT); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(zentaoSid, url, ACTION_HTTPMETHOD_CREATE, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_CREATE)); + rst = ZenTaoHttpHelper.formatResultJSON(rstJO, rst, "/zentao/product-browse-"); + return rst.isSuccess(); + } + + final static public boolean edit(String zentaoSid, JSONObject jo, ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_EDIT, ZenTaoConstants.ZT_URL_EXT, jo, ACTION_URL_PARAMS_EDIT); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(zentaoSid, url, ACTION_HTTPMETHOD_EDIT, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_EDIT)); + rst = ZenTaoHttpHelper.formatResultJSON(rstJO, rst, "/zentao/product-view-"); + return rst.isSuccess(); } - final static public boolean edit(JSONObject jo, ZTResult rst) { - // 后期从session获取,前期使用admin - String account = ZenTaoConstants.ZT_TMP_USERNAME; - String urlParams = ""; - if (ACTION_URL_PARAMS_EDIT != null && ACTION_URL_PARAMS_EDIT.size() > 0) { - for (String key : ACTION_URL_PARAMS_EDIT) { - urlParams += "-" + jo.get(key); - } - } - String url = MODULE_NAME + "-" + ACTION_EDIT + urlParams + ZenTaoConstants.ZT_URL_EXT; - JSONObject rstJO = new JSONObject(); - rstJO = ZenTaoHttpHelper.doRequest(account, url, ACTION_HTTPMETHOD_EDIT, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_EDIT)); - if ("fail".equals(rstJO.getString("result"))) { - JSONObject message = rstJO.getJSONObject("message"); - List msgList = new ArrayList<>(); - if (!message.isEmpty()) { - for (String key : message.keySet()) { - JSONArray ja = message.getJSONArray(key); - for (int i = 0; i < ja.size(); i++) { - msgList.add(ja.getString(i)); - } - } - } - String msgStr = "编辑数据失败。\n"; - if (!msgList.isEmpty()) { - msgStr += String.join("\n", msgList); - } - rst.setSuccess(false); - rst.setResult(rstJO); - rst.setMessage(msgStr); - return false; - } - rst.setSuccess(true); - rst.setResult(rstJO); - rst.setMessage(rstJO.getString("message")); - String locate = rstJO.getString("locate"); - String idStr = locate.substring("/zentao/product-view-".length(), locate.indexOf(".json")); - rst.setEtId(new BigInteger(idStr)); - return true; + final static public boolean close(String zentaoSid, JSONObject jo, ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_CLOSE, ZenTaoConstants.ZT_URL_EXT, jo, ACTION_URL_PARAMS_CLOSE); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(zentaoSid, url, ACTION_HTTPMETHOD_CLOSE, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_CLOSE)); + rst = ZenTaoHttpHelper.formatResultHTML(rstJO, rst); + return rst.isSuccess(); } } diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTProductPlanHelper.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTProductPlanHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..2ab77c6eedfecc899d801f62623fbd73a73b5d59 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTProductPlanHelper.java @@ -0,0 +1,131 @@ +package cn.ibizlab.pms.core.util.zentao.helper; + +import cn.ibizlab.pms.core.util.zentao.bean.ZTResult; +import cn.ibizlab.pms.core.util.zentao.constants.ZenTaoConstants; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.springframework.http.HttpMethod; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 【禅道接口-ProductPlan】 辅助类 + */ +public class ZTProductPlanHelper { + // ---------- + // 接口模块 + // ---------- + + /** + * 接口模块名 + */ + private final static String MODULE_NAME = "productplan"; + + // ---------- + // 接口ACTION + // ---------- + + private final static String ACTION_COMMONACTION = "commonAction"; + private final static String ACTION_CREATE = "create"; + private final static String ACTION_EDIT = "edit"; + private final static String ACTION_BATCHEDIT = "batchEdit"; + private final static String ACTION_DELETE = "delete"; + private final static String ACTION_BROWSE = "browse"; + private final static String ACTION_VIEW = "view"; + private final static String ACTION_AJAXGETPRODUCTPLANS = "ajaxGetProductplans"; + private final static String ACTION_AJAXSTORYSORT = "ajaxStorySort"; + private final static String ACTION_LINKSTORY = "linkStory"; + private final static String ACTION_UNLINKSTORY = "unlinkStory"; + private final static String ACTION_BATCHUNLINKSTORY = "batchUnlinkStory"; + private final static String ACTION_LINKBUG = "linkBug"; + private final static String ACTION_UNLINKBUG = "unlinkBug"; + private final static String ACTION_BATCHUNLINKBUG = "batchUnlinkBug"; + + // ---------- + // 接口行为HTTP方法(GET、POST) + // ---------- + + private final static HttpMethod ACTION_HTTPMETHOD_CREATE = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_EDIT = HttpMethod.POST; + + // ---------- + // 接口行为POST参数 + // ---------- + + private final static Map ACTION_PARAMS_CREATE = new HashMap<>(); + private final static Map ACTION_PARAMS_EDIT = new HashMap<>(); + + // ---------- + // 接口行为URL参数 + // ---------- + + private final static List ACTION_URL_PARAMS_CREATE = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_EDIT = new ArrayList<>(); + + // ---------- + // 接口行为POST参数设置 + // ---------- + + static { + // CREATE + ACTION_PARAMS_CREATE.put("branch", 0); + ACTION_PARAMS_CREATE.put("title", null); + ACTION_PARAMS_CREATE.put("begin", null); + ACTION_PARAMS_CREATE.put("end", null); + ACTION_PARAMS_CREATE.put("desc", null); + ACTION_PARAMS_CREATE.put("product", 0); + ACTION_PARAMS_CREATE.put("parent", 0); + ACTION_PARAMS_CREATE.put("delta", null); + ACTION_PARAMS_CREATE.put("future", 0); + + // EDIT + ACTION_PARAMS_EDIT.put("branch", 0); + ACTION_PARAMS_EDIT.put("title", null); + ACTION_PARAMS_EDIT.put("begin", null); + ACTION_PARAMS_EDIT.put("end", null); + ACTION_PARAMS_EDIT.put("desc", null); + ACTION_PARAMS_EDIT.put("product", 0); + ACTION_PARAMS_EDIT.put("parent", 0); + ACTION_PARAMS_CREATE.put("delta", null); + ACTION_PARAMS_CREATE.put("future", 0); + + } + + // ---------- + // 接口行为URL参数设置 + // ---------- + + static { + // CREATE + ACTION_URL_PARAMS_CREATE.add("product"); + ACTION_URL_PARAMS_CREATE.add("branch"); + ACTION_URL_PARAMS_CREATE.add("parent"); + + // EDIT + ACTION_URL_PARAMS_EDIT.add("id"); + + } + + // ---------- + // 接口实现 + // ---------- + + final static public boolean create(String zentaoSid, JSONObject jo, ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_CREATE, ZenTaoConstants.ZT_URL_EXT, jo, ACTION_URL_PARAMS_EDIT); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(zentaoSid, url, ACTION_HTTPMETHOD_CREATE, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_CREATE)); + rst = ZenTaoHttpHelper.formatResultJSON(rstJO, rst); + return rst.isSuccess(); + } + + final static public boolean edit(String zentaoSid, JSONObject jo, ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_EDIT, ZenTaoConstants.ZT_URL_EXT, jo, ACTION_URL_PARAMS_EDIT); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(zentaoSid, url, ACTION_HTTPMETHOD_EDIT, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_EDIT)); + rst = ZenTaoHttpHelper.formatResultJSON(rstJO, rst, "/zentao/productplan-view-"); + return rst.isSuccess(); + } + +} diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTStoryHelper.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTStoryHelper.java index 238fd3a88d424850d53a6a599d4d84ff7a4e9f97..b42d6487dd8a8a8ddb88cf2f5c29093e29105770 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTStoryHelper.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTStoryHelper.java @@ -4,13 +4,11 @@ import cn.ibizlab.pms.core.util.zentao.bean.ZTResult; import cn.ibizlab.pms.core.util.zentao.constants.ZenTaoConstants; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import org.apache.commons.collections4.map.CaseInsensitiveMap; import org.springframework.http.HttpMethod; import java.math.BigInteger; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 【禅道接口-Story】 辅助类 @@ -67,8 +65,21 @@ public class ZTStoryHelper { // ---------- private final static HttpMethod ACTION_HTTPMETHOD_CREATE = HttpMethod.POST; - private final static HttpMethod ACTION_HTTPMETHOD_BATCHCREATE = HttpMethod.POST; private final static HttpMethod ACTION_HTTPMETHOD_EDIT = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_CHANGE = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_REVIEW = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_ACTIVATE = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_ASSIGNTO = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_CLOSE = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_BATCHCREATE = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_BATCHEDIT = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_BATCHCHANGESTAGE = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_BATCHCHANGEBRANCH = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_BATCHCHANGEPLAN = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_BATCHCLOSE = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_BATCHREVIEW = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_BATCHCHANGEMODULE = HttpMethod.POST; + private final static HttpMethod ACTION_HTTPMETHOD_BATCHASSIGNTO = HttpMethod.POST; // ---------- // 接口行为POST参数 @@ -76,12 +87,38 @@ public class ZTStoryHelper { private final static Map ACTION_PARAMS_CREATE = new HashMap<>(); private final static Map ACTION_PARAMS_EDIT = new HashMap<>(); + private final static Map ACTION_PARAMS_CHANGE = new HashMap<>(); + private final static Map ACTION_PARAMS_REVIEW = new HashMap<>(); + private final static Map ACTION_PARAMS_ACTIVATE = new HashMap<>(); + private final static Map ACTION_PARAMS_ASSIGNTO = new HashMap<>(); + private final static Map ACTION_PARAMS_CLOSE = new HashMap<>(); + private final static Map ACTION_PARAMS_BATCHCHANGESTAGE = new HashMap<>(); + private final static Map ACTION_PARAMS_BATCHCHANGEBRANCH = new HashMap<>(); + private final static Map ACTION_PARAMS_BATCHCHANGEPLAN = new HashMap<>(); + private final static Map ACTION_PARAMS_BATCHCLOSE = new HashMap<>(); + private final static Map ACTION_PARAMS_BATCHREVIEW = new HashMap<>(); + private final static Map ACTION_PARAMS_BATCHCHANGEMODULE = new HashMap<>(); + private final static Map ACTION_PARAMS_BATCHASSIGNTO = new HashMap<>(); + // ---------- // 接口行为URL参数 // ---------- private final static List ACTION_URL_PARAMS_EDIT = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_CHANGE = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_REVIEW = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_ACTIVATE = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_ASSIGNTO = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_CLOSE = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_BATCHCHANGESTAGE = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_BATCHCHANGEBRANCH = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_BATCHCHANGEPLAN = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_BATCHCLOSE = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_BATCHREVIEW = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_BATCHCHANGEMODULE = new ArrayList<>(); + private final static List ACTION_URL_PARAMS_BATCHASSIGNTO = new ArrayList<>(); + // ---------- // 接口行为POST参数设置 @@ -95,8 +132,8 @@ public class ZTStoryHelper { ACTION_PARAMS_CREATE.put("module", 0); ACTION_PARAMS_CREATE.put("plan", null); ACTION_PARAMS_CREATE.put("source", null); - ACTION_PARAMS_CREATE.put("sourcenote", null); - ACTION_PARAMS_CREATE.put("reviewedby", null); + ACTION_PARAMS_CREATE.put("sourceNote", null); + ACTION_PARAMS_CREATE.put("reviewedBy", null); ACTION_PARAMS_CREATE.put("pri", 3); ACTION_PARAMS_CREATE.put("estimate", 0); ACTION_PARAMS_CREATE.put("spec", null); @@ -114,21 +151,51 @@ public class ZTStoryHelper { ACTION_PARAMS_EDIT.put("parent", 0); ACTION_PARAMS_EDIT.put("status", null); ACTION_PARAMS_EDIT.put("source", null); - ACTION_PARAMS_EDIT.put("sourcenote", null); - ACTION_PARAMS_EDIT.put("reviewedby", null); + ACTION_PARAMS_EDIT.put("sourceNote", null); + ACTION_PARAMS_EDIT.put("reviewedBy", null); ACTION_PARAMS_EDIT.put("pri", 3); ACTION_PARAMS_EDIT.put("estimate", 0); ACTION_PARAMS_EDIT.put("color", null); ACTION_PARAMS_EDIT.put("mailto", null); ACTION_PARAMS_EDIT.put("linkstories", null); - ACTION_PARAMS_EDIT.put("assignedto", null); + ACTION_PARAMS_EDIT.put("assignedTo", null); ACTION_PARAMS_EDIT.put("keywords", null); ACTION_PARAMS_EDIT.put("comment", null); - // 变更日期,编辑不会修改 -// ACTION_PARAMS_EDIT.put("lastediteddate", null); - // 联系单(前端计算进入mailto) -// ACTION_PARAMS_EDIT.put("contactlistmenu", null); + // CHANGE + ACTION_PARAMS_CHANGE.put("status", null); + ACTION_PARAMS_CREATE.put("spec", null); + ACTION_PARAMS_CREATE.put("verify", null); + ACTION_PARAMS_CHANGE.put("title", null); + ACTION_PARAMS_CHANGE.put("assignedTo", null); + ACTION_PARAMS_CHANGE.put("comment", null); + + // REVIEW + ACTION_PARAMS_REVIEW.put("result", null); + ACTION_PARAMS_REVIEW.put("closedReason", null); + ACTION_PARAMS_REVIEW.put("pri", 3); + ACTION_PARAMS_REVIEW.put("estimate", 0); + ACTION_PARAMS_REVIEW.put("comment", null); + ACTION_PARAMS_REVIEW.put("preVersion", null); + ACTION_PARAMS_REVIEW.put("assignedTo", null); + ACTION_PARAMS_REVIEW.put("status", null); + ACTION_PARAMS_REVIEW.put("reviewedBy", null); + + // ACTIVATE + ACTION_PARAMS_ACTIVATE.put("comment", null); + ACTION_PARAMS_ACTIVATE.put("assignedTo", null); + ACTION_PARAMS_ACTIVATE.put("status", "active"); + + // ASSIGNTO + ACTION_PARAMS_ASSIGNTO.put("comment", null); + ACTION_PARAMS_ASSIGNTO.put("assignedTo", null); + + // CLOSE + ACTION_PARAMS_CLOSE.put("comment", null); + ACTION_PARAMS_CLOSE.put("closedReason", null); + + // BATCHCHANGESTAGE + ACTION_PARAMS_BATCHCHANGESTAGE.put("storyIdList", null); } // ---------- @@ -138,110 +205,80 @@ public class ZTStoryHelper { static { // EDIT ACTION_URL_PARAMS_EDIT.add("id"); + + // CHANGE + ACTION_URL_PARAMS_CHANGE.add("id"); + + // REVIEW + ACTION_URL_PARAMS_REVIEW.add("id"); + + // ACTIVATE + ACTION_URL_PARAMS_ACTIVATE.add("id"); + + // ASSIGNTO + ACTION_URL_PARAMS_ASSIGNTO.add("id"); + + // CLOSE + ACTION_URL_PARAMS_CLOSE.add("id"); + + // BATCHCHANGESTAGE + ACTION_URL_PARAMS_BATCHCHANGESTAGE.add("stage"); + + // BATCHCHANGESTAGE + ACTION_URL_PARAMS_BATCHCHANGESTAGE.add("branch"); } // ---------- // 接口实现 // ---------- - final static public boolean create(JSONObject jo, ZTResult rst) { - // 后期从session获取,前期使用admin - String account = ZenTaoConstants.ZT_TMP_USERNAME; - String url = MODULE_NAME + "-" + ACTION_CREATE + ZenTaoConstants.ZT_URL_EXT; - JSONObject rstJO = new JSONObject(); - rstJO = ZenTaoHttpHelper.doRequest(account, url, ACTION_HTTPMETHOD_CREATE, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_CREATE)); - if ("fail".equals(rstJO.getString("result"))) { - JSONObject message = rstJO.getJSONObject("message"); - List msgList = new ArrayList<>(); - if (!message.isEmpty()) { - for (String key : message.keySet()) { - JSONArray ja = message.getJSONArray(key); - for (int i = 0; i < ja.size(); i++) { - msgList.add(ja.getString(i)); - } - } - } - String msgStr = "创建数据失败。\n"; - if (!msgList.isEmpty()) { - msgStr += String.join("\n", msgList); - } - rst.setSuccess(false); - rst.setResult(rstJO); - rst.setMessage(msgStr); - return false; - } - rst.setSuccess(true); - rst.setResult(rstJO); - rst.setMessage(rstJO.getString("message")); - return true; + final static public boolean create(String zentaoSid, JSONObject jo, ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_CREATE, ZenTaoConstants.ZT_URL_EXT); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(zentaoSid, url, ACTION_HTTPMETHOD_CREATE, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_CREATE)); + rst = ZenTaoHttpHelper.formatResultJSON(rstJO, rst); + return rst.isSuccess(); } - final static public boolean edit(JSONObject jo, ZTResult rst) { - // 后期从session获取,前期使用admin - String account = ZenTaoConstants.ZT_TMP_USERNAME; - String urlParams = ""; - if (ACTION_URL_PARAMS_EDIT != null && ACTION_URL_PARAMS_EDIT.size() > 0) { - for (String key : ACTION_URL_PARAMS_EDIT) { - urlParams += "-" + jo.get(key); - } - } - String url = MODULE_NAME + "-" + ACTION_EDIT + urlParams + ZenTaoConstants.ZT_URL_EXT; - JSONObject rstJO = new JSONObject(); - rstJO = ZenTaoHttpHelper.doRequest(account, url, ACTION_HTTPMETHOD_EDIT, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_EDIT)); - rst.setSuccess(true); - rst.setResult(rstJO); - rst.setMessage(rstJO.getString("html")); - return true; + final static public boolean edit(String zentaoSid, JSONObject jo, ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_EDIT, ZenTaoConstants.ZT_URL_EXT, jo, ACTION_URL_PARAMS_EDIT); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(zentaoSid, url, ACTION_HTTPMETHOD_EDIT, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_EDIT)); + rst = ZenTaoHttpHelper.formatResultHTML(rstJO, rst); + return rst.isSuccess(); } + final static public boolean change(String zentaoSid, JSONObject jo, ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_CHANGE, ZenTaoConstants.ZT_URL_EXT, jo, ACTION_URL_PARAMS_CHANGE); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(zentaoSid, url, ACTION_HTTPMETHOD_CHANGE, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_CHANGE)); + rst = ZenTaoHttpHelper.formatResultHTML(rstJO, rst); + return rst.isSuccess(); + } - public static void main(String[] args) { - // create -// JSONObject jo = new JSONObject(); -// jo.put("product", 4); -// jo.put("branch", 3); -// jo.put("title", "API建立需求7"); -// jo.put("module", 0); -// jo.put("plan", 7); -// jo.put("source", "market"); -// jo.put("sourcenote", "客户需求"); -// jo.put("reviewedby", "admin"); -// jo.put("pri", 3); -// jo.put("estimate", 0); -// jo.put("spec", "API建立需求描述7"); -// jo.put("verify", "API建立需求验收标准7"); -// jo.put("color", "#2dbdb2"); -// jo.put("mailto", "admin,xiechenlong"); -// jo.put("keywords", "API建立需求"); -// jo.put("type", "story"); -// cn.ibizlab.pms.core.util.zentao.bean.ZTResult rst = new cn.ibizlab.pms.core.util.zentao.bean.ZTResult(); -// boolean bRst = create(jo, rst); - - // edit - JSONObject jo = new JSONObject(); - jo.put("id", 200); - jo.put("product", 4); - jo.put("branch", 3); - jo.put("module", 198); - jo.put("color", "#2dbdb2"); - jo.put("plan", 7); - jo.put("status", "draft"); - jo.put("source", "market"); - jo.put("sourcenote", "客户需求"); - jo.put("reviewedby", "admin,xiechenlong"); - jo.put("pri", 3); - jo.put("estimate", 10); - jo.put("parent", 65); - jo.put("mailto", "admin,xiechenlong,crimson"); - jo.put("keywords", "API建立需求"); - jo.put("linkstories", "66,67"); - jo.put("comment", "API编辑需求"); - - cn.ibizlab.pms.core.util.zentao.bean.ZTResult rst = new cn.ibizlab.pms.core.util.zentao.bean.ZTResult(); - boolean bRst = edit(jo, rst); - -// if (!bRst) { - System.out.println(rst.getMessage()); -// } + final static public boolean review(String zentaoSid, JSONObject jo, ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_REVIEW, ZenTaoConstants.ZT_URL_EXT, jo, ACTION_URL_PARAMS_REVIEW); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(zentaoSid, url, ACTION_HTTPMETHOD_REVIEW, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_REVIEW)); + rst = ZenTaoHttpHelper.formatResultHTML(rstJO, rst); + return rst.isSuccess(); } + + final static public boolean activate(String zentaoSid, JSONObject jo, ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_ACTIVATE, ZenTaoConstants.ZT_URL_EXT, jo, ACTION_URL_PARAMS_ACTIVATE); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(zentaoSid, url, ACTION_HTTPMETHOD_ACTIVATE, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_ACTIVATE)); + rst = ZenTaoHttpHelper.formatResultHTML(rstJO, rst); + return rst.isSuccess(); + } + + final static public boolean assignTo(String zentaoSid, JSONObject jo, ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_ASSIGNTO, ZenTaoConstants.ZT_URL_EXT, jo, ACTION_URL_PARAMS_ASSIGNTO); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(zentaoSid, url, ACTION_HTTPMETHOD_ASSIGNTO, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_ASSIGNTO)); + rst = ZenTaoHttpHelper.formatResultHTML(rstJO, rst); + return rst.isSuccess(); + } + + final static public boolean close(String zentaoSid, JSONObject jo, ZTResult rst) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_CLOSE, ZenTaoConstants.ZT_URL_EXT, jo, ACTION_URL_PARAMS_CLOSE); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(zentaoSid, url, ACTION_HTTPMETHOD_CLOSE, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_CLOSE)); + rst = ZenTaoHttpHelper.formatResultHTML(rstJO, rst); + return rst.isSuccess(); + } + } diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTUserHelper.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTUserHelper.java index 0eeeba552fa4378ca287210baab16960acabd70b..40095d665fe309cb64ad51841b22f95df5de4e16 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTUserHelper.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZTUserHelper.java @@ -1,5 +1,6 @@ package cn.ibizlab.pms.core.util.zentao.helper; +import cn.ibizlab.pms.core.util.zentao.bean.ZTResult; import cn.ibizlab.pms.core.util.zentao.constants.ZenTaoConstants; import com.alibaba.fastjson.JSONObject; import org.springframework.beans.factory.annotation.Autowired; @@ -60,33 +61,53 @@ public class ZTUserHelper { private final static HttpMethod ACTION_HTTPMETHOD_LOGIN = HttpMethod.POST; + // ---------- + // 接口行为POST参数 + // ---------- + + private final static Map ACTION_PARAMS_LOGIN = new HashMap<>(); + + // ---------- + // 接口行为POST参数设置 + // ---------- + + static { + // LOGIN + ACTION_PARAMS_LOGIN.put("account", null); + ACTION_PARAMS_LOGIN.put("password", null); + + } + // ---------- // 接口实现 // ---------- - final static public boolean login(JSONObject rst) { - // 后期从session获取,前期使用admin - String account = ZenTaoConstants.ZT_TMP_USERNAME; - String password = ZenTaoConstants.ZT_TMP_PASSWORD; - if (account == null || account.isEmpty()) { + final static public boolean login(String zentaosid, JSONObject jo, ZTResult rst) { + if (jo.getString("account") == null || jo.getString("account").isEmpty()) { + return false; + } + if (jo.getString("password") == null || jo.getString("password").isEmpty()) { return false; } - String url = MODULE_NAME + "-" + ACTION_LOGIN + ZenTaoConstants.ZT_URL_EXT; - JSONObject jo = new JSONObject(); - jo.put("account", account); - jo.put("password", password); - rst = ZenTaoHttpHelper.doRequest(account, url, ACTION_HTTPMETHOD_LOGIN, jo, ZenTaoConstants.ZT_ACTION_TYPE_LOGIN); - if (!"success".equals(rst.getString("status"))) { + String url = ZenTaoHttpHelper.formatUrl(MODULE_NAME, ACTION_LOGIN, ZenTaoConstants.ZT_URL_EXT); + JSONObject rstJO = ZenTaoHttpHelper.doRequest(zentaosid, url, ACTION_HTTPMETHOD_LOGIN, ZenTaoHttpHelper.formatJSON(jo, ACTION_PARAMS_LOGIN)); + rst.setResult(rstJO); + if (!"success".equals(rstJO.getString("status"))) { + rst.setSuccess(false); return false; } - if (!rst.containsKey("user")) { + if (!rstJO.containsKey("user")) { + rst.setSuccess(false); return false; } - JSONObject user = rst.getJSONObject("user"); + JSONObject user = rstJO.getJSONObject("user"); if (!user.containsKey("account")) { + rst.setSuccess(false); return false; } - return account.equals(user.getString("account")); + boolean bRst = jo.getString("account").equals(user.getString("account")); + rst.setSuccess(bRst); + return bRst; } } diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZenTaoHttpHelper.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZenTaoHttpHelper.java index 7d9da7c70ad8c75a06ef177d3fffcffe97c0cef8..19d0220af7290c798acb6ae05098421147ef6ead 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZenTaoHttpHelper.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/helper/ZenTaoHttpHelper.java @@ -1,8 +1,12 @@ package cn.ibizlab.pms.core.util.zentao.helper; +import cn.ibizlab.pms.core.util.zentao.bean.ZTResult; import cn.ibizlab.pms.core.util.zentao.constants.ZenTaoConstants; import cn.ibizlab.pms.util.helper.HttpUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import liquibase.pro.packaged.S; import liquibase.pro.packaged.U; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; @@ -11,45 +15,32 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; import java.util.Map; /** * 禅道接口辅助类 */ public class ZenTaoHttpHelper { -// @Value("${zentao.url:http://172.16.100.202/zentao/}") -// private String ztUrl; - final static public JSONObject doRequest(String account, String url, HttpMethod httpMethod){ - return doRequest(account, url, httpMethod, null, ZenTaoConstants.ZT_ACTION_TYPE_NORMAL); - } - - final static public JSONObject doRequest(String account, String url, HttpMethod httpMethod, int actionType){ - return doRequest(account, url, httpMethod, null, actionType); - } - final static JSONObject doRequest(String account, String url, HttpMethod httpMethod, JSONObject paramMap){ - return doRequest(account, url, httpMethod, paramMap, ZenTaoConstants.ZT_ACTION_TYPE_NORMAL); + final static public JSONObject doRequest(String zentaoSid, String url, HttpMethod httpMethod){ + return doRequest(zentaoSid, url, httpMethod, null); } - final static JSONObject doRequest(String account, String url, HttpMethod httpMethod, JSONObject paramMap, int actionType){ + final static JSONObject doRequest(String zentaoSid, String url, HttpMethod httpMethod, JSONObject paramMap){ if (url == null) { return null; } - if (actionType == ZenTaoConstants.ZT_ACTION_TYPE_NORMAL || actionType == ZenTaoConstants.ZT_ACTION_TYPE_LOGIN) { - if (!ZTAPIHelper.getSessionID(new JSONObject())) { - return null; - } - } - if (actionType == ZenTaoConstants.ZT_ACTION_TYPE_NORMAL) { - if (!ZTUserHelper.login(new JSONObject())) { - return null; - } - } if (!ZenTaoConstants.ZT_URL.endsWith("/")) { ZenTaoConstants.ZT_URL += "/"; } - url = ZenTaoConstants.ZT_URL + url + "?zentaosid=" + account; + url = ZenTaoConstants.ZT_URL + url; + if (zentaoSid != null) { + url += "?zentaosid=" + zentaoSid; + } JSONObject jo = new JSONObject(); HttpHeaders httpHeaders = HttpUtil.getHttpHeaders(MediaType.APPLICATION_FORM_URLENCODED); ResponseEntity responseEntity = HttpUtil.doRequest(url, httpMethod, httpHeaders, paramMap, String.class); @@ -69,13 +60,131 @@ public class ZenTaoHttpHelper { // 若为空时,default值填充 JSONObject formatJo = new JSONObject(); for (String key : templateMap.keySet()) { - if (jo.get(key) == null) { + if (jo.get(key.toLowerCase()) == null) { formatJo.put(key, templateMap.get(key)); } else { - formatJo.put(key, jo.get(key)); + formatJo.put(key, jo.get(key.toLowerCase())); } } return formatJo; } + final static public String formatUrlParams(List urlParams, JSONObject jo) { + if (jo == null) { + return ""; + } + StringBuilder urlParamsStr = new StringBuilder(); + if (urlParams != null && urlParams.size() > 0) { + for (String key : urlParams) { + urlParamsStr.append("-"); + if (jo.containsKey(key) && jo.get(key) != null) { + urlParamsStr.append(jo.getString(key)); + } + } + } + return urlParamsStr.toString(); + } + + final static public String formatUrl(String moduleName, String actionName, String ext) { + return formatUrl(moduleName, actionName, ext, null, null); + } + + final static public String formatUrl(String moduleName, String actionName, String ext, JSONObject jo) { + return formatUrl(moduleName, actionName, ext, jo, null); + } + + final static public String formatUrl(String moduleName, String actionName, String ext, JSONObject jo, List urlParams) { + StringBuilder url = new StringBuilder(); + if (moduleName == null || moduleName.isEmpty() || actionName == null || actionName.isEmpty()) { + return null; + } + url.append(moduleName); + url.append("-"); + url.append(actionName); + if (jo != null && urlParams != null && urlParams.size() > 0) { + url.append(formatUrlParams(urlParams, jo)); + } + if (ext != null) { + url.append(ext); + } + return url.toString(); + } + + /** + * 返回结果为JSON
+ * {
+ * "result":success/fail,
+ * "message":"xxx",
+ * "locate":"xxx-xxxx-xxxx.json"
+ * }
+ * + * @param rstJO + * @param returnUrlRegexPrev + * @return + */ + final static public ZTResult formatResultJSON(JSONObject rstJO, ZTResult rst, String returnUrlRegexPrev) { + if ("fail".equals(rstJO.getString("result"))) { + JSONObject message = rstJO.getJSONObject("message"); + List msgList = new ArrayList<>(); + if (!message.isEmpty()) { + for (String key : message.keySet()) { + JSONArray ja = message.getJSONArray(key); + for (int i = 0; i < ja.size(); i++) { + msgList.add(ja.getString(i)); + } + } + } + String msgStr = "创建数据失败。\n"; + if (!msgList.isEmpty()) { + msgStr += String.join("\n", msgList); + } + rst.setSuccess(false); + rst.setResult(rstJO); + rst.setMessage(msgStr); + return rst; + } + rst.setSuccess(true); + rst.setResult(rstJO); + rst.setMessage(rstJO.getString("message")); + String locate = rstJO.getString("locate"); + if (returnUrlRegexPrev != null) { + String idStr = locate.substring(returnUrlRegexPrev.length(), locate.indexOf(".json")); + rst.setEtId(new BigInteger(idStr)); + } + return rst; + } + + /** + * 返回结果为JSON(返回JSON无法解析出ID)
+ * {
+ * "result":success/fail,
+ * "message":"xxx",
+ * "locate":"xxx-xxxx-xxxx.json"
+ * }
+ * + * @param rstJO + * @return + */ + final static public ZTResult formatResultJSON(JSONObject rstJO, ZTResult rst) { + return formatResultJSON(rstJO, rst, null); + } + + /** + * 返回结果为JSON
+ * {
+ * "result":success/fail,
+ * "html":"xxx",
+ * }
+ * + * @param rstJO + * @param rst + * @return + */ + public static final ZTResult formatResultHTML(JSONObject rstJO, ZTResult rst) { + rst.setSuccess(true); + rst.setResult(rstJO); + rst.setMessage(rstJO.getString("html")); + return rst; + } + } diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/rest/IBZZTFileController.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/rest/IBZZTFileController.java new file mode 100644 index 0000000000000000000000000000000000000000..9e5fde71779662f63762ba7c71078d57f13dedf5 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/rest/IBZZTFileController.java @@ -0,0 +1,91 @@ +package cn.ibizlab.pms.core.util.zentao.rest; + + +import cn.ibizlab.pms.core.util.zentao.bean.ZTDownloadFile; +import cn.ibizlab.pms.core.util.zentao.service.IIBZZTFileService; +import cn.ibizlab.pms.util.domain.FileItem; +import cn.ibizlab.pms.util.service.FileService; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Param; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; + + +@Slf4j +@RestController +@RequestMapping("/") +public class IBZZTFileController { + @Autowired + private IIBZZTFileService fileService; + + @PostMapping(value = "${zentao.file.uploadpath:ibizutil/ztupload}") + public ResponseEntity upload(@RequestParam("file") MultipartFile multipartFile, @RequestParam("objecttype") String objectType, @RequestParam("objectid") Integer objectId, @RequestParam("version")Integer version){ + JSONObject params = new JSONObject(); + params.put("objecttype", objectType); + params.put("objectid", objectId); + params.put("version", version); + return ResponseEntity.ok().body(fileService.saveFile(multipartFile, params)); + } + + @GetMapping(value = "${zentao.file.downloadpath:ibizutil/ztdownload/" + "{id}" + "}") + @ResponseStatus(HttpStatus.OK) + public void download(@PathVariable String id, HttpServletResponse response){ + ZTDownloadFile file = fileService.getFile(id); + response.setHeader("Content-Disposition", "attachment;filename=" + getFileName(file.getFileName())); + this.sendRespose(response, file.getFile()); + } + + protected void sendRespose(HttpServletResponse response, File file){ + BufferedInputStream bis = null; + BufferedOutputStream bos = null; + try { + bis = new BufferedInputStream(new FileInputStream(file)); + bos = new BufferedOutputStream(response.getOutputStream()); + byte[] buff = new byte[2048]; + int bytesRead; + while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { + bos.write(buff, 0, bytesRead); + } + } catch (Exception e) { + // log.error() + e.printStackTrace(); + } finally { + if (bis != null) { + try { + bis.close(); + } + catch (IOException e) { + // log.warn() + e.printStackTrace(); + } + } + if (bos != null) { + try { + bos.close(); + } + catch (IOException e) { + // log.warn() + e.printStackTrace(); + } + } + } + } + + protected String getFileName(String fileName){ + try { + return new String(fileName.getBytes("utf-8"),"iso8859-1");//防止中文乱码 + } + catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return fileName; + } +} diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/service/IBZUAAZTUserService.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/service/IBZUAAZTUserService.java new file mode 100644 index 0000000000000000000000000000000000000000..cb65f3613e3c6684f49d327c9dcfab4f8bfef081 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/service/IBZUAAZTUserService.java @@ -0,0 +1,123 @@ +package cn.ibizlab.pms.core.util.zentao.service; + +import cn.ibizlab.pms.core.util.zentao.bean.ZTResult; +import cn.ibizlab.pms.core.util.zentao.helper.ZTAPIHelper; +import cn.ibizlab.pms.core.util.zentao.helper.ZTUserHelper; +import cn.ibizlab.pms.core.zentao.domain.User; +import cn.ibizlab.pms.core.zentao.service.IUserService; +import cn.ibizlab.pms.util.domain.IBZUSER; +import cn.ibizlab.pms.util.errors.BadRequestAlertException; +import cn.ibizlab.pms.util.errors.InternalServerErrorException; +import cn.ibizlab.pms.util.helper.CachedBeanCopier; +import cn.ibizlab.pms.util.security.AuthenticationUser; +import cn.ibizlab.pms.util.security.AuthorizationLogin; +import cn.ibizlab.pms.util.service.AuthenticationUserService; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.hibernate.validator.internal.util.StringHelper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.authority.AuthorityUtils; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Map; + +/** + * 实体[IBZUSER] 服务对象接口实现 + */ +@Service("IBZUAAZTUserService") +@ConditionalOnExpression("${ibiz.enablePermissionValid:false}||'${ibiz.auth.service:SimpleUserService}'.equals('IBZUAAZTUserService')") +public class IBZUAAZTUserService implements AuthenticationUserService{ + + // 打通禅道与统一认证之后开放IBZUAAFeignClient + +// @Autowired +// private IBZUAAFeignClient uaaFeignClient; + + @Autowired + private IUserService userService; + + @Override + public AuthenticationUser loadUserByUsername(String username) { + if (username == null || username.trim().isEmpty()) { + throw new InternalServerErrorException("用户还未登录"); + } + String[] accountInfo = username.split("[|]"); + String loginname = username; + String domains = ""; + if (accountInfo.length == 2) { + loginname = accountInfo[0].trim(); + domains = accountInfo[1].trim(); + } + AuthenticationUser user = AuthenticationUser.getAuthenticationUser(); + if (user == null || user.getUsername() == null || !loginname.equals(user.getUsername())) { + throw new InternalServerErrorException("用户还未登录"); + } + + return user; + } + + @Override + public AuthenticationUser loadUserByLogin(String username, String password) { + if (username == null || username.trim().isEmpty() || password == null || password.trim().isEmpty()) { + throw new InternalServerErrorException("请输入用户名密码"); + } + // 适配统一认证email crimson@ibizsys.net 与 禅道 crimson 关系 + String[] accountInfo = username.split("[|]"); + String loginname = username; + String domains = ""; + + if (accountInfo.length == 2) { + loginname = accountInfo[0].trim(); + domains = accountInfo[1].trim(); + } + + ZTResult rstSession = new ZTResult(); + if (!ZTAPIHelper.getSessionID(rstSession)) { + throw new InternalServerErrorException("登录失败"); + } + String zentaoSid = JSONObject.parseObject(rstSession.getResult().getString("data")).getString("sessionID"); + + ZTResult rstLogin = new ZTResult(); + JSONObject jo = new JSONObject(); + jo.put("account", loginname); + jo.put("password", password); + if (!ZTUserHelper.login(zentaoSid, jo, rstLogin)) { + throw new InternalServerErrorException("登录失败"); + } + + JSONObject userJO = rstLogin.getResult().getJSONObject("user"); + AuthenticationUser user = new AuthenticationUser(); + user.setUserid(userJO.getString("id")); + user.setUsername(userJO.getString("account")); + user.setLoginname(userJO.getString("account")); + user.setDomain(domains); + user.setEmail(userJO.getString("email")); + user.setAvatar(userJO.getString("avatar")); + user.setNickname(userJO.getString("nickname")); + if (userJO.getString("birthday") == null || userJO.getString("birthday").isEmpty() || "0000-00-00".equals(userJO.getString("birthday"))) { + user.setBirthday(null); + } else { + user.setBirthday(userJO.getTimestamp("birthday")); + } + user.setAddr(userJO.getString("address")); + user.setSex(userJO.getString("gender")); + Map sessionParams = user.getSessionParams(); + sessionParams.put("ztuser", userJO); + sessionParams.put("zentaosid", zentaoSid); + user.setSessionParams(sessionParams); + // 权限默认给管理员(权限未接入之前) + user.setAuthorities(AuthorityUtils.createAuthorityList("ROLE_SUPERADMIN")); + return user; + } + + + @Override + public void resetByUsername(String username) { + + } + +} diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/service/IBZZTFileService.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/service/IBZZTFileService.java new file mode 100644 index 0000000000000000000000000000000000000000..04791b282faf50903d6ad210fc8d207a9e862d82 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/service/IBZZTFileService.java @@ -0,0 +1,186 @@ +package cn.ibizlab.pms.core.util.zentao.service; + +import cn.ibizlab.pms.core.util.zentao.bean.ZTDownloadFile; +import cn.ibizlab.pms.core.zentao.service.IFileService; +import cn.ibizlab.pms.util.domain.FileItem; +import cn.ibizlab.pms.util.errors.InternalServerErrorException; +import cn.ibizlab.pms.util.security.AuthenticationUser; +import cn.ibizlab.pms.util.service.FileService; +import com.alibaba.fastjson.JSONObject; +import com.sun.jmx.snmp.Timestamp; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Service; +import org.springframework.util.DigestUtils; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.math.BigInteger; +import java.nio.file.Files; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Slf4j +@Service("IBZZTFileService") +public class IBZZTFileService implements IIBZZTFileService { + + @Value("${zentao.filePath:#{null}}") + private String filePath; + + @Value("${zentao.rootPath:/app/zentao/file/}") + private String rootPath; + + @Autowired + private IFileService fileService; + + @Override + public FileItem saveFile(MultipartFile multipartFile) { + return saveFile(multipartFile, null); + } + + @Override + public FileItem saveFile(MultipartFile multipartFile, JSONObject params) { + FileItem item = null; + // 获取文件名 + String fileName = multipartFile.getOriginalFilename(); + // 获取文件后缀 + String extname = "." + getExtensionName(fileName); + String fileNameWithoutExt = fileName.substring(0, fileName.length() - extname.length()); + + String filePath = this.filePath; + if (filePath == null) { + filePath = ""; + } + filePath = filePath.replaceAll("\\\\", "/"); + if (!filePath.isEmpty() && !filePath.endsWith("/")) { + filePath += "/"; + } + String rootPath = this.rootPath; + if (rootPath == null) { + rootPath = ""; + } + rootPath = rootPath.replaceAll("\\\\", "/"); + if (!rootPath.endsWith("/")) { + rootPath += "/"; + } + try { + if (params != null && params.get("objecttype") != null) { + String md5FileName = fileName; + long curTime = System.currentTimeMillis(); + md5FileName += curTime; + AuthenticationUser user = AuthenticationUser.getAuthenticationUser(); + String addedBy = null; + if (user != null && user.getUsername() != null) { + addedBy = user.getUsername(); + md5FileName += user.getUsername(); + } + md5FileName = DigestUtils.md5DigestAsHex(md5FileName.getBytes()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM"); + String curDate = sdf.format(new Date(curTime)); +// String fileFullPathWithoutExt = filePath + curDate + "/" + md5FileName; + String fileFullPath = filePath + curDate + "/" + md5FileName + extname; + File file = new File(rootPath + fileFullPath); + File parent = new File(file.getParent()); + if(!parent.exists()) { + parent.mkdirs(); + } + FileCopyUtils.copy(multipartFile.getInputStream(), Files.newOutputStream(file.toPath())); + + cn.ibizlab.pms.core.zentao.domain.File ztFile = new cn.ibizlab.pms.core.zentao.domain.File(); + + String objectType = params.getString("objecttype"); + Integer objectId = params.getInteger("objectid"); + Integer version = params.getInteger("version"); + +// ztFile.setPathname(fileFullPathWithoutExt); + ztFile.setPathname(fileFullPath); + ztFile.setTitle(fileName); + ztFile.setExtension(getExtensionName(fileName)); + ztFile.setSize(new Long(multipartFile.getSize()).intValue()); + ztFile.setObjecttype(objectType); + ztFile.setObjectid(objectId); + ztFile.setExtra(version == null ? null : version.toString()); + ztFile.setDeleted("0"); + ztFile.setAddedby(addedBy); + fileService.create(ztFile); + String fileId = ztFile.getId().toString(); + + item = new FileItem(fileId, fileName, fileId, fileName, (int)multipartFile.getSize(), extname); + } else { + String fileid = DigestUtils.md5DigestAsHex(multipartFile.getInputStream()); + String fileFullPath = filePath + "ibizutil/" + fileid + "/" + fileName; + File file = new File(fileFullPath); + File parent = new File(file.getParent()); + if(!parent.exists()) { + parent.mkdirs(); + } + FileCopyUtils.copy(multipartFile.getInputStream(), Files.newOutputStream(file.toPath())); + item = new FileItem(fileid, fileName, fileid, fileName, new Long(multipartFile.getSize()).intValue(), extname); + } + } catch (IOException e) { + throw new InternalServerErrorException("文件上传失败"); + } + return item; + } + + @Override + public ZTDownloadFile getFile(String fileId) { + String filePath = this.filePath; + if (filePath == null) { + filePath = ""; + } + filePath = filePath.replaceAll("\\\\", "/"); + if (!filePath.isEmpty() && !filePath.endsWith("/")) { + filePath += "/"; + } + String rootPath = this.rootPath; + if (rootPath == null) { + rootPath = ""; + } + rootPath = rootPath.replaceAll("\\\\", "/"); + if (!rootPath.endsWith("/")) { + rootPath += "/"; + } + + ZTDownloadFile downloadFile = new ZTDownloadFile(); + String dirpath = filePath + "ibizutil/" + fileId; + File parent = new File(dirpath); + if (parent.exists() && parent.isDirectory() && parent.listFiles().length > 0) { + downloadFile.setFile(parent.listFiles()[0]); + downloadFile.setFileName(parent.listFiles()[0].getName()); + return downloadFile; + } + cn.ibizlab.pms.core.zentao.domain.File ztFile = fileService.get(new BigInteger(fileId)); + if (ztFile == null) { + throw new InternalServerErrorException("文件不存在"); + } + File file = new File(rootPath + ztFile.getPathname()); + if (!file.exists()) { + throw new InternalServerErrorException("文件不存在"); + } + downloadFile.setFile(file); + downloadFile.setFileName(ztFile.getTitle()); + return downloadFile; + } + + /** + * 获取文件扩展名 + * @param filename + * @return + */ + public static String getExtensionName(String filename) { + if ((filename != null) && (filename.length() > 0)) { + int dot = filename.lastIndexOf('.'); + if ((dot >-1) && (dot < (filename.length() - 1))) { + return filename.substring(dot + 1); + } + } + return filename; + } + +} diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/service/IIBZZTFileService.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/service/IIBZZTFileService.java new file mode 100644 index 0000000000000000000000000000000000000000..e49374c24543b1b562a640204892e13ebf029678 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/util/zentao/service/IIBZZTFileService.java @@ -0,0 +1,15 @@ +package cn.ibizlab.pms.core.util.zentao.service; + +import cn.ibizlab.pms.core.util.zentao.bean.ZTDownloadFile; +import cn.ibizlab.pms.util.domain.FileItem; +import com.alibaba.fastjson.JSONObject; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; + +public interface IIBZZTFileService +{ + FileItem saveFile(MultipartFile multipartFile); + FileItem saveFile(MultipartFile multipartFile, JSONObject params); + ZTDownloadFile getFile(String fileId); +} diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Action.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Action.java index 589d6c8fac777c6a9438659141fb8876c607e36f..1673876f60acc284fccb6aa2688b0ac677885553 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Action.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Action.java @@ -56,7 +56,7 @@ public class Action extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Block.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Block.java index ce384b6c9cae217a73e1345f77521fa473df74d5..b0d7bc70172bdeb5994c4b9c39fbf60872445e17 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Block.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Block.java @@ -116,7 +116,7 @@ public class Block extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Branch.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Branch.java index 6c82087d5bf131de2476a2d2001b86ba6039b253..7cf7ae5d343a6bc2b9017a1ddc0a440f78cf8680 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Branch.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Branch.java @@ -58,7 +58,7 @@ public class Branch extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Bug.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Bug.java index 343d020c732394c745c3b9982088a50d1a7fe62f..6b68c315ccb3a24619d4817b54a96934818f3210 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Bug.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Bug.java @@ -267,7 +267,7 @@ public class Bug extends EntityMP implements Serializable { * Bug编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; @@ -285,6 +285,13 @@ public class Bug extends EntityMP implements Serializable { @JSONField(name = "resolvedby") @JsonProperty("resolvedby") private String resolvedby; + /** + * 解决版本 + */ + @TableField(value = "resolvedbuild") + @JSONField(name = "resolvedbuild") + @JsonProperty("resolvedbuild") + private String resolvedbuild; /** * 优先级 */ @@ -460,13 +467,6 @@ public class Bug extends EntityMP implements Serializable { @JSONField(name = "testtask") @JsonProperty("testtask") private BigInteger testtask; - /** - * 解决版本 - */ - @TableField(value = "resolvedbuild") - @JSONField(name = "resolvedbuild") - @JsonProperty("resolvedbuild") - private BigInteger resolvedbuild; /** * @@ -484,14 +484,6 @@ public class Bug extends EntityMP implements Serializable { @TableField(exist = false) private cn.ibizlab.pms.core.zentao.domain.Bug ztduplicatebug; - /** - * - */ - @JsonIgnore - @JSONField(serialize = false) - @TableField(exist = false) - private cn.ibizlab.pms.core.zentao.domain.Build ztresolvedbuild; - /** * */ @@ -786,6 +778,13 @@ public class Bug extends EntityMP implements Serializable { this.resolvedby = resolvedby ; this.modify("resolvedby",resolvedby); } + /** + * 设置 [解决版本] + */ + public void setResolvedbuild(String resolvedbuild){ + this.resolvedbuild = resolvedbuild ; + this.modify("resolvedbuild",resolvedbuild); + } /** * 设置 [优先级] */ @@ -926,13 +925,6 @@ public class Bug extends EntityMP implements Serializable { this.testtask = testtask ; this.modify("testtask",testtask); } - /** - * 设置 [解决版本] - */ - public void setResolvedbuild(BigInteger resolvedbuild){ - this.resolvedbuild = resolvedbuild ; - this.modify("resolvedbuild",resolvedbuild); - } } diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Build.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Build.java index 0435f3016548d101d194a7d9cb24ca3ab2cc4478..0499c43d3b8761b6bb197fe386a362beb514fe01 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Build.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Build.java @@ -63,7 +63,7 @@ public class Build extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Case.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Case.java index f817902c10739cabb4110f9e4f1645e4bcb37f4d..e88027e077151512bde71d52eb246f7852dda64c 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Case.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Case.java @@ -262,7 +262,7 @@ public class Case extends EntityMP implements Serializable { * 用例编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; @@ -344,6 +344,27 @@ public class Case extends EntityMP implements Serializable { @JSONField(name = "module") @JsonProperty("module") private BigInteger module; + /** + * 模块名称 + */ + @TableField(exist = false) + @JSONField(name = "modulename") + @JsonProperty("modulename") + private String modulename; + /** + * 需求名称 + */ + @TableField(exist = false) + @JSONField(name = "storyname") + @JsonProperty("storyname") + private String storyname; + /** + * 产品名称 + */ + @TableField(exist = false) + @JSONField(name = "productname") + @JsonProperty("productname") + private String productname; /** * diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/CaseStep.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/CaseStep.java index cd161852ea9e6cc897213826aabc10bb3e5a0e3f..07b227b986986ef3813f791564afaa5a01f7051e 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/CaseStep.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/CaseStep.java @@ -50,7 +50,7 @@ public class CaseStep extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Company.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Company.java index b1c7f8cf15b82ef0c85270c64b2e85b5dc21e0ab..6d5767cbe378eb0fbb18cc774cd4a5f151ef40a5 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Company.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Company.java @@ -46,7 +46,7 @@ public class Company extends EntityMP implements Serializable { @JsonProperty("admins") private String admins; /** - * fax + * 传真 */ @TableField(value = "fax") @JSONField(name = "fax") @@ -62,7 +62,7 @@ public class Company extends EntityMP implements Serializable { @JsonProperty("deleted") private String deleted; /** - * website + * 官网 */ @TableField(value = "website") @JSONField(name = "website") @@ -72,47 +72,47 @@ public class Company extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; /** - * zipcode + * 邮政编码 */ @TableField(value = "zipcode") @JSONField(name = "zipcode") @JsonProperty("zipcode") private String zipcode; /** - * address + * 通讯地址 */ @TableField(value = "address") @JSONField(name = "address") @JsonProperty("address") private String address; /** - * backyard + * 内网 */ @TableField(value = "backyard") @JSONField(name = "backyard") @JsonProperty("backyard") private String backyard; /** - * name + * 公司名称 */ @TableField(value = "name") @JSONField(name = "name") @JsonProperty("name") private String name; /** - * guest + * 匿名登陆 */ @TableField(value = "guest") @JSONField(name = "guest") @JsonProperty("guest") private String guest; /** - * phone + * 联系电话 */ @TableField(value = "phone") @JSONField(name = "phone") @@ -129,56 +129,56 @@ public class Company extends EntityMP implements Serializable { this.modify("admins",admins); } /** - * 设置 [fax] + * 设置 [传真] */ public void setFax(String fax){ this.fax = fax ; this.modify("fax",fax); } /** - * 设置 [website] + * 设置 [官网] */ public void setWebsite(String website){ this.website = website ; this.modify("website",website); } /** - * 设置 [zipcode] + * 设置 [邮政编码] */ public void setZipcode(String zipcode){ this.zipcode = zipcode ; this.modify("zipcode",zipcode); } /** - * 设置 [address] + * 设置 [通讯地址] */ public void setAddress(String address){ this.address = address ; this.modify("address",address); } /** - * 设置 [backyard] + * 设置 [内网] */ public void setBackyard(String backyard){ this.backyard = backyard ; this.modify("backyard",backyard); } /** - * 设置 [name] + * 设置 [公司名称] */ public void setName(String name){ this.name = name ; this.modify("name",name); } /** - * 设置 [guest] + * 设置 [匿名登陆] */ public void setGuest(String guest){ this.guest = guest ; this.modify("guest",guest); } /** - * 设置 [phone] + * 设置 [联系电话] */ public void setPhone(String phone){ this.phone = phone ; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Compile.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Compile.java index bae40d33d79439fb269d509d705e94c65673346e..f6775b3ca84692b6d3c26530c4494ec9b131d37a 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Compile.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Compile.java @@ -73,7 +73,7 @@ public class Compile extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Config.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Config.java index c0bc49dbcfe01d1f167f5b8d369193845d7dcc1e..ebc4b591eec3434bd5fde0e873c35ccfdc570a9b 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Config.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Config.java @@ -42,7 +42,7 @@ public class Config extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Cron.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Cron.java index 8728a947a39d559bd834dc94b39df345a8e6e5ac..b9709dec7fd608dfd9ea53d87b958c2c48ede82b 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Cron.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Cron.java @@ -42,7 +42,7 @@ public class Cron extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Dept.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Dept.java index 44353a337757ac783dd9d7953cc561ee19104d64..60b694c6a96d4a4f6cb527d083ace8af6a05dd34 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Dept.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Dept.java @@ -39,7 +39,7 @@ public class Dept extends EntityMP implements Serializable { private static final long serialVersionUID = 1L; /** - * manager + * 负责人 */ @TableField(value = "manager") @JSONField(name = "manager") @@ -86,19 +86,19 @@ public class Dept extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; /** - * name + * 部门名称 */ @TableField(value = "name") @JSONField(name = "name") @JsonProperty("name") private String name; /** - * parent + * 上级部门 */ @TableField(exist = false) @JSONField(name = "parentname") @@ -111,6 +111,13 @@ public class Dept extends EntityMP implements Serializable { @JSONField(name = "parent") @JsonProperty("parent") private BigInteger parent; + /** + * 无子部门 + */ + @TableField(exist = false) + @JSONField(name = "isleaf") + @JsonProperty("isleaf") + private String isleaf; /** * @@ -123,7 +130,7 @@ public class Dept extends EntityMP implements Serializable { /** - * 设置 [manager] + * 设置 [负责人] */ public void setManager(String manager){ this.manager = manager ; @@ -165,7 +172,7 @@ public class Dept extends EntityMP implements Serializable { this.modify("position",position); } /** - * 设置 [name] + * 设置 [部门名称] */ public void setName(String name){ this.name = name ; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Doc.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Doc.java index 0c950b5fe5c2309d7634f76932d1883437985bc5..0e5cbab270642efeda464d71158f6318db0ce8c5 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Doc.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Doc.java @@ -79,7 +79,7 @@ public class Doc extends EntityMP implements Serializable { * 文档编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/DocContent.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/DocContent.java index 85d709ac5b6ccffa64debf8b753227ffc60d3741..349ad292768e9c916cc7d53bc00b97c2c3e9556a 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/DocContent.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/DocContent.java @@ -49,7 +49,7 @@ public class DocContent extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/DocLib.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/DocLib.java index d6ab48131b2ad8484519bd4cd80edb543bdeaedc..a1b56d8070ab202746748a18e256125d9179e2d6 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/DocLib.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/DocLib.java @@ -80,7 +80,7 @@ public class DocLib extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Effort.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Effort.java index ef1ee926925ce6295f682fcaa7ccbbd3c6126322..e7a49b40ad8dccb42472a779dc5067ce51bc9f38 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Effort.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Effort.java @@ -109,7 +109,7 @@ public class Effort extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Entry.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Entry.java index 87c850dfa6a79ede06f82e8ce719397561431331..9c689f849a44f589cdfdae26a31bcaa4dd18606e 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Entry.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Entry.java @@ -58,7 +58,7 @@ public class Entry extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Extension.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Extension.java index dce4cc8526a2ae5450a6da01d0e4ef12b3ed8b8b..435fc00421b201a9791e835937010432a5f47298 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Extension.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Extension.java @@ -49,7 +49,7 @@ public class Extension extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/File.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/File.java index 6433bd9630c320a42d190d4fa26b83add0c62f17..476356f9d12fb36a9ac3bd2b16e6a02477b5c23a 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/File.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/File.java @@ -119,7 +119,7 @@ public class File extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Group.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Group.java index c73567dda7e0ade18aa01c4b9b1a3fbdfa71d862..1c154a8dc4e0645e36161bf2864f0c02f3a651ca 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Group.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Group.java @@ -46,22 +46,22 @@ public class Group extends EntityMP implements Serializable { @JsonProperty("acl") private String acl; /** - * desc + * 分组描述 */ @TableField(value = "desc") @JSONField(name = "desc") @JsonProperty("desc") private String desc; /** - * id + * ID */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; /** - * name + * 分组名称 */ @TableField(value = "name") @JSONField(name = "name") @@ -85,14 +85,14 @@ public class Group extends EntityMP implements Serializable { this.modify("acl",acl); } /** - * 设置 [desc] + * 设置 [分组描述] */ public void setDesc(String desc){ this.desc = desc ; this.modify("desc",desc); } /** - * 设置 [name] + * 设置 [分组名称] */ public void setName(String name){ this.name = name ; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/History.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/History.java index e0979ae0e24a810357a7d9f3ac3faeb970d25a2d..e51150d2ed811563b99247a5351500e64917df34 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/History.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/History.java @@ -71,7 +71,7 @@ public class History extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_chat.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_chat.java index 8704704f045919bfa4c1bfb47f291aa7f49cc8d0..a0c2da78348f17c0a6612cb0a6b896171eb29c7e 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_chat.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_chat.java @@ -98,7 +98,7 @@ public class Im_chat extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_chatuser.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_chatuser.java index cbc1c4187e2d0396877a49337a664d9f14371ae7..1c960197b0126e268689f2caf5eb1b29687c6304 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_chatuser.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_chatuser.java @@ -42,7 +42,7 @@ public class Im_chatuser extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_client.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_client.java index cc3392430be2172669319d1c9a6b0966427edc8f..632f246e673380cc4ef2d7c00a7f403bc2a432fd 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_client.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_client.java @@ -100,7 +100,7 @@ public class Im_client extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_conference.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_conference.java index 6afdd358d5820d2e8532019135292873d0414801..d00982665d0ba107caa21fbfe68ab7343bd4cfd3 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_conference.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_conference.java @@ -73,7 +73,7 @@ public class Im_conference extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_conferenceaction.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_conferenceaction.java index 04f40e6b0cf3e88faed212c3e62c5b178262ef56..99b47d95122815019df0c3d8e633bd91e848a100 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_conferenceaction.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_conferenceaction.java @@ -73,7 +73,7 @@ public class Im_conferenceaction extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_message.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_message.java index 96b9550d2d565d3c7289df523858993ca9e6ff26..3dac6c26073e9ae8e35290a8710e93bd5ffcdea5 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_message.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_message.java @@ -56,7 +56,7 @@ public class Im_message extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_queue.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_queue.java index 3b2758ac09ae11eeb5d94db47bffdc384cd0de61..7666f5f133974d81367fe12c7a510d7765cf0815 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_queue.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Im_queue.java @@ -72,7 +72,7 @@ public class Im_queue extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Jenkins.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Jenkins.java index 895819a1d247856389404cdbb78a1b0f1825fe36..355278cf7365f2651177a4a5102b1efaae925956 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Jenkins.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Jenkins.java @@ -116,7 +116,7 @@ public class Jenkins extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Job.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Job.java index 2dfbbd35390619e046887deb65f1db761ca6ef45..c9615b56acdf02b5a528d082dd99e28171e1b949 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Job.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Job.java @@ -159,7 +159,7 @@ public class Job extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Lang.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Lang.java index f2aef231a7dd0e4f9149d4c07b4e6e4d77ed3cb0..20890691b39916474cfa7a2d1ccf0f611235a99a 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Lang.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Lang.java @@ -49,7 +49,7 @@ public class Lang extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Log.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Log.java index 2491facaa1b5a23031e5380d6ba0046930a7ae20..4d551d5b127d168ed7224d12172588cd63ef63e6 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Log.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Log.java @@ -92,7 +92,7 @@ public class Log extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Module.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Module.java index 255bfc62d4bede759afca66365be07458478678c..9f85d723ab5b791d4c88420eede0716a5a06a680 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Module.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Module.java @@ -87,7 +87,7 @@ public class Module extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Notify.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Notify.java index ddef5a66d663230bb7d08738dcbd807b84775a84..b856cf6e67739794738c5ba0df7305ad5a0ce1ed 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Notify.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Notify.java @@ -71,7 +71,7 @@ public class Notify extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Product.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Product.java index 0ded8a559159eab8bb1fabd49867044ead4c9391..764bfcb47248254717707e1c6100a867dca12049 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Product.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Product.java @@ -64,7 +64,7 @@ public class Product extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; @@ -179,6 +179,34 @@ public class Product extends EntityMP implements Serializable { @JSONField(name = "line") @JsonProperty("line") private BigInteger line; + /** + * 未解决Bug数 + */ + @TableField(exist = false) + @JSONField(name = "activebugcnt") + @JsonProperty("activebugcnt") + private Integer activebugcnt; + /** + * 计划总数 + */ + @TableField(exist = false) + @JSONField(name = "productplancnt") + @JsonProperty("productplancnt") + private Integer productplancnt; + /** + * 发布总数 + */ + @TableField(exist = false) + @JSONField(name = "releasecnt") + @JsonProperty("releasecnt") + private Integer releasecnt; + /** + * 激活需求数 + */ + @TableField(exist = false) + @JSONField(name = "activestorycnt") + @JsonProperty("activestorycnt") + private Integer activestorycnt; /** * 产品线 diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/ProductPlan.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/ProductPlan.java index 389289d540d204aa015f73e3ce7299fef0a0f210..192db1138f6b8ae9abe078dfe046a1ddecf4c402 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/ProductPlan.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/ProductPlan.java @@ -49,7 +49,7 @@ public class ProductPlan extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Project.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Project.java index 158cd3b4561e2d9dac4cd4eb5f773566a3fa69cc..6b30eca2be7a51a0616362deb309997033328d98 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Project.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Project.java @@ -87,7 +87,7 @@ public class Project extends EntityMP implements Serializable { * 项目编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; @@ -276,6 +276,27 @@ public class Project extends EntityMP implements Serializable { @JSONField(name = "parent") @JsonProperty("parent") private BigInteger parent; + /** + * 任务总数 + */ + @TableField(exist = false) + @JSONField(name = "taskcnt") + @JsonProperty("taskcnt") + private Integer taskcnt; + /** + * Bug总数 + */ + @TableField(exist = false) + @JSONField(name = "bugcnt") + @JsonProperty("bugcnt") + private Integer bugcnt; + /** + * 需求总数 + */ + @TableField(exist = false) + @JSONField(name = "storycnt") + @JsonProperty("storycnt") + private Integer storycnt; /** * diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Relation.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Relation.java index 6f37e58abd8f171bd151988a9f63a9050e545361..f53a910ddaed454f6a6a1482ca48623dacf49041 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Relation.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Relation.java @@ -84,7 +84,7 @@ public class Relation extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Release.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Release.java index 8582d62c43fdaaf752dce52f151d0ab0a859669f..b49a2b33bba2e7349ed290414cb7b1c866e57f92 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Release.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Release.java @@ -57,7 +57,7 @@ public class Release extends EntityMP implements Serializable { * ID */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Repo.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Repo.java index 5453f653ef52202058b6adad1d88c857a0d9f1b7..eeebaf44aa1f4fd346dbfd712751fcd46ddc2f9f 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Repo.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Repo.java @@ -63,7 +63,7 @@ public class Repo extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/RepoFiles.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/RepoFiles.java index d088cfdb91a7fe20769e2fdd4bfe96e47fc0eeb5..8f42ce3669c2f03fbd7d053d6d86a660ebe0ca6c 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/RepoFiles.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/RepoFiles.java @@ -77,7 +77,7 @@ public class RepoFiles extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/RepoHistory.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/RepoHistory.java index 08cc866531bfa55a46f413a3ff014a56f4e16205..0e9eea20680a489086c05ad8a537ee836f3217f5 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/RepoHistory.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/RepoHistory.java @@ -85,7 +85,7 @@ public class RepoHistory extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Score.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Score.java index 54a5a9b5c5f0ac3a1716bb8aab212404f3d16b38..f065fecd27de564f7ceccfc1187d3e910067a61f 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Score.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Score.java @@ -87,7 +87,7 @@ public class Score extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Story.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Story.java index dc5b122f0f044611b428ae740ccbecbcaecd84a2..0bfd24f8e0f76ff2f4a089e4405723090a0d893e 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Story.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Story.java @@ -168,7 +168,7 @@ public class Story extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Task.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Task.java index 948c0257609242b63548a234bbbddd8187cecf53..7cefe5d518ba0da55559cb8e10156db293bd70bc 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Task.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Task.java @@ -72,7 +72,7 @@ public class Task extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TaskEstimate.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TaskEstimate.java index 21d8cac4282d05b822127d8666b27c6d22188c46..cfa58644fe5a6c1c07a9c805e34c96424af77632 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TaskEstimate.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TaskEstimate.java @@ -64,7 +64,7 @@ public class TaskEstimate extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Team.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Team.java index ba8c95dc4376cafc8ef7172082298ebb8e34e7cb..ed3795bfb3d7239c5ed6f7594e9ae3a240d6524d 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Team.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Team.java @@ -88,7 +88,7 @@ public class Team extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestReport.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestReport.java index 24dbaacfdf488e0c43f73223a8431adf319f7cfe..a9a41e5e1f647b7cd5951a752a06f25d15ba3e05 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestReport.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestReport.java @@ -145,7 +145,7 @@ public class TestReport extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestResult.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestResult.java index 87ce95484a33fbb486119134eb9fef621a933e4c..35ec9e5add163a1f21dd2bccd502448ab32028ca 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestResult.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestResult.java @@ -85,7 +85,7 @@ public class TestResult extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestRun.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestRun.java index e3cd2afbe448c70d3b1fdaf5f8d71b9ede2c0f86..8f52abfd2db61ae16d0a57c4b1d5a93fb17cd116 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestRun.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestRun.java @@ -78,7 +78,7 @@ public class TestRun extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestSuite.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestSuite.java index 3161c8ab3b8ce6f1d0080f6b749f3ec91e7be775..6da89fd2497f83159c25a137e3b39ff272a5172b 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestSuite.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestSuite.java @@ -58,7 +58,7 @@ public class TestSuite extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestTask.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestTask.java index 3eebca668253fdfeb933de57311cdafb743c586b..9cb06d50fd1bd1d892cfa0a0900edcc4c27d1dd6 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestTask.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/TestTask.java @@ -93,7 +93,7 @@ public class TestTask extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Todo.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Todo.java index 68261e3d384251dac654dfb50a10d7b72437641e..73608619afcf46ab0c6e1f1618b7737b6662440e 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Todo.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/Todo.java @@ -42,7 +42,7 @@ public class Todo extends EntityMP implements Serializable { * 编号 */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/User.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/User.java index 6d95c16353ae66443c38ac509630f329d96e479c..ab1cb4c2f808b65c30cf8a21a8b207fc0a50bb21 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/User.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/User.java @@ -39,28 +39,28 @@ public class User extends EntityMP implements Serializable { private static final long serialVersionUID = 1L; /** - * password + * 密码 */ @TableField(value = "password") @JSONField(name = "password") @JsonProperty("password") private String password; /** - * address + * 通讯地址 */ @TableField(value = "address") @JSONField(name = "address") @JsonProperty("address") private String address; /** - * weixin + * 微信 */ @TableField(value = "weixin") @JSONField(name = "weixin") @JsonProperty("weixin") private String weixin; /** - * dingding + * 钉钉 */ @TableField(value = "dingding") @JSONField(name = "dingding") @@ -89,7 +89,7 @@ public class User extends EntityMP implements Serializable { @JsonProperty("ranzhi") private String ranzhi; /** - * account + * 账户 */ @TableField(value = "account") @JSONField(name = "account") @@ -120,7 +120,7 @@ public class User extends EntityMP implements Serializable { @JsonProperty("scorelevel") private Integer scorelevel; /** - * realname + * 真实姓名 */ @TableField(value = "realname") @JSONField(name = "realname") @@ -134,7 +134,7 @@ public class User extends EntityMP implements Serializable { @JsonProperty("zipcode") private String zipcode; /** - * dept + * 所属部门 */ @DEField(defaultValue = "0") @TableField(value = "dept") @@ -149,7 +149,7 @@ public class User extends EntityMP implements Serializable { @JsonProperty("commiter") private String commiter; /** - * role + * 职位 */ @TableField(value = "role") @JSONField(name = "role") @@ -165,7 +165,7 @@ public class User extends EntityMP implements Serializable { @JsonProperty("deleted") private String deleted; /** - * last + * 最后登录 */ @DEField(defaultValue = "0") @TableField(value = "last") @@ -202,14 +202,14 @@ public class User extends EntityMP implements Serializable { @JsonProperty("score") private Integer score; /** - * gender + * 性别 */ @TableField(value = "gender") @JSONField(name = "gender") @JsonProperty("gender") private String gender; /** - * mobile + * 手机 */ @TableField(value = "mobile") @JSONField(name = "mobile") @@ -224,7 +224,7 @@ public class User extends EntityMP implements Serializable { @JsonProperty("clientlang") private String clientlang; /** - * visits + * 访问次数 */ @DEField(defaultValue = "0") @TableField(value = "visits") @@ -232,7 +232,7 @@ public class User extends EntityMP implements Serializable { @JsonProperty("visits") private Integer visits; /** - * join + * 入职日期 */ @DEField(defaultValue = "0000-00-00") @TableField(value = "join") @@ -241,7 +241,7 @@ public class User extends EntityMP implements Serializable { @JsonProperty("join") private Timestamp join; /** - * email + * 邮箱 */ @TableField(value = "email") @JSONField(name = "email") @@ -271,22 +271,22 @@ public class User extends EntityMP implements Serializable { @JsonProperty("nickname") private String nickname; /** - * phone + * 电话 */ @TableField(value = "phone") @JSONField(name = "phone") @JsonProperty("phone") private String phone; /** - * id + * ID */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; /** - * qq + * QQ */ @TableField(value = "qq") @JSONField(name = "qq") @@ -296,28 +296,28 @@ public class User extends EntityMP implements Serializable { /** - * 设置 [password] + * 设置 [密码] */ public void setPassword(String password){ this.password = password ; this.modify("password",password); } /** - * 设置 [address] + * 设置 [通讯地址] */ public void setAddress(String address){ this.address = address ; this.modify("address",address); } /** - * 设置 [weixin] + * 设置 [微信] */ public void setWeixin(String weixin){ this.weixin = weixin ; this.modify("weixin",weixin); } /** - * 设置 [dingding] + * 设置 [钉钉] */ public void setDingding(String dingding){ this.dingding = dingding ; @@ -345,7 +345,7 @@ public class User extends EntityMP implements Serializable { this.modify("ranzhi",ranzhi); } /** - * 设置 [account] + * 设置 [账户] */ public void setAccount(String account){ this.account = account ; @@ -373,7 +373,7 @@ public class User extends EntityMP implements Serializable { this.modify("scorelevel",scorelevel); } /** - * 设置 [realname] + * 设置 [真实姓名] */ public void setRealname(String realname){ this.realname = realname ; @@ -387,7 +387,7 @@ public class User extends EntityMP implements Serializable { this.modify("zipcode",zipcode); } /** - * 设置 [dept] + * 设置 [所属部门] */ public void setDept(Integer dept){ this.dept = dept ; @@ -401,14 +401,14 @@ public class User extends EntityMP implements Serializable { this.modify("commiter",commiter); } /** - * 设置 [role] + * 设置 [职位] */ public void setRole(String role){ this.role = role ; this.modify("role",role); } /** - * 设置 [last] + * 设置 [最后登录] */ public void setLast(Integer last){ this.last = last ; @@ -443,14 +443,14 @@ public class User extends EntityMP implements Serializable { this.modify("score",score); } /** - * 设置 [gender] + * 设置 [性别] */ public void setGender(String gender){ this.gender = gender ; this.modify("gender",gender); } /** - * 设置 [mobile] + * 设置 [手机] */ public void setMobile(String mobile){ this.mobile = mobile ; @@ -464,21 +464,21 @@ public class User extends EntityMP implements Serializable { this.modify("clientlang",clientlang); } /** - * 设置 [visits] + * 设置 [访问次数] */ public void setVisits(Integer visits){ this.visits = visits ; this.modify("visits",visits); } /** - * 设置 [join] + * 设置 [入职日期] */ public void setJoin(Timestamp join){ this.join = join ; this.modify("join",join); } /** - * 设置 [email] + * 设置 [邮箱] */ public void setEmail(String email){ this.email = email ; @@ -506,14 +506,14 @@ public class User extends EntityMP implements Serializable { this.modify("nickname",nickname); } /** - * 设置 [phone] + * 设置 [电话] */ public void setPhone(String phone){ this.phone = phone ; this.modify("phone",phone); } /** - * 设置 [qq] + * 设置 [QQ] */ public void setQq(String qq){ this.qq = qq ; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/UserContact.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/UserContact.java index 7925a59b4f9daded9dddd10f7260c110d2bd057e..24bf8a2a8b234aae4eded8216735d6fad08026fb 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/UserContact.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/UserContact.java @@ -56,7 +56,7 @@ public class UserContact extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/UserQuery.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/UserQuery.java index e0a682005c1c2a21e479a85e4cd942fb2f8fc120..3bd37f8e7f7910fb448762e657de052f8dd7c79c 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/UserQuery.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/UserQuery.java @@ -42,7 +42,7 @@ public class UserQuery extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/UserTpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/UserTpl.java index 0c812c91350de182b8fe24f63f369c33f12898dd..38896cfa7b5a49b04ad60791ac55056e12d123e2 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/UserTpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/UserTpl.java @@ -49,7 +49,7 @@ public class UserTpl extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/WebHook.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/WebHook.java index d361ed94e73ed327b20e03d0423ab14eb126d36e..1ebadcede7832f2356e952bc8e04ceb5e57af395 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/WebHook.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/domain/WebHook.java @@ -87,7 +87,7 @@ public class WebHook extends EntityMP implements Serializable { * id */ @DEField(isKeyField=true) - @TableId(value= "id",type=IdType.UUID) + @TableId(value= "id",type=IdType.AUTO) @JSONField(name = "id") @JsonProperty("id") private BigInteger id; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/BugSearchContext.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/BugSearchContext.java index 549d79baaf4bb0d2d06e8a4d6c7d0628aa0f5388..d4e0b67e4135823828a6c1a6925f6b61aa9d9ffc 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/BugSearchContext.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/BugSearchContext.java @@ -27,12 +27,63 @@ import cn.ibizlab.pms.core.zentao.domain.Bug; @Data public class BugSearchContext extends QueryWrapperContext { + private String n_assignedto_eq;//[指派给] + public void setN_assignedto_eq(String n_assignedto_eq) { + this.n_assignedto_eq = n_assignedto_eq; + if(!ObjectUtils.isEmpty(this.n_assignedto_eq)){ + this.getSelectCond().eq("assignedto", n_assignedto_eq); + } + } + private Integer n_confirmed_eq;//[是否确认] + public void setN_confirmed_eq(Integer n_confirmed_eq) { + this.n_confirmed_eq = n_confirmed_eq; + if(!ObjectUtils.isEmpty(this.n_confirmed_eq)){ + this.getSelectCond().eq("confirmed", n_confirmed_eq); + } + } + private String n_openedby_eq;//[由谁创建] + public void setN_openedby_eq(String n_openedby_eq) { + this.n_openedby_eq = n_openedby_eq; + if(!ObjectUtils.isEmpty(this.n_openedby_eq)){ + this.getSelectCond().eq("openedby", n_openedby_eq); + } + } + @JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8") + @JSONField(format="yyyy-MM-dd") + private Timestamp n_deadline_lt;//[截止日期] + public void setN_deadline_lt(Timestamp n_deadline_lt) { + this.n_deadline_lt = n_deadline_lt; + if(!ObjectUtils.isEmpty(this.n_deadline_lt)){ + this.getSelectCond().lt("deadline", n_deadline_lt); + } + } private String n_status_eq;//[Bug状态] public void setN_status_eq(String n_status_eq) { this.n_status_eq = n_status_eq; if(!ObjectUtils.isEmpty(this.n_status_eq)){ this.getSelectCond().eq("status", n_status_eq); } + } + private String n_status_noteq;//[Bug状态] + public void setN_status_noteq(String n_status_noteq) { + this.n_status_noteq = n_status_noteq; + if(!ObjectUtils.isEmpty(this.n_status_noteq)){ + this.getSelectCond().ne("status", n_status_noteq); + } + } + private String n_resolvedby_eq;//[解决者] + public void setN_resolvedby_eq(String n_resolvedby_eq) { + this.n_resolvedby_eq = n_resolvedby_eq; + if(!ObjectUtils.isEmpty(this.n_resolvedby_eq)){ + this.getSelectCond().eq("resolvedby", n_resolvedby_eq); + } + } + private String n_resolvedbuild_eq;//[解决版本] + public void setN_resolvedbuild_eq(String n_resolvedbuild_eq) { + this.n_resolvedbuild_eq = n_resolvedbuild_eq; + if(!ObjectUtils.isEmpty(this.n_resolvedbuild_eq)){ + this.getSelectCond().eq("resolvedbuild", n_resolvedbuild_eq); + } } private String n_title_like;//[Bug标题] public void setN_title_like(String n_title_like) { @@ -167,13 +218,6 @@ public class BugSearchContext extends QueryWrapperContext { this.getSelectCond().eq("testtask", n_testtask_eq); } } - private BigInteger n_resolvedbuild_eq;//[解决版本] - public void setN_resolvedbuild_eq(BigInteger n_resolvedbuild_eq) { - this.n_resolvedbuild_eq = n_resolvedbuild_eq; - if(!ObjectUtils.isEmpty(this.n_resolvedbuild_eq)){ - this.getSelectCond().eq("resolvedbuild", n_resolvedbuild_eq); - } - } /** * 启用快速搜索 diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/CaseSearchContext.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/CaseSearchContext.java index 8c273d8a02352d55ca6b22817d210acbdd7d0982..ffcea1f6f17bf5723cba8ab0d2f3c8b454c05803 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/CaseSearchContext.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/CaseSearchContext.java @@ -90,6 +90,20 @@ public class CaseSearchContext extends QueryWrapperContext { this.getSelectCond().eq("module", n_module_eq); } } + private String n_productname_eq;//[产品名称] + public void setN_productname_eq(String n_productname_eq) { + this.n_productname_eq = n_productname_eq; + if(!ObjectUtils.isEmpty(this.n_productname_eq)){ + this.getSelectCond().eq("productname", n_productname_eq); + } + } + private String n_productname_like;//[产品名称] + public void setN_productname_like(String n_productname_like) { + this.n_productname_like = n_productname_like; + if(!ObjectUtils.isEmpty(this.n_productname_like)){ + this.getSelectCond().like("productname", n_productname_like); + } + } /** * 启用快速搜索 diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/CompanySearchContext.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/CompanySearchContext.java index a6ae1c789aa2e596a6d6f25e866ac13623ef037e..9c4f3540922cbdaf7941585365341546000d6dd7 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/CompanySearchContext.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/CompanySearchContext.java @@ -27,14 +27,14 @@ import cn.ibizlab.pms.core.zentao.domain.Company; @Data public class CompanySearchContext extends QueryWrapperContext { - private String n_name_like;//[name] + private String n_name_like;//[公司名称] public void setN_name_like(String n_name_like) { this.n_name_like = n_name_like; if(!ObjectUtils.isEmpty(this.n_name_like)){ this.getSelectCond().like("name", n_name_like); } } - private String n_guest_eq;//[guest] + private String n_guest_eq;//[匿名登陆] public void setN_guest_eq(String n_guest_eq) { this.n_guest_eq = n_guest_eq; if(!ObjectUtils.isEmpty(this.n_guest_eq)){ diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/DeptSearchContext.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/DeptSearchContext.java index 65acc55b2eb520538540ddf11be10b2ca33a8bfd..c27e95c766065ae9ddb6ff9e4e4fe416f27156e1 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/DeptSearchContext.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/DeptSearchContext.java @@ -27,21 +27,21 @@ import cn.ibizlab.pms.core.zentao.domain.Dept; @Data public class DeptSearchContext extends QueryWrapperContext { - private String n_name_like;//[name] + private String n_name_like;//[部门名称] public void setN_name_like(String n_name_like) { this.n_name_like = n_name_like; if(!ObjectUtils.isEmpty(this.n_name_like)){ this.getSelectCond().like("name", n_name_like); } } - private String n_parentname_eq;//[parent] + private String n_parentname_eq;//[上级部门] public void setN_parentname_eq(String n_parentname_eq) { this.n_parentname_eq = n_parentname_eq; if(!ObjectUtils.isEmpty(this.n_parentname_eq)){ this.getSelectCond().eq("parentname", n_parentname_eq); } } - private String n_parentname_like;//[parent] + private String n_parentname_like;//[上级部门] public void setN_parentname_like(String n_parentname_like) { this.n_parentname_like = n_parentname_like; if(!ObjectUtils.isEmpty(this.n_parentname_like)){ diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/GroupSearchContext.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/GroupSearchContext.java index 643bec90d690626807820b127d668e5f0bcd692b..71e7a083ae9a718783dcc6129845bd4552097e05 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/GroupSearchContext.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/GroupSearchContext.java @@ -27,7 +27,7 @@ import cn.ibizlab.pms.core.zentao.domain.Group; @Data public class GroupSearchContext extends QueryWrapperContext { - private String n_name_like;//[name] + private String n_name_like;//[分组名称] public void setN_name_like(String n_name_like) { this.n_name_like = n_name_like; if(!ObjectUtils.isEmpty(this.n_name_like)){ diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/TaskSearchContext.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/TaskSearchContext.java index 9b06b03323707d11bf31bb014dead4bcf2e832ff..27f09190028ad3d5c644d47c462bf67a5a081145 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/TaskSearchContext.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/TaskSearchContext.java @@ -27,12 +27,26 @@ import cn.ibizlab.pms.core.zentao.domain.Task; @Data public class TaskSearchContext extends QueryWrapperContext { + private String n_finishedby_eq;//[由谁完成] + public void setN_finishedby_eq(String n_finishedby_eq) { + this.n_finishedby_eq = n_finishedby_eq; + if(!ObjectUtils.isEmpty(this.n_finishedby_eq)){ + this.getSelectCond().eq("finishedby", n_finishedby_eq); + } + } private String n_status_eq;//[任务状态] public void setN_status_eq(String n_status_eq) { this.n_status_eq = n_status_eq; if(!ObjectUtils.isEmpty(this.n_status_eq)){ this.getSelectCond().eq("status", n_status_eq); } + } + private String n_status_noteq;//[任务状态] + public void setN_status_noteq(String n_status_noteq) { + this.n_status_noteq = n_status_noteq; + if(!ObjectUtils.isEmpty(this.n_status_noteq)){ + this.getSelectCond().ne("status", n_status_noteq); + } } private String n_name_like;//[任务名称] public void setN_name_like(String n_name_like) { @@ -47,6 +61,13 @@ public class TaskSearchContext extends QueryWrapperContext { if(!ObjectUtils.isEmpty(this.n_type_eq)){ this.getSelectCond().eq("type", n_type_eq); } + } + private String n_assignedto_eq;//[指派给] + public void setN_assignedto_eq(String n_assignedto_eq) { + this.n_assignedto_eq = n_assignedto_eq; + if(!ObjectUtils.isEmpty(this.n_assignedto_eq)){ + this.getSelectCond().eq("assignedto", n_assignedto_eq); + } } private String n_modulename_eq;//[所属模块] public void setN_modulename_eq(String n_modulename_eq) { diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/UserSearchContext.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/UserSearchContext.java index f07cbda72702e6c315e62d37696dfdbf8bb07108..802dfa7a0e08869cb88dd1500582352564bbae85 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/UserSearchContext.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/filter/UserSearchContext.java @@ -27,6 +27,13 @@ import cn.ibizlab.pms.core.zentao.domain.User; @Data public class UserSearchContext extends QueryWrapperContext { + private Integer n_dept_eq;//[所属部门] + public void setN_dept_eq(Integer n_dept_eq) { + this.n_dept_eq = n_dept_eq; + if(!ObjectUtils.isEmpty(this.n_dept_eq)){ + this.getSelectCond().eq("dept", n_dept_eq); + } + } private String n_clientstatus_eq;//[clientStatus] public void setN_clientstatus_eq(String n_clientstatus_eq) { this.n_clientstatus_eq = n_clientstatus_eq; @@ -34,7 +41,7 @@ public class UserSearchContext extends QueryWrapperContext { this.getSelectCond().eq("clientstatus", n_clientstatus_eq); } } - private String n_gender_eq;//[gender] + private String n_gender_eq;//[性别] public void setN_gender_eq(String n_gender_eq) { this.n_gender_eq = n_gender_eq; if(!ObjectUtils.isEmpty(this.n_gender_eq)){ @@ -49,6 +56,9 @@ public class UserSearchContext extends QueryWrapperContext { { this.query=query; if(!StringUtils.isEmpty(query)){ + this.getSelectCond().and( wrapper -> + wrapper.like("realname", query) + ); } } } diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/mapper/BugMapper.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/mapper/BugMapper.java index f110bc0b85bf416bba41e651e04a467411f901ae..418fa523cf7b3dbba921f6c1e41129bf25329a9c 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/mapper/BugMapper.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/mapper/BugMapper.java @@ -66,8 +66,6 @@ public interface BugMapper extends BaseMapper{ List selectByDuplicatebug(@Param("id") Serializable id) ; - List selectByResolvedbuild(@Param("id") Serializable id) ; - List selectByIbizcase(@Param("id") Serializable id) ; List selectByEntry(@Param("id") Serializable id) ; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/mapper/DeptMapper.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/mapper/DeptMapper.java index e7f00c2992004348169f02c4a6cb9efb9b38deb5..25894e8c901b6a8bc97da0d7aac34df39f502240 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/mapper/DeptMapper.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/mapper/DeptMapper.java @@ -20,6 +20,7 @@ import com.alibaba.fastjson.JSONObject; public interface DeptMapper extends BaseMapper{ Page searchDefault(IPage page, @Param("srf") DeptSearchContext context, @Param("ew") Wrapper wrapper) ; + Page searchRoot(IPage page, @Param("srf") DeptSearchContext context, @Param("ew") Wrapper wrapper) ; @Override Dept selectById(Serializable id); @Override diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IBugService.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IBugService.java index 977bfc41ad2749b4bb2495bc847d01612e9cb69f..f1fd72ea75d1b4b02f03d462aa07c54cd2ff5e9b 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IBugService.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IBugService.java @@ -41,8 +41,6 @@ public interface IBugService extends IService{ void removeByBranch(BigInteger id) ; List selectByDuplicatebug(BigInteger id) ; void removeByDuplicatebug(BigInteger id) ; - List selectByResolvedbuild(BigInteger id) ; - void removeByResolvedbuild(BigInteger id) ; List selectByIbizcase(BigInteger id) ; void removeByIbizcase(BigInteger id) ; List selectByEntry(BigInteger id) ; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IBurnService.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IBurnService.java index 2389cd9a0008faea85772e4ca08a836de97b690a..1603993d5ab13456558ae21928284736cf89307c 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IBurnService.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IBurnService.java @@ -35,6 +35,7 @@ public interface IBurnService extends IService{ void saveBatch(List list) ; boolean update(Burn et) ; void updateBatch(List list) ; + Burn computeBurn(Burn et) ; Burn getDraft(Burn et) ; Page searchDefault(BurnSearchContext context) ; List selectByProject(BigInteger id) ; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IDeptService.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IDeptService.java index 4cc32566d27383869d00ee18bbb1f7eb6d1be77e..031751644eac2812fd2085fcb08bbf18490579dd 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IDeptService.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IDeptService.java @@ -37,6 +37,7 @@ public interface IDeptService extends IService{ Dept get(BigInteger key) ; boolean checkKey(Dept et) ; Page searchDefault(DeptSearchContext context) ; + Page searchRoot(DeptSearchContext context) ; List selectByParent(BigInteger id) ; void removeByParent(BigInteger id) ; /** diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IProductService.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IProductService.java index 52b610a46efa4f619138bab298af30975d759e05..10379c5f240430e84298fbb73c8639b7513672ee 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IProductService.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IProductService.java @@ -32,6 +32,7 @@ public interface IProductService extends IService{ Product getDraft(Product et) ; boolean update(Product et) ; void updateBatch(List list) ; + Product close(Product et) ; boolean remove(BigInteger key) ; void removeBatch(Collection idList) ; boolean create(Product et) ; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IStoryService.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IStoryService.java index 161b40342b00631c2c802a83f49f40bc5dcce97c..ae08d5609eaa4628098925355c858ae577b3c3ce 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IStoryService.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/IStoryService.java @@ -28,14 +28,25 @@ public interface IStoryService extends IService{ Story getDraft(Story et) ; boolean create(Story et) ; void createBatch(List list) ; + Story batchChangeStage(Story et) ; + Story batchChangePlan(Story et) ; + Story batchClose(Story et) ; + Story change(Story et) ; boolean checkKey(Story et) ; boolean remove(BigInteger key) ; void removeBatch(Collection idList) ; boolean update(Story et) ; void updateBatch(List list) ; + Story batchChangeBranch(Story et) ; + Story batchReview(Story et) ; + Story review(Story et) ; + Story assignTo(Story et) ; + Story batchAssignTo(Story et) ; Story get(BigInteger key) ; boolean save(Story et) ; void saveBatch(List list) ; + Story batchChangeModule(Story et) ; + Story close(Story et) ; Page searchDefault(StorySearchContext context) ; List selectByModule(BigInteger id) ; void removeByModule(BigInteger id) ; diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ActionServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ActionServiceImpl.java index d678f28067861cbeb3cfe81b6c2fc3eb0a20ad91..0ef50d9bf2facfa703c1428755ab0a0587596b19 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ActionServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ActionServiceImpl.java @@ -198,6 +198,7 @@ public class ActionServiceImpl extends ServiceImpl impleme + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BlockServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BlockServiceImpl.java index e03dbadf5b736487b058f8559a85d96ada15f3d4..48033222cd50254dcf3df05d8dbe0104dc8be874 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BlockServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BlockServiceImpl.java @@ -155,6 +155,7 @@ public class BlockServiceImpl extends ServiceImpl implements + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BranchServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BranchServiceImpl.java index 2c138f410353b69f9c5f5b604810a04c71c4ccfb..78df4e04992cd8216bc4790ffbbc562aac79a76b 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BranchServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BranchServiceImpl.java @@ -195,6 +195,7 @@ public class BranchServiceImpl extends ServiceImpl impleme + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BugServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BugServiceImpl.java index 068158dbc1df8375d8b069a0601b747300234699..eabebfc9fd6202873b08f4ecb12d0335c6c49659 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BugServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BugServiceImpl.java @@ -60,9 +60,6 @@ public class BugServiceImpl extends ServiceImpl implements IBugS private cn.ibizlab.pms.core.zentao.service.IBranchService branchService; @Autowired @Lazy - private cn.ibizlab.pms.core.zentao.service.IBuildService buildService; - @Autowired - @Lazy private cn.ibizlab.pms.core.zentao.service.IEntryService entryService; @Autowired @Lazy @@ -200,16 +197,6 @@ public class BugServiceImpl extends ServiceImpl implements IBugS this.remove(new QueryWrapper().eq("duplicatebug",id)); } - @Override - public List selectByResolvedbuild(BigInteger id) { - return baseMapper.selectByResolvedbuild(id); - } - - @Override - public void removeByResolvedbuild(BigInteger id) { - this.remove(new QueryWrapper().eq("resolvedbuild",id)); - } - @Override public List selectByIbizcase(BigInteger id) { return baseMapper.selectByIbizcase(id); @@ -343,6 +330,7 @@ public class BugServiceImpl extends ServiceImpl implements IBugS + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BuildServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BuildServiceImpl.java index 25299b4674eaa759eb2ca116cfb35efd8c15d689..232f53a6e94f75e4a7682a1aeae5c481f29f478a 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BuildServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BuildServiceImpl.java @@ -44,9 +44,6 @@ import org.springframework.util.StringUtils; @Service("BuildServiceImpl") public class BuildServiceImpl extends ServiceImpl implements IBuildService { - @Autowired - @Lazy - private cn.ibizlab.pms.core.zentao.service.IBugService bugService; @Autowired @Lazy private cn.ibizlab.pms.core.zentao.service.IReleaseService releaseService; @@ -203,6 +200,7 @@ public class BuildServiceImpl extends ServiceImpl implements + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BurnServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BurnServiceImpl.java index 0cfacafde9dc98b7bdd7ed4796812582a8d3ad28..8374b118f659d7369e1e4d280652fc8421792987 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BurnServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/BurnServiceImpl.java @@ -142,6 +142,13 @@ public class BurnServiceImpl extends ServiceImpl implements IB updateBatchById(list,batchSize); } + @Override + @Transactional + public Burn computeBurn(Burn et) { + //自定义代码 + return et; + } + @Override public Burn getDraft(Burn et) { return et; @@ -181,6 +188,7 @@ public class BurnServiceImpl extends ServiceImpl implements IB + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CaseServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CaseServiceImpl.java index ce9c964f33706e24d9cf84760fe0f772a88963cb..a89df4551b7b970a160290798374264245cb4306 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CaseServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CaseServiceImpl.java @@ -257,6 +257,7 @@ public class CaseServiceImpl extends ServiceImpl implements IC + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CaseStepServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CaseStepServiceImpl.java index c07442a4967f40b0dbe64c48b6c7412c8f868feb..81f43715b2e41c2f0b2395729c010fc180454e27 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CaseStepServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CaseStepServiceImpl.java @@ -203,6 +203,7 @@ public class CaseStepServiceImpl extends ServiceImpl i } } + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CompanyServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CompanyServiceImpl.java index 1f28975f3fc64bdd1f6067b3b2628687ef8ea60e..c2ec2f4637dd227b94bbca8584d28057c3a6c61e 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CompanyServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CompanyServiceImpl.java @@ -155,6 +155,7 @@ public class CompanyServiceImpl extends ServiceImpl impl + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CompileServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CompileServiceImpl.java index ae60f942ec3e96729b9b95a4c19a4e31d7159e58..4825d3592efc852701bf483b0126d272e9fcb0bc 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CompileServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CompileServiceImpl.java @@ -158,6 +158,7 @@ public class CompileServiceImpl extends ServiceImpl impl + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ConfigServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ConfigServiceImpl.java index e2bb4703e9d111b55cd73a1055944e38c9d6cf67..c4c81ed42a6ee08a098abb97a11a1d9a030b13e6 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ConfigServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ConfigServiceImpl.java @@ -155,6 +155,7 @@ public class ConfigServiceImpl extends ServiceImpl impleme + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CronServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CronServiceImpl.java index 59d9efee7c6a9c61dbb3856cdcbb3dd4ce109ae3..c7ecad0113c63a12d39269d7dbd1bfb9ab32ba57 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CronServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/CronServiceImpl.java @@ -155,6 +155,7 @@ public class CronServiceImpl extends ServiceImpl implements IC + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DeptServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DeptServiceImpl.java index b5e06258debac38aaef2676b9a78bd65c52805a1..9a8fd71439e884f70f732bc2ecf0831113071ce9 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DeptServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DeptServiceImpl.java @@ -171,6 +171,15 @@ public class DeptServiceImpl extends ServiceImpl implements ID return new PageImpl(pages.getRecords(), context.getPageable(), pages.getTotal()); } + /** + * 查询集合 根部门 + */ + @Override + public Page searchRoot(DeptSearchContext context) { + com.baomidou.mybatisplus.extension.plugins.pagination.Page pages=baseMapper.searchRoot(context.getPages(),context,context.getSelectCond()); + return new PageImpl(pages.getRecords(), context.getPageable(), pages.getTotal()); + } + /** @@ -190,6 +199,7 @@ public class DeptServiceImpl extends ServiceImpl implements ID } } + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DocContentServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DocContentServiceImpl.java index 25c643899f7ce14b4263dd370341360afac8986f..d4a42e5540a33f41d37e35a4ecd12ada0e780cc7 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DocContentServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DocContentServiceImpl.java @@ -191,6 +191,7 @@ public class DocContentServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DocLibServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DocLibServiceImpl.java index 8c81e2a978228c044844f8213fb2c57fc09a66a4..9daf6362f2b0704f71a1221d0dd893720e0d1f8e 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DocLibServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DocLibServiceImpl.java @@ -184,6 +184,7 @@ public class DocLibServiceImpl extends ServiceImpl impleme + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DocServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DocServiceImpl.java index 088439672b0a0869123d4ae73f590cfa7d1ccb97..25942f54290637fd2d18864ecd1c56595ee28f15 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DocServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/DocServiceImpl.java @@ -210,6 +210,7 @@ public class DocServiceImpl extends ServiceImpl implements IDocS + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/EffortServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/EffortServiceImpl.java index 0a44de1160498c607dd765b8f49f5455545e64b2..02346c24fe3ebe454e7b9c72a977913ff7498b1b 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/EffortServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/EffortServiceImpl.java @@ -155,6 +155,7 @@ public class EffortServiceImpl extends ServiceImpl impleme + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/EntryServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/EntryServiceImpl.java index c1a9986ed775d22036c797004efe86640b39927f..2634b654128fd259f4609b6b98b6f32af8e4ea4d 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/EntryServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/EntryServiceImpl.java @@ -158,6 +158,7 @@ public class EntryServiceImpl extends ServiceImpl implements + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ExtensionServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ExtensionServiceImpl.java index ad0ef1d3603031a457018bf88d37705a223b0968..3a64afb7c11a36f5c664764d4dc306bbccebde29 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ExtensionServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ExtensionServiceImpl.java @@ -155,6 +155,7 @@ public class ExtensionServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/FileServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/FileServiceImpl.java index 5b455dd926de0d7ef63c830cf063a1aeec5512f1..41a9ec3d4ad5eb3243e24e89dbc265586633c6f2 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/FileServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/FileServiceImpl.java @@ -155,6 +155,7 @@ public class FileServiceImpl extends ServiceImpl implements IF + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/GroupPrivServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/GroupPrivServiceImpl.java index 48f6854f60ac43010521e463ca8d5265af624758..5db4c698a2f71cf46fd407b5eff06bf8a480b71a 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/GroupPrivServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/GroupPrivServiceImpl.java @@ -155,6 +155,7 @@ public class GroupPrivServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/GroupServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/GroupServiceImpl.java index 08caa82fff521874b0c5140b275bc7f29eed6536..3742ee10231b8f6905c26ba247b29cff1e2b5fc5 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/GroupServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/GroupServiceImpl.java @@ -155,6 +155,7 @@ public class GroupServiceImpl extends ServiceImpl implements + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/HistoryServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/HistoryServiceImpl.java index 4977cfd734d5f425e4405b375f5495088e2eeb95..ae940ce6f19d86612f5b357275fadf9a4a2c8e60 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/HistoryServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/HistoryServiceImpl.java @@ -168,6 +168,7 @@ public class HistoryServiceImpl extends ServiceImpl impl + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_chatServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_chatServiceImpl.java index 9500787060a1c035668209dae6c7293af290b71f..7e757e1d9212605e0b29c957f3d9b22da25f8cb6 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_chatServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_chatServiceImpl.java @@ -155,6 +155,7 @@ public class Im_chatServiceImpl extends ServiceImpl impl + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_chatuserServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_chatuserServiceImpl.java index 255fff8ef2766bb13bab3750f9eff63d0305aafa..c3015707c81d8db370a91989bc78eeb65b85ca9d 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_chatuserServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_chatuserServiceImpl.java @@ -155,6 +155,7 @@ public class Im_chatuserServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_clientServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_clientServiceImpl.java index feec5dc18bc1af1b2c9ff70fa16268311b2b26d8..34b8d85d33a4b2533a36686242349e56c69d2fb4 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_clientServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_clientServiceImpl.java @@ -155,6 +155,7 @@ public class Im_clientServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_conferenceServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_conferenceServiceImpl.java index 30b54bd0269b7da088516d5d9f433e3a0706764a..b679b0f42aed482374b6607e42ba7a6abdfd5a3c 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_conferenceServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_conferenceServiceImpl.java @@ -155,6 +155,7 @@ public class Im_conferenceServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_conferenceactionServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_conferenceactionServiceImpl.java index 7f3435eb94f0f3b064e7ada3b9556616f9e34d65..45ffad7dd16b26a498fd791c6dcebe1b9876788f 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_conferenceactionServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_conferenceactionServiceImpl.java @@ -155,6 +155,7 @@ public class Im_conferenceactionServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_messageServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_messageServiceImpl.java index 2007e83c9bee82e8deca80f67b54fe00d4a2e6e2..ee7d6b97deb7578764f269c6e5572b46eeba2fa4 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_messageServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_messageServiceImpl.java @@ -155,6 +155,7 @@ public class Im_messageServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_messagestatusServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_messagestatusServiceImpl.java index 690a84325ce8bb11d9ca6a5b80100a910768847b..3e5f6c428ae4a9784ce023151c5b2ab7857fe508 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_messagestatusServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_messagestatusServiceImpl.java @@ -155,6 +155,7 @@ public class Im_messagestatusServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_queueServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_queueServiceImpl.java index b44b176102f9ab1f3eec2da3db0824791fe56db6..13c4e45915d8e6770ba1c3f5babd2ade71f64e6f 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_queueServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/Im_queueServiceImpl.java @@ -155,6 +155,7 @@ public class Im_queueServiceImpl extends ServiceImpl i + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/JenkinsServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/JenkinsServiceImpl.java index 0a40089c61d2cc1695bd16cd133d22df584092c3..c9b58bb8022bfb76ef29dd90cf6458fe03d50859 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/JenkinsServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/JenkinsServiceImpl.java @@ -155,6 +155,7 @@ public class JenkinsServiceImpl extends ServiceImpl impl + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/JobServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/JobServiceImpl.java index 326400ba795825bce2ada7aa2545a84973177c8a..4b6bc2163dded22ee32e7fd527001ccf2570c4d8 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/JobServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/JobServiceImpl.java @@ -158,6 +158,7 @@ public class JobServiceImpl extends ServiceImpl implements IJobS + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/LangServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/LangServiceImpl.java index a1430ea2f27810e6726d49d002ab80894149471f..60b1ae484cb210dbe0fb1dcf411833927284d98e 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/LangServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/LangServiceImpl.java @@ -155,6 +155,7 @@ public class LangServiceImpl extends ServiceImpl implements IL + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/LogServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/LogServiceImpl.java index c4aed05090ce6b6369ff24b8b31c3800acc6a301..c1f0e5f8885a7dfc4d8d6a6c3bb30cb0b867f082 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/LogServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/LogServiceImpl.java @@ -155,6 +155,7 @@ public class LogServiceImpl extends ServiceImpl implements ILogS + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ModuleServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ModuleServiceImpl.java index ef2416e79da549f25f04a356c2ea85ff50ec350f..664c7597cfec7b0eef734b603c9ac56ef9818678 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ModuleServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ModuleServiceImpl.java @@ -222,6 +222,7 @@ public class ModuleServiceImpl extends ServiceImpl impleme + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/NotifyServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/NotifyServiceImpl.java index 412a17f48b876be0bb39db9b7ec7b2e4ab3de6f7..ceffd96597c6b810be18b725fa7bde9cccdde37a 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/NotifyServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/NotifyServiceImpl.java @@ -155,6 +155,7 @@ public class NotifyServiceImpl extends ServiceImpl impleme + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProductPlanServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProductPlanServiceImpl.java index bb9d08d01f07f5c08951fdd9ff88303ce7cced2b..2ef5ea41dfd32f8506cc324f3c9f204ec40a240e 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProductPlanServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProductPlanServiceImpl.java @@ -95,17 +95,19 @@ public class ProductPlanServiceImpl extends ServiceImpl list) { - this.saveBatch(list,batchSize); - } + } @Override @Transactional public boolean remove(BigInteger key) { @@ -131,17 +133,19 @@ public class ProductPlanServiceImpl extends ServiceImpl list) { - updateBatchById(list,batchSize); - } + } @Override @Transactional public ProductPlan get(BigInteger key) { @@ -208,6 +212,7 @@ public class ProductPlanServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProductServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProductServiceImpl.java index b5e5afaf9de6633e917f4f3275fd01f8c895b79a..a23ae739f99554f242b7f393bf1d69d1e07db79f 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProductServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProductServiceImpl.java @@ -158,8 +158,9 @@ public class ProductServiceImpl extends ServiceImpl impl @Override @Transactional public boolean update(Product et) { + cn.ibizlab.pms.util.security.AuthenticationUser user = cn.ibizlab.pms.util.security.AuthenticationUser.getAuthenticationUser(); cn.ibizlab.pms.core.util.zentao.bean.ZTResult rst = new cn.ibizlab.pms.core.util.zentao.bean.ZTResult(); - boolean bRst = cn.ibizlab.pms.core.util.zentao.helper.ZTProductHelper.edit((JSONObject) JSONObject.toJSON(et), rst); + boolean bRst = cn.ibizlab.pms.core.util.zentao.helper.ZTProductHelper.edit((String)user.getSessionParams().get("zentaosid"), (JSONObject) JSONObject.toJSON(et), rst); if (bRst && rst.getEtId() != null) { et = this.get(rst.getEtId()); } @@ -170,6 +171,18 @@ public class ProductServiceImpl extends ServiceImpl impl public void updateBatch(List list) { } + @Override + @Transactional + public Product close(Product et) { + cn.ibizlab.pms.util.security.AuthenticationUser user = cn.ibizlab.pms.util.security.AuthenticationUser.getAuthenticationUser(); + cn.ibizlab.pms.core.util.zentao.bean.ZTResult rst = new cn.ibizlab.pms.core.util.zentao.bean.ZTResult(); + boolean bRst = cn.ibizlab.pms.core.util.zentao.helper.ZTProductHelper.close((String)user.getSessionParams().get("zentaosid"), (JSONObject) JSONObject.toJSON(et), rst); + if (bRst && rst.getEtId() != null) { + et = this.get(rst.getEtId()); + } + return et; + } + @Override @Transactional public boolean remove(BigInteger key) { @@ -185,8 +198,9 @@ public class ProductServiceImpl extends ServiceImpl impl @Override @Transactional public boolean create(Product et) { + cn.ibizlab.pms.util.security.AuthenticationUser user = cn.ibizlab.pms.util.security.AuthenticationUser.getAuthenticationUser(); cn.ibizlab.pms.core.util.zentao.bean.ZTResult rst = new cn.ibizlab.pms.core.util.zentao.bean.ZTResult(); - boolean bRst = cn.ibizlab.pms.core.util.zentao.helper.ZTProductHelper.create((JSONObject) JSONObject.toJSON(et), rst); + boolean bRst = cn.ibizlab.pms.core.util.zentao.helper.ZTProductHelper.create((String)user.getSessionParams().get("zentaosid"), (JSONObject) JSONObject.toJSON(et), rst); if (bRst && rst.getEtId() != null) { et = this.get(rst.getEtId()); } @@ -246,6 +260,7 @@ public class ProductServiceImpl extends ServiceImpl impl } } + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProjectProductServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProjectProductServiceImpl.java index e8b5b62938d756b273e9e7c0b2e518231bebebf6..db8144b935c2ba8d48ac95feafbb32368314ecd4 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProjectProductServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProjectProductServiceImpl.java @@ -216,6 +216,7 @@ public class ProjectProductServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProjectServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProjectServiceImpl.java index 86c9d422e49d41bc02471637202e3520754b2abc..7642036476a6d2a924118833523ea6b3cfa4ee2c 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProjectServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProjectServiceImpl.java @@ -232,6 +232,7 @@ public class ProjectServiceImpl extends ServiceImpl impl } } + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProjectStoryServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProjectStoryServiceImpl.java index 18fee6768684c416e01d48f7c3be7484d528d291..e4fdf82b5a83b9d51c5714938fefa627b7e2b97a 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProjectStoryServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ProjectStoryServiceImpl.java @@ -194,6 +194,7 @@ public class ProjectStoryServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RelationServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RelationServiceImpl.java index af6f85225cfd4ca5031c8253b8f9412e2962c49d..f17eda2dd77a1ef1f977b48c2fb83bdd46343d90 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RelationServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RelationServiceImpl.java @@ -155,6 +155,7 @@ public class RelationServiceImpl extends ServiceImpl i + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ReleaseServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ReleaseServiceImpl.java index 3cef1b9a64eb7d66408dea6da86803d410aa266d..b3e8d35d7a5cacc6a2da4c911ac78163e5dcc2cb 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ReleaseServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ReleaseServiceImpl.java @@ -194,6 +194,7 @@ public class ReleaseServiceImpl extends ServiceImpl impl + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoBranchServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoBranchServiceImpl.java index 659ffb367e0e9713321bbcab5449ed4235f410cb..fe569e51608ec5143a2c68a65dbf1f02af76ce5d 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoBranchServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoBranchServiceImpl.java @@ -155,6 +155,7 @@ public class RepoBranchServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoFilesServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoFilesServiceImpl.java index 9af4ee5e13428a5d293d4d53fb4263065e0f2101..e453120647bd10409c7cbc1a708923bcd45a7d30 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoFilesServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoFilesServiceImpl.java @@ -167,6 +167,7 @@ public class RepoFilesServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoHistoryServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoHistoryServiceImpl.java index 8432ab3fdabef65a759f7168c96758ef7a01117a..401799b3e0b00c570502964400976d3b3ef3a875 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoHistoryServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoHistoryServiceImpl.java @@ -155,6 +155,7 @@ public class RepoHistoryServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoServiceImpl.java index 40f20cdc88d350975e953b4d14d49fc9a446072c..8dd5ce0e85641cefcd87a35040844854efe66835 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/RepoServiceImpl.java @@ -158,6 +158,7 @@ public class RepoServiceImpl extends ServiceImpl implements IR + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ScoreServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ScoreServiceImpl.java index b23b4303e89bc3c94471dd1fbf0d3b5da76fbe96..24ca1d5268feec01ab1597368251787031788713 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ScoreServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/ScoreServiceImpl.java @@ -155,6 +155,7 @@ public class ScoreServiceImpl extends ServiceImpl implements + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/StoryServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/StoryServiceImpl.java index a4367d1e467f187aec4cb9f8804b4085417a7de9..5350b66c8a138764df41c7411f40a26a2711e4ad 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/StoryServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/StoryServiceImpl.java @@ -85,8 +85,9 @@ public class StoryServiceImpl extends ServiceImpl implements @Override @Transactional public boolean create(Story et) { + cn.ibizlab.pms.util.security.AuthenticationUser user = cn.ibizlab.pms.util.security.AuthenticationUser.getAuthenticationUser(); cn.ibizlab.pms.core.util.zentao.bean.ZTResult rst = new cn.ibizlab.pms.core.util.zentao.bean.ZTResult(); - boolean bRst = cn.ibizlab.pms.core.util.zentao.helper.ZTStoryHelper.create((JSONObject) JSONObject.toJSON(et), rst); + boolean bRst = cn.ibizlab.pms.core.util.zentao.helper.ZTStoryHelper.create((String)user.getSessionParams().get("zentaosid"), (JSONObject) JSONObject.toJSON(et), rst); if (bRst && rst.getEtId() != null) { et = this.get(rst.getEtId()); } @@ -97,6 +98,39 @@ public class StoryServiceImpl extends ServiceImpl implements public void createBatch(List list) { } + @Override + @Transactional + public Story batchChangeStage(Story et) { + //自定义代码 + return et; + } + + @Override + @Transactional + public Story batchChangePlan(Story et) { + //自定义代码 + return et; + } + + @Override + @Transactional + public Story batchClose(Story et) { + //自定义代码 + return et; + } + + @Override + @Transactional + public Story change(Story et) { + cn.ibizlab.pms.util.security.AuthenticationUser user = cn.ibizlab.pms.util.security.AuthenticationUser.getAuthenticationUser(); + cn.ibizlab.pms.core.util.zentao.bean.ZTResult rst = new cn.ibizlab.pms.core.util.zentao.bean.ZTResult(); + boolean bRst = cn.ibizlab.pms.core.util.zentao.helper.ZTStoryHelper.change((String)user.getSessionParams().get("zentaosid"), (JSONObject) JSONObject.toJSON(et), rst); + if (bRst && rst.getEtId() != null) { + et = this.get(rst.getEtId()); + } + return et; + } + @Override public boolean checkKey(Story et) { return (!ObjectUtils.isEmpty(et.getId()))&&(!Objects.isNull(this.getById(et.getId()))); @@ -117,17 +151,62 @@ public class StoryServiceImpl extends ServiceImpl implements @Override @Transactional public boolean update(Story et) { - fillParentData(et); - if(!update(et,(Wrapper) et.getUpdateWrapper(true).eq("id",et.getId()))) - return false; - CachedBeanCopier.copy(get(et.getId()),et); - return true; + cn.ibizlab.pms.util.security.AuthenticationUser user = cn.ibizlab.pms.util.security.AuthenticationUser.getAuthenticationUser(); + cn.ibizlab.pms.core.util.zentao.bean.ZTResult rst = new cn.ibizlab.pms.core.util.zentao.bean.ZTResult(); + boolean bRst = cn.ibizlab.pms.core.util.zentao.helper.ZTStoryHelper.edit((String)user.getSessionParams().get("zentaosid"), (JSONObject) JSONObject.toJSON(et), rst); + if (bRst && rst.getEtId() != null) { + et = this.get(rst.getEtId()); + } + return bRst; } @Override public void updateBatch(List list) { - list.forEach(item->fillParentData(item)); - updateBatchById(list,batchSize); + + } + @Override + @Transactional + public Story batchChangeBranch(Story et) { + //自定义代码 + return et; + } + + @Override + @Transactional + public Story batchReview(Story et) { + //自定义代码 + return et; + } + + @Override + @Transactional + public Story review(Story et) { + cn.ibizlab.pms.util.security.AuthenticationUser user = cn.ibizlab.pms.util.security.AuthenticationUser.getAuthenticationUser(); + cn.ibizlab.pms.core.util.zentao.bean.ZTResult rst = new cn.ibizlab.pms.core.util.zentao.bean.ZTResult(); + boolean bRst = cn.ibizlab.pms.core.util.zentao.helper.ZTStoryHelper.review((String)user.getSessionParams().get("zentaosid"), (JSONObject) JSONObject.toJSON(et), rst); + if (bRst && rst.getEtId() != null) { + et = this.get(rst.getEtId()); + } + return et; + } + + @Override + @Transactional + public Story assignTo(Story et) { + cn.ibizlab.pms.util.security.AuthenticationUser user = cn.ibizlab.pms.util.security.AuthenticationUser.getAuthenticationUser(); + cn.ibizlab.pms.core.util.zentao.bean.ZTResult rst = new cn.ibizlab.pms.core.util.zentao.bean.ZTResult(); + boolean bRst = cn.ibizlab.pms.core.util.zentao.helper.ZTStoryHelper.assignTo((String)user.getSessionParams().get("zentaosid"), (JSONObject) JSONObject.toJSON(et), rst); + if (bRst && rst.getEtId() != null) { + et = this.get(rst.getEtId()); + } + return et; + } + + @Override + @Transactional + public Story batchAssignTo(Story et) { + //自定义代码 + return et; } @Override @@ -176,6 +255,25 @@ public class StoryServiceImpl extends ServiceImpl implements saveOrUpdateBatch(list,batchSize); } + @Override + @Transactional + public Story batchChangeModule(Story et) { + //自定义代码 + return et; + } + + @Override + @Transactional + public Story close(Story et) { + cn.ibizlab.pms.util.security.AuthenticationUser user = cn.ibizlab.pms.util.security.AuthenticationUser.getAuthenticationUser(); + cn.ibizlab.pms.core.util.zentao.bean.ZTResult rst = new cn.ibizlab.pms.core.util.zentao.bean.ZTResult(); + boolean bRst = cn.ibizlab.pms.core.util.zentao.helper.ZTStoryHelper.close((String)user.getSessionParams().get("zentaosid"), (JSONObject) JSONObject.toJSON(et), rst); + if (bRst && rst.getEtId() != null) { + et = this.get(rst.getEtId()); + } + return et; + } + @Override public List selectByModule(BigInteger id) { @@ -297,6 +395,7 @@ public class StoryServiceImpl extends ServiceImpl implements } } + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/StorySpecServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/StorySpecServiceImpl.java index b86315582efe9843e6bdb4430d78286d167a325e..3fcc67638eab3357c2e83977af3559fe0a719485 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/StorySpecServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/StorySpecServiceImpl.java @@ -192,6 +192,7 @@ public class StorySpecServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/StoryStageServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/StoryStageServiceImpl.java index cd0f60a9ebf90ecbece9904c0d51eb35408b8cb5..bf50fbb1c83deb2fa5c9049e1768c25bd6cafd01 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/StoryStageServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/StoryStageServiceImpl.java @@ -181,6 +181,7 @@ public class StoryStageServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/SuiteCaseServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/SuiteCaseServiceImpl.java index 00b275b75498daefb3465cf74eecabcd12886896..58682b116db8034bbf83c72fb39b9f8612e51903 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/SuiteCaseServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/SuiteCaseServiceImpl.java @@ -217,6 +217,7 @@ public class SuiteCaseServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TaskEstimateServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TaskEstimateServiceImpl.java index c7bd10ee9f9fe27eb95e82abbd8477377e13f1a6..b51912d485dda943e369aa5570ef45ca5c970a76 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TaskEstimateServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TaskEstimateServiceImpl.java @@ -168,6 +168,7 @@ public class TaskEstimateServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TaskServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TaskServiceImpl.java index 398e8ed7433c7ced839efbc8fcb206f126121782..a1ce33bb5e89e519be49d41be79a4914e157f489 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TaskServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TaskServiceImpl.java @@ -246,6 +246,7 @@ public class TaskServiceImpl extends ServiceImpl implements IT + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TeamServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TeamServiceImpl.java index 58dee0ed4171665a6c8186974351a1f32bf610ca..c6bb1b39bf61cd429fb20dfbfb6b34939699dbdb 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TeamServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TeamServiceImpl.java @@ -155,6 +155,7 @@ public class TeamServiceImpl extends ServiceImpl implements IT + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestReportServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestReportServiceImpl.java index d6ecd369ad17e5e2d90007d89dd8367eddc86c72..1887c792ebeaf8633d9167a9bf400c2399458cee 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestReportServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestReportServiceImpl.java @@ -181,6 +181,7 @@ public class TestReportServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestResultServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestResultServiceImpl.java index 0c3e64a5dacea59243fb519277f7490cbced9049..2aba5d862468f68939d511c8b741b90b3b685780 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestResultServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestResultServiceImpl.java @@ -230,6 +230,7 @@ public class TestResultServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestRunServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestRunServiceImpl.java index 113eab6404114fe7c4354a775ed99ca7d9973887..0de07d5c1671fdcfc12da79c61f3ee643937a729 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestRunServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestRunServiceImpl.java @@ -207,6 +207,7 @@ public class TestRunServiceImpl extends ServiceImpl impl } } + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestSuiteServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestSuiteServiceImpl.java index 094d591e2dc7867361f5cf2ee2d97ed4e6d58c75..bfa0f4d53444aa412343be81494e55f9ebd3ff36 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestSuiteServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestSuiteServiceImpl.java @@ -174,6 +174,7 @@ public class TestSuiteServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestTaskServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestTaskServiceImpl.java index c57e7a71131473563a7ef306b60fc0327672a552..c5dd5558206806a1760a9455d51d1f9da90645ff 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestTaskServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TestTaskServiceImpl.java @@ -197,6 +197,7 @@ public class TestTaskServiceImpl extends ServiceImpl i + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TodoServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TodoServiceImpl.java index 05cd9b7442c24f6799be2fd0c6d4d86ae9ed0efa..ea8543705a8b0e59294497fd5a521d11f58357dd 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TodoServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/TodoServiceImpl.java @@ -155,6 +155,7 @@ public class TodoServiceImpl extends ServiceImpl implements IT + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserContactServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserContactServiceImpl.java index 9d6e48000ef2bc7745eb391d28c26284cff059d2..1ecd8a1afb9a1b34047f31035c97fa82f81ec79e 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserContactServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserContactServiceImpl.java @@ -155,6 +155,7 @@ public class UserContactServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserGroupServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserGroupServiceImpl.java index 1627e7bd178ed32f02a63650dbb86c0c4b1fc06d..09823e8d586421a3cf96859350af91cfef54e33b 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserGroupServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserGroupServiceImpl.java @@ -155,6 +155,7 @@ public class UserGroupServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserQueryServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserQueryServiceImpl.java index d2dc967c51ade4eb8840098d7ac977ba9b09315e..454616ad0902db1342c638b412369d5d1093e9d8 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserQueryServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserQueryServiceImpl.java @@ -155,6 +155,7 @@ public class UserQueryServiceImpl extends ServiceImpl select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserServiceImpl.java index cfd3547bb94840f6be67c68af54dbab8c0d385e8..4479cd44739417b574850f9d5b6a0f7bc2fa4097 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserServiceImpl.java @@ -155,6 +155,7 @@ public class UserServiceImpl extends ServiceImpl implements IU + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserTplServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserTplServiceImpl.java index 663c29e876f81ed0e6515fabfc35339b81e0feaa..5ba955d93b1cb82f0138d99f5404fcc2a448b206 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserTplServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserTplServiceImpl.java @@ -155,6 +155,7 @@ public class UserTplServiceImpl extends ServiceImpl impl + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserViewServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserViewServiceImpl.java index 6eb41412343f0f23196afe0370331211b5966213..4c3e15b4b4df95d68fdd31897ecd6e38c0436f2e 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserViewServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/UserViewServiceImpl.java @@ -155,6 +155,7 @@ public class UserViewServiceImpl extends ServiceImpl i + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/WebHookServiceImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/WebHookServiceImpl.java index 7d5025531e8160b810fbf157fc61abef50abb0fe..b3cb1d9f114c79df0d137e88a21f7f2d0bffccf8 100644 --- a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/WebHookServiceImpl.java +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/impl/WebHookServiceImpl.java @@ -155,6 +155,7 @@ public class WebHookServiceImpl extends ServiceImpl impl + @Override public List select(String sql, Map param){ return this.baseMapper.selectBySQL(sql,param); diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/logic/ITaskOpenTaskLogic.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/logic/ITaskOpenTaskLogic.java new file mode 100644 index 0000000000000000000000000000000000000000..f38e3aed48ba5480eb75c7cdbb62f00164607eed --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/logic/ITaskOpenTaskLogic.java @@ -0,0 +1,18 @@ +package cn.ibizlab.pms.core.zentao.service.logic; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.HashMap; + +import cn.ibizlab.pms.core.zentao.domain.Task; + +/** + * 关系型数据实体[OpenTask] 对象 + */ +public interface ITaskOpenTaskLogic { + + void execute(Task task ) ; + +} diff --git a/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/logic/impl/TaskOpenTaskLogicImpl.java b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/logic/impl/TaskOpenTaskLogicImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..204501c5faa3a8ff8503d86e1ead0a48cb6bc2e4 --- /dev/null +++ b/ibizpms-core/src/main/java/cn/ibizlab/pms/core/zentao/service/logic/impl/TaskOpenTaskLogicImpl.java @@ -0,0 +1,56 @@ +package cn.ibizlab.pms.core.zentao.service.logic.impl; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.HashMap; + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.kie.api.runtime.KieSession; +import org.kie.api.runtime.KieContainer; + +import cn.ibizlab.pms.core.zentao.service.logic.ITaskOpenTaskLogic; +import cn.ibizlab.pms.core.zentao.domain.Task; + +/** + * 关系型数据实体[OpenTask] 对象 + */ +@Slf4j +@Service +public class TaskOpenTaskLogicImpl implements ITaskOpenTaskLogic{ + + @Autowired + private KieContainer kieContainer; + + + @Autowired + private cn.ibizlab.pms.core.zentao.service.ITaskService iBzSysDefaultService; + + public cn.ibizlab.pms.core.zentao.service.ITaskService getIBzSysDefaultService() { + return this.iBzSysDefaultService; + } + + public void execute(Task et){ + + KieSession kieSession = null; + try{ + kieSession=kieContainer.newKieSession(); + kieSession.insert(et); + kieSession.setGlobal("taskopentaskdefault",et); + kieSession.setGlobal("iBzSysTaskDefaultService",iBzSysDefaultService); + kieSession.setGlobal("curuser", cn.ibizlab.pms.util.security.AuthenticationUser.getAuthenticationUser()); + kieSession.startProcess("cn.ibizlab.pms.core.zentao.service.logic.taskopentask"); + + }catch(Exception e){ + throw new RuntimeException("执行[任务开始]处理逻辑发生异常"+e); + }finally { + if(kieSession!=null) + kieSession.destroy(); + } + } + +} diff --git a/ibizpms-core/src/main/resources/application-zentao.yml b/ibizpms-core/src/main/resources/application-zentao.yml new file mode 100644 index 0000000000000000000000000000000000000000..33259af676b624f9968ba8505071363bbb3eace8 --- /dev/null +++ b/ibizpms-core/src/main/resources/application-zentao.yml @@ -0,0 +1,12 @@ +zentao: + url: http://172.16.102.202/zentao/ + needretry: false + retrycount: 0 + # rootPath需要映射至禅道文件上传路径 + rootPath: /app/zentao/file/ + file: + uploadpath: ibizutil/ztupload + downloadpath: ibizutil/ztupload +ibiz: + auth: + service: IBZUAAZTUserService diff --git a/ibizpms-core/src/main/resources/liquibase/changelog/20200601200530_init_ibzcfg.xml b/ibizpms-core/src/main/resources/liquibase/changelog/20200601200530_init_ibzcfg.xml new file mode 100644 index 0000000000000000000000000000000000000000..2ee7befdadf0dc08f741b7e8eb6b820ef65b6178 --- /dev/null +++ b/ibizpms-core/src/main/resources/liquibase/changelog/20200601200530_init_ibzcfg.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/ibizpms-core/src/main/resources/liquibase/h2_table.xml b/ibizpms-core/src/main/resources/liquibase/h2_table.xml index 26d06f4b7225dca801db518aedb15aa24dc8f32b..7129a8a5419dbf556ccc033b12abe7e24fd45351 100644 --- a/ibizpms-core/src/main/resources/liquibase/h2_table.xml +++ b/ibizpms-core/src/main/resources/liquibase/h2_table.xml @@ -86,6 +86,9 @@ + + + @@ -199,6 +202,9 @@ + + + @@ -246,6 +252,7 @@ + @@ -283,6 +290,7 @@ + diff --git a/ibizpms-core/src/main/resources/mapper/ibiz/productlife/ProductLifeMapper.xml b/ibizpms-core/src/main/resources/mapper/ibiz/productlife/ProductLifeMapper.xml index f0ef18defb1640a543f49acfb5a3fbb0b41b35b5..58098de58a7cc3666ed1485559c20b7b9b00c4e8 100644 --- a/ibizpms-core/src/main/resources/mapper/ibiz/productlife/ProductLifeMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/ibiz/productlife/ProductLifeMapper.xml @@ -49,24 +49,20 @@ - - t112.lastdata ) UNION ( SELECT CONCAT( t2.product, '-release-', t2.id ) AS ibz_productlifeid, t2.`name` AS ibz_productlifename, t2.product AS product, t2.branch AS branch, null AS parent, 'release' AS type, null AS `begin`, t2.`date` AS `end`, LEFT (t2.`date`, 4) AS `year`, t2.marker AS marker FROM zt_release t2 WHERE t2.DELETED = '0' AND t2.product = #{srf.datacontext.product} AND LEFT (t2.`date`, 4) = #{srf.datacontext.year} AND (#{srf.datacontext.branch} is null or t2.branch = #{srf.datacontext.branch}) ) ) AS ibz_productlife ORDER BY `end` DESC + t112.lastdata ) UNION ( SELECT CONCAT( t2.product, '-release-', t2.id ) AS ibz_productlifeid, t2.`name` AS ibz_productlifename, t2.product AS product, t2.branch AS branch, null AS parent, 'release' AS type, null AS `begin`, t2.`date` AS `end`, LEFT (t2.`date`, 4) AS `year`, t2.marker AS marker FROM zt_release t2 WHERE t2.DELETED = '0' AND t2.product = #{srf.datacontext.product} AND LEFT (t2.`date`, 4) = #{srf.datacontext.year} AND (#{srf.datacontext.branch} is null or t2.branch = #{srf.datacontext.branch}) ) ) AS ibz_productlife ORDER BY `end` DESC ]]> - - ( SELECT MIN(LEFT (`date`, 4)) FROM zt_release WHERE deleted = '0' AND product = #{srf.datacontext.product} AND (#{srf.datacontext.branch} is null or branch = #{srf.datacontext.branch}) ) ) UNION ( SELECT DISTINCT LEFT (`date`, 4) AS `year` FROM zt_release WHERE deleted = '0' AND product = #{srf.datacontext.product} AND (#{srf.datacontext.branch} is null or branch = #{srf.datacontext.branch}) ) ) as ibz_productlife + `minyear` ) UNION ( SELECT DISTINCT LEFT (`date`, 4) AS `year` FROM zt_release WHERE deleted = '0' AND product = #{srf.datacontext.product} AND (#{srf.datacontext.branch} is null or branch = #{srf.datacontext.branch}) ) ) as ibz_productlife ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/ibiz/productmodule/ProductModuleMapper.xml b/ibizpms-core/src/main/resources/mapper/ibiz/productmodule/ProductModuleMapper.xml index 013e8f0c6b7b253952723e2694c53bc53d3b653f..a3847ec836ab6b1f953aa50cb0edd7fe0f5e720c 100644 --- a/ibizpms-core/src/main/resources/mapper/ibiz/productmodule/ProductModuleMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/ibiz/productmodule/ProductModuleMapper.xml @@ -71,7 +71,6 @@ AND ( t1.`TYPE` = 'story' ) ]]> - - - - diff --git a/ibizpms-core/src/main/resources/mapper/ibiz/productstats/ProductStatsMapper.xml b/ibizpms-core/src/main/resources/mapper/ibiz/productstats/ProductStatsMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..9d06112b4e6f2947280f199cdaf44060bd396b07 --- /dev/null +++ b/ibizpms-core/src/main/resources/mapper/ibiz/productstats/ProductStatsMapper.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + 'closed') AS `UNDONERESPROJECTCNT`, ((SELECT COUNT(1) FROM ZT_PROJECT LEFT JOIN ZT_PROJECTPRODUCT ON ZT_PROJECT.ID = ZT_PROJECTPRODUCT.project WHERE PRODUCT = t1.`ID` AND `STATUS` <> 'closed')/(SELECT COUNT(1) FROM ZT_PROJECT LEFT JOIN ZT_PROJECTPRODUCT ON ZT_PROJECT.ID = ZT_PROJECTPRODUCT.project WHERE PRODUCT = t1.`ID` )*100.00) AS `UNDONERESPROJECTRATE`, (SELECT COUNT(1) FROM ZT_PRODUCTPLAN WHERE PRODUCT= t1.`ID` AND `END` > CURDATE()) AS `UNENDPRODUCTPLANCNT`, ((SELECT COUNT(1) FROM ZT_PRODUCTPLAN WHERE PRODUCT= t1.`ID` AND `END` > CURDATE())/(SELECT COUNT(1) FROM ZT_PRODUCTPLAN WHERE PRODUCT= t1.`ID` )*100.00) AS `UNENDPRODUCTPLANRATE`, (SELECT COUNT(1) FROM ZT_STORY WHERE PRODUCT = t1.`ID` AND STAGE = 'wait') AS `WAITSTORYCNT` FROM `zt_product` t1 + WHERE t1.DELETED = 1 + ]]> + + + + 'closed') AS `UNDONERESPROJECTCNT`, ((SELECT COUNT(1) FROM ZT_PROJECT LEFT JOIN ZT_PROJECTPRODUCT ON ZT_PROJECT.ID = ZT_PROJECTPRODUCT.project WHERE PRODUCT = t1.`ID` AND `STATUS` <> 'closed')/(SELECT COUNT(1) FROM ZT_PROJECT LEFT JOIN ZT_PROJECTPRODUCT ON ZT_PROJECT.ID = ZT_PROJECTPRODUCT.project WHERE PRODUCT = t1.`ID` )*100.00) AS `UNDONERESPROJECTRATE`, (SELECT COUNT(1) FROM ZT_PRODUCTPLAN WHERE PRODUCT= t1.`ID` AND `END` > CURDATE()) AS `UNENDPRODUCTPLANCNT`, ((SELECT COUNT(1) FROM ZT_PRODUCTPLAN WHERE PRODUCT= t1.`ID` AND `END` > CURDATE())/(SELECT COUNT(1) FROM ZT_PRODUCTPLAN WHERE PRODUCT= t1.`ID` )*100.00) AS `UNENDPRODUCTPLANRATE`, (SELECT COUNT(1) FROM ZT_STORY WHERE PRODUCT = t1.`ID` AND STAGE = 'wait') AS `WAITSTORYCNT` FROM `zt_product` t1 + WHERE t1.DELETED = 1 + ]]> + + + diff --git a/ibizpms-core/src/main/resources/mapper/ibiz/projectstats/ProjectStatsMapper.xml b/ibizpms-core/src/main/resources/mapper/ibiz/projectstats/ProjectStatsMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..c142632ad6f149762ba3e4d9d9ab14cfca6db761 --- /dev/null +++ b/ibizpms-core/src/main/resources/mapper/ibiz/projectstats/ProjectStatsMapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + 'active') AS `FINISHBUGCNT`, ((SELECT COUNT(1) FROM ZT_BUG WHERE PROJECT = t1.`ID` AND `STATUS` <> 'active')/(SELECT COUNT(1) FROM ZT_BUG WHERE PROJECT = t1.`ID` )*100.00) AS `FINISHBUGRATE`, (SELECT COUNT(1) FROM ZT_TASK WHERE PROJECT = t1.`ID` AND `STATUS` IN ('done','cancel','closed')) AS `FINISHTASKCNT`, t1.`ID`, (SELECT COUNT(1) FROM ZT_STORY LEFT JOIN ZT_PROJECTSTORY ON ZT_STORY.ID = ZT_PROJECTSTORY.STORY WHERE PROJECT = t1.`ID`) AS `STORYCNT`, (SELECT COUNT(1) FROM ZT_TASK WHERE PROJECT = t1.`ID`) AS `TASKCNT`, (SELECT SUM(CONSUMED) FROM ZT_TASK WHERE PROJECT = t1.`ID`) AS `TOTALCONSUMED`, (SELECT SUM(ESTIMATE) FROM ZT_TASK WHERE PROJECT = t1.`ID`) AS `TOTALESTIMATE`, (SELECT SUM(`LEFT`) FROM ZT_TASK WHERE PROJECT = t1.`ID`) AS `TOTALLEFT`, (SELECT COUNT(1) FROM ZT_STORY LEFT JOIN ZT_PROJECTSTORY ON ZT_STORY.ID = ZT_PROJECTSTORY.STORY WHERE `STATUS` <> 'closed' AND PROJECT = t1.`ID`) AS `UNCLOSEDSTORYCNT`, (SELECT COUNT(1) FROM ZT_TASK WHERE PROJECT = t1.`ID` AND `STATUS` NOT IN ('done','cancel','closed')) AS `UNDONETASKCNT` FROM `zt_project` t1 + WHERE t1.DELETED = 1 + ]]> + + + + + + + + 'active') AS `FINISHBUGCNT`, ((SELECT COUNT(1) FROM ZT_BUG WHERE PROJECT = t1.`ID` AND `STATUS` <> 'active')/(SELECT COUNT(1) FROM ZT_BUG WHERE PROJECT = t1.`ID` )*100.00) AS `FINISHBUGRATE`, (SELECT COUNT(1) FROM ZT_TASK WHERE PROJECT = t1.`ID` AND `STATUS` IN ('done','cancel','closed')) AS `FINISHTASKCNT`, t1.`ID`, (SELECT COUNT(1) FROM ZT_STORY LEFT JOIN ZT_PROJECTSTORY ON ZT_STORY.ID = ZT_PROJECTSTORY.STORY WHERE PROJECT = t1.`ID`) AS `STORYCNT`, (SELECT COUNT(1) FROM ZT_TASK WHERE PROJECT = t1.`ID`) AS `TASKCNT`, (SELECT SUM(CONSUMED) FROM ZT_TASK WHERE PROJECT = t1.`ID`) AS `TOTALCONSUMED`, (SELECT SUM(ESTIMATE) FROM ZT_TASK WHERE PROJECT = t1.`ID`) AS `TOTALESTIMATE`, (SELECT SUM(`LEFT`) FROM ZT_TASK WHERE PROJECT = t1.`ID`) AS `TOTALLEFT`, (SELECT COUNT(1) FROM ZT_STORY LEFT JOIN ZT_PROJECTSTORY ON ZT_STORY.ID = ZT_PROJECTSTORY.STORY WHERE `STATUS` <> 'closed' AND PROJECT = t1.`ID`) AS `UNCLOSEDSTORYCNT`, (SELECT COUNT(1) FROM ZT_TASK WHERE PROJECT = t1.`ID` AND `STATUS` NOT IN ('done','cancel','closed')) AS `UNDONETASKCNT` FROM `zt_project` t1 + WHERE t1.DELETED = 1 + ]]> + + + diff --git a/ibizpms-core/src/main/resources/mapper/zentao/action/ActionMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/action/ActionMapper.xml index c5cfc900d53474b47f73b55c2557bc70c950885a..dfc63b603840cd6e1d596763bee23764f7a069d9 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/action/ActionMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/action/ActionMapper.xml @@ -67,30 +67,25 @@ - - - - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/block/BlockMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/block/BlockMapper.xml index 1e90be7c2fec41530eded125eef3560adf581588..b52e2f21aa8ea888b330152321846d88c09e8947 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/block/BlockMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/block/BlockMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/branch/BranchMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/branch/BranchMapper.xml index b9ff1f841ec5b481e94e99f14719d497aaacec07..d5c56888a488f9b5cf8ea141c304d501e333b158 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/branch/BranchMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/branch/BranchMapper.xml @@ -41,13 +41,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/bug/BugMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/bug/BugMapper.xml index 0768ba51441d5cea4e0117c1010b3a2e7fa46dca..0bb15d1fbe94b52d6f9c692ce2b80a171fc276f9 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/bug/BugMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/bug/BugMapper.xml @@ -25,7 +25,6 @@ - @@ -33,8 +32,6 @@ - - @@ -73,13 +70,6 @@ ) t1 where duplicatebug=#{id} - - - - + @@ -97,17 +97,15 @@ - - - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/casestep/CaseStepMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/casestep/CaseStepMapper.xml index af920b97e4863721de8443ca3d05231ec1affa7a..22db9ebe915db1214c4fbe8a1ebf59aa09497cf0 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/casestep/CaseStepMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/casestep/CaseStepMapper.xml @@ -50,12 +50,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/company/CompanyMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/company/CompanyMapper.xml index 1fe2a28cb03ae16efb0652dfa135241eb48dd475..444d9ae585b1eb3534e34a6adf57bbaae9d616a7 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/company/CompanyMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/company/CompanyMapper.xml @@ -31,13 +31,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/compile/CompileMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/compile/CompileMapper.xml index e4b224ccb45f20844454f24d41a7b20a2dbc1fa8..efcbe1442f8c61682c8e62c548a52f073dcaf2cb 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/compile/CompileMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/compile/CompileMapper.xml @@ -31,13 +31,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/config/ConfigMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/config/ConfigMapper.xml index 1948301149f83b93821840b6b7ea8c108fa61d68..d70c8d69116a3869259c258337a0d5e923fc39dd 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/config/ConfigMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/config/ConfigMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/cron/CronMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/cron/CronMapper.xml index 90925308222c830efe391bec7120ae27ff2ea311..5740bc0f662c2772c30e4f5a5208c9429a2580a0 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/cron/CronMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/cron/CronMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/dept/DeptMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/dept/DeptMapper.xml index ef9a8089a3e9809b16e985b079a0ede6ec0e0d1c..5f124c222e0bcc2f0cf24a95f84e18084067605f 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/dept/DeptMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/dept/DeptMapper.xml @@ -5,7 +5,7 @@ @@ -35,17 +35,30 @@ ${ew.sqlSegment} + + + - + + + + - - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/doc/DocMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/doc/DocMapper.xml index 13bb772a79d28ffed1f959343f31d825ca5933cb..a04e1b914a38e30200192c42d68b06a388faa36b 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/doc/DocMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/doc/DocMapper.xml @@ -71,13 +71,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/doccontent/DocContentMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/doccontent/DocContentMapper.xml index 0e5c7256b24f22c17c9b31bdb34e83fbd67b4a8b..dc1b39ccca48baa99cf7e1bd064824d9ae1e13ab 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/doccontent/DocContentMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/doccontent/DocContentMapper.xml @@ -40,12 +40,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/doclib/DocLibMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/doclib/DocLibMapper.xml index 3bccd0051ecae55859011929f379c7206d3b4e15..e79e1cdaa2629c745cc48aba924e8cd6709487f2 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/doclib/DocLibMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/doclib/DocLibMapper.xml @@ -52,20 +52,17 @@ AND ( t1.`PRODUCT` = #{srf.datacontext.product} ) ]]> - - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/effort/EffortMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/effort/EffortMapper.xml index b1f4ea0698b581b5d85354c48f0ff7a825cab0ff..f11e3ac716a1109a4d7a73ff056b0215e57f2b7b 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/effort/EffortMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/effort/EffortMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/entry/EntryMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/entry/EntryMapper.xml index 8bd662c79504b8b41a69a1f1ac42ec42c6fd1c84..b1613e24ccaa0ff233a423c69331b124c444bb3d 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/entry/EntryMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/entry/EntryMapper.xml @@ -31,13 +31,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/extension/ExtensionMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/extension/ExtensionMapper.xml index 9a80beb75b4ed9c9979e6c72d5a17ac1811512f6..353db4e66dfb75e8d61a99646ba80ad87ceb187d 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/extension/ExtensionMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/extension/ExtensionMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/file/FileMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/file/FileMapper.xml index e80bcc0387f7dbdc935aa5848e8d18d1a1b30ae4..fa563f71b720d736c2605e0979cbc6edecf47368 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/file/FileMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/file/FileMapper.xml @@ -31,13 +31,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/group/GroupMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/group/GroupMapper.xml index c010fec5c1b7cc1b56cf8c83051bfb196f0b898b..50226af3e58b7978b5cf77aae16defbda72aee54 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/group/GroupMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/group/GroupMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/grouppriv/GroupPrivMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/grouppriv/GroupPrivMapper.xml index 7e63ba6a5c7c300d529d5c2751ed52c71a3c55c3..68e643a833ffa7fd5fc81c3f4d47a678386803c6 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/grouppriv/GroupPrivMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/grouppriv/GroupPrivMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/history/HistoryMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/history/HistoryMapper.xml index 5a44bad69e02f462a6cd4722d7e57b3bcb62c1a1..02e2342dcc665ae3dfb7e3353cf4a943b9efbc9e 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/history/HistoryMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/history/HistoryMapper.xml @@ -41,12 +41,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/im_chat/Im_chatMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/im_chat/Im_chatMapper.xml index 74aef1cf04841a55f78d49b4c4dd75feaa0fe7d8..f34a7de74bbcf043922d84c578debec87fc4772b 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/im_chat/Im_chatMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/im_chat/Im_chatMapper.xml @@ -31,12 +31,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/im_chatuser/Im_chatuserMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/im_chatuser/Im_chatuserMapper.xml index 21888c420ea6468e7b86c79162c77fefb6d72f74..9914dff87ee22232241836bd0ffde4b323b23c3f 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/im_chatuser/Im_chatuserMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/im_chatuser/Im_chatuserMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/im_client/Im_clientMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/im_client/Im_clientMapper.xml index 1c837cf2b14a12685f3538f918b9bf28d8cbb951..055191fb72301aa1a93222b72642b82d26e8c383 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/im_client/Im_clientMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/im_client/Im_clientMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/im_conference/Im_conferenceMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/im_conference/Im_conferenceMapper.xml index 23097cddcef50f3da0d7278b3ccfb1ffe34f23e6..e2a691bf8b02f63102b09a48075faba732aa4626 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/im_conference/Im_conferenceMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/im_conference/Im_conferenceMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/im_conferenceaction/Im_conferenceactionMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/im_conferenceaction/Im_conferenceactionMapper.xml index bd49da7cb864221b1823bfb09727545e789e52fa..fe84b7e32a7737defaa6a079078a6ed25ffbac5e 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/im_conferenceaction/Im_conferenceactionMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/im_conferenceaction/Im_conferenceactionMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/im_message/Im_messageMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/im_message/Im_messageMapper.xml index dce09f7e4e3a016023fcc4328db4793de4c1d10c..5f9a4b5622105c095eeef2e09350959be61fe235 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/im_message/Im_messageMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/im_message/Im_messageMapper.xml @@ -31,13 +31,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/im_messagestatus/Im_messagestatusMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/im_messagestatus/Im_messagestatusMapper.xml index 113ca12bc605e9d8e1c889291738710796c02b4a..1fdddf3b1e76caac721d59c6a2ed4fdd738a630c 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/im_messagestatus/Im_messagestatusMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/im_messagestatus/Im_messagestatusMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/im_queue/Im_queueMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/im_queue/Im_queueMapper.xml index 92e1598df5aab4616b81d34e15b981f8a5451cf3..143be2615e37b7ac5130ac3ee70c613c923001d5 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/im_queue/Im_queueMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/im_queue/Im_queueMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/jenkins/JenkinsMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/jenkins/JenkinsMapper.xml index 2270f907c89db09115432e446bd0693b34fe7a5c..abb53cc571bc25d4818480bbaa1536354b186116 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/jenkins/JenkinsMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/jenkins/JenkinsMapper.xml @@ -31,13 +31,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/job/JobMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/job/JobMapper.xml index 370f7e1bd0c977b611a5f9466925b20c5c39404f..0c4089366126f59f2c3c17bc042c13d57aca7039 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/job/JobMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/job/JobMapper.xml @@ -31,13 +31,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/lang/LangMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/lang/LangMapper.xml index 29d6b7b1e483eaad6bc350b5e116926733eeb9f2..523dca19b93ae71e6d207dd47f7cc1e7a4002cdf 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/lang/LangMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/lang/LangMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/log/LogMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/log/LogMapper.xml index bddc1a4451f142e015ead14925edf8b58579e22d..e4623962294f952f9ba590daf873ce304a850828 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/log/LogMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/log/LogMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/module/ModuleMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/module/ModuleMapper.xml index 3bab14daadc4a29e3790d80c32e08ab96d7e353e..07ed81cc0b4a0f6c3f36b2f46eedadfec8c33d35 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/module/ModuleMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/module/ModuleMapper.xml @@ -79,7 +79,6 @@ WHERE t1.DELETED = '0' ]]> - - - <#if _value?length gt 0>t1.`BRANCH` = ${_value}<#else>1=1 ) ]]> - - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/notify/NotifyMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/notify/NotifyMapper.xml index 4872590453e926339b7eca78aa379626a99b3f09..ecfdf25616cfe47099b3c9b378c3f5198aa507c5 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/notify/NotifyMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/notify/NotifyMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/product/ProductMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/product/ProductMapper.xml index 3d0c5fbb06809b7ec44bffbc56e1aa0c5b0b2ae3..b5a2cbb242fa65a177a266dc5639aaecafd1af0f 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/product/ProductMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/product/ProductMapper.xml @@ -5,7 +5,7 @@ @@ -46,33 +46,29 @@ - 'closed' ) ]]> - - - - - - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/productplan/ProductPlanMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/productplan/ProductPlanMapper.xml index 7a1b93deb9d9c0290996ae4bbfd631ebb48c9bc5..1b81e2d2d2fe054ddacac14e5ab842b6ef9bf4a6 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/productplan/ProductPlanMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/productplan/ProductPlanMapper.xml @@ -70,7 +70,6 @@ WHERE t1.DELETED = '0' ]]> - - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/project/ProjectMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/project/ProjectMapper.xml index 9dee3bb0e5fef8874a2930971a27c7f89a933316..8a884d780b37a0839f9597fcd5aa9861077ffac3 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/project/ProjectMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/project/ProjectMapper.xml @@ -5,7 +5,7 @@ @@ -46,25 +46,22 @@ - - - - - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/projectproduct/ProjectProductMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/projectproduct/ProjectProductMapper.xml index c3d5727a263628df8b3f00ed097a3c6198d4bd4f..25594a82064879c47ece47ebd447ace9abb011c7 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/projectproduct/ProjectProductMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/projectproduct/ProjectProductMapper.xml @@ -79,19 +79,16 @@ - 0 ) ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/projectstory/ProjectStoryMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/projectstory/ProjectStoryMapper.xml index 01928d9a87af8cb9c6b1b5d141a25577da7b739b..095b2c46d4a79d1b3d6b81e9f628abb41f1c4e18 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/projectstory/ProjectStoryMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/projectstory/ProjectStoryMapper.xml @@ -60,12 +60,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/relation/RelationMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/relation/RelationMapper.xml index 843065c4b6b25b6fdd2020037ef419a28460c018..f366f9b6982baad62b044145a1145bed14806f2f 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/relation/RelationMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/relation/RelationMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/release/ReleaseMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/release/ReleaseMapper.xml index 8a17828d64c173855d9fb03cee9113e08a0e6688..d436ae91fda5030ad1c6ca4ec3fbb0d7643fc540 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/release/ReleaseMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/release/ReleaseMapper.xml @@ -61,7 +61,6 @@ WHERE t1.DELETED = '0' ]]> - <#if _value?length gt 0>t1.`STATUS` = ${_value}<#else>1=1 ) ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/repo/RepoMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/repo/RepoMapper.xml index 53970dd29dbce164996c17aa61ef5effdf7aea9e..25f5c3aa21f26531e9b1d1a3d1c36ecd0b51710d 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/repo/RepoMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/repo/RepoMapper.xml @@ -31,13 +31,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/repobranch/RepoBranchMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/repobranch/RepoBranchMapper.xml index 0a0bcf0bf00ff5b881c2782ea3e7be1751dd7dfc..6464d169b8765f58f4f4789f8b026b23f39e4a5f 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/repobranch/RepoBranchMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/repobranch/RepoBranchMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/repofiles/RepoFilesMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/repofiles/RepoFilesMapper.xml index 1823ba2c635380ed3955eda612241ffb7f37c643..b78d215d887e5b7e701ba586d7afc3991b5b8fd0 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/repofiles/RepoFilesMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/repofiles/RepoFilesMapper.xml @@ -40,12 +40,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/repohistory/RepoHistoryMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/repohistory/RepoHistoryMapper.xml index 79b2f253be1dbb8e4adf3e9f6e4da1cce77aed6b..949e4e8a2d7b3754949252193e628d158128ed36 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/repohistory/RepoHistoryMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/repohistory/RepoHistoryMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/score/ScoreMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/score/ScoreMapper.xml index 038a8f678092541aa4aca4a407d63af8a994f9dd..57ddfe7c932d3d501af795f93a0c174ddee9ba86 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/score/ScoreMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/score/ScoreMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/story/StoryMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/story/StoryMapper.xml index 6f9dc5c5bdf9e4b62517bc52aef615df5a92ae0e..8341726948a47f81f646061c942715b00e078f0d 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/story/StoryMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/story/StoryMapper.xml @@ -102,7 +102,6 @@ WHERE t1.DELETED = '0' ]]> - <#if _value?length gt 0>t1.`BRANCH` = ${_value}<#else>1=1 AND <#assign _value=srfdatacontext('nodeid','{\"ignoreempty\":true,\"defname\":\"MODULE\",\"dename\":\"ZT_STORY\"}')><#if _value?length gt 0>t1.`MODULE` = ${_value}<#else>1=1 ) ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/storyspec/StorySpecMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/storyspec/StorySpecMapper.xml index 96097b54e74e6796558cf03b564656abd2e6d2c9..846ecdbaebaced1d4c01a041749b91d4ae1e8c37 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/storyspec/StorySpecMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/storyspec/StorySpecMapper.xml @@ -40,12 +40,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/storystage/StoryStageMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/storystage/StoryStageMapper.xml index c0199e1fe5e14227bf2cd00401fb3603498753e9..f7c584fd6cb55b342d3305f4e23f81e33d0cc84b 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/storystage/StoryStageMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/storystage/StoryStageMapper.xml @@ -50,12 +50,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/suitecase/SuiteCaseMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/suitecase/SuiteCaseMapper.xml index 11ee1e0395d5a8b83554c948a388fd8d63b7b09c..43a9ad98291b277d2989aff81449f46d96f2be55 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/suitecase/SuiteCaseMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/suitecase/SuiteCaseMapper.xml @@ -60,12 +60,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/task/TaskMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/task/TaskMapper.xml index e610095c8554345b8aaf3173cb66f65f95897209..12ee44084937f0b6a7035c15155a1e9ad8c18757 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/task/TaskMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/task/TaskMapper.xml @@ -102,25 +102,21 @@ WHERE t1.DELETED = '0' ]]> - - - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/taskestimate/TaskEstimateMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/taskestimate/TaskEstimateMapper.xml index 6b8cc03630b9331e156d3bea50518f9116ee889c..8cadf143cffa6db4faffc96f0488ca5809ef6a86 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/taskestimate/TaskEstimateMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/taskestimate/TaskEstimateMapper.xml @@ -40,12 +40,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/team/TeamMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/team/TeamMapper.xml index e28c432cb27959fcebf4579b7f744f361d5a0766..f59be09af33d06d6b1b3a19536595814b382f5f0 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/team/TeamMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/team/TeamMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/testreport/TestReportMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/testreport/TestReportMapper.xml index 33093aba8170efe9f8014bd4f9d8600863705845..d4a57929795cc869074e376c8dd6cdb14b8eb822 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/testreport/TestReportMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/testreport/TestReportMapper.xml @@ -51,13 +51,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/testresult/TestResultMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/testresult/TestResultMapper.xml index 43f8b399ff81acf179fbdb632148f29b11a68ca6..7265cd871d5d9f539b4a1f43a29ba2532cc49bd3 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/testresult/TestResultMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/testresult/TestResultMapper.xml @@ -70,12 +70,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/testrun/TestRunMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/testrun/TestRunMapper.xml index 58eafa8a9e64e57df5748526b83d47acf3becaff..a37eff61164ba784efd1f7c9e9e68fd8e9a50ae9 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/testrun/TestRunMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/testrun/TestRunMapper.xml @@ -50,12 +50,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/testsuite/TestSuiteMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/testsuite/TestSuiteMapper.xml index f3ee8a42e1f8334670c16780737866e37c3d92eb..94624bc79093e3c15d189e9822fd6c8a4a2ab596 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/testsuite/TestSuiteMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/testsuite/TestSuiteMapper.xml @@ -41,13 +41,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/testtask/TestTaskMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/testtask/TestTaskMapper.xml index 78279e649b50990526c6dfa76e2da8d8dc728e9b..33c8fbf69bd421910927e74cd97da5224c212599 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/testtask/TestTaskMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/testtask/TestTaskMapper.xml @@ -61,13 +61,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/todo/TodoMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/todo/TodoMapper.xml index c485c8f5aabb2a36b582318e78a2f3468391fcf2..188ad73ff8b367951bbf929883f60caaefd5be04 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/todo/TodoMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/todo/TodoMapper.xml @@ -31,12 +31,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/user/UserMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/user/UserMapper.xml index 0c15e90da7149a13ede0e8f744c653bc6b0dd923..d627e33ad1a95443c1e8ecdc93db42c4f8c0efc3 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/user/UserMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/user/UserMapper.xml @@ -31,13 +31,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/usercontact/UserContactMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/usercontact/UserContactMapper.xml index 9a7ac2224d901084eed87a8238640655673c188a..a1db1eeb07a93dcd404d1bbe00267479d9f8d7fb 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/usercontact/UserContactMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/usercontact/UserContactMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/usergroup/UserGroupMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/usergroup/UserGroupMapper.xml index c7b2f299df7ed5750161b2dff43c1083e8dfddff..c6f5a09ecf957ee78139a226eadb227a2bfc5a21 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/usergroup/UserGroupMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/usergroup/UserGroupMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/userquery/UserQueryMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/userquery/UserQueryMapper.xml index 20b3d879d92f94e1788c90054ce8189bc183f045..146bc8150ad4813f472f0b77ca5f598ba17ddf57 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/userquery/UserQueryMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/userquery/UserQueryMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/usertpl/UserTplMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/usertpl/UserTplMapper.xml index 96fe2f3d458cf5ba3ac1f7a6e33810316881bb30..e63669bc4cbaf690609fa9267af8f8f160ca669a 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/usertpl/UserTplMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/usertpl/UserTplMapper.xml @@ -31,12 +31,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/userview/UserViewMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/userview/UserViewMapper.xml index 453bd76204b684f2f08dcd02d18970a07c31bfb3..74b7ab3c953dd96f466435d12cb2d8df9d22e865 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/userview/UserViewMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/userview/UserViewMapper.xml @@ -30,12 +30,10 @@ - - diff --git a/ibizpms-core/src/main/resources/mapper/zentao/webhook/WebHookMapper.xml b/ibizpms-core/src/main/resources/mapper/zentao/webhook/WebHookMapper.xml index b809fe4d4c141bca077fcd9e4f03f9b929afd8b5..576df0308b510aa7c979b4be3ac8d7117261e614 100644 --- a/ibizpms-core/src/main/resources/mapper/zentao/webhook/WebHookMapper.xml +++ b/ibizpms-core/src/main/resources/mapper/zentao/webhook/WebHookMapper.xml @@ -31,13 +31,11 @@ WHERE t1.DELETED = '0' ]]> - - diff --git a/ibizpms-core/src/main/resources/permission/systemResource.json b/ibizpms-core/src/main/resources/permission/systemResource.json index 0a669d0c800d31b91e492b69dfe08bcfaba50c70..e03a6ed4f45bae959ed80799fb6bbc4124233474 100644 --- a/ibizpms-core/src/main/resources/permission/systemResource.json +++ b/ibizpms-core/src/main/resources/permission/systemResource.json @@ -32,7 +32,7 @@ "delogicname":"产品", "sysmoudle":{"id":"ZENTAO","name":"禅道模块"}, "dedataset":[{"id":"Default" , "name":"DEFAULT"},{"id":"CurProject" , "name":"当前项目"}], - "deaction":[{"id":"Get" , "name":"Get" , "type":"BUILTIN" },{"id":"Save" , "name":"Save" , "type":"BUILTIN" },{"id":"CheckKey" , "name":"CheckKey" , "type":"BUILTIN" },{"id":"GetDraft" , "name":"GetDraft" , "type":"BUILTIN" },{"id":"Update" , "name":"Update" , "type":"BUILTIN" },{"id":"Remove" , "name":"Remove" , "type":"BUILTIN" },{"id":"Create" , "name":"Create" , "type":"BUILTIN" }], + "deaction":[{"id":"Get" , "name":"Get" , "type":"BUILTIN" },{"id":"Save" , "name":"Save" , "type":"BUILTIN" },{"id":"CheckKey" , "name":"CheckKey" , "type":"BUILTIN" },{"id":"GetDraft" , "name":"GetDraft" , "type":"BUILTIN" },{"id":"Update" , "name":"Update" , "type":"BUILTIN" },{"id":"Close" , "name":"关闭" , "type":"USERCUSTOM" },{"id":"Remove" , "name":"Remove" , "type":"BUILTIN" },{"id":"Create" , "name":"Create" , "type":"BUILTIN" }], "datascope":[{"id":"all","name":"全部数据"}] } , { @@ -52,6 +52,14 @@ "datascope":[{"id":"all","name":"全部数据"}] } , { + "dename":"ProductStats", + "delogicname":"产品统计", + "sysmoudle":{"id":"IBIZ","name":"iBiz增强模块"}, + "dedataset":[{"id":"Default" , "name":"DEFAULT"}], + "deaction":[{"id":"Update" , "name":"Update" , "type":"BUILTIN" },{"id":"GetDraft" , "name":"GetDraft" , "type":"BUILTIN" },{"id":"Save" , "name":"Save" , "type":"BUILTIN" },{"id":"Create" , "name":"Create" , "type":"BUILTIN" },{"id":"Get" , "name":"Get" , "type":"BUILTIN" },{"id":"CheckKey" , "name":"CheckKey" , "type":"BUILTIN" },{"id":"Remove" , "name":"Remove" , "type":"BUILTIN" }], + "datascope":[{"id":"all","name":"全部数据"}] + } + , { "dename":"Action", "delogicname":"系统日志", "sysmoudle":{"id":"ZENTAO","name":"禅道模块"}, @@ -60,6 +68,14 @@ "datascope":[{"id":"all","name":"全部数据"}] } , { + "dename":"Group", + "delogicname":"群组", + "sysmoudle":{"id":"ZENTAO","name":"禅道模块"}, + "dedataset":[{"id":"Default" , "name":"DEFAULT"}], + "deaction":[{"id":"Remove" , "name":"Remove" , "type":"BUILTIN" },{"id":"Get" , "name":"Get" , "type":"BUILTIN" },{"id":"Create" , "name":"Create" , "type":"BUILTIN" },{"id":"Save" , "name":"Save" , "type":"BUILTIN" },{"id":"GetDraft" , "name":"GetDraft" , "type":"BUILTIN" },{"id":"Update" , "name":"Update" , "type":"BUILTIN" },{"id":"CheckKey" , "name":"CheckKey" , "type":"BUILTIN" }], + "datascope":[{"id":"all","name":"全部数据"}] + } + , { "dename":"CaseStep", "delogicname":"用例步骤", "sysmoudle":{"id":"ZENTAO","name":"禅道模块"}, @@ -68,11 +84,35 @@ "datascope":[{"id":"all","name":"全部数据"}] } , { + "dename":"Dept", + "delogicname":"部门", + "sysmoudle":{"id":"ZENTAO","name":"禅道模块"}, + "dedataset":[{"id":"Default" , "name":"DEFAULT"},{"id":"Root" , "name":"根部门"}], + "deaction":[{"id":"Save" , "name":"Save" , "type":"BUILTIN" },{"id":"Create" , "name":"Create" , "type":"BUILTIN" },{"id":"Remove" , "name":"Remove" , "type":"BUILTIN" },{"id":"Update" , "name":"Update" , "type":"BUILTIN" },{"id":"GetDraft" , "name":"GetDraft" , "type":"BUILTIN" },{"id":"Get" , "name":"Get" , "type":"BUILTIN" },{"id":"CheckKey" , "name":"CheckKey" , "type":"BUILTIN" }], + "datascope":[{"id":"all","name":"全部数据"}] + } + , { + "dename":"Company", + "delogicname":"公司", + "sysmoudle":{"id":"ZENTAO","name":"禅道模块"}, + "dedataset":[{"id":"Default" , "name":"DEFAULT"}], + "deaction":[{"id":"Get" , "name":"Get" , "type":"BUILTIN" },{"id":"GetDraft" , "name":"GetDraft" , "type":"BUILTIN" },{"id":"Remove" , "name":"Remove" , "type":"BUILTIN" },{"id":"CheckKey" , "name":"CheckKey" , "type":"BUILTIN" },{"id":"Update" , "name":"Update" , "type":"BUILTIN" },{"id":"Save" , "name":"Save" , "type":"BUILTIN" },{"id":"Create" , "name":"Create" , "type":"BUILTIN" }], + "datascope":[{"id":"all","name":"全部数据"}] + } + , { "dename":"Story", "delogicname":"需求", "sysmoudle":{"id":"ZENTAO","name":"禅道模块"}, "dedataset":[{"id":"Default" , "name":"DEFAULT"}], - "deaction":[{"id":"GetDraft" , "name":"GetDraft" , "type":"BUILTIN" },{"id":"Create" , "name":"Create" , "type":"BUILTIN" },{"id":"CheckKey" , "name":"CheckKey" , "type":"BUILTIN" },{"id":"Remove" , "name":"Remove" , "type":"BUILTIN" },{"id":"Update" , "name":"Update" , "type":"BUILTIN" },{"id":"Get" , "name":"Get" , "type":"BUILTIN" },{"id":"Save" , "name":"Save" , "type":"BUILTIN" }], + "deaction":[{"id":"GetDraft" , "name":"GetDraft" , "type":"BUILTIN" },{"id":"Create" , "name":"Create" , "type":"BUILTIN" },{"id":"BatchChangeStage" , "name":"批量变更阶段" , "type":"USERCUSTOM" },{"id":"BatchChangePlan" , "name":"批量关联计划" , "type":"USERCUSTOM" },{"id":"BatchClose" , "name":"批量关闭" , "type":"USERCUSTOM" },{"id":"Change" , "name":"变更" , "type":"USERCUSTOM" },{"id":"CheckKey" , "name":"CheckKey" , "type":"BUILTIN" },{"id":"Remove" , "name":"Remove" , "type":"BUILTIN" },{"id":"Update" , "name":"Update" , "type":"BUILTIN" },{"id":"BatchChangeBranch" , "name":"批量变更平台/分支" , "type":"USERCUSTOM" },{"id":"BatchReview" , "name":"批量评审" , "type":"USERCUSTOM" },{"id":"Review" , "name":"评审" , "type":"USERCUSTOM" },{"id":"AssignTo" , "name":"指派" , "type":"USERCUSTOM" },{"id":"BatchAssignTo" , "name":"批量指派" , "type":"USERCUSTOM" },{"id":"Get" , "name":"Get" , "type":"BUILTIN" },{"id":"Save" , "name":"Save" , "type":"BUILTIN" },{"id":"BatchChangeModule" , "name":"批量变更模块" , "type":"USERCUSTOM" },{"id":"Close" , "name":"关闭" , "type":"USERCUSTOM" }], + "datascope":[{"id":"all","name":"全部数据"}] + } + , { + "dename":"Task", + "delogicname":"任务", + "sysmoudle":{"id":"ZENTAO","name":"禅道模块"}, + "dedataset":[{"id":"RootTask" , "name":"根任务"},{"id":"TypeGroup" , "name":"任务类型分组"},{"id":"Default" , "name":"DEFAULT"}], + "deaction":[{"id":"GetDraft" , "name":"GetDraft" , "type":"BUILTIN" },{"id":"Remove" , "name":"Remove" , "type":"BUILTIN" },{"id":"Update" , "name":"Update" , "type":"BUILTIN" },{"id":"Save" , "name":"Save" , "type":"BUILTIN" },{"id":"Get" , "name":"Get" , "type":"BUILTIN" },{"id":"CheckKey" , "name":"CheckKey" , "type":"BUILTIN" },{"id":"Create" , "name":"Create" , "type":"BUILTIN" }], "datascope":[{"id":"all","name":"全部数据"}] } , { @@ -124,14 +164,6 @@ "datascope":[{"id":"all","name":"全部数据"}, {"id":"createman","name":"创建人"}] } , { - "dename":"Task", - "delogicname":"任务", - "sysmoudle":{"id":"ZENTAO","name":"禅道模块"}, - "dedataset":[{"id":"RootTask" , "name":"根任务"},{"id":"TypeGroup" , "name":"任务类型分组"},{"id":"Default" , "name":"DEFAULT"}], - "deaction":[{"id":"GetDraft" , "name":"GetDraft" , "type":"BUILTIN" },{"id":"Remove" , "name":"Remove" , "type":"BUILTIN" },{"id":"Update" , "name":"Update" , "type":"BUILTIN" },{"id":"Save" , "name":"Save" , "type":"BUILTIN" },{"id":"Get" , "name":"Get" , "type":"BUILTIN" },{"id":"CheckKey" , "name":"CheckKey" , "type":"BUILTIN" },{"id":"Create" , "name":"Create" , "type":"BUILTIN" }], - "datascope":[{"id":"all","name":"全部数据"}] - } - , { "dename":"Build", "delogicname":"版本", "sysmoudle":{"id":"ZENTAO","name":"禅道模块"}, @@ -148,6 +180,14 @@ "datascope":[{"id":"all","name":"全部数据"}] } , { + "dename":"ProjectStats", + "delogicname":"项目统计", + "sysmoudle":{"id":"IBIZ","name":"iBiz增强模块"}, + "dedataset":[{"id":"TaskTime" , "name":"任务工时消耗剩余查询"},{"id":"Default" , "name":"DEFAULT"}], + "deaction":[{"id":"Get" , "name":"Get" , "type":"BUILTIN" },{"id":"Update" , "name":"Update" , "type":"BUILTIN" },{"id":"Remove" , "name":"Remove" , "type":"BUILTIN" },{"id":"Save" , "name":"Save" , "type":"BUILTIN" },{"id":"Create" , "name":"Create" , "type":"BUILTIN" },{"id":"CheckKey" , "name":"CheckKey" , "type":"BUILTIN" },{"id":"GetDraft" , "name":"GetDraft" , "type":"BUILTIN" }], + "datascope":[{"id":"all","name":"全部数据"}] + } + , { "dename":"Bug", "delogicname":"Bug", "sysmoudle":{"id":"ZENTAO","name":"禅道模块"}, diff --git a/ibizpms-core/src/main/resources/rules/TaskOpenTaskRule.drl b/ibizpms-core/src/main/resources/rules/TaskOpenTaskRule.drl new file mode 100644 index 0000000000000000000000000000000000000000..78da3690d406204e8773e7cd9a62121bdaa9eaec --- /dev/null +++ b/ibizpms-core/src/main/resources/rules/TaskOpenTaskRule.drl @@ -0,0 +1,27 @@ +package cn.ibizlab.pms.zentao.logic.tasklogic.opentask; + +import java.util.Map; +import java.util.HashMap; +import com.alibaba.fastjson.JSONObject; +global cn.ibizlab.pms.core.zentao.domain.Task taskopentaskdefault; +global cn.ibizlab.pms.core.zentao.service.ITaskService iBzSysTaskDefaultService; +global cn.ibizlab.pms.util.security.AuthenticationUser curuser; + +no-loop + +//逻辑处理节点[开始] +rule "begin" +ruleflow-group "taskopentaskbegin" + when + then + end + +//逻辑处理节点[修改状态为开始] +rule "prepareparam1" +ruleflow-group "taskopentaskprepareparam1" + when + then + taskopentaskdefault.set("status","doing"); + update(taskopentaskdefault);//更新fact中变量值 + end + diff --git a/ibizpms-core/src/main/resources/rules/TaskOpenTaskRuleFlow.bpmn b/ibizpms-core/src/main/resources/rules/TaskOpenTaskRuleFlow.bpmn new file mode 100644 index 0000000000000000000000000000000000000000..1f4db664e9e062dea0323f272acb8fd84abab8bb --- /dev/null +++ b/ibizpms-core/src/main/resources/rules/TaskOpenTaskRuleFlow.bpmn @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/docker/Dockerfile b/ibizpms-provider/ibizpms-provider-webapi/src/main/docker/Dockerfile index 4569f5b8b4b6ece5f6e93e5873f2977749fc9f3b..8cb6b5a2521a1d8df17d5533b8fb24479d0cf887 100644 --- a/ibizpms-provider/ibizpms-provider-webapi/src/main/docker/Dockerfile +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/docker/Dockerfile @@ -9,6 +9,6 @@ CMD echo "The application will start in ${IBIZ_SLEEP}s..." && \ sleep ${IBIZ_SLEEP} && \ java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /ibizpms-provider-webapi.jar -EXPOSE 30110 +EXPOSE 8081 ADD ibizpms-provider-webapi.jar /ibizpms-provider-webapi.jar diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/docker/ibizpms-provider-webapi.yaml b/ibizpms-provider/ibizpms-provider-webapi/src/main/docker/ibizpms-provider-webapi.yaml index cecb835c58e2e111aa5139a8109889aaf5625585..02841c48f13754ee50dc13c6be16622c0f1be268 100644 --- a/ibizpms-provider/ibizpms-provider-webapi/src/main/docker/ibizpms-provider-webapi.yaml +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/docker/ibizpms-provider-webapi.yaml @@ -3,25 +3,13 @@ services: ibizpms-provider-webapi: image: registry.cn-shanghai.aliyuncs.com/ibizsys/ibizpms-provider-webapi:latest ports: - - "30110:30110" + - "8081:8081" networks: - agent_network - environment: - - SPRING_CLOUD_NACOS_DISCOVERY_IP=172.16.240.110 - - SERVER_PORT=30110 - - SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR=172.16.102.211:8848 - - SPRING_REDIS_HOST=172.16.100.243 - - SPRING_REDIS_PORT=6379 - - SPRING_REDIS_DATABASE=0 - - SPRING_DATASOURCE_USERNAME=zentao - - SPRING_DATASOURCE_PASSWORD=123456 - - SPRING_DATASOURCE_URL=jdbc:mysql://172.16.102.102:3306/zentao?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true&zeroDateTimeBehavior=convertToNull - - SPRING_DATASOURCE_DRIVER-CLASS-NAME=com.mysql.jdbc.Driver - - SPRING_DATASOURCE_DEFAULTSCHEMA=zentao deploy: resources: limits: - memory: 800M + memory: 4048M reservations: memory: 400M mode: replicated diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/BugDTO.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/BugDTO.java index 518709d9d8cea515619eb843712f5aaeea916f7a..d650467ac5c18ee56c9b62997bdfdb04592a94f7 100644 --- a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/BugDTO.java +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/BugDTO.java @@ -294,6 +294,14 @@ public class BugDTO extends DTOBase implements Serializable { @JsonProperty("resolvedby") private String resolvedby; + /** + * 属性 [RESOLVEDBUILD] + * + */ + @JSONField(name = "resolvedbuild") + @JsonProperty("resolvedbuild") + private String resolvedbuild; + /** * 属性 [PRI] * @@ -486,14 +494,6 @@ public class BugDTO extends DTOBase implements Serializable { @JsonProperty("testtask") private BigInteger testtask; - /** - * 属性 [RESOLVEDBUILD] - * - */ - @JSONField(name = "resolvedbuild") - @JsonProperty("resolvedbuild") - private BigInteger resolvedbuild; - /** * 设置 [SEVERITY] @@ -719,6 +719,14 @@ public class BugDTO extends DTOBase implements Serializable { this.modify("resolvedby",resolvedby); } + /** + * 设置 [RESOLVEDBUILD] + */ + public void setResolvedbuild(String resolvedbuild){ + this.resolvedbuild = resolvedbuild ; + this.modify("resolvedbuild",resolvedbuild); + } + /** * 设置 [PRI] */ @@ -879,14 +887,6 @@ public class BugDTO extends DTOBase implements Serializable { this.modify("testtask",testtask); } - /** - * 设置 [RESOLVEDBUILD] - */ - public void setResolvedbuild(BigInteger resolvedbuild){ - this.resolvedbuild = resolvedbuild ; - this.modify("resolvedbuild",resolvedbuild); - } - } diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/CaseDTO.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/CaseDTO.java index fe713736967de2c8189bf180360ca0ac8edb7427..976c14344bba7afda5972fb3515ea9dfc9a0e10f 100644 --- a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/CaseDTO.java +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/CaseDTO.java @@ -356,6 +356,30 @@ public class CaseDTO extends DTOBase implements Serializable { @JsonProperty("module") private BigInteger module; + /** + * 属性 [MODULENAME] + * + */ + @JSONField(name = "modulename") + @JsonProperty("modulename") + private String modulename; + + /** + * 属性 [STORYNAME] + * + */ + @JSONField(name = "storyname") + @JsonProperty("storyname") + private String storyname; + + /** + * 属性 [PRODUCTNAME] + * + */ + @JSONField(name = "productname") + @JsonProperty("productname") + private String productname; + /** * 设置 [LASTEDITEDDATE] diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/CompanyDTO.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/CompanyDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..cd9e157a9a2de91b74cb10f446f00d19f2efe44d --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/CompanyDTO.java @@ -0,0 +1,189 @@ +package cn.ibizlab.pms.webapi.dto; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.math.BigInteger; +import java.util.Map; +import java.util.HashMap; +import java.io.Serializable; +import java.math.BigDecimal; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.fastjson.annotation.JSONField; +import cn.ibizlab.pms.util.domain.DTOBase; +import lombok.Data; + +/** + * 服务DTO对象[CompanyDTO] + */ +@Data +public class CompanyDTO extends DTOBase implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 属性 [ADMINS] + * + */ + @JSONField(name = "admins") + @JsonProperty("admins") + private String admins; + + /** + * 属性 [FAX] + * + */ + @JSONField(name = "fax") + @JsonProperty("fax") + private String fax; + + /** + * 属性 [DELETED] + * + */ + @JSONField(name = "deleted") + @JsonProperty("deleted") + private String deleted; + + /** + * 属性 [WEBSITE] + * + */ + @JSONField(name = "website") + @JsonProperty("website") + private String website; + + /** + * 属性 [ID] + * + */ + @JSONField(name = "id") + @JsonProperty("id") + private BigInteger id; + + /** + * 属性 [ZIPCODE] + * + */ + @JSONField(name = "zipcode") + @JsonProperty("zipcode") + private String zipcode; + + /** + * 属性 [ADDRESS] + * + */ + @JSONField(name = "address") + @JsonProperty("address") + private String address; + + /** + * 属性 [BACKYARD] + * + */ + @JSONField(name = "backyard") + @JsonProperty("backyard") + private String backyard; + + /** + * 属性 [NAME] + * + */ + @JSONField(name = "name") + @JsonProperty("name") + private String name; + + /** + * 属性 [GUEST] + * + */ + @JSONField(name = "guest") + @JsonProperty("guest") + private String guest; + + /** + * 属性 [PHONE] + * + */ + @JSONField(name = "phone") + @JsonProperty("phone") + private String phone; + + + /** + * 设置 [ADMINS] + */ + public void setAdmins(String admins){ + this.admins = admins ; + this.modify("admins",admins); + } + + /** + * 设置 [FAX] + */ + public void setFax(String fax){ + this.fax = fax ; + this.modify("fax",fax); + } + + /** + * 设置 [WEBSITE] + */ + public void setWebsite(String website){ + this.website = website ; + this.modify("website",website); + } + + /** + * 设置 [ZIPCODE] + */ + public void setZipcode(String zipcode){ + this.zipcode = zipcode ; + this.modify("zipcode",zipcode); + } + + /** + * 设置 [ADDRESS] + */ + public void setAddress(String address){ + this.address = address ; + this.modify("address",address); + } + + /** + * 设置 [BACKYARD] + */ + public void setBackyard(String backyard){ + this.backyard = backyard ; + this.modify("backyard",backyard); + } + + /** + * 设置 [NAME] + */ + public void setName(String name){ + this.name = name ; + this.modify("name",name); + } + + /** + * 设置 [GUEST] + */ + public void setGuest(String guest){ + this.guest = guest ; + this.modify("guest",guest); + } + + /** + * 设置 [PHONE] + */ + public void setPhone(String phone){ + this.phone = phone ; + this.modify("phone",phone); + } + + +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/DeptDTO.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/DeptDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..612d83f0e972f5d2a18cc3df101d596ba68c3635 --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/DeptDTO.java @@ -0,0 +1,181 @@ +package cn.ibizlab.pms.webapi.dto; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.math.BigInteger; +import java.util.Map; +import java.util.HashMap; +import java.io.Serializable; +import java.math.BigDecimal; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.fastjson.annotation.JSONField; +import cn.ibizlab.pms.util.domain.DTOBase; +import lombok.Data; + +/** + * 服务DTO对象[DeptDTO] + */ +@Data +public class DeptDTO extends DTOBase implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 属性 [MANAGER] + * + */ + @JSONField(name = "manager") + @JsonProperty("manager") + private String manager; + + /** + * 属性 [GRADE] + * + */ + @JSONField(name = "grade") + @JsonProperty("grade") + private Integer grade; + + /** + * 属性 [FUNCTION] + * + */ + @JSONField(name = "function") + @JsonProperty("function") + private String function; + + /** + * 属性 [ORDER] + * + */ + @JSONField(name = "order") + @JsonProperty("order") + private Integer order; + + /** + * 属性 [PATH] + * + */ + @JSONField(name = "path") + @JsonProperty("path") + private String path; + + /** + * 属性 [POSITION] + * + */ + @JSONField(name = "position") + @JsonProperty("position") + private String position; + + /** + * 属性 [ID] + * + */ + @JSONField(name = "id") + @JsonProperty("id") + private BigInteger id; + + /** + * 属性 [NAME] + * + */ + @JSONField(name = "name") + @JsonProperty("name") + private String name; + + /** + * 属性 [PARENTNAME] + * + */ + @JSONField(name = "parentname") + @JsonProperty("parentname") + private String parentname; + + /** + * 属性 [PARENT] + * + */ + @JSONField(name = "parent") + @JsonProperty("parent") + private BigInteger parent; + + /** + * 属性 [ISLEAF] + * + */ + @JSONField(name = "isleaf") + @JsonProperty("isleaf") + private String isleaf; + + + /** + * 设置 [MANAGER] + */ + public void setManager(String manager){ + this.manager = manager ; + this.modify("manager",manager); + } + + /** + * 设置 [GRADE] + */ + public void setGrade(Integer grade){ + this.grade = grade ; + this.modify("grade",grade); + } + + /** + * 设置 [FUNCTION] + */ + public void setFunction(String function){ + this.function = function ; + this.modify("function",function); + } + + /** + * 设置 [ORDER] + */ + public void setOrder(Integer order){ + this.order = order ; + this.modify("order",order); + } + + /** + * 设置 [PATH] + */ + public void setPath(String path){ + this.path = path ; + this.modify("path",path); + } + + /** + * 设置 [POSITION] + */ + public void setPosition(String position){ + this.position = position ; + this.modify("position",position); + } + + /** + * 设置 [NAME] + */ + public void setName(String name){ + this.name = name ; + this.modify("name",name); + } + + /** + * 设置 [PARENT] + */ + public void setParent(BigInteger parent){ + this.parent = parent ; + this.modify("parent",parent); + } + + +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/GroupDTO.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/GroupDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..10c6b25b0535d8bfd2f6d507b3dac425e2c9231c --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/GroupDTO.java @@ -0,0 +1,101 @@ +package cn.ibizlab.pms.webapi.dto; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.math.BigInteger; +import java.util.Map; +import java.util.HashMap; +import java.io.Serializable; +import java.math.BigDecimal; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.fastjson.annotation.JSONField; +import cn.ibizlab.pms.util.domain.DTOBase; +import lombok.Data; + +/** + * 服务DTO对象[GroupDTO] + */ +@Data +public class GroupDTO extends DTOBase implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 属性 [ACL] + * + */ + @JSONField(name = "acl") + @JsonProperty("acl") + private String acl; + + /** + * 属性 [DESC] + * + */ + @JSONField(name = "desc") + @JsonProperty("desc") + private String desc; + + /** + * 属性 [ID] + * + */ + @JSONField(name = "id") + @JsonProperty("id") + private BigInteger id; + + /** + * 属性 [NAME] + * + */ + @JSONField(name = "name") + @JsonProperty("name") + private String name; + + /** + * 属性 [ROLE] + * + */ + @JSONField(name = "role") + @JsonProperty("role") + private String role; + + + /** + * 设置 [ACL] + */ + public void setAcl(String acl){ + this.acl = acl ; + this.modify("acl",acl); + } + + /** + * 设置 [DESC] + */ + public void setDesc(String desc){ + this.desc = desc ; + this.modify("desc",desc); + } + + /** + * 设置 [NAME] + */ + public void setName(String name){ + this.name = name ; + this.modify("name",name); + } + + /** + * 设置 [ROLE] + */ + public void setRole(String role){ + this.role = role ; + this.modify("role",role); + } + + +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProductDTO.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProductDTO.java index 6808792014cb557ebcd60cade671d320046f7d5a..11f2716f18a7ae81964d092ec5ed6f032fe48dd2 100644 --- a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProductDTO.java +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProductDTO.java @@ -176,6 +176,38 @@ public class ProductDTO extends DTOBase implements Serializable { @JsonProperty("line") private BigInteger line; + /** + * 属性 [ACTIVEBUGCNT] + * + */ + @JSONField(name = "activebugcnt") + @JsonProperty("activebugcnt") + private Integer activebugcnt; + + /** + * 属性 [PRODUCTPLANCNT] + * + */ + @JSONField(name = "productplancnt") + @JsonProperty("productplancnt") + private Integer productplancnt; + + /** + * 属性 [RELEASECNT] + * + */ + @JSONField(name = "releasecnt") + @JsonProperty("releasecnt") + private Integer releasecnt; + + /** + * 属性 [ACTIVESTORYCNT] + * + */ + @JSONField(name = "activestorycnt") + @JsonProperty("activestorycnt") + private Integer activestorycnt; + /** * 设置 [QD] diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProductStatsDTO.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProductStatsDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..1f76cada03bbd2a5fe594b1341b786bfa93e8621 --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProductStatsDTO.java @@ -0,0 +1,181 @@ +package cn.ibizlab.pms.webapi.dto; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.math.BigInteger; +import java.util.Map; +import java.util.HashMap; +import java.io.Serializable; +import java.math.BigDecimal; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.fastjson.annotation.JSONField; +import cn.ibizlab.pms.util.domain.DTOBase; +import lombok.Data; + +/** + * 服务DTO对象[ProductStatsDTO] + */ +@Data +public class ProductStatsDTO extends DTOBase implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 属性 [ID] + * + */ + @JSONField(name = "id") + @JsonProperty("id") + private BigInteger id; + + /** + * 属性 [DELETED] + * + */ + @JSONField(name = "deleted") + @JsonProperty("deleted") + private String deleted; + + /** + * 属性 [STORYCNT] + * + */ + @JSONField(name = "storycnt") + @JsonProperty("storycnt") + private Integer storycnt; + + /** + * 属性 [PRODUCTPLANCNT] + * + */ + @JSONField(name = "productplancnt") + @JsonProperty("productplancnt") + private Integer productplancnt; + + /** + * 属性 [RELEASECNT] + * + */ + @JSONField(name = "releasecnt") + @JsonProperty("releasecnt") + private Integer releasecnt; + + /** + * 属性 [WAITSTORYCNT] + * + */ + @JSONField(name = "waitstorycnt") + @JsonProperty("waitstorycnt") + private Integer waitstorycnt; + + /** + * 属性 [PLANNEDSTORYCNT] + * + */ + @JSONField(name = "plannedstorycnt") + @JsonProperty("plannedstorycnt") + private Integer plannedstorycnt; + + /** + * 属性 [DEVELOPINGSTORYCNT] + * + */ + @JSONField(name = "developingstorycnt") + @JsonProperty("developingstorycnt") + private Integer developingstorycnt; + + /** + * 属性 [TESTINGSTORYCNT] + * + */ + @JSONField(name = "testingstorycnt") + @JsonProperty("testingstorycnt") + private Integer testingstorycnt; + + /** + * 属性 [RELEASEDSTORYCNT] + * + */ + @JSONField(name = "releasedstorycnt") + @JsonProperty("releasedstorycnt") + private Integer releasedstorycnt; + + /** + * 属性 [UNENDPRODUCTPLANCNT] + * + */ + @JSONField(name = "unendproductplancnt") + @JsonProperty("unendproductplancnt") + private Integer unendproductplancnt; + + /** + * 属性 [UNENDPRODUCTPLANRATE] + * + */ + @JSONField(name = "unendproductplanrate") + @JsonProperty("unendproductplanrate") + private Double unendproductplanrate; + + /** + * 属性 [RESPROJECTCNT] + * + */ + @JSONField(name = "resprojectcnt") + @JsonProperty("resprojectcnt") + private Integer resprojectcnt; + + /** + * 属性 [UNDONERESPROJECTCNT] + * + */ + @JSONField(name = "undoneresprojectcnt") + @JsonProperty("undoneresprojectcnt") + private Integer undoneresprojectcnt; + + /** + * 属性 [UNDONERESPROJECTRATE] + * + */ + @JSONField(name = "undoneresprojectrate") + @JsonProperty("undoneresprojectrate") + private Integer undoneresprojectrate; + + /** + * 属性 [NORMALRELEASECNT] + * + */ + @JSONField(name = "normalreleasecnt") + @JsonProperty("normalreleasecnt") + private Integer normalreleasecnt; + + /** + * 属性 [NORMALRELEASERATE] + * + */ + @JSONField(name = "normalreleaserate") + @JsonProperty("normalreleaserate") + private Integer normalreleaserate; + + /** + * 属性 [ACTIVESTORYCNT] + * + */ + @JSONField(name = "activestorycnt") + @JsonProperty("activestorycnt") + private Integer activestorycnt; + + /** + * 属性 [ACTIVEBUGCNT] + * + */ + @JSONField(name = "activebugcnt") + @JsonProperty("activebugcnt") + private Integer activebugcnt; + + + +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProjectDTO.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProjectDTO.java index 8867c9a8fc9ec03eb569557c0f98c0f315290399..4e33726f7f6bed6a7d51b7aeba67b641c0618803 100644 --- a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProjectDTO.java +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProjectDTO.java @@ -284,6 +284,30 @@ public class ProjectDTO extends DTOBase implements Serializable { @JsonProperty("parent") private BigInteger parent; + /** + * 属性 [TASKCNT] + * + */ + @JSONField(name = "taskcnt") + @JsonProperty("taskcnt") + private Integer taskcnt; + + /** + * 属性 [BUGCNT] + * + */ + @JSONField(name = "bugcnt") + @JsonProperty("bugcnt") + private Integer bugcnt; + + /** + * 属性 [STORYCNT] + * + */ + @JSONField(name = "storycnt") + @JsonProperty("storycnt") + private Integer storycnt; + /** * 设置 [OPENEDVERSION] diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProjectStatsDTO.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProjectStatsDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..d059aa797b80cf0855ed94d2172e5b3bf03eefdf --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/ProjectStatsDTO.java @@ -0,0 +1,181 @@ +package cn.ibizlab.pms.webapi.dto; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.math.BigInteger; +import java.util.Map; +import java.util.HashMap; +import java.io.Serializable; +import java.math.BigDecimal; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.fastjson.annotation.JSONField; +import cn.ibizlab.pms.util.domain.DTOBase; +import lombok.Data; + +/** + * 服务DTO对象[ProjectStatsDTO] + */ +@Data +public class ProjectStatsDTO extends DTOBase implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 属性 [ID] + * + */ + @JSONField(name = "id") + @JsonProperty("id") + private BigInteger id; + + /** + * 属性 [STORYCNT] + * + */ + @JSONField(name = "storycnt") + @JsonProperty("storycnt") + private Integer storycnt; + + /** + * 属性 [TASKCNT] + * + */ + @JSONField(name = "taskcnt") + @JsonProperty("taskcnt") + private Integer taskcnt; + + /** + * 属性 [TOTALESTIMATE] + * + */ + @JSONField(name = "totalestimate") + @JsonProperty("totalestimate") + private Double totalestimate; + + /** + * 属性 [TOTALCONSUMED] + * + */ + @JSONField(name = "totalconsumed") + @JsonProperty("totalconsumed") + private Double totalconsumed; + + /** + * 属性 [TOTALLEFT] + * + */ + @JSONField(name = "totalleft") + @JsonProperty("totalleft") + private Double totalleft; + + /** + * 属性 [UNDONETASKCNT] + * + */ + @JSONField(name = "undonetaskcnt") + @JsonProperty("undonetaskcnt") + private Integer undonetaskcnt; + + /** + * 属性 [CLOSEDSTORYCNT] + * + */ + @JSONField(name = "closedstorycnt") + @JsonProperty("closedstorycnt") + private Integer closedstorycnt; + + /** + * 属性 [BUGCNT] + * + */ + @JSONField(name = "bugcnt") + @JsonProperty("bugcnt") + private Integer bugcnt; + + /** + * 属性 [ACTIVEBUGCNT] + * + */ + @JSONField(name = "activebugcnt") + @JsonProperty("activebugcnt") + private Integer activebugcnt; + + /** + * 属性 [UNCLOSEDSTORYCNT] + * + */ + @JSONField(name = "unclosedstorycnt") + @JsonProperty("unclosedstorycnt") + private Integer unclosedstorycnt; + + /** + * 属性 [FINISHTASKCNT] + * + */ + @JSONField(name = "finishtaskcnt") + @JsonProperty("finishtaskcnt") + private Integer finishtaskcnt; + + /** + * 属性 [FINISHBUGCNT] + * + */ + @JSONField(name = "finishbugcnt") + @JsonProperty("finishbugcnt") + private Integer finishbugcnt; + + /** + * 属性 [DONETASKRATE] + * + */ + @JSONField(name = "donetaskrate") + @JsonProperty("donetaskrate") + private Double donetaskrate; + + /** + * 属性 [CLOSEDSTORYRATE] + * + */ + @JSONField(name = "closedstoryrate") + @JsonProperty("closedstoryrate") + private Double closedstoryrate; + + /** + * 属性 [FINISHBUGRATE] + * + */ + @JSONField(name = "finishbugrate") + @JsonProperty("finishbugrate") + private Double finishbugrate; + + /** + * 属性 [DELETED] + * + */ + @JSONField(name = "deleted") + @JsonProperty("deleted") + private String deleted; + + /** + * 属性 [TIME] + * + */ + @JSONField(name = "time") + @JsonProperty("time") + private Double time; + + /** + * 属性 [TYPE] + * + */ + @JSONField(name = "type") + @JsonProperty("type") + private String type; + + + +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/SubTaskDTO.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/SubTaskDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..78a2bf9ae48711e76686260482e634e264e23c6d --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/dto/SubTaskDTO.java @@ -0,0 +1,630 @@ +package cn.ibizlab.pms.webapi.dto; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.math.BigInteger; +import java.util.Map; +import java.util.HashMap; +import java.io.Serializable; +import java.math.BigDecimal; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.fastjson.annotation.JSONField; +import cn.ibizlab.pms.util.domain.DTOBase; +import lombok.Data; + +/** + * 服务DTO对象[SubTaskDTO] + */ +@Data +public class SubTaskDTO extends DTOBase implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 属性 [CANCELEDBY] + * + */ + @JSONField(name = "canceledby") + @JsonProperty("canceledby") + private String canceledby; + + /** + * 属性 [LEFT] + * + */ + @JSONField(name = "left") + @JsonProperty("left") + private Double left; + + /** + * 属性 [OPENEDDATE] + * + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", locale = "zh" , timezone="GMT+8") + @JSONField(name = "openeddate" , format="yyyy-MM-dd HH:mm:ss") + @JsonProperty("openeddate") + private Timestamp openeddate; + + /** + * 属性 [COLOR] + * + */ + @JSONField(name = "color") + @JsonProperty("color") + private String color; + + /** + * 属性 [ID] + * + */ + @JSONField(name = "id") + @JsonProperty("id") + private BigInteger id; + + /** + * 属性 [FINISHEDBY] + * + */ + @JSONField(name = "finishedby") + @JsonProperty("finishedby") + private String finishedby; + + /** + * 属性 [FINISHEDLIST] + * + */ + @JSONField(name = "finishedlist") + @JsonProperty("finishedlist") + private String finishedlist; + + /** + * 属性 [REALSTARTED] + * + */ + @JsonFormat(pattern="yyyy-MM-dd", locale = "zh" , timezone="GMT+8") + @JSONField(name = "realstarted" , format="yyyy-MM-dd") + @JsonProperty("realstarted") + private Timestamp realstarted; + + /** + * 属性 [CLOSEDBY] + * + */ + @JSONField(name = "closedby") + @JsonProperty("closedby") + private String closedby; + + /** + * 属性 [SUBSTATUS] + * + */ + @JSONField(name = "substatus") + @JsonProperty("substatus") + private String substatus; + + /** + * 属性 [CLOSEDREASON] + * + */ + @JSONField(name = "closedreason") + @JsonProperty("closedreason") + private String closedreason; + + /** + * 属性 [LASTEDITEDDATE] + * + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", locale = "zh" , timezone="GMT+8") + @JSONField(name = "lastediteddate" , format="yyyy-MM-dd HH:mm:ss") + @JsonProperty("lastediteddate") + private Timestamp lastediteddate; + + /** + * 属性 [ASSIGNEDDATE] + * + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", locale = "zh" , timezone="GMT+8") + @JSONField(name = "assigneddate" , format="yyyy-MM-dd HH:mm:ss") + @JsonProperty("assigneddate") + private Timestamp assigneddate; + + /** + * 属性 [PRI] + * + */ + @JSONField(name = "pri") + @JsonProperty("pri") + private Integer pri; + + /** + * 属性 [LASTEDITEDBY] + * + */ + @JSONField(name = "lasteditedby") + @JsonProperty("lasteditedby") + private String lasteditedby; + + /** + * 属性 [STATUS] + * + */ + @JSONField(name = "status") + @JsonProperty("status") + private String status; + + /** + * 属性 [NAME] + * + */ + @JSONField(name = "name") + @JsonProperty("name") + private String name; + + /** + * 属性 [CLOSEDDATE] + * + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", locale = "zh" , timezone="GMT+8") + @JSONField(name = "closeddate" , format="yyyy-MM-dd HH:mm:ss") + @JsonProperty("closeddate") + private Timestamp closeddate; + + /** + * 属性 [TYPE] + * + */ + @JSONField(name = "type") + @JsonProperty("type") + private String type; + + /** + * 属性 [ASSIGNEDTO] + * + */ + @JSONField(name = "assignedto") + @JsonProperty("assignedto") + private String assignedto; + + /** + * 属性 [DESC] + * + */ + @JSONField(name = "desc") + @JsonProperty("desc") + private String desc; + + /** + * 属性 [ESTSTARTED] + * + */ + @JsonFormat(pattern="yyyy-MM-dd", locale = "zh" , timezone="GMT+8") + @JSONField(name = "eststarted" , format="yyyy-MM-dd") + @JsonProperty("eststarted") + private Timestamp eststarted; + + /** + * 属性 [DEADLINE] + * + */ + @JsonFormat(pattern="yyyy-MM-dd", locale = "zh" , timezone="GMT+8") + @JSONField(name = "deadline" , format="yyyy-MM-dd") + @JsonProperty("deadline") + private Timestamp deadline; + + /** + * 属性 [DELETED] + * + */ + @JSONField(name = "deleted") + @JsonProperty("deleted") + private String deleted; + + /** + * 属性 [MAILTO] + * + */ + @JSONField(name = "mailto") + @JsonProperty("mailto") + private String mailto; + + /** + * 属性 [CONSUMED] + * + */ + @JSONField(name = "consumed") + @JsonProperty("consumed") + private Double consumed; + + /** + * 属性 [ESTIMATE] + * + */ + @JSONField(name = "estimate") + @JsonProperty("estimate") + private Double estimate; + + /** + * 属性 [OPENEDBY] + * + */ + @JSONField(name = "openedby") + @JsonProperty("openedby") + private String openedby; + + /** + * 属性 [CANCELEDDATE] + * + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", locale = "zh" , timezone="GMT+8") + @JSONField(name = "canceleddate" , format="yyyy-MM-dd HH:mm:ss") + @JsonProperty("canceleddate") + private Timestamp canceleddate; + + /** + * 属性 [FINISHEDDATE] + * + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", locale = "zh" , timezone="GMT+8") + @JSONField(name = "finisheddate" , format="yyyy-MM-dd HH:mm:ss") + @JsonProperty("finisheddate") + private Timestamp finisheddate; + + /** + * 属性 [MODULENAME] + * + */ + @JSONField(name = "modulename") + @JsonProperty("modulename") + private String modulename; + + /** + * 属性 [STORYNAME] + * + */ + @JSONField(name = "storyname") + @JsonProperty("storyname") + private String storyname; + + /** + * 属性 [PROJECTNAME] + * + */ + @JSONField(name = "projectname") + @JsonProperty("projectname") + private String projectname; + + /** + * 属性 [PRODUCT] + * + */ + @JSONField(name = "product") + @JsonProperty("product") + private BigInteger product; + + /** + * 属性 [STORYVERSION] + * + */ + @JSONField(name = "storyversion") + @JsonProperty("storyversion") + private Integer storyversion; + + /** + * 属性 [PRODUCTNAME] + * + */ + @JSONField(name = "productname") + @JsonProperty("productname") + private String productname; + + /** + * 属性 [PARENTNAME] + * + */ + @JSONField(name = "parentname") + @JsonProperty("parentname") + private String parentname; + + /** + * 属性 [PROJECT] + * + */ + @JSONField(name = "project") + @JsonProperty("project") + private BigInteger project; + + /** + * 属性 [MODULE] + * + */ + @JSONField(name = "module") + @JsonProperty("module") + private BigInteger module; + + /** + * 属性 [STORY] + * + */ + @JSONField(name = "story") + @JsonProperty("story") + private BigInteger story; + + /** + * 属性 [PARENT] + * + */ + @JSONField(name = "parent") + @JsonProperty("parent") + private BigInteger parent; + + /** + * 属性 [FROMBUG] + * + */ + @JSONField(name = "frombug") + @JsonProperty("frombug") + private BigInteger frombug; + + /** + * 属性 [DURATION] + * + */ + @JSONField(name = "duration") + @JsonProperty("duration") + private String duration; + + + /** + * 设置 [CANCELEDBY] + */ + public void setCanceledby(String canceledby){ + this.canceledby = canceledby ; + this.modify("canceledby",canceledby); + } + + /** + * 设置 [LEFT] + */ + public void setLeft(Double left){ + this.left = left ; + this.modify("left",left); + } + + /** + * 设置 [COLOR] + */ + public void setColor(String color){ + this.color = color ; + this.modify("color",color); + } + + /** + * 设置 [FINISHEDBY] + */ + public void setFinishedby(String finishedby){ + this.finishedby = finishedby ; + this.modify("finishedby",finishedby); + } + + /** + * 设置 [FINISHEDLIST] + */ + public void setFinishedlist(String finishedlist){ + this.finishedlist = finishedlist ; + this.modify("finishedlist",finishedlist); + } + + /** + * 设置 [REALSTARTED] + */ + public void setRealstarted(Timestamp realstarted){ + this.realstarted = realstarted ; + this.modify("realstarted",realstarted); + } + + /** + * 设置 [CLOSEDBY] + */ + public void setClosedby(String closedby){ + this.closedby = closedby ; + this.modify("closedby",closedby); + } + + /** + * 设置 [SUBSTATUS] + */ + public void setSubstatus(String substatus){ + this.substatus = substatus ; + this.modify("substatus",substatus); + } + + /** + * 设置 [CLOSEDREASON] + */ + public void setClosedreason(String closedreason){ + this.closedreason = closedreason ; + this.modify("closedreason",closedreason); + } + + /** + * 设置 [ASSIGNEDDATE] + */ + public void setAssigneddate(Timestamp assigneddate){ + this.assigneddate = assigneddate ; + this.modify("assigneddate",assigneddate); + } + + /** + * 设置 [PRI] + */ + public void setPri(Integer pri){ + this.pri = pri ; + this.modify("pri",pri); + } + + /** + * 设置 [LASTEDITEDBY] + */ + public void setLasteditedby(String lasteditedby){ + this.lasteditedby = lasteditedby ; + this.modify("lasteditedby",lasteditedby); + } + + /** + * 设置 [STATUS] + */ + public void setStatus(String status){ + this.status = status ; + this.modify("status",status); + } + + /** + * 设置 [NAME] + */ + public void setName(String name){ + this.name = name ; + this.modify("name",name); + } + + /** + * 设置 [CLOSEDDATE] + */ + public void setCloseddate(Timestamp closeddate){ + this.closeddate = closeddate ; + this.modify("closeddate",closeddate); + } + + /** + * 设置 [TYPE] + */ + public void setType(String type){ + this.type = type ; + this.modify("type",type); + } + + /** + * 设置 [ASSIGNEDTO] + */ + public void setAssignedto(String assignedto){ + this.assignedto = assignedto ; + this.modify("assignedto",assignedto); + } + + /** + * 设置 [DESC] + */ + public void setDesc(String desc){ + this.desc = desc ; + this.modify("desc",desc); + } + + /** + * 设置 [ESTSTARTED] + */ + public void setEststarted(Timestamp eststarted){ + this.eststarted = eststarted ; + this.modify("eststarted",eststarted); + } + + /** + * 设置 [DEADLINE] + */ + public void setDeadline(Timestamp deadline){ + this.deadline = deadline ; + this.modify("deadline",deadline); + } + + /** + * 设置 [MAILTO] + */ + public void setMailto(String mailto){ + this.mailto = mailto ; + this.modify("mailto",mailto); + } + + /** + * 设置 [CONSUMED] + */ + public void setConsumed(Double consumed){ + this.consumed = consumed ; + this.modify("consumed",consumed); + } + + /** + * 设置 [ESTIMATE] + */ + public void setEstimate(Double estimate){ + this.estimate = estimate ; + this.modify("estimate",estimate); + } + + /** + * 设置 [CANCELEDDATE] + */ + public void setCanceleddate(Timestamp canceleddate){ + this.canceleddate = canceleddate ; + this.modify("canceleddate",canceleddate); + } + + /** + * 设置 [FINISHEDDATE] + */ + public void setFinisheddate(Timestamp finisheddate){ + this.finisheddate = finisheddate ; + this.modify("finisheddate",finisheddate); + } + + /** + * 设置 [STORYVERSION] + */ + public void setStoryversion(Integer storyversion){ + this.storyversion = storyversion ; + this.modify("storyversion",storyversion); + } + + /** + * 设置 [PROJECT] + */ + public void setProject(BigInteger project){ + this.project = project ; + this.modify("project",project); + } + + /** + * 设置 [MODULE] + */ + public void setModule(BigInteger module){ + this.module = module ; + this.modify("module",module); + } + + /** + * 设置 [STORY] + */ + public void setStory(BigInteger story){ + this.story = story ; + this.modify("story",story); + } + + /** + * 设置 [PARENT] + */ + public void setParent(BigInteger parent){ + this.parent = parent ; + this.modify("parent",parent); + } + + /** + * 设置 [FROMBUG] + */ + public void setFrombug(BigInteger frombug){ + this.frombug = frombug ; + this.modify("frombug",frombug); + } + + +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/CompanyMapping.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/CompanyMapping.java new file mode 100644 index 0000000000000000000000000000000000000000..1d51e2bcaff8e0e48639fcefdd54662413c1256a --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/CompanyMapping.java @@ -0,0 +1,16 @@ +package cn.ibizlab.pms.webapi.mapping; + +import org.mapstruct.*; +import cn.ibizlab.pms.core.zentao.domain.Company; +import cn.ibizlab.pms.webapi.dto.CompanyDTO; +import cn.ibizlab.pms.util.domain.MappingBase; +import org.mapstruct.factory.Mappers; + +@Mapper(componentModel = "spring", uses = {}, + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface CompanyMapping extends MappingBase { + + +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/DeptMapping.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/DeptMapping.java new file mode 100644 index 0000000000000000000000000000000000000000..568718e65bc77a70eefc65552f9ac19a903bec09 --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/DeptMapping.java @@ -0,0 +1,16 @@ +package cn.ibizlab.pms.webapi.mapping; + +import org.mapstruct.*; +import cn.ibizlab.pms.core.zentao.domain.Dept; +import cn.ibizlab.pms.webapi.dto.DeptDTO; +import cn.ibizlab.pms.util.domain.MappingBase; +import org.mapstruct.factory.Mappers; + +@Mapper(componentModel = "spring", uses = {}, + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface DeptMapping extends MappingBase { + + +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/GroupMapping.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/GroupMapping.java new file mode 100644 index 0000000000000000000000000000000000000000..936a81bdc2bf08c705b379426ec2074c3216593b --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/GroupMapping.java @@ -0,0 +1,16 @@ +package cn.ibizlab.pms.webapi.mapping; + +import org.mapstruct.*; +import cn.ibizlab.pms.core.zentao.domain.Group; +import cn.ibizlab.pms.webapi.dto.GroupDTO; +import cn.ibizlab.pms.util.domain.MappingBase; +import org.mapstruct.factory.Mappers; + +@Mapper(componentModel = "spring", uses = {}, + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface GroupMapping extends MappingBase { + + +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/ProductStatsMapping.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/ProductStatsMapping.java new file mode 100644 index 0000000000000000000000000000000000000000..0f6cc64b550081d4a8031c2e169dbde5ad564ac0 --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/ProductStatsMapping.java @@ -0,0 +1,16 @@ +package cn.ibizlab.pms.webapi.mapping; + +import org.mapstruct.*; +import cn.ibizlab.pms.core.ibiz.domain.ProductStats; +import cn.ibizlab.pms.webapi.dto.ProductStatsDTO; +import cn.ibizlab.pms.util.domain.MappingBase; +import org.mapstruct.factory.Mappers; + +@Mapper(componentModel = "spring", uses = {}, + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface ProductStatsMapping extends MappingBase { + + +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/ProjectStatsMapping.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/ProjectStatsMapping.java new file mode 100644 index 0000000000000000000000000000000000000000..d75f34c310eebc3a566f590a8685fccb47f23bc6 --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/ProjectStatsMapping.java @@ -0,0 +1,16 @@ +package cn.ibizlab.pms.webapi.mapping; + +import org.mapstruct.*; +import cn.ibizlab.pms.core.ibiz.domain.ProjectStats; +import cn.ibizlab.pms.webapi.dto.ProjectStatsDTO; +import cn.ibizlab.pms.util.domain.MappingBase; +import org.mapstruct.factory.Mappers; + +@Mapper(componentModel = "spring", uses = {}, + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface ProjectStatsMapping extends MappingBase { + + +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/SubTaskMapping.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/SubTaskMapping.java new file mode 100644 index 0000000000000000000000000000000000000000..f8548b503501b9c4deaae474a92362c7bd66c2d4 --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/mapping/SubTaskMapping.java @@ -0,0 +1,16 @@ +package cn.ibizlab.pms.webapi.mapping; + +import org.mapstruct.*; +import cn.ibizlab.pms.core.zentao.domain.Task; +import cn.ibizlab.pms.webapi.dto.SubTaskDTO; +import cn.ibizlab.pms.util.domain.MappingBase; +import org.mapstruct.factory.Mappers; + +@Mapper(componentModel = "spring", uses = {}, + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface SubTaskMapping extends MappingBase { + + +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/CompanyResource.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/CompanyResource.java new file mode 100644 index 0000000000000000000000000000000000000000..ee9285f3067cf94cd3f7d3e221e82d351361bf68 --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/CompanyResource.java @@ -0,0 +1,162 @@ +package cn.ibizlab.pms.webapi.rest; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.math.BigInteger; +import java.util.HashMap; +import lombok.extern.slf4j.Slf4j; +import com.alibaba.fastjson.JSONObject; +import javax.servlet.ServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cglib.beans.BeanCopier; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.http.HttpStatus; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.util.StringUtils; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.access.prepost.PostAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import cn.ibizlab.pms.webapi.dto.*; +import cn.ibizlab.pms.webapi.mapping.*; +import cn.ibizlab.pms.core.zentao.domain.Company; +import cn.ibizlab.pms.core.zentao.service.ICompanyService; +import cn.ibizlab.pms.core.zentao.filter.CompanySearchContext; + +@Slf4j +@Api(tags = {"公司" }) +@RestController("WebApi-company") +@RequestMapping("") +public class CompanyResource { + + @Autowired + public ICompanyService companyService; + + @Autowired + @Lazy + public CompanyMapping companyMapping; + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Company-Get-all')") + @ApiOperation(value = "获取公司", tags = {"公司" }, notes = "获取公司") + @RequestMapping(method = RequestMethod.GET, value = "/companies/{company_id}") + public ResponseEntity get(@PathVariable("company_id") BigInteger company_id) { + Company domain = companyService.get(company_id); + CompanyDTO dto = companyMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @ApiOperation(value = "获取公司草稿", tags = {"公司" }, notes = "获取公司草稿") + @RequestMapping(method = RequestMethod.GET, value = "/companies/getdraft") + public ResponseEntity getDraft() { + return ResponseEntity.status(HttpStatus.OK).body(companyMapping.toDto(companyService.getDraft(new Company()))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Company-Remove-all')") + @ApiOperation(value = "删除公司", tags = {"公司" }, notes = "删除公司") + @RequestMapping(method = RequestMethod.DELETE, value = "/companies/{company_id}") + @Transactional + public ResponseEntity remove(@PathVariable("company_id") BigInteger company_id) { + return ResponseEntity.status(HttpStatus.OK).body(companyService.remove(company_id)); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Company-Remove-all')") + @ApiOperation(value = "批量删除公司", tags = {"公司" }, notes = "批量删除公司") + @RequestMapping(method = RequestMethod.DELETE, value = "/companies/batch") + public ResponseEntity removeBatch(@RequestBody List ids) { + companyService.removeBatch(ids); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @ApiOperation(value = "检查公司", tags = {"公司" }, notes = "检查公司") + @RequestMapping(method = RequestMethod.POST, value = "/companies/checkkey") + public ResponseEntity checkKey(@RequestBody CompanyDTO companydto) { + return ResponseEntity.status(HttpStatus.OK).body(companyService.checkKey(companyMapping.toDomain(companydto))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Company-Update-all')") + @ApiOperation(value = "更新公司", tags = {"公司" }, notes = "更新公司") + @RequestMapping(method = RequestMethod.PUT, value = "/companies/{company_id}") + @Transactional + public ResponseEntity update(@PathVariable("company_id") BigInteger company_id, @RequestBody CompanyDTO companydto) { + Company domain = companyMapping.toDomain(companydto); + domain .setId(company_id); + companyService.update(domain ); + CompanyDTO dto = companyMapping.toDto(domain ); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Company-Update-all')") + @ApiOperation(value = "批量更新公司", tags = {"公司" }, notes = "批量更新公司") + @RequestMapping(method = RequestMethod.PUT, value = "/companies/batch") + public ResponseEntity updateBatch(@RequestBody List companydtos) { + companyService.updateBatch(companyMapping.toDomain(companydtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Company-Save-all')") + @ApiOperation(value = "保存公司", tags = {"公司" }, notes = "保存公司") + @RequestMapping(method = RequestMethod.POST, value = "/companies/save") + public ResponseEntity save(@RequestBody CompanyDTO companydto) { + return ResponseEntity.status(HttpStatus.OK).body(companyService.save(companyMapping.toDomain(companydto))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Company-Save-all')") + @ApiOperation(value = "批量保存公司", tags = {"公司" }, notes = "批量保存公司") + @RequestMapping(method = RequestMethod.POST, value = "/companies/savebatch") + public ResponseEntity saveBatch(@RequestBody List companydtos) { + companyService.saveBatch(companyMapping.toDomain(companydtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Company-Create-all')") + @ApiOperation(value = "新建公司", tags = {"公司" }, notes = "新建公司") + @RequestMapping(method = RequestMethod.POST, value = "/companies") + @Transactional + public ResponseEntity create(@RequestBody CompanyDTO companydto) { + Company domain = companyMapping.toDomain(companydto); + companyService.create(domain); + CompanyDTO dto = companyMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Company-Create-all')") + @ApiOperation(value = "批量新建公司", tags = {"公司" }, notes = "批量新建公司") + @RequestMapping(method = RequestMethod.POST, value = "/companies/batch") + public ResponseEntity createBatch(@RequestBody List companydtos) { + companyService.createBatch(companyMapping.toDomain(companydtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Company-Default-all')") + @ApiOperation(value = "获取DEFAULT", tags = {"公司" } ,notes = "获取DEFAULT") + @RequestMapping(method= RequestMethod.GET , value="/companies/fetchdefault") + public ResponseEntity> fetchDefault(CompanySearchContext context) { + Page domains = companyService.searchDefault(context) ; + List list = companyMapping.toDto(domains.getContent()); + return ResponseEntity.status(HttpStatus.OK) + .header("x-page", String.valueOf(context.getPageable().getPageNumber())) + .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) + .header("x-total", String.valueOf(domains.getTotalElements())) + .body(list); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Company-Default-all')") + @ApiOperation(value = "查询DEFAULT", tags = {"公司" } ,notes = "查询DEFAULT") + @RequestMapping(method= RequestMethod.POST , value="/companies/searchdefault") + public ResponseEntity> searchDefault(@RequestBody CompanySearchContext context) { + Page domains = companyService.searchDefault(context) ; + return ResponseEntity.status(HttpStatus.OK) + .body(new PageImpl(companyMapping.toDto(domains.getContent()), context.getPageable(), domains.getTotalElements())); + } +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/DeptResource.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/DeptResource.java new file mode 100644 index 0000000000000000000000000000000000000000..5e71c346a07cce4c7f6d9bfeccd710db10d7f690 --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/DeptResource.java @@ -0,0 +1,183 @@ +package cn.ibizlab.pms.webapi.rest; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.math.BigInteger; +import java.util.HashMap; +import lombok.extern.slf4j.Slf4j; +import com.alibaba.fastjson.JSONObject; +import javax.servlet.ServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cglib.beans.BeanCopier; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.http.HttpStatus; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.util.StringUtils; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.access.prepost.PostAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import cn.ibizlab.pms.webapi.dto.*; +import cn.ibizlab.pms.webapi.mapping.*; +import cn.ibizlab.pms.core.zentao.domain.Dept; +import cn.ibizlab.pms.core.zentao.service.IDeptService; +import cn.ibizlab.pms.core.zentao.filter.DeptSearchContext; + +@Slf4j +@Api(tags = {"部门" }) +@RestController("WebApi-dept") +@RequestMapping("") +public class DeptResource { + + @Autowired + public IDeptService deptService; + + @Autowired + @Lazy + public DeptMapping deptMapping; + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Dept-Save-all')") + @ApiOperation(value = "保存部门", tags = {"部门" }, notes = "保存部门") + @RequestMapping(method = RequestMethod.POST, value = "/depts/save") + public ResponseEntity save(@RequestBody DeptDTO deptdto) { + return ResponseEntity.status(HttpStatus.OK).body(deptService.save(deptMapping.toDomain(deptdto))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Dept-Save-all')") + @ApiOperation(value = "批量保存部门", tags = {"部门" }, notes = "批量保存部门") + @RequestMapping(method = RequestMethod.POST, value = "/depts/savebatch") + public ResponseEntity saveBatch(@RequestBody List deptdtos) { + deptService.saveBatch(deptMapping.toDomain(deptdtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Dept-Create-all')") + @ApiOperation(value = "新建部门", tags = {"部门" }, notes = "新建部门") + @RequestMapping(method = RequestMethod.POST, value = "/depts") + @Transactional + public ResponseEntity create(@RequestBody DeptDTO deptdto) { + Dept domain = deptMapping.toDomain(deptdto); + deptService.create(domain); + DeptDTO dto = deptMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Dept-Create-all')") + @ApiOperation(value = "批量新建部门", tags = {"部门" }, notes = "批量新建部门") + @RequestMapping(method = RequestMethod.POST, value = "/depts/batch") + public ResponseEntity createBatch(@RequestBody List deptdtos) { + deptService.createBatch(deptMapping.toDomain(deptdtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Dept-Remove-all')") + @ApiOperation(value = "删除部门", tags = {"部门" }, notes = "删除部门") + @RequestMapping(method = RequestMethod.DELETE, value = "/depts/{dept_id}") + @Transactional + public ResponseEntity remove(@PathVariable("dept_id") BigInteger dept_id) { + return ResponseEntity.status(HttpStatus.OK).body(deptService.remove(dept_id)); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Dept-Remove-all')") + @ApiOperation(value = "批量删除部门", tags = {"部门" }, notes = "批量删除部门") + @RequestMapping(method = RequestMethod.DELETE, value = "/depts/batch") + public ResponseEntity removeBatch(@RequestBody List ids) { + deptService.removeBatch(ids); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Dept-Update-all')") + @ApiOperation(value = "更新部门", tags = {"部门" }, notes = "更新部门") + @RequestMapping(method = RequestMethod.PUT, value = "/depts/{dept_id}") + @Transactional + public ResponseEntity update(@PathVariable("dept_id") BigInteger dept_id, @RequestBody DeptDTO deptdto) { + Dept domain = deptMapping.toDomain(deptdto); + domain .setId(dept_id); + deptService.update(domain ); + DeptDTO dto = deptMapping.toDto(domain ); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Dept-Update-all')") + @ApiOperation(value = "批量更新部门", tags = {"部门" }, notes = "批量更新部门") + @RequestMapping(method = RequestMethod.PUT, value = "/depts/batch") + public ResponseEntity updateBatch(@RequestBody List deptdtos) { + deptService.updateBatch(deptMapping.toDomain(deptdtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @ApiOperation(value = "获取部门草稿", tags = {"部门" }, notes = "获取部门草稿") + @RequestMapping(method = RequestMethod.GET, value = "/depts/getdraft") + public ResponseEntity getDraft() { + return ResponseEntity.status(HttpStatus.OK).body(deptMapping.toDto(deptService.getDraft(new Dept()))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Dept-Get-all')") + @ApiOperation(value = "获取部门", tags = {"部门" }, notes = "获取部门") + @RequestMapping(method = RequestMethod.GET, value = "/depts/{dept_id}") + public ResponseEntity get(@PathVariable("dept_id") BigInteger dept_id) { + Dept domain = deptService.get(dept_id); + DeptDTO dto = deptMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @ApiOperation(value = "检查部门", tags = {"部门" }, notes = "检查部门") + @RequestMapping(method = RequestMethod.POST, value = "/depts/checkkey") + public ResponseEntity checkKey(@RequestBody DeptDTO deptdto) { + return ResponseEntity.status(HttpStatus.OK).body(deptService.checkKey(deptMapping.toDomain(deptdto))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Dept-Default-all')") + @ApiOperation(value = "获取DEFAULT", tags = {"部门" } ,notes = "获取DEFAULT") + @RequestMapping(method= RequestMethod.GET , value="/depts/fetchdefault") + public ResponseEntity> fetchDefault(DeptSearchContext context) { + Page domains = deptService.searchDefault(context) ; + List list = deptMapping.toDto(domains.getContent()); + return ResponseEntity.status(HttpStatus.OK) + .header("x-page", String.valueOf(context.getPageable().getPageNumber())) + .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) + .header("x-total", String.valueOf(domains.getTotalElements())) + .body(list); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Dept-Default-all')") + @ApiOperation(value = "查询DEFAULT", tags = {"部门" } ,notes = "查询DEFAULT") + @RequestMapping(method= RequestMethod.POST , value="/depts/searchdefault") + public ResponseEntity> searchDefault(@RequestBody DeptSearchContext context) { + Page domains = deptService.searchDefault(context) ; + return ResponseEntity.status(HttpStatus.OK) + .body(new PageImpl(deptMapping.toDto(domains.getContent()), context.getPageable(), domains.getTotalElements())); + } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Dept-Root-all')") + @ApiOperation(value = "获取根部门", tags = {"部门" } ,notes = "获取根部门") + @RequestMapping(method= RequestMethod.GET , value="/depts/fetchroot") + public ResponseEntity> fetchRoot(DeptSearchContext context) { + Page domains = deptService.searchRoot(context) ; + List list = deptMapping.toDto(domains.getContent()); + return ResponseEntity.status(HttpStatus.OK) + .header("x-page", String.valueOf(context.getPageable().getPageNumber())) + .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) + .header("x-total", String.valueOf(domains.getTotalElements())) + .body(list); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Dept-Root-all')") + @ApiOperation(value = "查询根部门", tags = {"部门" } ,notes = "查询根部门") + @RequestMapping(method= RequestMethod.POST , value="/depts/searchroot") + public ResponseEntity> searchRoot(@RequestBody DeptSearchContext context) { + Page domains = deptService.searchRoot(context) ; + return ResponseEntity.status(HttpStatus.OK) + .body(new PageImpl(deptMapping.toDto(domains.getContent()), context.getPageable(), domains.getTotalElements())); + } +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/GroupResource.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/GroupResource.java new file mode 100644 index 0000000000000000000000000000000000000000..aed89e5781857673066c8a267441f6f3a80fcf94 --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/GroupResource.java @@ -0,0 +1,162 @@ +package cn.ibizlab.pms.webapi.rest; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.math.BigInteger; +import java.util.HashMap; +import lombok.extern.slf4j.Slf4j; +import com.alibaba.fastjson.JSONObject; +import javax.servlet.ServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cglib.beans.BeanCopier; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.http.HttpStatus; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.util.StringUtils; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.access.prepost.PostAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import cn.ibizlab.pms.webapi.dto.*; +import cn.ibizlab.pms.webapi.mapping.*; +import cn.ibizlab.pms.core.zentao.domain.Group; +import cn.ibizlab.pms.core.zentao.service.IGroupService; +import cn.ibizlab.pms.core.zentao.filter.GroupSearchContext; + +@Slf4j +@Api(tags = {"群组" }) +@RestController("WebApi-group") +@RequestMapping("") +public class GroupResource { + + @Autowired + public IGroupService groupService; + + @Autowired + @Lazy + public GroupMapping groupMapping; + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Group-Remove-all')") + @ApiOperation(value = "删除群组", tags = {"群组" }, notes = "删除群组") + @RequestMapping(method = RequestMethod.DELETE, value = "/groups/{group_id}") + @Transactional + public ResponseEntity remove(@PathVariable("group_id") BigInteger group_id) { + return ResponseEntity.status(HttpStatus.OK).body(groupService.remove(group_id)); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Group-Remove-all')") + @ApiOperation(value = "批量删除群组", tags = {"群组" }, notes = "批量删除群组") + @RequestMapping(method = RequestMethod.DELETE, value = "/groups/batch") + public ResponseEntity removeBatch(@RequestBody List ids) { + groupService.removeBatch(ids); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Group-Get-all')") + @ApiOperation(value = "获取群组", tags = {"群组" }, notes = "获取群组") + @RequestMapping(method = RequestMethod.GET, value = "/groups/{group_id}") + public ResponseEntity get(@PathVariable("group_id") BigInteger group_id) { + Group domain = groupService.get(group_id); + GroupDTO dto = groupMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Group-Create-all')") + @ApiOperation(value = "新建群组", tags = {"群组" }, notes = "新建群组") + @RequestMapping(method = RequestMethod.POST, value = "/groups") + @Transactional + public ResponseEntity create(@RequestBody GroupDTO groupdto) { + Group domain = groupMapping.toDomain(groupdto); + groupService.create(domain); + GroupDTO dto = groupMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Group-Create-all')") + @ApiOperation(value = "批量新建群组", tags = {"群组" }, notes = "批量新建群组") + @RequestMapping(method = RequestMethod.POST, value = "/groups/batch") + public ResponseEntity createBatch(@RequestBody List groupdtos) { + groupService.createBatch(groupMapping.toDomain(groupdtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Group-Save-all')") + @ApiOperation(value = "保存群组", tags = {"群组" }, notes = "保存群组") + @RequestMapping(method = RequestMethod.POST, value = "/groups/save") + public ResponseEntity save(@RequestBody GroupDTO groupdto) { + return ResponseEntity.status(HttpStatus.OK).body(groupService.save(groupMapping.toDomain(groupdto))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Group-Save-all')") + @ApiOperation(value = "批量保存群组", tags = {"群组" }, notes = "批量保存群组") + @RequestMapping(method = RequestMethod.POST, value = "/groups/savebatch") + public ResponseEntity saveBatch(@RequestBody List groupdtos) { + groupService.saveBatch(groupMapping.toDomain(groupdtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @ApiOperation(value = "获取群组草稿", tags = {"群组" }, notes = "获取群组草稿") + @RequestMapping(method = RequestMethod.GET, value = "/groups/getdraft") + public ResponseEntity getDraft() { + return ResponseEntity.status(HttpStatus.OK).body(groupMapping.toDto(groupService.getDraft(new Group()))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Group-Update-all')") + @ApiOperation(value = "更新群组", tags = {"群组" }, notes = "更新群组") + @RequestMapping(method = RequestMethod.PUT, value = "/groups/{group_id}") + @Transactional + public ResponseEntity update(@PathVariable("group_id") BigInteger group_id, @RequestBody GroupDTO groupdto) { + Group domain = groupMapping.toDomain(groupdto); + domain .setId(group_id); + groupService.update(domain ); + GroupDTO dto = groupMapping.toDto(domain ); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Group-Update-all')") + @ApiOperation(value = "批量更新群组", tags = {"群组" }, notes = "批量更新群组") + @RequestMapping(method = RequestMethod.PUT, value = "/groups/batch") + public ResponseEntity updateBatch(@RequestBody List groupdtos) { + groupService.updateBatch(groupMapping.toDomain(groupdtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @ApiOperation(value = "检查群组", tags = {"群组" }, notes = "检查群组") + @RequestMapping(method = RequestMethod.POST, value = "/groups/checkkey") + public ResponseEntity checkKey(@RequestBody GroupDTO groupdto) { + return ResponseEntity.status(HttpStatus.OK).body(groupService.checkKey(groupMapping.toDomain(groupdto))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Group-Default-all')") + @ApiOperation(value = "获取DEFAULT", tags = {"群组" } ,notes = "获取DEFAULT") + @RequestMapping(method= RequestMethod.GET , value="/groups/fetchdefault") + public ResponseEntity> fetchDefault(GroupSearchContext context) { + Page domains = groupService.searchDefault(context) ; + List list = groupMapping.toDto(domains.getContent()); + return ResponseEntity.status(HttpStatus.OK) + .header("x-page", String.valueOf(context.getPageable().getPageNumber())) + .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) + .header("x-total", String.valueOf(domains.getTotalElements())) + .body(list); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Group-Default-all')") + @ApiOperation(value = "查询DEFAULT", tags = {"群组" } ,notes = "查询DEFAULT") + @RequestMapping(method= RequestMethod.POST , value="/groups/searchdefault") + public ResponseEntity> searchDefault(@RequestBody GroupSearchContext context) { + Page domains = groupService.searchDefault(context) ; + return ResponseEntity.status(HttpStatus.OK) + .body(new PageImpl(groupMapping.toDto(domains.getContent()), context.getPageable(), domains.getTotalElements())); + } +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/ProductResource.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/ProductResource.java index fdf4760d88213d47ac4bf952844b2526d296d509..ee5f9bf013592bf519dac679877310b3226c3f66 100644 --- a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/ProductResource.java +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/ProductResource.java @@ -102,6 +102,18 @@ public class ProductResource { return ResponseEntity.status(HttpStatus.OK).body(true); } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Product-Close-all')") + @ApiOperation(value = "关闭", tags = {"产品" }, notes = "关闭") + @RequestMapping(method = RequestMethod.POST, value = "/products/{product_id}/close") + @Transactional + public ResponseEntity close(@PathVariable("product_id") BigInteger product_id, @RequestBody ProductDTO productdto) { + Product product = productMapping.toDomain(productdto); + product.setId(product_id); + product = productService.close(product); + productdto = productMapping.toDto(product); + return ResponseEntity.status(HttpStatus.OK).body(productdto); + } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Product-Remove-all')") @ApiOperation(value = "删除产品", tags = {"产品" }, notes = "删除产品") @RequestMapping(method = RequestMethod.DELETE, value = "/products/{product_id}") diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/ProductStatsResource.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/ProductStatsResource.java new file mode 100644 index 0000000000000000000000000000000000000000..b18a02bd59daaef1312c5d6fba118c18e4daad7f --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/ProductStatsResource.java @@ -0,0 +1,162 @@ +package cn.ibizlab.pms.webapi.rest; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.math.BigInteger; +import java.util.HashMap; +import lombok.extern.slf4j.Slf4j; +import com.alibaba.fastjson.JSONObject; +import javax.servlet.ServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cglib.beans.BeanCopier; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.http.HttpStatus; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.util.StringUtils; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.access.prepost.PostAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import cn.ibizlab.pms.webapi.dto.*; +import cn.ibizlab.pms.webapi.mapping.*; +import cn.ibizlab.pms.core.ibiz.domain.ProductStats; +import cn.ibizlab.pms.core.ibiz.service.IProductStatsService; +import cn.ibizlab.pms.core.ibiz.filter.ProductStatsSearchContext; + +@Slf4j +@Api(tags = {"产品统计" }) +@RestController("WebApi-productstats") +@RequestMapping("") +public class ProductStatsResource { + + @Autowired + public IProductStatsService productstatsService; + + @Autowired + @Lazy + public ProductStatsMapping productstatsMapping; + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProductStats-Update-all')") + @ApiOperation(value = "更新产品统计", tags = {"产品统计" }, notes = "更新产品统计") + @RequestMapping(method = RequestMethod.PUT, value = "/productstats/{productstats_id}") + @Transactional + public ResponseEntity update(@PathVariable("productstats_id") BigInteger productstats_id, @RequestBody ProductStatsDTO productstatsdto) { + ProductStats domain = productstatsMapping.toDomain(productstatsdto); + domain .setId(productstats_id); + productstatsService.update(domain ); + ProductStatsDTO dto = productstatsMapping.toDto(domain ); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProductStats-Update-all')") + @ApiOperation(value = "批量更新产品统计", tags = {"产品统计" }, notes = "批量更新产品统计") + @RequestMapping(method = RequestMethod.PUT, value = "/productstats/batch") + public ResponseEntity updateBatch(@RequestBody List productstatsdtos) { + productstatsService.updateBatch(productstatsMapping.toDomain(productstatsdtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @ApiOperation(value = "获取产品统计草稿", tags = {"产品统计" }, notes = "获取产品统计草稿") + @RequestMapping(method = RequestMethod.GET, value = "/productstats/getdraft") + public ResponseEntity getDraft() { + return ResponseEntity.status(HttpStatus.OK).body(productstatsMapping.toDto(productstatsService.getDraft(new ProductStats()))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProductStats-Save-all')") + @ApiOperation(value = "保存产品统计", tags = {"产品统计" }, notes = "保存产品统计") + @RequestMapping(method = RequestMethod.POST, value = "/productstats/save") + public ResponseEntity save(@RequestBody ProductStatsDTO productstatsdto) { + return ResponseEntity.status(HttpStatus.OK).body(productstatsService.save(productstatsMapping.toDomain(productstatsdto))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProductStats-Save-all')") + @ApiOperation(value = "批量保存产品统计", tags = {"产品统计" }, notes = "批量保存产品统计") + @RequestMapping(method = RequestMethod.POST, value = "/productstats/savebatch") + public ResponseEntity saveBatch(@RequestBody List productstatsdtos) { + productstatsService.saveBatch(productstatsMapping.toDomain(productstatsdtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProductStats-Create-all')") + @ApiOperation(value = "新建产品统计", tags = {"产品统计" }, notes = "新建产品统计") + @RequestMapping(method = RequestMethod.POST, value = "/productstats") + @Transactional + public ResponseEntity create(@RequestBody ProductStatsDTO productstatsdto) { + ProductStats domain = productstatsMapping.toDomain(productstatsdto); + productstatsService.create(domain); + ProductStatsDTO dto = productstatsMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProductStats-Create-all')") + @ApiOperation(value = "批量新建产品统计", tags = {"产品统计" }, notes = "批量新建产品统计") + @RequestMapping(method = RequestMethod.POST, value = "/productstats/batch") + public ResponseEntity createBatch(@RequestBody List productstatsdtos) { + productstatsService.createBatch(productstatsMapping.toDomain(productstatsdtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProductStats-Get-all')") + @ApiOperation(value = "获取产品统计", tags = {"产品统计" }, notes = "获取产品统计") + @RequestMapping(method = RequestMethod.GET, value = "/productstats/{productstats_id}") + public ResponseEntity get(@PathVariable("productstats_id") BigInteger productstats_id) { + ProductStats domain = productstatsService.get(productstats_id); + ProductStatsDTO dto = productstatsMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @ApiOperation(value = "检查产品统计", tags = {"产品统计" }, notes = "检查产品统计") + @RequestMapping(method = RequestMethod.POST, value = "/productstats/checkkey") + public ResponseEntity checkKey(@RequestBody ProductStatsDTO productstatsdto) { + return ResponseEntity.status(HttpStatus.OK).body(productstatsService.checkKey(productstatsMapping.toDomain(productstatsdto))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProductStats-Remove-all')") + @ApiOperation(value = "删除产品统计", tags = {"产品统计" }, notes = "删除产品统计") + @RequestMapping(method = RequestMethod.DELETE, value = "/productstats/{productstats_id}") + @Transactional + public ResponseEntity remove(@PathVariable("productstats_id") BigInteger productstats_id) { + return ResponseEntity.status(HttpStatus.OK).body(productstatsService.remove(productstats_id)); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProductStats-Remove-all')") + @ApiOperation(value = "批量删除产品统计", tags = {"产品统计" }, notes = "批量删除产品统计") + @RequestMapping(method = RequestMethod.DELETE, value = "/productstats/batch") + public ResponseEntity removeBatch(@RequestBody List ids) { + productstatsService.removeBatch(ids); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProductStats-Default-all')") + @ApiOperation(value = "获取DEFAULT", tags = {"产品统计" } ,notes = "获取DEFAULT") + @RequestMapping(method= RequestMethod.GET , value="/productstats/fetchdefault") + public ResponseEntity> fetchDefault(ProductStatsSearchContext context) { + Page domains = productstatsService.searchDefault(context) ; + List list = productstatsMapping.toDto(domains.getContent()); + return ResponseEntity.status(HttpStatus.OK) + .header("x-page", String.valueOf(context.getPageable().getPageNumber())) + .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) + .header("x-total", String.valueOf(domains.getTotalElements())) + .body(list); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProductStats-Default-all')") + @ApiOperation(value = "查询DEFAULT", tags = {"产品统计" } ,notes = "查询DEFAULT") + @RequestMapping(method= RequestMethod.POST , value="/productstats/searchdefault") + public ResponseEntity> searchDefault(@RequestBody ProductStatsSearchContext context) { + Page domains = productstatsService.searchDefault(context) ; + return ResponseEntity.status(HttpStatus.OK) + .body(new PageImpl(productstatsMapping.toDto(domains.getContent()), context.getPageable(), domains.getTotalElements())); + } +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/ProjectStatsResource.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/ProjectStatsResource.java new file mode 100644 index 0000000000000000000000000000000000000000..c6bc81eb1b588369a4ef2d70014d8f6b2a0301a2 --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/ProjectStatsResource.java @@ -0,0 +1,183 @@ +package cn.ibizlab.pms.webapi.rest; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.math.BigInteger; +import java.util.HashMap; +import lombok.extern.slf4j.Slf4j; +import com.alibaba.fastjson.JSONObject; +import javax.servlet.ServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cglib.beans.BeanCopier; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.http.HttpStatus; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.util.StringUtils; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.access.prepost.PostAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import cn.ibizlab.pms.webapi.dto.*; +import cn.ibizlab.pms.webapi.mapping.*; +import cn.ibizlab.pms.core.ibiz.domain.ProjectStats; +import cn.ibizlab.pms.core.ibiz.service.IProjectStatsService; +import cn.ibizlab.pms.core.ibiz.filter.ProjectStatsSearchContext; + +@Slf4j +@Api(tags = {"项目统计" }) +@RestController("WebApi-projectstats") +@RequestMapping("") +public class ProjectStatsResource { + + @Autowired + public IProjectStatsService projectstatsService; + + @Autowired + @Lazy + public ProjectStatsMapping projectstatsMapping; + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProjectStats-Get-all')") + @ApiOperation(value = "获取项目统计", tags = {"项目统计" }, notes = "获取项目统计") + @RequestMapping(method = RequestMethod.GET, value = "/projectstats/{projectstats_id}") + public ResponseEntity get(@PathVariable("projectstats_id") BigInteger projectstats_id) { + ProjectStats domain = projectstatsService.get(projectstats_id); + ProjectStatsDTO dto = projectstatsMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProjectStats-Update-all')") + @ApiOperation(value = "更新项目统计", tags = {"项目统计" }, notes = "更新项目统计") + @RequestMapping(method = RequestMethod.PUT, value = "/projectstats/{projectstats_id}") + @Transactional + public ResponseEntity update(@PathVariable("projectstats_id") BigInteger projectstats_id, @RequestBody ProjectStatsDTO projectstatsdto) { + ProjectStats domain = projectstatsMapping.toDomain(projectstatsdto); + domain .setId(projectstats_id); + projectstatsService.update(domain ); + ProjectStatsDTO dto = projectstatsMapping.toDto(domain ); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProjectStats-Update-all')") + @ApiOperation(value = "批量更新项目统计", tags = {"项目统计" }, notes = "批量更新项目统计") + @RequestMapping(method = RequestMethod.PUT, value = "/projectstats/batch") + public ResponseEntity updateBatch(@RequestBody List projectstatsdtos) { + projectstatsService.updateBatch(projectstatsMapping.toDomain(projectstatsdtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProjectStats-Remove-all')") + @ApiOperation(value = "删除项目统计", tags = {"项目统计" }, notes = "删除项目统计") + @RequestMapping(method = RequestMethod.DELETE, value = "/projectstats/{projectstats_id}") + @Transactional + public ResponseEntity remove(@PathVariable("projectstats_id") BigInteger projectstats_id) { + return ResponseEntity.status(HttpStatus.OK).body(projectstatsService.remove(projectstats_id)); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProjectStats-Remove-all')") + @ApiOperation(value = "批量删除项目统计", tags = {"项目统计" }, notes = "批量删除项目统计") + @RequestMapping(method = RequestMethod.DELETE, value = "/projectstats/batch") + public ResponseEntity removeBatch(@RequestBody List ids) { + projectstatsService.removeBatch(ids); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProjectStats-Save-all')") + @ApiOperation(value = "保存项目统计", tags = {"项目统计" }, notes = "保存项目统计") + @RequestMapping(method = RequestMethod.POST, value = "/projectstats/save") + public ResponseEntity save(@RequestBody ProjectStatsDTO projectstatsdto) { + return ResponseEntity.status(HttpStatus.OK).body(projectstatsService.save(projectstatsMapping.toDomain(projectstatsdto))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProjectStats-Save-all')") + @ApiOperation(value = "批量保存项目统计", tags = {"项目统计" }, notes = "批量保存项目统计") + @RequestMapping(method = RequestMethod.POST, value = "/projectstats/savebatch") + public ResponseEntity saveBatch(@RequestBody List projectstatsdtos) { + projectstatsService.saveBatch(projectstatsMapping.toDomain(projectstatsdtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProjectStats-Create-all')") + @ApiOperation(value = "新建项目统计", tags = {"项目统计" }, notes = "新建项目统计") + @RequestMapping(method = RequestMethod.POST, value = "/projectstats") + @Transactional + public ResponseEntity create(@RequestBody ProjectStatsDTO projectstatsdto) { + ProjectStats domain = projectstatsMapping.toDomain(projectstatsdto); + projectstatsService.create(domain); + ProjectStatsDTO dto = projectstatsMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProjectStats-Create-all')") + @ApiOperation(value = "批量新建项目统计", tags = {"项目统计" }, notes = "批量新建项目统计") + @RequestMapping(method = RequestMethod.POST, value = "/projectstats/batch") + public ResponseEntity createBatch(@RequestBody List projectstatsdtos) { + projectstatsService.createBatch(projectstatsMapping.toDomain(projectstatsdtos)); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @ApiOperation(value = "检查项目统计", tags = {"项目统计" }, notes = "检查项目统计") + @RequestMapping(method = RequestMethod.POST, value = "/projectstats/checkkey") + public ResponseEntity checkKey(@RequestBody ProjectStatsDTO projectstatsdto) { + return ResponseEntity.status(HttpStatus.OK).body(projectstatsService.checkKey(projectstatsMapping.toDomain(projectstatsdto))); + } + + @ApiOperation(value = "获取项目统计草稿", tags = {"项目统计" }, notes = "获取项目统计草稿") + @RequestMapping(method = RequestMethod.GET, value = "/projectstats/getdraft") + public ResponseEntity getDraft() { + return ResponseEntity.status(HttpStatus.OK).body(projectstatsMapping.toDto(projectstatsService.getDraft(new ProjectStats()))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProjectStats-TaskTime-all')") + @ApiOperation(value = "获取任务工时消耗剩余查询", tags = {"项目统计" } ,notes = "获取任务工时消耗剩余查询") + @RequestMapping(method= RequestMethod.GET , value="/projectstats/fetchtasktime") + public ResponseEntity> fetchTaskTime(ProjectStatsSearchContext context) { + Page domains = projectstatsService.searchTaskTime(context) ; + List list = projectstatsMapping.toDto(domains.getContent()); + return ResponseEntity.status(HttpStatus.OK) + .header("x-page", String.valueOf(context.getPageable().getPageNumber())) + .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) + .header("x-total", String.valueOf(domains.getTotalElements())) + .body(list); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProjectStats-TaskTime-all')") + @ApiOperation(value = "查询任务工时消耗剩余查询", tags = {"项目统计" } ,notes = "查询任务工时消耗剩余查询") + @RequestMapping(method= RequestMethod.POST , value="/projectstats/searchtasktime") + public ResponseEntity> searchTaskTime(@RequestBody ProjectStatsSearchContext context) { + Page domains = projectstatsService.searchTaskTime(context) ; + return ResponseEntity.status(HttpStatus.OK) + .body(new PageImpl(projectstatsMapping.toDto(domains.getContent()), context.getPageable(), domains.getTotalElements())); + } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProjectStats-Default-all')") + @ApiOperation(value = "获取DEFAULT", tags = {"项目统计" } ,notes = "获取DEFAULT") + @RequestMapping(method= RequestMethod.GET , value="/projectstats/fetchdefault") + public ResponseEntity> fetchDefault(ProjectStatsSearchContext context) { + Page domains = projectstatsService.searchDefault(context) ; + List list = projectstatsMapping.toDto(domains.getContent()); + return ResponseEntity.status(HttpStatus.OK) + .header("x-page", String.valueOf(context.getPageable().getPageNumber())) + .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) + .header("x-total", String.valueOf(domains.getTotalElements())) + .body(list); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-ProjectStats-Default-all')") + @ApiOperation(value = "查询DEFAULT", tags = {"项目统计" } ,notes = "查询DEFAULT") + @RequestMapping(method= RequestMethod.POST , value="/projectstats/searchdefault") + public ResponseEntity> searchDefault(@RequestBody ProjectStatsSearchContext context) { + Page domains = projectstatsService.searchDefault(context) ; + return ResponseEntity.status(HttpStatus.OK) + .body(new PageImpl(projectstatsMapping.toDto(domains.getContent()), context.getPageable(), domains.getTotalElements())); + } +} + diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/StoryResource.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/StoryResource.java index 81d385e359a9b03955f816e737178ae6b085fca1..d27ebdb239fdec0aa829cbeefedc7b215223a6f0 100644 --- a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/StoryResource.java +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/StoryResource.java @@ -71,6 +71,54 @@ public class StoryResource { return ResponseEntity.status(HttpStatus.OK).body(true); } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchChangeStage-all')") + @ApiOperation(value = "批量变更阶段", tags = {"需求" }, notes = "批量变更阶段") + @RequestMapping(method = RequestMethod.POST, value = "/stories/{story_id}/batchchangestage") + @Transactional + public ResponseEntity batchChangeStage(@PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story story = storyMapping.toDomain(storydto); + story.setId(story_id); + story = storyService.batchChangeStage(story); + storydto = storyMapping.toDto(story); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchChangePlan-all')") + @ApiOperation(value = "批量关联计划", tags = {"需求" }, notes = "批量关联计划") + @RequestMapping(method = RequestMethod.POST, value = "/stories/{story_id}/batchchangeplan") + @Transactional + public ResponseEntity batchChangePlan(@PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story story = storyMapping.toDomain(storydto); + story.setId(story_id); + story = storyService.batchChangePlan(story); + storydto = storyMapping.toDto(story); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchClose-all')") + @ApiOperation(value = "批量关闭", tags = {"需求" }, notes = "批量关闭") + @RequestMapping(method = RequestMethod.POST, value = "/stories/{story_id}/batchclose") + @Transactional + public ResponseEntity batchClose(@PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story story = storyMapping.toDomain(storydto); + story.setId(story_id); + story = storyService.batchClose(story); + storydto = storyMapping.toDto(story); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-Change-all')") + @ApiOperation(value = "变更", tags = {"需求" }, notes = "变更") + @RequestMapping(method = RequestMethod.POST, value = "/stories/{story_id}/change") + @Transactional + public ResponseEntity change(@PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story story = storyMapping.toDomain(storydto); + story.setId(story_id); + story = storyService.change(story); + storydto = storyMapping.toDto(story); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + @ApiOperation(value = "检查需求", tags = {"需求" }, notes = "检查需求") @RequestMapping(method = RequestMethod.POST, value = "/stories/checkkey") public ResponseEntity checkKey(@RequestBody StoryDTO storydto) { @@ -113,6 +161,66 @@ public class StoryResource { return ResponseEntity.status(HttpStatus.OK).body(true); } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchChangeBranch-all')") + @ApiOperation(value = "批量变更平台/分支", tags = {"需求" }, notes = "批量变更平台/分支") + @RequestMapping(method = RequestMethod.POST, value = "/stories/{story_id}/batchchangebranch") + @Transactional + public ResponseEntity batchChangeBranch(@PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story story = storyMapping.toDomain(storydto); + story.setId(story_id); + story = storyService.batchChangeBranch(story); + storydto = storyMapping.toDto(story); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchReview-all')") + @ApiOperation(value = "批量评审", tags = {"需求" }, notes = "批量评审") + @RequestMapping(method = RequestMethod.POST, value = "/stories/{story_id}/batchreview") + @Transactional + public ResponseEntity batchReview(@PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story story = storyMapping.toDomain(storydto); + story.setId(story_id); + story = storyService.batchReview(story); + storydto = storyMapping.toDto(story); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-Review-all')") + @ApiOperation(value = "评审", tags = {"需求" }, notes = "评审") + @RequestMapping(method = RequestMethod.POST, value = "/stories/{story_id}/review") + @Transactional + public ResponseEntity review(@PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story story = storyMapping.toDomain(storydto); + story.setId(story_id); + story = storyService.review(story); + storydto = storyMapping.toDto(story); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-AssignTo-all')") + @ApiOperation(value = "指派", tags = {"需求" }, notes = "指派") + @RequestMapping(method = RequestMethod.POST, value = "/stories/{story_id}/assignto") + @Transactional + public ResponseEntity assignTo(@PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story story = storyMapping.toDomain(storydto); + story.setId(story_id); + story = storyService.assignTo(story); + storydto = storyMapping.toDto(story); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchAssignTo-all')") + @ApiOperation(value = "批量指派", tags = {"需求" }, notes = "批量指派") + @RequestMapping(method = RequestMethod.POST, value = "/stories/{story_id}/batchassignto") + @Transactional + public ResponseEntity batchAssignTo(@PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story story = storyMapping.toDomain(storydto); + story.setId(story_id); + story = storyService.batchAssignTo(story); + storydto = storyMapping.toDto(story); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-Get-all')") @ApiOperation(value = "获取需求", tags = {"需求" }, notes = "获取需求") @RequestMapping(method = RequestMethod.GET, value = "/stories/{story_id}") @@ -137,6 +245,30 @@ public class StoryResource { return ResponseEntity.status(HttpStatus.OK).body(true); } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchChangeModule-all')") + @ApiOperation(value = "批量变更模块", tags = {"需求" }, notes = "批量变更模块") + @RequestMapping(method = RequestMethod.POST, value = "/stories/{story_id}/batchchangemodule") + @Transactional + public ResponseEntity batchChangeModule(@PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story story = storyMapping.toDomain(storydto); + story.setId(story_id); + story = storyService.batchChangeModule(story); + storydto = storyMapping.toDto(story); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-Close-all')") + @ApiOperation(value = "关闭", tags = {"需求" }, notes = "关闭") + @RequestMapping(method = RequestMethod.POST, value = "/stories/{story_id}/close") + @Transactional + public ResponseEntity close(@PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story story = storyMapping.toDomain(storydto); + story.setId(story_id); + story = storyService.close(story); + storydto = storyMapping.toDto(story); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-Default-all')") @ApiOperation(value = "获取DEFAULT", tags = {"需求" } ,notes = "获取DEFAULT") @RequestMapping(method= RequestMethod.GET , value="/stories/fetchdefault") @@ -190,6 +322,54 @@ public class StoryResource { return ResponseEntity.status(HttpStatus.OK).body(true); } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchChangeStage-all')") + @ApiOperation(value = "根据产品需求", tags = {"需求" }, notes = "根据产品需求") + @RequestMapping(method = RequestMethod.POST, value = "/products/{product_id}/stories/{story_id}/batchchangestage") + @Transactional + public ResponseEntity batchChangeStageByProduct(@PathVariable("product_id") BigInteger product_id, @PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story domain = storyMapping.toDomain(storydto); + domain.setProduct(product_id); + domain = storyService.batchChangeStage(domain) ; + storydto = storyMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchChangePlan-all')") + @ApiOperation(value = "根据产品需求", tags = {"需求" }, notes = "根据产品需求") + @RequestMapping(method = RequestMethod.POST, value = "/products/{product_id}/stories/{story_id}/batchchangeplan") + @Transactional + public ResponseEntity batchChangePlanByProduct(@PathVariable("product_id") BigInteger product_id, @PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story domain = storyMapping.toDomain(storydto); + domain.setProduct(product_id); + domain = storyService.batchChangePlan(domain) ; + storydto = storyMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchClose-all')") + @ApiOperation(value = "根据产品需求", tags = {"需求" }, notes = "根据产品需求") + @RequestMapping(method = RequestMethod.POST, value = "/products/{product_id}/stories/{story_id}/batchclose") + @Transactional + public ResponseEntity batchCloseByProduct(@PathVariable("product_id") BigInteger product_id, @PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story domain = storyMapping.toDomain(storydto); + domain.setProduct(product_id); + domain = storyService.batchClose(domain) ; + storydto = storyMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-Change-all')") + @ApiOperation(value = "根据产品需求", tags = {"需求" }, notes = "根据产品需求") + @RequestMapping(method = RequestMethod.POST, value = "/products/{product_id}/stories/{story_id}/change") + @Transactional + public ResponseEntity changeByProduct(@PathVariable("product_id") BigInteger product_id, @PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story domain = storyMapping.toDomain(storydto); + domain.setProduct(product_id); + domain = storyService.change(domain) ; + storydto = storyMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + @ApiOperation(value = "根据产品检查需求", tags = {"需求" }, notes = "根据产品检查需求") @RequestMapping(method = RequestMethod.POST, value = "/products/{product_id}/stories/checkkey") public ResponseEntity checkKeyByProduct(@PathVariable("product_id") BigInteger product_id, @RequestBody StoryDTO storydto) { @@ -237,6 +417,66 @@ public class StoryResource { return ResponseEntity.status(HttpStatus.OK).body(true); } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchChangeBranch-all')") + @ApiOperation(value = "根据产品需求", tags = {"需求" }, notes = "根据产品需求") + @RequestMapping(method = RequestMethod.POST, value = "/products/{product_id}/stories/{story_id}/batchchangebranch") + @Transactional + public ResponseEntity batchChangeBranchByProduct(@PathVariable("product_id") BigInteger product_id, @PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story domain = storyMapping.toDomain(storydto); + domain.setProduct(product_id); + domain = storyService.batchChangeBranch(domain) ; + storydto = storyMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchReview-all')") + @ApiOperation(value = "根据产品需求", tags = {"需求" }, notes = "根据产品需求") + @RequestMapping(method = RequestMethod.POST, value = "/products/{product_id}/stories/{story_id}/batchreview") + @Transactional + public ResponseEntity batchReviewByProduct(@PathVariable("product_id") BigInteger product_id, @PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story domain = storyMapping.toDomain(storydto); + domain.setProduct(product_id); + domain = storyService.batchReview(domain) ; + storydto = storyMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-Review-all')") + @ApiOperation(value = "根据产品需求", tags = {"需求" }, notes = "根据产品需求") + @RequestMapping(method = RequestMethod.POST, value = "/products/{product_id}/stories/{story_id}/review") + @Transactional + public ResponseEntity reviewByProduct(@PathVariable("product_id") BigInteger product_id, @PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story domain = storyMapping.toDomain(storydto); + domain.setProduct(product_id); + domain = storyService.review(domain) ; + storydto = storyMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-AssignTo-all')") + @ApiOperation(value = "根据产品需求", tags = {"需求" }, notes = "根据产品需求") + @RequestMapping(method = RequestMethod.POST, value = "/products/{product_id}/stories/{story_id}/assignto") + @Transactional + public ResponseEntity assignToByProduct(@PathVariable("product_id") BigInteger product_id, @PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story domain = storyMapping.toDomain(storydto); + domain.setProduct(product_id); + domain = storyService.assignTo(domain) ; + storydto = storyMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchAssignTo-all')") + @ApiOperation(value = "根据产品需求", tags = {"需求" }, notes = "根据产品需求") + @RequestMapping(method = RequestMethod.POST, value = "/products/{product_id}/stories/{story_id}/batchassignto") + @Transactional + public ResponseEntity batchAssignToByProduct(@PathVariable("product_id") BigInteger product_id, @PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story domain = storyMapping.toDomain(storydto); + domain.setProduct(product_id); + domain = storyService.batchAssignTo(domain) ; + storydto = storyMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-Get-all')") @ApiOperation(value = "根据产品获取需求", tags = {"需求" }, notes = "根据产品获取需求") @RequestMapping(method = RequestMethod.GET, value = "/products/{product_id}/stories/{story_id}") @@ -267,6 +507,30 @@ public class StoryResource { return ResponseEntity.status(HttpStatus.OK).body(true); } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-BatchChangeModule-all')") + @ApiOperation(value = "根据产品需求", tags = {"需求" }, notes = "根据产品需求") + @RequestMapping(method = RequestMethod.POST, value = "/products/{product_id}/stories/{story_id}/batchchangemodule") + @Transactional + public ResponseEntity batchChangeModuleByProduct(@PathVariable("product_id") BigInteger product_id, @PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story domain = storyMapping.toDomain(storydto); + domain.setProduct(product_id); + domain = storyService.batchChangeModule(domain) ; + storydto = storyMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-Close-all')") + @ApiOperation(value = "根据产品需求", tags = {"需求" }, notes = "根据产品需求") + @RequestMapping(method = RequestMethod.POST, value = "/products/{product_id}/stories/{story_id}/close") + @Transactional + public ResponseEntity closeByProduct(@PathVariable("product_id") BigInteger product_id, @PathVariable("story_id") BigInteger story_id, @RequestBody StoryDTO storydto) { + Story domain = storyMapping.toDomain(storydto); + domain.setProduct(product_id); + domain = storyService.close(domain) ; + storydto = storyMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(storydto); + } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Story-Default-all')") @ApiOperation(value = "根据产品获取DEFAULT", tags = {"需求" } ,notes = "根据产品获取DEFAULT") @RequestMapping(method= RequestMethod.GET , value="/products/{product_id}/stories/fetchdefault") diff --git a/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/SubTaskResource.java b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/SubTaskResource.java new file mode 100644 index 0000000000000000000000000000000000000000..fcf35fd1ddc37e9d7b2e0372904ab1f673783894 --- /dev/null +++ b/ibizpms-provider/ibizpms-provider-webapi/src/main/java/cn/ibizlab/pms/webapi/rest/SubTaskResource.java @@ -0,0 +1,404 @@ +package cn.ibizlab.pms.webapi.rest; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.math.BigInteger; +import java.util.HashMap; +import lombok.extern.slf4j.Slf4j; +import com.alibaba.fastjson.JSONObject; +import javax.servlet.ServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cglib.beans.BeanCopier; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.http.HttpStatus; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.util.StringUtils; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.access.prepost.PostAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import cn.ibizlab.pms.webapi.dto.*; +import cn.ibizlab.pms.webapi.mapping.*; +import cn.ibizlab.pms.core.zentao.domain.Task; +import cn.ibizlab.pms.core.zentao.service.ITaskService; +import cn.ibizlab.pms.core.zentao.filter.TaskSearchContext; + +@Slf4j +@Api(tags = {"任务" }) +@RestController("WebApi-subtask") +@RequestMapping("") +public class SubTaskResource { + + @Autowired + public ITaskService taskService; + + @Autowired + @Lazy + public SubTaskMapping subtaskMapping; + + @ApiOperation(value = "根据任务获取任务草稿", tags = {"任务" }, notes = "根据任务获取任务草稿") + @RequestMapping(method = RequestMethod.GET, value = "/tasks/{task_id}/subtasks/getdraft") + public ResponseEntity getDraftByTask(@PathVariable("task_id") BigInteger task_id) { + Task domain = new Task(); + domain.setParent(task_id); + return ResponseEntity.status(HttpStatus.OK).body(subtaskMapping.toDto(taskService.getDraft(domain))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Remove-all')") + @ApiOperation(value = "根据任务删除任务", tags = {"任务" }, notes = "根据任务删除任务") + @RequestMapping(method = RequestMethod.DELETE, value = "/tasks/{task_id}/subtasks/{subtask_id}") + @Transactional + public ResponseEntity removeByTask(@PathVariable("task_id") BigInteger task_id, @PathVariable("subtask_id") BigInteger subtask_id) { + return ResponseEntity.status(HttpStatus.OK).body(taskService.remove(subtask_id)); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Remove-all')") + @ApiOperation(value = "根据任务批量删除任务", tags = {"任务" }, notes = "根据任务批量删除任务") + @RequestMapping(method = RequestMethod.DELETE, value = "/tasks/{task_id}/subtasks/batch") + public ResponseEntity removeBatchByTask(@RequestBody List ids) { + taskService.removeBatch(ids); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Update-all')") + @ApiOperation(value = "根据任务更新任务", tags = {"任务" }, notes = "根据任务更新任务") + @RequestMapping(method = RequestMethod.PUT, value = "/tasks/{task_id}/subtasks/{subtask_id}") + @Transactional + public ResponseEntity updateByTask(@PathVariable("task_id") BigInteger task_id, @PathVariable("subtask_id") BigInteger subtask_id, @RequestBody SubTaskDTO subtaskdto) { + Task domain = subtaskMapping.toDomain(subtaskdto); + domain.setParent(task_id); + domain.setId(subtask_id); + taskService.update(domain); + SubTaskDTO dto = subtaskMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Update-all')") + @ApiOperation(value = "根据任务批量更新任务", tags = {"任务" }, notes = "根据任务批量更新任务") + @RequestMapping(method = RequestMethod.PUT, value = "/tasks/{task_id}/subtasks/batch") + public ResponseEntity updateBatchByTask(@PathVariable("task_id") BigInteger task_id, @RequestBody List subtaskdtos) { + List domainlist=subtaskMapping.toDomain(subtaskdtos); + for(Task domain:domainlist){ + domain.setParent(task_id); + } + taskService.updateBatch(domainlist); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Save-all')") + @ApiOperation(value = "根据任务保存任务", tags = {"任务" }, notes = "根据任务保存任务") + @RequestMapping(method = RequestMethod.POST, value = "/tasks/{task_id}/subtasks/save") + public ResponseEntity saveByTask(@PathVariable("task_id") BigInteger task_id, @RequestBody SubTaskDTO subtaskdto) { + Task domain = subtaskMapping.toDomain(subtaskdto); + domain.setParent(task_id); + return ResponseEntity.status(HttpStatus.OK).body(taskService.save(domain)); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Save-all')") + @ApiOperation(value = "根据任务批量保存任务", tags = {"任务" }, notes = "根据任务批量保存任务") + @RequestMapping(method = RequestMethod.POST, value = "/tasks/{task_id}/subtasks/savebatch") + public ResponseEntity saveBatchByTask(@PathVariable("task_id") BigInteger task_id, @RequestBody List subtaskdtos) { + List domainlist=subtaskMapping.toDomain(subtaskdtos); + for(Task domain:domainlist){ + domain.setParent(task_id); + } + taskService.saveBatch(domainlist); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Get-all')") + @ApiOperation(value = "根据任务获取任务", tags = {"任务" }, notes = "根据任务获取任务") + @RequestMapping(method = RequestMethod.GET, value = "/tasks/{task_id}/subtasks/{subtask_id}") + public ResponseEntity getByTask(@PathVariable("task_id") BigInteger task_id, @PathVariable("subtask_id") BigInteger subtask_id) { + Task domain = taskService.get(subtask_id); + SubTaskDTO dto = subtaskMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @ApiOperation(value = "根据任务检查任务", tags = {"任务" }, notes = "根据任务检查任务") + @RequestMapping(method = RequestMethod.POST, value = "/tasks/{task_id}/subtasks/checkkey") + public ResponseEntity checkKeyByTask(@PathVariable("task_id") BigInteger task_id, @RequestBody SubTaskDTO subtaskdto) { + return ResponseEntity.status(HttpStatus.OK).body(taskService.checkKey(subtaskMapping.toDomain(subtaskdto))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Create-all')") + @ApiOperation(value = "根据任务建立任务", tags = {"任务" }, notes = "根据任务建立任务") + @RequestMapping(method = RequestMethod.POST, value = "/tasks/{task_id}/subtasks") + @Transactional + public ResponseEntity createByTask(@PathVariable("task_id") BigInteger task_id, @RequestBody SubTaskDTO subtaskdto) { + Task domain = subtaskMapping.toDomain(subtaskdto); + domain.setParent(task_id); + taskService.create(domain); + SubTaskDTO dto = subtaskMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Create-all')") + @ApiOperation(value = "根据任务批量建立任务", tags = {"任务" }, notes = "根据任务批量建立任务") + @RequestMapping(method = RequestMethod.POST, value = "/tasks/{task_id}/subtasks/batch") + public ResponseEntity createBatchByTask(@PathVariable("task_id") BigInteger task_id, @RequestBody List subtaskdtos) { + List domainlist=subtaskMapping.toDomain(subtaskdtos); + for(Task domain:domainlist){ + domain.setParent(task_id); + } + taskService.createBatch(domainlist); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-RootTask-all')") + @ApiOperation(value = "根据任务获取根任务", tags = {"任务" } ,notes = "根据任务获取根任务") + @RequestMapping(method= RequestMethod.GET , value="/tasks/{task_id}/subtasks/fetchroottask") + public ResponseEntity> fetchSubTaskRootTaskByTask(@PathVariable("task_id") BigInteger task_id,TaskSearchContext context) { + context.setN_parent_eq(task_id); + Page domains = taskService.searchRootTask(context) ; + List list = subtaskMapping.toDto(domains.getContent()); + return ResponseEntity.status(HttpStatus.OK) + .header("x-page", String.valueOf(context.getPageable().getPageNumber())) + .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) + .header("x-total", String.valueOf(domains.getTotalElements())) + .body(list); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-RootTask-all')") + @ApiOperation(value = "根据任务查询根任务", tags = {"任务" } ,notes = "根据任务查询根任务") + @RequestMapping(method= RequestMethod.POST , value="/tasks/{task_id}/subtasks/searchroottask") + public ResponseEntity> searchSubTaskRootTaskByTask(@PathVariable("task_id") BigInteger task_id, @RequestBody TaskSearchContext context) { + context.setN_parent_eq(task_id); + Page domains = taskService.searchRootTask(context) ; + return ResponseEntity.status(HttpStatus.OK) + .body(new PageImpl(subtaskMapping.toDto(domains.getContent()), context.getPageable(), domains.getTotalElements())); + } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-TypeGroup-all')") + @ApiOperation(value = "根据任务获取任务类型分组", tags = {"任务" } ,notes = "根据任务获取任务类型分组") + @RequestMapping(method= RequestMethod.GET , value="/tasks/{task_id}/subtasks/fetchtypegroup") + public ResponseEntity> fetchSubTaskTypeGroupByTask(@PathVariable("task_id") BigInteger task_id,TaskSearchContext context) { + context.setN_parent_eq(task_id); + Page domains = taskService.searchTypeGroup(context) ; + return ResponseEntity.status(HttpStatus.OK) + .header("x-page", String.valueOf(context.getPageable().getPageNumber())) + .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) + .header("x-total", String.valueOf(domains.getTotalElements())) + .body(domains.getContent()); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-TypeGroup-all')") + @ApiOperation(value = "根据任务查询任务类型分组", tags = {"任务" } ,notes = "根据任务查询任务类型分组") + @RequestMapping(method= RequestMethod.POST , value="/tasks/{task_id}/subtasks/searchtypegroup") + public ResponseEntity> searchSubTaskTypeGroupByTask(@PathVariable("task_id") BigInteger task_id, @RequestBody TaskSearchContext context) { + context.setN_parent_eq(task_id); + Page domains = taskService.searchTypeGroup(context) ; + return ResponseEntity.status(HttpStatus.OK) + .body(new PageImpl(domains.getContent(), context.getPageable(), domains.getTotalElements())); + } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Default-all')") + @ApiOperation(value = "根据任务获取DEFAULT", tags = {"任务" } ,notes = "根据任务获取DEFAULT") + @RequestMapping(method= RequestMethod.GET , value="/tasks/{task_id}/subtasks/fetchdefault") + public ResponseEntity> fetchSubTaskDefaultByTask(@PathVariable("task_id") BigInteger task_id,TaskSearchContext context) { + context.setN_parent_eq(task_id); + Page domains = taskService.searchDefault(context) ; + List list = subtaskMapping.toDto(domains.getContent()); + return ResponseEntity.status(HttpStatus.OK) + .header("x-page", String.valueOf(context.getPageable().getPageNumber())) + .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) + .header("x-total", String.valueOf(domains.getTotalElements())) + .body(list); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Default-all')") + @ApiOperation(value = "根据任务查询DEFAULT", tags = {"任务" } ,notes = "根据任务查询DEFAULT") + @RequestMapping(method= RequestMethod.POST , value="/tasks/{task_id}/subtasks/searchdefault") + public ResponseEntity> searchSubTaskDefaultByTask(@PathVariable("task_id") BigInteger task_id, @RequestBody TaskSearchContext context) { + context.setN_parent_eq(task_id); + Page domains = taskService.searchDefault(context) ; + return ResponseEntity.status(HttpStatus.OK) + .body(new PageImpl(subtaskMapping.toDto(domains.getContent()), context.getPageable(), domains.getTotalElements())); + } + @ApiOperation(value = "根据项目任务获取任务草稿", tags = {"任务" }, notes = "根据项目任务获取任务草稿") + @RequestMapping(method = RequestMethod.GET, value = "/projects/{project_id}/tasks/{task_id}/subtasks/getdraft") + public ResponseEntity getDraftByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id) { + Task domain = new Task(); + domain.setParent(task_id); + return ResponseEntity.status(HttpStatus.OK).body(subtaskMapping.toDto(taskService.getDraft(domain))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Remove-all')") + @ApiOperation(value = "根据项目任务删除任务", tags = {"任务" }, notes = "根据项目任务删除任务") + @RequestMapping(method = RequestMethod.DELETE, value = "/projects/{project_id}/tasks/{task_id}/subtasks/{subtask_id}") + @Transactional + public ResponseEntity removeByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id, @PathVariable("subtask_id") BigInteger subtask_id) { + return ResponseEntity.status(HttpStatus.OK).body(taskService.remove(subtask_id)); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Remove-all')") + @ApiOperation(value = "根据项目任务批量删除任务", tags = {"任务" }, notes = "根据项目任务批量删除任务") + @RequestMapping(method = RequestMethod.DELETE, value = "/projects/{project_id}/tasks/{task_id}/subtasks/batch") + public ResponseEntity removeBatchByProjectTask(@RequestBody List ids) { + taskService.removeBatch(ids); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Update-all')") + @ApiOperation(value = "根据项目任务更新任务", tags = {"任务" }, notes = "根据项目任务更新任务") + @RequestMapping(method = RequestMethod.PUT, value = "/projects/{project_id}/tasks/{task_id}/subtasks/{subtask_id}") + @Transactional + public ResponseEntity updateByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id, @PathVariable("subtask_id") BigInteger subtask_id, @RequestBody SubTaskDTO subtaskdto) { + Task domain = subtaskMapping.toDomain(subtaskdto); + domain.setParent(task_id); + domain.setId(subtask_id); + taskService.update(domain); + SubTaskDTO dto = subtaskMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Update-all')") + @ApiOperation(value = "根据项目任务批量更新任务", tags = {"任务" }, notes = "根据项目任务批量更新任务") + @RequestMapping(method = RequestMethod.PUT, value = "/projects/{project_id}/tasks/{task_id}/subtasks/batch") + public ResponseEntity updateBatchByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id, @RequestBody List subtaskdtos) { + List domainlist=subtaskMapping.toDomain(subtaskdtos); + for(Task domain:domainlist){ + domain.setParent(task_id); + } + taskService.updateBatch(domainlist); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Save-all')") + @ApiOperation(value = "根据项目任务保存任务", tags = {"任务" }, notes = "根据项目任务保存任务") + @RequestMapping(method = RequestMethod.POST, value = "/projects/{project_id}/tasks/{task_id}/subtasks/save") + public ResponseEntity saveByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id, @RequestBody SubTaskDTO subtaskdto) { + Task domain = subtaskMapping.toDomain(subtaskdto); + domain.setParent(task_id); + return ResponseEntity.status(HttpStatus.OK).body(taskService.save(domain)); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Save-all')") + @ApiOperation(value = "根据项目任务批量保存任务", tags = {"任务" }, notes = "根据项目任务批量保存任务") + @RequestMapping(method = RequestMethod.POST, value = "/projects/{project_id}/tasks/{task_id}/subtasks/savebatch") + public ResponseEntity saveBatchByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id, @RequestBody List subtaskdtos) { + List domainlist=subtaskMapping.toDomain(subtaskdtos); + for(Task domain:domainlist){ + domain.setParent(task_id); + } + taskService.saveBatch(domainlist); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Get-all')") + @ApiOperation(value = "根据项目任务获取任务", tags = {"任务" }, notes = "根据项目任务获取任务") + @RequestMapping(method = RequestMethod.GET, value = "/projects/{project_id}/tasks/{task_id}/subtasks/{subtask_id}") + public ResponseEntity getByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id, @PathVariable("subtask_id") BigInteger subtask_id) { + Task domain = taskService.get(subtask_id); + SubTaskDTO dto = subtaskMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @ApiOperation(value = "根据项目任务检查任务", tags = {"任务" }, notes = "根据项目任务检查任务") + @RequestMapping(method = RequestMethod.POST, value = "/projects/{project_id}/tasks/{task_id}/subtasks/checkkey") + public ResponseEntity checkKeyByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id, @RequestBody SubTaskDTO subtaskdto) { + return ResponseEntity.status(HttpStatus.OK).body(taskService.checkKey(subtaskMapping.toDomain(subtaskdto))); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Create-all')") + @ApiOperation(value = "根据项目任务建立任务", tags = {"任务" }, notes = "根据项目任务建立任务") + @RequestMapping(method = RequestMethod.POST, value = "/projects/{project_id}/tasks/{task_id}/subtasks") + @Transactional + public ResponseEntity createByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id, @RequestBody SubTaskDTO subtaskdto) { + Task domain = subtaskMapping.toDomain(subtaskdto); + domain.setParent(task_id); + taskService.create(domain); + SubTaskDTO dto = subtaskMapping.toDto(domain); + return ResponseEntity.status(HttpStatus.OK).body(dto); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Create-all')") + @ApiOperation(value = "根据项目任务批量建立任务", tags = {"任务" }, notes = "根据项目任务批量建立任务") + @RequestMapping(method = RequestMethod.POST, value = "/projects/{project_id}/tasks/{task_id}/subtasks/batch") + public ResponseEntity createBatchByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id, @RequestBody List subtaskdtos) { + List domainlist=subtaskMapping.toDomain(subtaskdtos); + for(Task domain:domainlist){ + domain.setParent(task_id); + } + taskService.createBatch(domainlist); + return ResponseEntity.status(HttpStatus.OK).body(true); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-RootTask-all')") + @ApiOperation(value = "根据项目任务获取根任务", tags = {"任务" } ,notes = "根据项目任务获取根任务") + @RequestMapping(method= RequestMethod.GET , value="/projects/{project_id}/tasks/{task_id}/subtasks/fetchroottask") + public ResponseEntity> fetchSubTaskRootTaskByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id,TaskSearchContext context) { + context.setN_parent_eq(task_id); + Page domains = taskService.searchRootTask(context) ; + List list = subtaskMapping.toDto(domains.getContent()); + return ResponseEntity.status(HttpStatus.OK) + .header("x-page", String.valueOf(context.getPageable().getPageNumber())) + .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) + .header("x-total", String.valueOf(domains.getTotalElements())) + .body(list); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-RootTask-all')") + @ApiOperation(value = "根据项目任务查询根任务", tags = {"任务" } ,notes = "根据项目任务查询根任务") + @RequestMapping(method= RequestMethod.POST , value="/projects/{project_id}/tasks/{task_id}/subtasks/searchroottask") + public ResponseEntity> searchSubTaskRootTaskByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id, @RequestBody TaskSearchContext context) { + context.setN_parent_eq(task_id); + Page domains = taskService.searchRootTask(context) ; + return ResponseEntity.status(HttpStatus.OK) + .body(new PageImpl(subtaskMapping.toDto(domains.getContent()), context.getPageable(), domains.getTotalElements())); + } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-TypeGroup-all')") + @ApiOperation(value = "根据项目任务获取任务类型分组", tags = {"任务" } ,notes = "根据项目任务获取任务类型分组") + @RequestMapping(method= RequestMethod.GET , value="/projects/{project_id}/tasks/{task_id}/subtasks/fetchtypegroup") + public ResponseEntity> fetchSubTaskTypeGroupByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id,TaskSearchContext context) { + context.setN_parent_eq(task_id); + Page domains = taskService.searchTypeGroup(context) ; + return ResponseEntity.status(HttpStatus.OK) + .header("x-page", String.valueOf(context.getPageable().getPageNumber())) + .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) + .header("x-total", String.valueOf(domains.getTotalElements())) + .body(domains.getContent()); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-TypeGroup-all')") + @ApiOperation(value = "根据项目任务查询任务类型分组", tags = {"任务" } ,notes = "根据项目任务查询任务类型分组") + @RequestMapping(method= RequestMethod.POST , value="/projects/{project_id}/tasks/{task_id}/subtasks/searchtypegroup") + public ResponseEntity> searchSubTaskTypeGroupByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id, @RequestBody TaskSearchContext context) { + context.setN_parent_eq(task_id); + Page domains = taskService.searchTypeGroup(context) ; + return ResponseEntity.status(HttpStatus.OK) + .body(new PageImpl(domains.getContent(), context.getPageable(), domains.getTotalElements())); + } + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Default-all')") + @ApiOperation(value = "根据项目任务获取DEFAULT", tags = {"任务" } ,notes = "根据项目任务获取DEFAULT") + @RequestMapping(method= RequestMethod.GET , value="/projects/{project_id}/tasks/{task_id}/subtasks/fetchdefault") + public ResponseEntity> fetchSubTaskDefaultByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id,TaskSearchContext context) { + context.setN_parent_eq(task_id); + Page domains = taskService.searchDefault(context) ; + List list = subtaskMapping.toDto(domains.getContent()); + return ResponseEntity.status(HttpStatus.OK) + .header("x-page", String.valueOf(context.getPageable().getPageNumber())) + .header("x-per-page", String.valueOf(context.getPageable().getPageSize())) + .header("x-total", String.valueOf(domains.getTotalElements())) + .body(list); + } + + @PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','pms-Task-Default-all')") + @ApiOperation(value = "根据项目任务查询DEFAULT", tags = {"任务" } ,notes = "根据项目任务查询DEFAULT") + @RequestMapping(method= RequestMethod.POST , value="/projects/{project_id}/tasks/{task_id}/subtasks/searchdefault") + public ResponseEntity> searchSubTaskDefaultByProjectTask(@PathVariable("project_id") BigInteger project_id, @PathVariable("task_id") BigInteger task_id, @RequestBody TaskSearchContext context) { + context.setN_parent_eq(task_id); + Page domains = taskService.searchDefault(context) ; + return ResponseEntity.status(HttpStatus.OK) + .body(new PageImpl(subtaskMapping.toDto(domains.getContent()), context.getPageable(), domains.getTotalElements())); + } +} + diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/aspect/DEFieldDefaultValueAspect.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/aspect/DEFieldDefaultValueAspect.java index 2875751cb91b750d38328328234793c160724cd5..8d010dca8efc62f34ad6f44a230385d12c04277c 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/aspect/DEFieldDefaultValueAspect.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/aspect/DEFieldDefaultValueAspect.java @@ -253,7 +253,7 @@ public class DEFieldDefaultValueAspect et.set(fieldname,curUser.getMdeptname()); break; case LOGICVALID: - if(!StringUtils.isEmpty(logicValue)){ + if(StringUtils.isEmpty(logicValue)){ logicValue="1"; } et.set(fieldname,logicValue); diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/CacheConfig.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/CacheConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..7b1b02cf0a88b712fbc03355d82bfa565af2fd47 --- /dev/null +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/CacheConfig.java @@ -0,0 +1,5 @@ +package cn.ibizlab.pms.util.cache; + +public class CacheConfig { + +} \ No newline at end of file diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/CaffeineCacheConfig.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/CaffeineCacheConfig.java index 7f41bfc73b7acf18f4be36d2d4cf05758644bb0a..5b8c3fec45baea89e575df21f671a2a68699879e 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/CaffeineCacheConfig.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/CaffeineCacheConfig.java @@ -1,8 +1,6 @@ package cn.ibizlab.pms.util.cache; import com.github.benmanes.caffeine.cache.CaffeineSpec; -import cn.ibizlab.pms.util.cache.cacheManager.CaffeineCacheManager; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.cache.CacheProperties; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -12,6 +10,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.util.StringUtils; +import cn.ibizlab.pms.util.cache.cacheManager.CaffeineCacheManager; /** * Caffeine缓存配置类 @@ -22,19 +21,19 @@ import org.springframework.util.StringUtils; @ConditionalOnExpression("'${ibiz.cacheLevel:None}'.equals('L1')") public class CaffeineCacheConfig { - @Autowired - private CacheProperties cacheProperties; - - @Autowired - private CaffeineCacheManager caffeineCacheManager; - + /** + * Caffeine配置:设置过期时间 + * @return + */ @Bean @Primary - public CacheManager cacheManager() { - String specification = cacheProperties.getCaffeine().getSpec(); - if (StringUtils.hasText(specification)) { - caffeineCacheManager.setCaffeineSpec(CaffeineSpec.parse(specification)); + public CacheManager cacheManager(CacheProperties cacheProperties) { + CaffeineCacheManager caffeineCacheManager=new CaffeineCacheManager(); + String strCacheConfig = cacheProperties.getCaffeine().getSpec(); + if (StringUtils.hasText(strCacheConfig)) { + caffeineCacheManager.setCaffeineCacheConfig(CaffeineSpec.parse(strCacheConfig)); } return caffeineCacheManager; } + } \ No newline at end of file diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/RedisCacheConfig.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/RedisCacheConfig.java index 5ee271b904fe59cf506be0bfd1f83580d9d6cd85..601794d1eead6cf47d9d4d715087d730195a4f8f 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/RedisCacheConfig.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/RedisCacheConfig.java @@ -1,15 +1,10 @@ package cn.ibizlab.pms.util.cache; -import com.alibaba.fastjson.parser.ParserConfig; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.benmanes.caffeine.cache.CaffeineSpec; -import cn.ibizlab.pms.util.cache.cacheManager.LayeringCacheManager; -import cn.ibizlab.pms.util.cache.redis.KryoRedisSerializer; -import cn.ibizlab.pms.util.cache.redis.StringRedisSerializer; -import cn.ibizlab.pms.util.enums.RedisChannelTopic; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.cache.CacheProperties; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -19,14 +14,19 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.data.redis.cache.RedisCacheConfiguration; -import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.cache.RedisCacheWriter; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; -import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializationContext; +import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.util.StringUtils; +import java.time.Duration; +import cn.ibizlab.pms.util.cache.cacheManager.LayeringCacheManager; +import cn.ibizlab.pms.util.cache.listener.RedisMessageListener; +import cn.ibizlab.pms.util.cache.redis.CustomJacksonSerializer; +import cn.ibizlab.pms.util.enums.RedisChannelTopic; /** * 缓存配置类 @@ -39,83 +39,91 @@ import org.springframework.util.StringUtils; @ConditionalOnExpression("'${ibiz.cacheLevel:None}'.equals('L2')") public class RedisCacheConfig { - @Autowired - private RedisCacheWriter redisCacheWriter; - @Autowired - private RedisCacheConfiguration configuration; - @Autowired - LayeringCacheManager layeringCacheManager; - @Autowired - private CacheProperties cacheProperties; - @Bean - public RedisCacheManager redisCacheManager(RedisConnectionFactory connectionFactory) { - return RedisCacheManager.create(connectionFactory); - } + @Value("${spring.cache.redis.time-to-live:3600}") + private long timeToLive; + /** + * 分层缓存管理器 + * @param redisConnectionFactory + * @param cacheProperties + * @return + */ @Bean - public RedisCacheWriter redisCacheWriter(RedisConnectionFactory connectionFactory){ - RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory); - return redisCacheWriter; + @Primary + public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory ,CacheProperties cacheProperties){ + LayeringCacheManager layeringCacheManager=new LayeringCacheManager(redisCacheWriter(redisConnectionFactory),redisCacheConfiguration(),redisTemplate(redisConnectionFactory)); + String strCacheConfig = cacheProperties.getCaffeine().getSpec(); + if (StringUtils.hasText(strCacheConfig)) { + layeringCacheManager.setCaffeineCacheConfig(CaffeineSpec.parse(strCacheConfig)); + } + return layeringCacheManager; } /** - * 重写Redis序列化方式,使用Json方式: - * 当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的。RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedisTemplate默认使用的是StringRedisSerializer。 - * Spring Data JPA为我们提供了下面的Serializer: - * GenericToStringSerializer、Jackson2JsonRedisSerializer、JacksonJsonRedisSerializer、JdkSerializationRedisSerializer、OxmSerializer、StringRedisSerializer。 - * 在此我们将自己配置RedisTemplate并定义Serializer。 - * - * @param redisConnectionFactory + * redis配置:设置过期时间及序列化方式 * @return */ @Bean - public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { - RedisTemplate redisTemplate = new RedisTemplate<>(); - redisTemplate.setConnectionFactory(redisConnectionFactory); - Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + public RedisCacheConfiguration redisCacheConfiguration(){ + CustomJacksonSerializer jackson2JsonRedisSerializer = new CustomJacksonSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); - ParserConfig.getGlobalInstance().setAutoTypeSupport(true); - KryoRedisSerializer kryoRedisSerializer = new KryoRedisSerializer<>(Object.class); - redisTemplate.setValueSerializer(kryoRedisSerializer);// 设置值(value)的序列化采用KryoRedisSerializer。 - redisTemplate.setHashValueSerializer(kryoRedisSerializer); - redisTemplate.setKeySerializer(new StringRedisSerializer());// 设置键(key)的序列化采用StringRedisSerializer。 - redisTemplate.setHashKeySerializer(new StringRedisSerializer()); - redisTemplate.afterPropertiesSet(); - return redisTemplate; + RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig() + .entryTtl(Duration.ofSeconds(timeToLive)) + .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)) + .disableCachingNullValues(); + return configuration; } + /** + * 创建redis缓存 + * @param connectionFactory + * @return + */ @Bean - @Primary - public CacheManager cacheManager() { - setCaffeineCacheConfig(layeringCacheManager);//Caffeine缓存设置 - layeringCacheManager.setRedisCacheWriter(redisCacheWriter); - layeringCacheManager.setRedisConfiguration(configuration); - return layeringCacheManager; + public RedisCacheWriter redisCacheWriter(RedisConnectionFactory connectionFactory){ + RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory); + return redisCacheWriter; } - private void setCaffeineCacheConfig(LayeringCacheManager layeringCacheManager) { - String specification = cacheProperties.getCaffeine().getSpec(); - if (StringUtils.hasText(specification)) { - layeringCacheManager.setCaffeineSpec(CaffeineSpec.parse(specification)); - } + /** + * 发送redis广播 + * @param factory + * @return + */ + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory factory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(factory); + CustomJacksonSerializer jacksonSerial = new CustomJacksonSerializer(Object.class); + ObjectMapper om = new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + jacksonSerial.setObjectMapper(om); + template.setValueSerializer(jacksonSerial); + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(jacksonSerial); + template.afterPropertiesSet(); + return template; } /** * 监听redis指定频道 * @param redisConnectionFactory - * @param messageListener + * @param cacheManager + * @param redisTemplate * @return */ @Bean - RedisMessageListenerContainer redisContainer(RedisConnectionFactory redisConnectionFactory, MessageListenerAdapter messageListener) { - final RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + RedisMessageListenerContainer redisContainer(RedisConnectionFactory redisConnectionFactory, CacheManager cacheManager , RedisTemplate redisTemplate) { + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + MessageListenerAdapter messageListener=new RedisMessageListener(cacheManager,redisTemplate); container.setConnectionFactory(redisConnectionFactory); container.addMessageListener(messageListener, RedisChannelTopic.REDIS_CACHE_DELETE_TOPIC.getChannelTopic()); container.addMessageListener(messageListener, RedisChannelTopic.REDIS_CACHE_CLEAR_TOPIC.getChannelTopic()); return container; } - } \ No newline at end of file diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cache/CusRedisCache.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cache/CusRedisCache.java index f70582ef4d0d10c05a3cb9bc3563212249757234..4166fccd043da79bb45fa13a862b00cfeaed5626 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cache/CusRedisCache.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cache/CusRedisCache.java @@ -12,5 +12,4 @@ public class CusRedisCache extends RedisCache { public CusRedisCache(String name, RedisCacheWriter redisCacheWriter, RedisCacheConfiguration configuration) { super(name, redisCacheWriter, configuration); } - } diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cache/LayeringCache.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cache/LayeringCache.java index d35056da340e199553b3633353e79d756dca9550..9508f3869fe6aab64aac29d90468c57eba64e555 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cache/LayeringCache.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cache/LayeringCache.java @@ -1,57 +1,53 @@ package cn.ibizlab.pms.util.cache.cache; -import cn.ibizlab.pms.util.cache.listener.RedisPublisher; -import cn.ibizlab.pms.util.enums.RedisChannelTopic; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.springframework.cache.caffeine.CaffeineCache; import org.springframework.cache.support.AbstractValueAdaptingCache; import org.springframework.cache.support.NullValue; import org.springframework.data.redis.cache.RedisCache; -import org.springframework.data.redis.cache.RedisCacheConfiguration; -import org.springframework.data.redis.cache.RedisCacheWriter; import org.springframework.data.redis.core.RedisOperations; import java.util.HashMap; import java.util.Map; import java.util.concurrent.Callable; +import cn.ibizlab.pms.util.cache.listener.RedisPublisher; +import cn.ibizlab.pms.util.enums.RedisChannelTopic; /** * 缓存分层类 * 1级缓存为caffeine * 2级缓存为redis */ +@Slf4j public class LayeringCache extends AbstractValueAdaptingCache { - Logger logger = LoggerFactory.getLogger(LayeringCache.class); /** * 缓存的名称 */ - private final String name; + private String cacheName; /** - * redis缓存 + * Caffeine缓存 */ - private RedisCache redisCache; + private CaffeineCache caffeineCache; /** - * Caffeine缓存 + * redis缓存 */ - private final CaffeineCache caffeineCache; + private RedisCache redisCache; /** * redis消息发布 */ RedisOperations redisOperations; - public LayeringCache(String name ,RedisOperations redisOperations, com.github.benmanes.caffeine.cache.Cache caffeineCache, - RedisCacheWriter redisCacheWriter, RedisCacheConfiguration configuration) { + public LayeringCache(String cacheName , CaffeineCache caffeineCache, RedisCache redisCache, RedisOperations redisOperations) { super(true); - this.name = name; - this.redisCache = new CusRedisCache(name, redisCacheWriter, configuration); - this.caffeineCache = new CaffeineCache(name, caffeineCache, true); + this.cacheName = cacheName; + this.caffeineCache = caffeineCache; + this.redisCache = redisCache; this.redisOperations=redisOperations; } @Override public String getName() { - return this.name; + return this.cacheName; } @Override @@ -61,40 +57,34 @@ public class LayeringCache extends AbstractValueAdaptingCache { @Override public ValueWrapper get(Object key) { - // 查询一级缓存 ValueWrapper wrapper = caffeineCache.get(key); - logger.debug("查询一级缓存 key:{},value:{}", key,wrapper); + log.debug("查询一级缓存 key:{},value:{}", key,wrapper); if (wrapper == null) { - // 查询二级缓存 wrapper = redisCache.get(key); caffeineCache.put(key, wrapper == null ? null : wrapper.get()); - logger.debug("查询二级缓存,并将数据放到一级缓存。 key:{}", key); + log.debug("查询二级缓存,并将数据放到一级缓存。 key:{}", key); } return wrapper; } @Override public T get(Object key, Class type) { - // 查询一级缓存 T value = caffeineCache.get(key, type); - logger.debug("查询一级缓存 key:{}", key); + log.debug("查询一级缓存 key:{}", key); if (value == null) { - // 查询二级缓存 value = redisCache.get(key, type); caffeineCache.put(key, value); - logger.debug("查询二级缓存,并将数据放到一级缓存。 key:{}", key); + log.debug("查询二级缓存,并将数据放到一级缓存。 key:{}", key); } return value; } @SuppressWarnings("unchecked") - @Override + @Override public T get(Object key, Callable valueLoader) { - // 查询一级缓存,如果一级缓存没有值则调用getForSecondaryCache(k, valueLoader)查询二级缓存 - T value = (T) caffeineCache.getNativeCache().get(key, k -> getSecondCache(k, valueLoader)); + T value = (T) caffeineCache.getNativeCache().get(key, k -> getSecondCacheValue(k, valueLoader)); if(value==null) { - // 直接查询二级缓存 - value = (T) getSecondCache(key, valueLoader); + value = (T) getSecondCacheValue(key, valueLoader); } if (value instanceof NullValue) { return null; @@ -119,11 +109,11 @@ public class LayeringCache extends AbstractValueAdaptingCache { redisCache.evict(key); //清除redis中的二级缓存 caffeineCache.evict(key);//清除本机一级缓存 Map message = new HashMap<>(); - message.put("cacheName", name); + message.put("cacheName", cacheName); message.put("key", key); RedisPublisher redisPublisher = new RedisPublisher(redisOperations, RedisChannelTopic.REDIS_CACHE_DELETE_TOPIC.getChannelTopic());// 创建redis发布者 redisPublisher.publisher(message);//发布消息,清除其它集群机器中的一级缓存 - logger.debug(String.format("清除二级缓存数据[%s]", key)); + log.debug(String.format("清除二级缓存数据[%s]", key)); } @Override @@ -131,7 +121,7 @@ public class LayeringCache extends AbstractValueAdaptingCache { redisCache.clear(); //清除redis中的二级缓存 caffeineCache.clear();//清除本机一级缓存 Map message = new HashMap<>(); - message.put("cacheName", name); + message.put("cacheName", cacheName); RedisPublisher redisPublisher = new RedisPublisher(redisOperations, RedisChannelTopic.REDIS_CACHE_CLEAR_TOPIC.getChannelTopic());// 创建redis发布者 redisPublisher.publisher(message);//发布消息,清除其它集群机器中的一级缓存 } @@ -139,31 +129,39 @@ public class LayeringCache extends AbstractValueAdaptingCache { @Override protected Object lookup(Object key) { Object value = caffeineCache.get(key); - logger.debug("查询一级缓存 key:{}", key); + log.debug("查询一级缓存 key:{}", key); if (value == null) { value = redisCache.get(key); - logger.debug("查询二级缓存 key:{}", key); + log.debug("查询二级缓存 key:{}", key); } return value; } /** - * 查询二级缓存 - * @param key - * @param valueLoader + * 获取caffeine缓存 * @return */ - private Object getSecondCache(Object key, Callable valueLoader) { - T value = redisCache.get(key, valueLoader); - logger.debug("查询二级缓存 key:{}", key); - return toStoreValue(value); + public CaffeineCache getFirstCache() { + return this.caffeineCache; } /** - * 获取caffeine缓存 + * 获取redis缓存 * @return */ - public CaffeineCache getFirstCache() { - return this.caffeineCache; + public RedisCache getSecondCache() { + return this.redisCache; + } + + /** + * 查询二级缓存 + * @param key + * @param valueLoader + * @return + */ + private Object getSecondCacheValue(Object key, Callable valueLoader) { + T value = redisCache.get(key, valueLoader); + log.debug("查询二级缓存 key:{}", key); + return toStoreValue(value); } } diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cacheManager/CaffeineCacheManager.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cacheManager/CaffeineCacheManager.java index fe4b4b7c5a4f21454a07470bedd4b8cbca1bfcf2..6c1875ea012efc8626dbc2b77148c44e2756ba35 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cacheManager/CaffeineCacheManager.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cacheManager/CaffeineCacheManager.java @@ -1,18 +1,14 @@ package cn.ibizlab.pms.util.cache.cacheManager; +import lombok.Data; import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.CaffeineSpec; -import lombok.Data; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.cache.caffeine.CaffeineCache; -import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; - import java.util.Collection; import java.util.Collections; -import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; @@ -21,37 +17,31 @@ import java.util.concurrent.TimeUnit; * Caffeine本地缓存 */ @Data -@Component -@ConditionalOnExpression("'${ibiz.cacheLevel:None}'.equals('L1')") public class CaffeineCacheManager implements CacheManager { - private static final int DEFAULT_EXPIRE_AFTER_WRITE = 1; - private static final int DEFAULT_INITIAL_CAPACITY = 5; - private static final int DEFAULT_MAXIMUM_SIZE = 1_000; private final ConcurrentMap cacheMap = new ConcurrentHashMap(16); - - /** - * 缓存默认设置 - */ + private static final int default_expire_after_write = 1; + private static final int default_initial_capacity = 5; + private static final int default_maximum_size = 1_000; private Caffeine cacheBuilder = Caffeine.newBuilder() - .expireAfterAccess(DEFAULT_EXPIRE_AFTER_WRITE, TimeUnit.HOURS) - .initialCapacity(DEFAULT_INITIAL_CAPACITY) - .maximumSize(DEFAULT_MAXIMUM_SIZE); + .expireAfterAccess(default_expire_after_write, TimeUnit.HOURS) + .initialCapacity(default_initial_capacity) + .maximumSize(default_maximum_size); /** * 获取缓存对象 - * @param name + * @param cacheName * @return */ @Override - public Cache getCache(String name) { - Cache cache = this.cacheMap.get(name); + public Cache getCache(String cacheName) { + Cache cache = this.cacheMap.get(cacheName); if (cache == null) { synchronized (this.cacheMap) { - cache = this.cacheMap.get(name); + cache = this.cacheMap.get(cacheName); if (cache == null) { - cache = createCache(name); - this.cacheMap.put(name, cache); + cache = createCache(cacheName); + this.cacheMap.put(cacheName, cache); } } } @@ -59,41 +49,32 @@ public class CaffeineCacheManager implements CacheManager { } /** - * 获取缓存名 + * 创建缓存 + * @param cacheName * @return */ - @Override - public Collection getCacheNames() { - return Collections.unmodifiableSet(this.cacheMap.keySet()); + protected Cache createCache(String cacheName) { + return new CaffeineCache(cacheName, this.cacheBuilder.build(), true); } /** - * 创建缓存 - * @param name + * 获取缓存名 * @return */ - protected Cache createCache(String name) { - return new CaffeineCache(name, this.cacheBuilder.build(), true); + @Override + public Collection getCacheNames() { + return Collections.unmodifiableSet(this.cacheMap.keySet()); } + /** * 缓存配置[缓存容量大小、时长等] - * @param caffeineSpec + * @param caffeineCacheConfig */ - public void setCaffeineSpec(CaffeineSpec caffeineSpec) { - Caffeine cacheBuilder = Caffeine.from(caffeineSpec); + public void setCaffeineCacheConfig(CaffeineSpec caffeineCacheConfig) { + Caffeine cacheBuilder = Caffeine.from(caffeineCacheConfig); if (!ObjectUtils.nullSafeEquals(this.cacheBuilder, cacheBuilder)) { this.cacheBuilder = cacheBuilder; - refreshKnownCaches(); - } - } - - /** - * 使用该CacheManager的当前状态重新创建已知的缓存。 - */ - private void refreshKnownCaches() { - for (Map.Entry entry : this.cacheMap.entrySet()) { - entry.setValue(createCache(entry.getKey())); } } } diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cacheManager/LayeringCacheManager.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cacheManager/LayeringCacheManager.java index 50684336b346ee9270e05299f85fd90f2329a494..ecfc5a8461dd3f62cc2714ab5c4bfc73ca4baa7e 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cacheManager/LayeringCacheManager.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/cacheManager/LayeringCacheManager.java @@ -1,96 +1,96 @@ package cn.ibizlab.pms.util.cache.cacheManager; +import lombok.Data; import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.CaffeineSpec; -import lombok.Data; -import cn.ibizlab.pms.util.cache.cache.LayeringCache; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; +import org.springframework.cache.caffeine.CaffeineCache; import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheWriter; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; import java.util.Collection; import java.util.Collections; -import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; +import cn.ibizlab.pms.util.cache.cache.CusRedisCache; +import cn.ibizlab.pms.util.cache.cache.LayeringCache; /** - * 缓存分层类 + * 缓存分层 * 1级缓存为caffeine * 2级缓存为redis */ @Data -@Component -@ConditionalOnExpression("'${ibiz.cacheLevel:None}'.equals('L2')") public class LayeringCacheManager implements CacheManager { - private static final int DEFAULT_EXPIRE_AFTER_WRITE = 1; - private static final int DEFAULT_INITIAL_CAPACITY = 5; - private static final int DEFAULT_MAXIMUM_SIZE = 1_000; private final ConcurrentMap cacheMap = new ConcurrentHashMap(16); - public RedisCacheWriter redisCacheWriter; - public RedisCacheConfiguration redisConfiguration; - @Autowired - public RedisTemplate redisTemplate; - - /** - * 缓存默认设置 - */ + private static final int default_expire_after_write = 1; + private static final int default_initial_capacity = 5; + private static final int default_maximum_size = 1_000; private Caffeine cacheBuilder = Caffeine.newBuilder() - .expireAfterAccess(DEFAULT_EXPIRE_AFTER_WRITE, TimeUnit.HOURS) - .initialCapacity(DEFAULT_INITIAL_CAPACITY) - .maximumSize(DEFAULT_MAXIMUM_SIZE); + .expireAfterAccess(default_expire_after_write, TimeUnit.HOURS) + .initialCapacity(default_initial_capacity) + .maximumSize(default_maximum_size); + + private RedisCacheWriter redisCacheWriter; + private RedisCacheConfiguration redisConfiguration; + private RedisTemplate redisTemplate; + + public LayeringCacheManager(RedisCacheWriter redisCacheWriter , RedisCacheConfiguration redisConfiguration , RedisTemplate redisTemplate ){ + this.redisCacheWriter=redisCacheWriter; + this.redisConfiguration=redisConfiguration; + this.redisTemplate= redisTemplate; + } /** * 获取缓存对象 - * @param name + * @param cacheName * @return */ @Override - public Cache getCache(String name) { - Cache cache = this.cacheMap.get(name); + public Cache getCache(String cacheName) { + Cache cache = this.cacheMap.get(cacheName); if (cache == null) { synchronized (this.cacheMap) { - cache = this.cacheMap.get(name); + cache = this.cacheMap.get(cacheName); if (cache == null) { - cache = createCache(name); - this.cacheMap.put(name, cache); + cache = createCache(cacheName); + this.cacheMap.put(cacheName, cache); } } } return cache; } + /** + * 获取集合中的缓存 + * @return + */ @Override public Collection getCacheNames() { return Collections.unmodifiableSet(this.cacheMap.keySet()); } - protected Cache createCache(String name) { - return new LayeringCache(name,redisTemplate,this.cacheBuilder.build(),redisCacheWriter,redisConfiguration); - } - /** - * 使用该CacheManager的当前状态重新创建已知的缓存 + * 创建缓存 + * @param cacheName + * @return */ - private void refreshKnownCaches() { - for (Map.Entry entry : this.cacheMap.entrySet()) { - entry.setValue(createCache(entry.getKey())); - } + protected Cache createCache(String cacheName) { + return new LayeringCache(cacheName,new CaffeineCache(cacheName, this.cacheBuilder.build(), true),new CusRedisCache(cacheName, redisCacheWriter, redisConfiguration),redisTemplate); } - public void setCaffeineSpec(CaffeineSpec caffeineSpec) { - Caffeine cacheBuilder = Caffeine.from(caffeineSpec); + /** + * 缓存配置[缓存容量大小、时长等] + * @param caffeineCacheConfig + */ + public void setCaffeineCacheConfig(CaffeineSpec caffeineCacheConfig) { + Caffeine cacheBuilder = Caffeine.from(caffeineCacheConfig); if (!ObjectUtils.nullSafeEquals(this.cacheBuilder, cacheBuilder)) { this.cacheBuilder = cacheBuilder; - refreshKnownCaches(); } } - } diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/layering/LayeringCache.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/layering/LayeringCache.java new file mode 100644 index 0000000000000000000000000000000000000000..5d36919c54d89b0c23683c291e66de983b13f6a7 --- /dev/null +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/layering/LayeringCache.java @@ -0,0 +1,5 @@ +package cn.ibizlab.pms.util.cache.layering; + +public class LayeringCache { + +} diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/layering/LayeringCacheManager.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/layering/LayeringCacheManager.java new file mode 100644 index 0000000000000000000000000000000000000000..5bb42a991f07e19c4680face68d42aa818a05704 --- /dev/null +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/layering/LayeringCacheManager.java @@ -0,0 +1,5 @@ +package cn.ibizlab.pms.util.cache.layering; + +public class LayeringCacheManager { + +} diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/listener/RedisMessageListener.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/listener/RedisMessageListener.java index f669eb4e72f955bebe6f1c068463fb46aff6b6af..954ffbb77c9860f5f1595a2fdffe30790254285d 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/listener/RedisMessageListener.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/listener/RedisMessageListener.java @@ -1,38 +1,32 @@ package cn.ibizlab.pms.util.cache.listener; -import cn.ibizlab.pms.util.cache.cache.LayeringCache; -import cn.ibizlab.pms.util.enums.RedisChannelTopic; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import lombok.extern.slf4j.Slf4j; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; import org.springframework.data.redis.serializer.RedisSerializer; -import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; - import java.util.Map; +import cn.ibizlab.pms.util.cache.cache.LayeringCache; +import cn.ibizlab.pms.util.enums.RedisChannelTopic; /** * redis消息的订阅者 */ - -@Component -@ConditionalOnExpression("'${ibiz.cacheLevel:None}'.equals('L2')") +@Slf4j public class RedisMessageListener extends MessageListenerAdapter { - private static final Logger logger = LoggerFactory.getLogger(RedisPublisher.class); - @Autowired - CacheManager cacheManager; - @Autowired - RedisTemplate redisTemplate; + private CacheManager cacheManager; + private RedisTemplate redisTemplate; + + public RedisMessageListener(CacheManager cacheManager, RedisTemplate redisTemplate){ + this.cacheManager=cacheManager; + this.redisTemplate=redisTemplate; + } @Override public void onMessage(Message message, byte[] pattern) { - super.onMessage(message, pattern); RedisChannelTopic channelTopic = RedisChannelTopic.getChannelTopicEnum(new String(message.getChannel())); Map map = null; RedisSerializer serializer=redisTemplate.getValueSerializer(); @@ -41,10 +35,10 @@ public class RedisMessageListener extends MessageListenerAdapter { map= (Map) result; } if(StringUtils.isEmpty(map)|| (!map.containsKey("cacheName"))|| (!map.containsKey("key"))){ - logger.debug("解析缓存数据失败,无法获取指定值!"); + log.debug("解析缓存数据失败,无法获取指定值!"); return ; } - logger.debug("redis消息订阅者接收到频道【{}】发布的消息。消息内容:{}", channelTopic.getChannelTopicStr(), result.toString()); + log.debug("redis消息订阅者接收到频道【{}】发布的消息。消息内容:{}", channelTopic.getChannelTopicStr(), result.toString()); String cacheName = (String) map.get("cacheName"); Object key = map.get("key"); Cache cache = cacheManager.getCache(cacheName);// 根据缓存名称获取多级缓存 @@ -52,14 +46,16 @@ public class RedisMessageListener extends MessageListenerAdapter { switch (channelTopic) { case REDIS_CACHE_DELETE_TOPIC: // 获取一级缓存,并删除一级缓存数据 ((LayeringCache) cache).getFirstCache().evict(key); - logger.debug("删除一级缓存{}数据,key:{},", cacheName, key.toString()); + ((LayeringCache) cache).getSecondCache().evict(key); + log.debug("同步删除缓存{}数据,key:{},", cacheName, key.toString()); break; case REDIS_CACHE_CLEAR_TOPIC:// 获取一级缓存,并删除一级缓存数据 ((LayeringCache) cache).getFirstCache().clear(); - logger.debug("清除一级缓存{}数据", cacheName); + ((LayeringCache) cache).getSecondCache().clear(); + log.debug("同步清除缓存{}数据", cacheName); break; default: - logger.debug("接收到没有定义的订阅消息频道数据"); + log.debug("接收到没有定义的订阅消息频道数据"); break; } } diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/CustomJacksonSerializer.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/CustomJacksonSerializer.java new file mode 100644 index 0000000000000000000000000000000000000000..9e7999c61699eab15accfca6dda9133ae3787613 --- /dev/null +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/CustomJacksonSerializer.java @@ -0,0 +1,25 @@ +package cn.ibizlab.pms.util.cache.redis; + +import cn.ibizlab.pms.util.security.AuthenticationUser; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.SerializationException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class CustomJacksonSerializer extends Jackson2JsonRedisSerializer { + + public static final String DEFAULT_PACKAGE ="[\\w+\\.]+\\.AuthenticationUser"; + + public static final String USER_PACKAGE= AuthenticationUser.class.getName(); + + public CustomJacksonSerializer(Class type) { + super(type); + } + + @Override + public T deserialize(byte[] bytes) throws SerializationException { + String serializerContent = new String(bytes, DEFAULT_CHARSET); + Matcher matcher = Pattern.compile(DEFAULT_PACKAGE).matcher(serializerContent); + return matcher.find()?super.deserialize(serializerContent.replaceAll(DEFAULT_PACKAGE,USER_PACKAGE).getBytes()):super.deserialize(bytes); + } +} diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/CustomizedRedisCache.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/CustomizedRedisCache.java index 8235fee5c5127e1ae039b39d9253eeceba0878cd..3456f1f24de573c1a834d9825922194350f0c910 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/CustomizedRedisCache.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/CustomizedRedisCache.java @@ -1,16 +1,5 @@ package cn.ibizlab.pms.util.cache.redis; -import org.springframework.data.redis.cache.RedisCache; -import org.springframework.data.redis.cache.RedisCacheConfiguration; -import org.springframework.data.redis.cache.RedisCacheWriter; - -/** - * 自定义的redis缓存 - */ -public class CustomizedRedisCache extends RedisCache { - - public CustomizedRedisCache(String name, RedisCacheWriter redisCacheWriter,RedisCacheConfiguration configuration) { - super(name, redisCacheWriter, configuration); - } +public class CustomizedRedisCache { } diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/FastJsonRedisSerializer.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/FastJsonRedisSerializer.java index bcf725718dee0fc0ff161ac47e2a104bbc82627c..c67508a61ce345497fec4723c5af9a9437b9caac 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/FastJsonRedisSerializer.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/FastJsonRedisSerializer.java @@ -1,47 +1,9 @@ package cn.ibizlab.pms.util.cache.redis; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.serializer.SerializerFeature; -import org.springframework.data.redis.serializer.RedisSerializer; -import org.springframework.data.redis.serializer.SerializationException; -import java.nio.charset.Charset; -/** - * Value 序列化 - * - * @author / - * @param - */ -public class FastJsonRedisSerializer implements RedisSerializer +public class FastJsonRedisSerializer { - public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); - - private Class clazz; - - public FastJsonRedisSerializer(Class clazz) { - super(); - this.clazz = clazz; - } - - @Override - public byte[] serialize(T t) throws SerializationException - { - if (t == null) { - return new byte[0]; - } - return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET); - } - - @Override - public T deserialize(byte[] bytes) throws SerializationException - { - if (bytes == null || bytes.length <= 0) { - return null; - } - String str = new String(bytes, DEFAULT_CHARSET); - return (T) JSON.parseObject(str, clazz); - } } diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/KryoRedisSerializer.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/KryoRedisSerializer.java index 26f511f4ca73560159cd8fbc19cce96d73801611..d073eca715f2b5f93ff4c52c5b6a3a7d1f008d09 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/KryoRedisSerializer.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/KryoRedisSerializer.java @@ -1,71 +1,5 @@ package cn.ibizlab.pms.util.cache.redis; -import com.esotericsoftware.kryo.Kryo; -import com.esotericsoftware.kryo.io.Input; -import com.esotericsoftware.kryo.io.Output; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.data.redis.serializer.RedisSerializer; -import org.springframework.data.redis.serializer.SerializationException; +public class KryoRedisSerializer{ -import java.io.ByteArrayOutputStream; - -/** - * @param - * 序列化/反序列化工具类 - */ -public class KryoRedisSerializer implements RedisSerializer { - Logger logger = LoggerFactory.getLogger(KryoRedisSerializer.class); - - public static final byte[] EMPTY_BYTE_ARRAY = new byte[0]; - - private static final ThreadLocal kryos = ThreadLocal.withInitial(Kryo::new); - - private Class clazz; - - public KryoRedisSerializer(Class clazz) { - super(); - this.clazz = clazz; - } - - @Override - public byte[] serialize(T t) throws SerializationException { - if (t == null) { - return EMPTY_BYTE_ARRAY; - } - - Kryo kryo = kryos.get(); - kryo.setReferences(false); - kryo.register(clazz); - - try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); - Output output = new Output(baos)) { - kryo.writeClassAndObject(output, t); - output.flush(); - return baos.toByteArray(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - } - - return EMPTY_BYTE_ARRAY; - } - - @Override - public T deserialize(byte[] bytes) throws SerializationException { - if (bytes == null || bytes.length <= 0) { - return null; - } - - Kryo kryo = kryos.get(); - kryo.setReferences(false); - kryo.register(clazz); - - try (Input input = new Input(bytes)) { - return (T) kryo.readClassAndObject(input); - } catch (Exception e) { - logger.error(e.getMessage(), e); - } - - return null; - } } \ No newline at end of file diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/RedisConfig.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/RedisConfig.java index cc00a3c48ccfac731371c9e2ef875e5a74635cc0..07801c8b491ecae3572ca449c0986464a6df5456 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/RedisConfig.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/RedisConfig.java @@ -1,65 +1,5 @@ package cn.ibizlab.pms.util.cache.redis; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.parser.ParserConfig; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.data.redis.RedisProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cache.annotation.CachingConfigurerSupport; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.cache.interceptor.KeyGenerator; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.cache.RedisCacheConfiguration; -import org.springframework.data.redis.core.RedisOperations; -import org.springframework.data.redis.serializer.RedisSerializationContext; -import java.time.Duration; +public class RedisConfig { -@Slf4j -@Configuration -@ConditionalOnClass(RedisOperations.class) -@EnableConfigurationProperties(RedisProperties.class) -public class RedisConfig extends CachingConfigurerSupport { - - - @Value("${spring.cache.redis.time-to-live:3600}") - private long timetolive; - - - /** - * 设置 redis 数据默认过期时间,默认1天 - * 设置@cacheable 序列化方式 - * @return - */ - @Bean - public RedisCacheConfiguration redisCacheConfiguration(){ - FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); - RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig(); - ParserConfig.getGlobalInstance().setAutoTypeSupport(true); - configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofSeconds(timetolive)); - return configuration; - } - - - /** - * 自定义缓存key生成策略 - * 使用方法 @Cacheable(keyGenerator="keyGenerator") - * @return - */ - @Bean - @Override - public KeyGenerator keyGenerator() { - return (target, method, params) -> { - StringBuilder sb = new StringBuilder(); - sb.append(target.getClass().getName()); - sb.append(method.getName()); - for (Object obj : params) { - // 由于参数可能不同, hashCode肯定不一样, 缓存的key也需要不一样 - sb.append(JSON.toJSONString(obj).hashCode()); - } - return sb.toString(); - }; - } } \ No newline at end of file diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/StringRedisSerializer.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/StringRedisSerializer.java index f7ef5cb91f4890152163f7fd3d53298c5b219829..ab9f873efa061c3cf16df0ea77581a00557a455c 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/StringRedisSerializer.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/cache/redis/StringRedisSerializer.java @@ -1,43 +1,5 @@ package cn.ibizlab.pms.util.cache.redis; -import com.alibaba.fastjson.JSON; -import org.springframework.data.redis.serializer.RedisSerializer; -import org.springframework.util.Assert; +public class StringRedisSerializer { -import java.nio.charset.Charset; - -/** - * 必须重写序列化器,否则@Cacheable注解的key会报类型转换错误 - */ -public class StringRedisSerializer implements RedisSerializer { - - private final Charset charset; - - private final String target = "\""; - - private final String replacement = ""; - - public StringRedisSerializer() { - this(Charset.forName("UTF8")); - } - - public StringRedisSerializer(Charset charset) { - Assert.notNull(charset, "Charset must not be null!"); - this.charset = charset; - } - - @Override - public String deserialize(byte[] bytes) { - return (bytes == null ? null : new String(bytes, charset)); - } - - @Override - public byte[] serialize(Object object) { - String string = JSON.toJSONString(object); - if (string == null) { - return null; - } - string = string.replace(target, replacement); - return string.getBytes(charset); - } } diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/enums/DEPredefinedFieldType.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/enums/DEPredefinedFieldType.java index cd586e3361ade34111d7f1046d1972944293799b..af05835654d27bf21001fdc5823540a97755744c 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/enums/DEPredefinedFieldType.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/enums/DEPredefinedFieldType.java @@ -48,6 +48,10 @@ public enum DEPredefinedFieldType { * 逻辑有效 */ LOGICVALID, + /** + * 排序 + */ + ORDERVALUE, /** * 不处理 */ diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/enums/RedisChannelTopic.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/enums/RedisChannelTopic.java index 97094911fb57664c022953afcabcd8dbb4e71f84..8824a864270cf915f67f567b29d529159b01223f 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/enums/RedisChannelTopic.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/enums/RedisChannelTopic.java @@ -5,8 +5,8 @@ import org.springframework.data.redis.listener.ChannelTopic; * redis频道 */ public enum RedisChannelTopic { - REDIS_CACHE_DELETE_TOPIC("redis:cache:delete:topic", "删除redis缓存消息频道"), - REDIS_CACHE_CLEAR_TOPIC("redis:cache:clear:topic", "清空redis缓存消息频道"); + REDIS_CACHE_DELETE_TOPIC("redis:cache:delete:topic1", "删除redis缓存消息频道"), + REDIS_CACHE_CLEAR_TOPIC("redis:cache:clear:topic2", "清空redis缓存消息频道"); String channelTopic; String label; diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/security/AuthenticationUser.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/security/AuthenticationUser.java index 05265a73f70488c0e65ec2382bb067843b8abef9..f4562dce7903dc0d69104382a80d0fdd149b63b7 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/security/AuthenticationUser.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/security/AuthenticationUser.java @@ -143,14 +143,14 @@ public class AuthenticationUser implements UserDetails return new HashMap<>(); } - public Collection getAuthorities() { + public void setPermissionList(JSONObject permissionList) { + this.permissionList = permissionList; if(authorities==null && permissionList !=null){ - if(permissionList.getJSONArray("authorities")!=null){ - authorities=new ArrayList<>(); - permissionList.getJSONArray("authorities"). + if(permissionList.getJSONArray("authorities")!=null){ + authorities=new ArrayList<>(); + permissionList.getJSONArray("authorities"). forEach(item->authorities.add(new SimpleGrantedAuthority(String.valueOf(item)))); } } - return authorities; } } diff --git a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/service/IBZConfigService.java b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/service/IBZConfigService.java index 77c255441ebd70ba9fcb990854df07536853f53a..e0eeee043857cc68f8e78e91585408b5b19b186a 100644 --- a/ibizpms-util/src/main/java/cn/ibizlab/pms/util/service/IBZConfigService.java +++ b/ibizpms-util/src/main/java/cn/ibizlab/pms/util/service/IBZConfigService.java @@ -20,23 +20,28 @@ import org.springframework.util.StringUtils; @Service public class IBZConfigService extends ServiceImpl implements IService { - @Value("${ibiz.systemid:pms}") private String systemId; - @Cacheable( value="ibzou_configs",key = "'cfgid:'+#p0+'||'+#p1+'||'+#p2") + @Value("${ibiz.admin.userid:0100}") + private String adminuserid; + + @Cacheable( value="ibizpms_configs",key = "'cfgid:'+#p0+'||'+#p1+'||'+#p2") public JSONObject getConfig(String cfgType,String targetType,String userId) { if(StringUtils.isEmpty(userId)||StringUtils.isEmpty(cfgType)||StringUtils.isEmpty(targetType)) throw new BadRequestAlertException("获取配置失败,参数缺失","IBZConfig",cfgType); IBZConfig config=this.getOne(Wrappers.query(IBZConfig.builder().systemId(systemId).cfgType(cfgType).targetType(targetType).userId(userId).build()),false); - if(config==null) - return new JSONObject(); - else - return JSON.parseObject(config.getCfg()); + if(config==null) { + config=this.getOne(Wrappers.query(IBZConfig.builder().systemId(systemId).cfgType(cfgType).targetType(targetType).userId(adminuserid).build()),false); + if(config==null) { + return new JSONObject(); + } + } + return JSON.parseObject(config.getCfg()); } - @CacheEvict( value="ibzou_configs",key = "'cfgid:'+#p0+'||'+#p1+'||'+#p2") + @CacheEvict( value="ibizpms_configs",key = "'cfgid:'+#p0+'||'+#p1+'||'+#p2") public boolean saveConfig(String cfgType,String targetType,String userId,JSONObject config) { if(StringUtils.isEmpty(userId)||StringUtils.isEmpty(cfgType)||StringUtils.isEmpty(targetType)) @@ -47,7 +52,7 @@ public class IBZConfigService extends ServiceImpl im return this.saveOrUpdate(IBZConfig.builder().systemId(systemId).cfgType(cfgType).targetType(targetType).userId(userId).cfg(cfg).updateDate(DataObject.getNow()).build()); } - @CacheEvict( value="ibzou_configs",key = "'cfgid:'+#p0+'||'+#p1+'||'+#p2") + @CacheEvict( value="ibizpms_configs",key = "'cfgid:'+#p0+'||'+#p1+'||'+#p2") public void resetConfig(String cfgType,String targetType,String userId) { if(StringUtils.isEmpty(userId)||StringUtils.isEmpty(cfgType)||StringUtils.isEmpty(targetType)) diff --git a/ibizpms-util/src/main/resources/application-zentao.yml b/ibizpms-util/src/main/resources/application-zentao.yml deleted file mode 100644 index 6f38aff7858cd43bc46c3521b595dfd93637d432..0000000000000000000000000000000000000000 --- a/ibizpms-util/src/main/resources/application-zentao.yml +++ /dev/null @@ -1,2 +0,0 @@ -zentao: - url: http://172.16.102.102/zentao/