yangbifan 2 年之前
父节点
当前提交
f43c8abac1
共有 87 个文件被更改,包括 19257 次插入417 次删除
  1. 1 1
      package-lock.json
  2. 二进制
      public/static/js/luckysheet_old/assets/iconfont/Anton-Regular.ttf
  3. 二进制
      public/static/js/luckysheet_old/assets/iconfont/HanaleiFill-Regular.ttf
  4. 二进制
      public/static/js/luckysheet_old/assets/iconfont/Pacifico-Regular.ttf
  5. 539 0
      public/static/js/luckysheet_old/assets/iconfont/demo.css
  6. 2700 0
      public/static/js/luckysheet_old/assets/iconfont/demo_index.html
  7. 457 0
      public/static/js/luckysheet_old/assets/iconfont/iconfont.css
  8. 二进制
      public/static/js/luckysheet_old/assets/iconfont/iconfont.eot
  9. 1 0
      public/static/js/luckysheet_old/assets/iconfont/iconfont.js
  10. 779 0
      public/static/js/luckysheet_old/assets/iconfont/iconfont.json
  11. 356 0
      public/static/js/luckysheet_old/assets/iconfont/iconfont.svg
  12. 二进制
      public/static/js/luckysheet_old/assets/iconfont/iconfont.ttf
  13. 二进制
      public/static/js/luckysheet_old/assets/iconfont/iconfont.woff
  14. 二进制
      public/static/js/luckysheet_old/assets/iconfont/iconfont.woff2
  15. 二进制
      public/static/js/luckysheet_old/css/EwaAntH.gif
  16. 二进制
      public/static/js/luckysheet_old/css/EwaAntV.gif
  17. 二进制
      public/static/js/luckysheet_old/css/arrow-down.png
  18. 二进制
      public/static/js/luckysheet_old/css/loading.gif
  19. 1 0
      public/static/js/luckysheet_old/css/luckysheet.css
  20. 505 0
      public/static/js/luckysheet_old/css/menuSprite.svg
  21. 二进制
      public/static/js/luckysheet_old/css/paint_16px.ico
  22. 二进制
      public/static/js/luckysheet_old/css/paint_24px.ico
  23. 二进制
      public/static/js/luckysheet_old/css/paint_32px.ico
  24. 528 0
      public/static/js/luckysheet_old/css/sprite38.svg
  25. 二进制
      public/static/js/luckysheet_old/css/waffle_sprite.png
  26. 1 0
      public/static/js/luckysheet_old/expendPlugins/chart/chartmix.css
  27. 34 0
      public/static/js/luckysheet_old/expendPlugins/chart/chartmix.umd.min.js
  28. 二进制
      public/static/js/luckysheet_old/fonts/FontAwesome.otf
  29. 二进制
      public/static/js/luckysheet_old/fonts/fontawesome-webfont.eot
  30. 2671 0
      public/static/js/luckysheet_old/fonts/fontawesome-webfont.svg
  31. 二进制
      public/static/js/luckysheet_old/fonts/fontawesome-webfont.ttf
  32. 二进制
      public/static/js/luckysheet_old/fonts/fontawesome-webfont.woff
  33. 二进制
      public/static/js/luckysheet_old/fonts/fontawesome-webfont.woff2
  34. 10 0
      public/static/js/luckysheet_old/luckysheet.esm.js
  35. 10 0
      public/static/js/luckysheet_old/luckysheet.umd.js
  36. 1 0
      public/static/js/luckysheet_old/plugins/css/pluginsCss.css
  37. 二进制
      public/static/js/luckysheet_old/plugins/images/CFcolorGradation.png
  38. 二进制
      public/static/js/luckysheet_old/plugins/images/CFdataBar.png
  39. 二进制
      public/static/js/luckysheet_old/plugins/images/CFicons.png
  40. 二进制
      public/static/js/luckysheet_old/plugins/images/icon_dropCell.png
  41. 二进制
      public/static/js/luckysheet_old/plugins/images/ui-icons_444444_256x240.png
  42. 二进制
      public/static/js/luckysheet_old/plugins/images/ui-icons_555555_256x240.png
  43. 二进制
      public/static/js/luckysheet_old/plugins/images/ui-icons_777620_256x240.png
  44. 二进制
      public/static/js/luckysheet_old/plugins/images/ui-icons_777777_256x240.png
  45. 二进制
      public/static/js/luckysheet_old/plugins/images/ui-icons_cc0000_256x240.png
  46. 二进制
      public/static/js/luckysheet_old/plugins/images/ui-icons_ffffff_256x240.png
  47. 1 0
      public/static/js/luckysheet_old/plugins/js/plugin.js
  48. 10 0
      public/static/js/luckysheet_old/plugins/plugins.css
  49. 428 0
      public/static/views/kccExcel.html
  50. 604 0
      public/static/views/stockHandle.html
  51. 257 0
      src/components/modUpload.vue
  52. 1 0
      src/components/p-header.vue
  53. 1 0
      src/components/upload.vue
  54. 3 3
      src/pages/main/advertising/materiel.vue
  55. 9 9
      src/pages/main/advertising/supplier.vue
  56. 292 0
      src/pages/main/antiSpoofing/channel.vue
  57. 282 0
      src/pages/main/antiSpoofing/districtCounty.vue
  58. 83 0
      src/pages/main/antiSpoofing/home.vue
  59. 289 0
      src/pages/main/antiSpoofing/personnel.vue
  60. 301 0
      src/pages/main/antiSpoofing/standingBook.vue
  61. 1276 0
      src/pages/main/apkTestMain/index.vue
  62. 408 203
      src/pages/main/demandDevelop/index.vue
  63. 141 127
      src/pages/main/demandDevelop/ywStanding.vue
  64. 799 0
      src/pages/main/iptv/index.vue
  65. 886 0
      src/pages/main/iptv/planApproval.vue
  66. 95 0
      src/pages/main/iptv/search.vue
  67. 196 0
      src/pages/main/iptv/uploadDown.vue
  68. 59 0
      src/pages/main/iptv/userDlg.vue
  69. 658 0
      src/pages/main/keyChannelCoop/appendix.vue
  70. 74 0
      src/pages/main/keyChannelCoop/home.vue
  71. 390 0
      src/pages/main/keyChannelCoop/onlineExcel.vue
  72. 16 0
      src/pages/main/keyChannelCoop/onlineExcelInfo.vue
  73. 1292 0
      src/pages/main/mbh/CMkMagicBoxTop.vue
  74. 4 2
      src/pages/main/organizaStructure/index.vue
  75. 3 3
      src/pages/main/performance/components/deptTreeOnly.vue
  76. 13 9
      src/pages/main/performance/components/form.vue
  77. 10 10
      src/pages/main/performance/components/sheet.vue
  78. 84 24
      src/pages/main/performance/department.vue
  79. 1 0
      src/pages/main/performance/mould.vue
  80. 6 5
      src/pages/main/performance/reply.vue
  81. 73 0
      src/pages/main/stockOperate/stockHandle.vue
  82. 930 0
      src/pages/main/stockOperate/stockOperate.vue
  83. 559 0
      src/pages/main/stockOperate/stockOperateCityList.vue
  84. 22 13
      src/pages/main/terminal/advertincrease.vue
  85. 11 4
      src/pages/main/terminal/components/advert.vue
  86. 92 0
      src/router/index.js
  87. 4 4
      vue.config.js

+ 1 - 1
package-lock.json

@@ -17,7 +17,7 @@
         "core-js": "^3.6.1",
         "echarts": "^4.7.0",
         "element-ui": "^2.13.0",
-        "exceljs": "^4.2.0",
+        "exceljs": "^2.0.1",
         "file-saver": "^2.0.5",
         "html2canvas": "^1.0.0-rc.7",
         "jquery": "^3.6.0",

二进制
public/static/js/luckysheet_old/assets/iconfont/Anton-Regular.ttf


二进制
public/static/js/luckysheet_old/assets/iconfont/HanaleiFill-Regular.ttf


二进制
public/static/js/luckysheet_old/assets/iconfont/Pacifico-Regular.ttf


+ 539 - 0
public/static/js/luckysheet_old/assets/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;
+}

文件差异内容过多而无法显示
+ 2700 - 0
public/static/js/luckysheet_old/assets/iconfont/demo_index.html


文件差异内容过多而无法显示
+ 457 - 0
public/static/js/luckysheet_old/assets/iconfont/iconfont.css


二进制
public/static/js/luckysheet_old/assets/iconfont/iconfont.eot


文件差异内容过多而无法显示
+ 1 - 0
public/static/js/luckysheet_old/assets/iconfont/iconfont.js


+ 779 - 0
public/static/js/luckysheet_old/assets/iconfont/iconfont.json

@@ -0,0 +1,779 @@
+{
+  "id": "1990368",
+  "name": "lucksheet",
+  "font_family": "iconfont",
+  "css_prefix_text": "luckysheet-iconfont-",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "17878780",
+      "name": "链接",
+      "font_class": "lianjie",
+      "unicode": "e7f8",
+      "unicode_decimal": 59384
+    },
+    {
+      "icon_id": "17612330",
+      "name": "打印区域",
+      "font_class": "dayinquyu",
+      "unicode": "e7f5",
+      "unicode_decimal": 59381
+    },
+    {
+      "icon_id": "17612331",
+      "name": "打印页面配置",
+      "font_class": "dayinyemianpeizhi",
+      "unicode": "e7f6",
+      "unicode_decimal": 59382
+    },
+    {
+      "icon_id": "17612332",
+      "name": "打印标题",
+      "font_class": "dayinbiaoti",
+      "unicode": "e7f7",
+      "unicode_decimal": 59383
+    },
+    {
+      "icon_id": "17600443",
+      "name": "分页预览",
+      "font_class": "fenyeyulan",
+      "unicode": "e7f2",
+      "unicode_decimal": 59378
+    },
+    {
+      "icon_id": "17600444",
+      "name": "普通",
+      "font_class": "putong",
+      "unicode": "e7f3",
+      "unicode_decimal": 59379
+    },
+    {
+      "icon_id": "17600445",
+      "name": "页面布局",
+      "font_class": "yemianbuju",
+      "unicode": "e7f4",
+      "unicode_decimal": 59380
+    },
+    {
+      "icon_id": "17597312",
+      "name": "表格锁定",
+      "font_class": "biaogesuoding",
+      "unicode": "e7ee",
+      "unicode_decimal": 59374
+    },
+    {
+      "icon_id": "17444514",
+      "name": "转到",
+      "font_class": "zhuandao1",
+      "unicode": "e7f1",
+      "unicode_decimal": 59377
+    },
+    {
+      "icon_id": "17444503",
+      "name": "右箭头",
+      "font_class": "youjiantou",
+      "unicode": "e7ed",
+      "unicode_decimal": 59373
+    },
+    {
+      "icon_id": "17444507",
+      "name": "菜单",
+      "font_class": "caidan2",
+      "unicode": "e7ef",
+      "unicode_decimal": 59375
+    },
+    {
+      "icon_id": "17444508",
+      "name": "替换",
+      "font_class": "tihuan",
+      "unicode": "e7f0",
+      "unicode_decimal": 59376
+    },
+    {
+      "icon_id": "17392794",
+      "name": "冻结",
+      "font_class": "dongjie1",
+      "unicode": "e7e1",
+      "unicode_decimal": 59361
+    },
+    {
+      "icon_id": "17392795",
+      "name": "剪",
+      "font_class": "jian1",
+      "unicode": "e7e2",
+      "unicode_decimal": 59362
+    },
+    {
+      "icon_id": "17392796",
+      "name": "加",
+      "font_class": "jia1",
+      "unicode": "e7e3",
+      "unicode_decimal": 59363
+    },
+    {
+      "icon_id": "17392797",
+      "name": "溢出",
+      "font_class": "yichu1",
+      "unicode": "e7e4",
+      "unicode_decimal": 59364
+    },
+    {
+      "icon_id": "17392798",
+      "name": "升序",
+      "font_class": "shengxu1",
+      "unicode": "e7e5",
+      "unicode_decimal": 59365
+    },
+    {
+      "icon_id": "17392799",
+      "name": "内框线",
+      "font_class": "neikuangxian",
+      "unicode": "e7e6",
+      "unicode_decimal": 59366
+    },
+    {
+      "icon_id": "17392800",
+      "name": "清除筛选",
+      "font_class": "qingchushaixuan",
+      "unicode": "e7e7",
+      "unicode_decimal": 59367
+    },
+    {
+      "icon_id": "17392801",
+      "name": "文本向上",
+      "font_class": "wenbenxiangshang",
+      "unicode": "e7e8",
+      "unicode_decimal": 59368
+    },
+    {
+      "icon_id": "17392802",
+      "name": "降序",
+      "font_class": "jiangxu1",
+      "unicode": "e7e9",
+      "unicode_decimal": 59369
+    },
+    {
+      "icon_id": "17392803",
+      "name": "内框横线",
+      "font_class": "neikuanghengxian",
+      "unicode": "e7ea",
+      "unicode_decimal": 59370
+    },
+    {
+      "icon_id": "17392804",
+      "name": "内框竖线",
+      "font_class": "neikuangshuxian",
+      "unicode": "e7eb",
+      "unicode_decimal": 59371
+    },
+    {
+      "icon_id": "17392805",
+      "name": "自定义排序",
+      "font_class": "zidingyipaixu",
+      "unicode": "e7ec",
+      "unicode_decimal": 59372
+    },
+    {
+      "icon_id": "16746498",
+      "name": "logo2",
+      "font_class": "logo2",
+      "unicode": "e7df",
+      "unicode_decimal": 59359
+    },
+    {
+      "icon_id": "16746532",
+      "name": "logo",
+      "font_class": "logo",
+      "unicode": "e7e0",
+      "unicode_decimal": 59360
+    },
+    {
+      "icon_id": "16730159",
+      "name": "文本倾斜",
+      "font_class": "wenbenqingxie1",
+      "unicode": "e7de",
+      "unicode_decimal": 59358
+    },
+    {
+      "icon_id": "16728412",
+      "name": "加粗",
+      "font_class": "jiacu",
+      "unicode": "e7d9",
+      "unicode_decimal": 59353
+    },
+    {
+      "icon_id": "16728080",
+      "name": "搜索",
+      "font_class": "sousuo",
+      "unicode": "e78a",
+      "unicode_decimal": 59274
+    },
+    {
+      "icon_id": "16728081",
+      "name": "关闭",
+      "font_class": "guanbi",
+      "unicode": "e78b",
+      "unicode_decimal": 59275
+    },
+    {
+      "icon_id": "16728082",
+      "name": "下一个",
+      "font_class": "xiayige",
+      "unicode": "e78c",
+      "unicode_decimal": 59276
+    },
+    {
+      "icon_id": "16728083",
+      "name": "下拉",
+      "font_class": "xiala",
+      "unicode": "e78d",
+      "unicode_decimal": 59277
+    },
+    {
+      "icon_id": "16728084",
+      "name": "文本颜色",
+      "font_class": "wenbenyanse",
+      "unicode": "e78e",
+      "unicode_decimal": 59278
+    },
+    {
+      "icon_id": "16728085",
+      "name": "上一个",
+      "font_class": "shangyige",
+      "unicode": "e78f",
+      "unicode_decimal": 59279
+    },
+    {
+      "icon_id": "16728086",
+      "name": "数据透视",
+      "font_class": "shujutoushi",
+      "unicode": "e790",
+      "unicode_decimal": 59280
+    },
+    {
+      "icon_id": "16728087",
+      "name": "填充",
+      "font_class": "tianchong",
+      "unicode": "e791",
+      "unicode_decimal": 59281
+    },
+    {
+      "icon_id": "16728088",
+      "name": "增加小数位",
+      "font_class": "zengjiaxiaoshuwei",
+      "unicode": "e792",
+      "unicode_decimal": 59282
+    },
+    {
+      "icon_id": "16728089",
+      "name": "编辑2",
+      "font_class": "bianji2",
+      "unicode": "e793",
+      "unicode_decimal": 59283
+    },
+    {
+      "icon_id": "16728090",
+      "name": "截屏",
+      "font_class": "jieping",
+      "unicode": "e794",
+      "unicode_decimal": 59284
+    },
+    {
+      "icon_id": "16728092",
+      "name": "减小小数位",
+      "font_class": "jianxiaoxiaoshuwei",
+      "unicode": "e796",
+      "unicode_decimal": 59286
+    },
+    {
+      "icon_id": "16728093",
+      "name": "菜单",
+      "font_class": "caidan",
+      "unicode": "e797",
+      "unicode_decimal": 59287
+    },
+    {
+      "icon_id": "16728094",
+      "name": "数据库",
+      "font_class": "shujuku",
+      "unicode": "e798",
+      "unicode_decimal": 59288
+    },
+    {
+      "icon_id": "16728095",
+      "name": "无边框",
+      "font_class": "wubiankuang",
+      "unicode": "e799",
+      "unicode_decimal": 59289
+    },
+    {
+      "icon_id": "16728096",
+      "name": "编辑",
+      "font_class": "bianji",
+      "unicode": "e79a",
+      "unicode_decimal": 59290
+    },
+    {
+      "icon_id": "16728097",
+      "name": "清除样式",
+      "font_class": "qingchuyangshi",
+      "unicode": "e79b",
+      "unicode_decimal": 59291
+    },
+    {
+      "icon_id": "16728099",
+      "name": "删除",
+      "font_class": "shanchu",
+      "unicode": "e79c",
+      "unicode_decimal": 59292
+    },
+    {
+      "icon_id": "16728100",
+      "name": "文本居中对齐",
+      "font_class": "wenbenjuzhongduiqi",
+      "unicode": "e79d",
+      "unicode_decimal": 59293
+    },
+    {
+      "icon_id": "16728101",
+      "name": "打印",
+      "font_class": "dayin",
+      "unicode": "e79e",
+      "unicode_decimal": 59294
+    },
+    {
+      "icon_id": "16728102",
+      "name": "文本分割",
+      "font_class": "wenbenfenge",
+      "unicode": "e79f",
+      "unicode_decimal": 59295
+    },
+    {
+      "icon_id": "16728103",
+      "name": "函数‘",
+      "font_class": "hanshu",
+      "unicode": "e7a0",
+      "unicode_decimal": 59296
+    },
+    {
+      "icon_id": "16728104",
+      "name": "降序",
+      "font_class": "jiangxu",
+      "unicode": "e7a1",
+      "unicode_decimal": 59297
+    },
+    {
+      "icon_id": "16728105",
+      "name": "顶部对齐",
+      "font_class": "dingbuduiqi",
+      "unicode": "e7a2",
+      "unicode_decimal": 59298
+    },
+    {
+      "icon_id": "16728106",
+      "name": "图片",
+      "font_class": "tupian",
+      "unicode": "e7a3",
+      "unicode_decimal": 59299
+    },
+    {
+      "icon_id": "16728107",
+      "name": "向下90",
+      "font_class": "xiangxia90",
+      "unicode": "e7a4",
+      "unicode_decimal": 59300
+    },
+    {
+      "icon_id": "16728108",
+      "name": "竖排文字",
+      "font_class": "shupaiwenzi",
+      "unicode": "e7a5",
+      "unicode_decimal": 59301
+    },
+    {
+      "icon_id": "16728109",
+      "name": "全加边框",
+      "font_class": "quanjiabiankuang",
+      "unicode": "e7a6",
+      "unicode_decimal": 59302
+    },
+    {
+      "icon_id": "16728110",
+      "name": "升序",
+      "font_class": "shengxu",
+      "unicode": "e7a7",
+      "unicode_decimal": 59303
+    },
+    {
+      "icon_id": "16728111",
+      "name": "裁剪",
+      "font_class": "caijian",
+      "unicode": "e7a8",
+      "unicode_decimal": 59304
+    },
+    {
+      "icon_id": "16728112",
+      "name": "金额",
+      "font_class": "jine",
+      "unicode": "e7a9",
+      "unicode_decimal": 59305
+    },
+    {
+      "icon_id": "16728113",
+      "name": "菜单1",
+      "font_class": "caidan1",
+      "unicode": "e7aa",
+      "unicode_decimal": 59306
+    },
+    {
+      "icon_id": "16728114",
+      "name": "取消合并",
+      "font_class": "quxiaohebing",
+      "unicode": "e7ab",
+      "unicode_decimal": 59307
+    },
+    {
+      "icon_id": "16728115",
+      "name": "文本下划线",
+      "font_class": "wenbenxiahuaxian",
+      "unicode": "e7ac",
+      "unicode_decimal": 59308
+    },
+    {
+      "icon_id": "16728116",
+      "name": "上边框",
+      "font_class": "shangbiankuang",
+      "unicode": "e7ad",
+      "unicode_decimal": 59309
+    },
+    {
+      "icon_id": "16728117",
+      "name": "定位",
+      "font_class": "dingwei",
+      "unicode": "e7ae",
+      "unicode_decimal": 59310
+    },
+    {
+      "icon_id": "16728118",
+      "name": "四周加边框",
+      "font_class": "sizhoujiabiankuang",
+      "unicode": "e7af",
+      "unicode_decimal": 59311
+    },
+    {
+      "icon_id": "16728119",
+      "name": "侧边栏收起",
+      "font_class": "cebianlanshouqi",
+      "unicode": "e7b0",
+      "unicode_decimal": 59312
+    },
+    {
+      "icon_id": "16728120",
+      "name": "合并",
+      "font_class": "hebing",
+      "unicode": "e7b1",
+      "unicode_decimal": 59313
+    },
+    {
+      "icon_id": "16728121",
+      "name": "向上倾斜",
+      "font_class": "xiangshangqingxie",
+      "unicode": "e7b2",
+      "unicode_decimal": 59314
+    },
+    {
+      "icon_id": "16728122",
+      "name": "水平对齐",
+      "font_class": "shuipingduiqi",
+      "unicode": "e7b3",
+      "unicode_decimal": 59315
+    },
+    {
+      "icon_id": "16728123",
+      "name": "文本删除线",
+      "font_class": "wenbenshanchuxian",
+      "unicode": "e7b4",
+      "unicode_decimal": 59316
+    },
+    {
+      "icon_id": "16728124",
+      "name": "文本右对齐",
+      "font_class": "wenbenyouduiqi",
+      "unicode": "e7b5",
+      "unicode_decimal": 59317
+    },
+    {
+      "icon_id": "16728125",
+      "name": "前进",
+      "font_class": "qianjin",
+      "unicode": "e7b6",
+      "unicode_decimal": 59318
+    },
+    {
+      "icon_id": "16728126",
+      "name": "图表",
+      "font_class": "tubiao",
+      "unicode": "e7b7",
+      "unicode_decimal": 59319
+    },
+    {
+      "icon_id": "16728127",
+      "name": "右边框",
+      "font_class": "youbiankuang",
+      "unicode": "e7b8",
+      "unicode_decimal": 59320
+    },
+    {
+      "icon_id": "16728128",
+      "name": "百分号",
+      "font_class": "baifenhao",
+      "unicode": "e7b9",
+      "unicode_decimal": 59321
+    },
+    {
+      "icon_id": "16728129",
+      "name": "格式刷",
+      "font_class": "geshishua",
+      "unicode": "e7ba",
+      "unicode_decimal": 59322
+    },
+    {
+      "icon_id": "16728130",
+      "name": "保存",
+      "font_class": "baocun",
+      "unicode": "e7bb",
+      "unicode_decimal": 59323
+    },
+    {
+      "icon_id": "16728131",
+      "name": "数据验证",
+      "font_class": "shujuyanzheng",
+      "unicode": "e7bc",
+      "unicode_decimal": 59324
+    },
+    {
+      "icon_id": "16728132",
+      "name": "截断",
+      "font_class": "jieduan",
+      "unicode": "e7bd",
+      "unicode_decimal": 59325
+    },
+    {
+      "icon_id": "16728133",
+      "name": "格式条件",
+      "font_class": "geshitiaojian",
+      "unicode": "e7be",
+      "unicode_decimal": 59326
+    },
+    {
+      "icon_id": "16728134",
+      "name": "自动换行",
+      "font_class": "zidonghuanhang",
+      "unicode": "e7bf",
+      "unicode_decimal": 59327
+    },
+    {
+      "icon_id": "16728135",
+      "name": "侧边栏展开",
+      "font_class": "cebianlanzhankai",
+      "unicode": "e7c0",
+      "unicode_decimal": 59328
+    },
+    {
+      "icon_id": "16728136",
+      "name": "筛选2",
+      "font_class": "shaixuan2",
+      "unicode": "e7c1",
+      "unicode_decimal": 59329
+    },
+    {
+      "icon_id": "16728137",
+      "name": "向下倾斜",
+      "font_class": "xiangxiaqingxie",
+      "unicode": "e7c2",
+      "unicode_decimal": 59330
+    },
+    {
+      "icon_id": "16728138",
+      "name": "溢出",
+      "font_class": "yichu",
+      "unicode": "e7c3",
+      "unicode_decimal": 59331
+    },
+    {
+      "icon_id": "16728139",
+      "name": "垂直合并",
+      "font_class": "chuizhihebing",
+      "unicode": "e7c4",
+      "unicode_decimal": 59332
+    },
+    {
+      "icon_id": "16728140",
+      "name": "文本分散对齐",
+      "font_class": "wenbenfensanduiqi",
+      "unicode": "e7c5",
+      "unicode_decimal": 59333
+    },
+    {
+      "icon_id": "16728141",
+      "name": "左边框",
+      "font_class": "zuobiankuang",
+      "unicode": "e7c6",
+      "unicode_decimal": 59334
+    },
+    {
+      "icon_id": "16728142",
+      "name": "分页查看",
+      "font_class": "fenyechakan",
+      "unicode": "e7c7",
+      "unicode_decimal": 59335
+    },
+    {
+      "icon_id": "16728143",
+      "name": "运行",
+      "font_class": "yunhang",
+      "unicode": "e7c8",
+      "unicode_decimal": 59336
+    },
+    {
+      "icon_id": "16728144",
+      "name": "列",
+      "font_class": "lie",
+      "unicode": "e7c9",
+      "unicode_decimal": 59337
+    },
+    {
+      "icon_id": "16728145",
+      "name": "全屏",
+      "font_class": "quanping",
+      "unicode": "e7ca",
+      "unicode_decimal": 59338
+    },
+    {
+      "icon_id": "16728146",
+      "name": "筛选",
+      "font_class": "shaixuan",
+      "unicode": "e7cb",
+      "unicode_decimal": 59339
+    },
+    {
+      "icon_id": "16728147",
+      "name": "更新",
+      "font_class": "gengxin",
+      "unicode": "e7cc",
+      "unicode_decimal": 59340
+    },
+    {
+      "icon_id": "16728148",
+      "name": "清除",
+      "font_class": "qingchu",
+      "unicode": "e7cd",
+      "unicode_decimal": 59341
+    },
+    {
+      "icon_id": "16728149",
+      "name": "行",
+      "font_class": "hang",
+      "unicode": "e7ce",
+      "unicode_decimal": 59342
+    },
+    {
+      "icon_id": "16728150",
+      "name": "注释",
+      "font_class": "zhushi",
+      "unicode": "e7cf",
+      "unicode_decimal": 59343
+    },
+    {
+      "icon_id": "16728151",
+      "name": "剪",
+      "font_class": "jian",
+      "unicode": "e7d0",
+      "unicode_decimal": 59344
+    },
+    {
+      "icon_id": "16728152",
+      "name": "计算",
+      "font_class": "jisuan",
+      "unicode": "e7d1",
+      "unicode_decimal": 59345
+    },
+    {
+      "icon_id": "16728153",
+      "name": "加",
+      "font_class": "jia",
+      "unicode": "e7d2",
+      "unicode_decimal": 59346
+    },
+    {
+      "icon_id": "16728154",
+      "name": "底部对齐",
+      "font_class": "dibuduiqi",
+      "unicode": "e7d3",
+      "unicode_decimal": 59347
+    },
+    {
+      "icon_id": "16728155",
+      "name": "向上90",
+      "font_class": "xiangshang90",
+      "unicode": "e7d4",
+      "unicode_decimal": 59348
+    },
+    {
+      "icon_id": "16728156",
+      "name": "无选装",
+      "font_class": "wuxuanzhuang",
+      "unicode": "e7d5",
+      "unicode_decimal": 59349
+    },
+    {
+      "icon_id": "16728157",
+      "name": "显示隐藏网格",
+      "font_class": "xianshiyincangwangge",
+      "unicode": "e7d6",
+      "unicode_decimal": 59350
+    },
+    {
+      "icon_id": "16728158",
+      "name": "冻结",
+      "font_class": "dongjie",
+      "unicode": "e7d7",
+      "unicode_decimal": 59351
+    },
+    {
+      "icon_id": "16728159",
+      "name": "文本左对齐",
+      "font_class": "wenbenzuoduiqi",
+      "unicode": "e7d8",
+      "unicode_decimal": 59352
+    },
+    {
+      "icon_id": "16728161",
+      "name": "后退",
+      "font_class": "houtui",
+      "unicode": "e7da",
+      "unicode_decimal": 59354
+    },
+    {
+      "icon_id": "16728162",
+      "name": "水平合并",
+      "font_class": "shuipinghebing",
+      "unicode": "e7db",
+      "unicode_decimal": 59355
+    },
+    {
+      "icon_id": "16728163",
+      "name": "下边框",
+      "font_class": "xiabiankuang",
+      "unicode": "e7dc",
+      "unicode_decimal": 59356
+    },
+    {
+      "icon_id": "16728164",
+      "name": "设置",
+      "font_class": "shezhi",
+      "unicode": "e7dd",
+      "unicode_decimal": 59357
+    }
+  ]
+}

文件差异内容过多而无法显示
+ 356 - 0
public/static/js/luckysheet_old/assets/iconfont/iconfont.svg


二进制
public/static/js/luckysheet_old/assets/iconfont/iconfont.ttf


二进制
public/static/js/luckysheet_old/assets/iconfont/iconfont.woff


二进制
public/static/js/luckysheet_old/assets/iconfont/iconfont.woff2


二进制
public/static/js/luckysheet_old/css/EwaAntH.gif


二进制
public/static/js/luckysheet_old/css/EwaAntV.gif


二进制
public/static/js/luckysheet_old/css/arrow-down.png


二进制
public/static/js/luckysheet_old/css/loading.gif


文件差异内容过多而无法显示
+ 1 - 0
public/static/js/luckysheet_old/css/luckysheet.css


文件差异内容过多而无法显示
+ 505 - 0
public/static/js/luckysheet_old/css/menuSprite.svg


二进制
public/static/js/luckysheet_old/css/paint_16px.ico


二进制
public/static/js/luckysheet_old/css/paint_24px.ico


二进制
public/static/js/luckysheet_old/css/paint_32px.ico


文件差异内容过多而无法显示
+ 528 - 0
public/static/js/luckysheet_old/css/sprite38.svg


二进制
public/static/js/luckysheet_old/css/waffle_sprite.png


文件差异内容过多而无法显示
+ 1 - 0
public/static/js/luckysheet_old/expendPlugins/chart/chartmix.css


文件差异内容过多而无法显示
+ 34 - 0
public/static/js/luckysheet_old/expendPlugins/chart/chartmix.umd.min.js


二进制
public/static/js/luckysheet_old/fonts/FontAwesome.otf


二进制
public/static/js/luckysheet_old/fonts/fontawesome-webfont.eot


文件差异内容过多而无法显示
+ 2671 - 0
public/static/js/luckysheet_old/fonts/fontawesome-webfont.svg


二进制
public/static/js/luckysheet_old/fonts/fontawesome-webfont.ttf


二进制
public/static/js/luckysheet_old/fonts/fontawesome-webfont.woff


二进制
public/static/js/luckysheet_old/fonts/fontawesome-webfont.woff2


文件差异内容过多而无法显示
+ 10 - 0
public/static/js/luckysheet_old/luckysheet.esm.js


文件差异内容过多而无法显示
+ 10 - 0
public/static/js/luckysheet_old/luckysheet.umd.js


文件差异内容过多而无法显示
+ 1 - 0
public/static/js/luckysheet_old/plugins/css/pluginsCss.css


二进制
public/static/js/luckysheet_old/plugins/images/CFcolorGradation.png


二进制
public/static/js/luckysheet_old/plugins/images/CFdataBar.png


二进制
public/static/js/luckysheet_old/plugins/images/CFicons.png


二进制
public/static/js/luckysheet_old/plugins/images/icon_dropCell.png


二进制
public/static/js/luckysheet_old/plugins/images/ui-icons_444444_256x240.png


二进制
public/static/js/luckysheet_old/plugins/images/ui-icons_555555_256x240.png


二进制
public/static/js/luckysheet_old/plugins/images/ui-icons_777620_256x240.png


二进制
public/static/js/luckysheet_old/plugins/images/ui-icons_777777_256x240.png


二进制
public/static/js/luckysheet_old/plugins/images/ui-icons_cc0000_256x240.png


二进制
public/static/js/luckysheet_old/plugins/images/ui-icons_ffffff_256x240.png


文件差异内容过多而无法显示
+ 1 - 0
public/static/js/luckysheet_old/plugins/js/plugin.js


文件差异内容过多而无法显示
+ 10 - 0
public/static/js/luckysheet_old/plugins/plugins.css


文件差异内容过多而无法显示
+ 428 - 0
public/static/views/kccExcel.html


文件差异内容过多而无法显示
+ 604 - 0
public/static/views/stockHandle.html


+ 257 - 0
src/components/modUpload.vue

@@ -0,0 +1,257 @@
+<template>
+    <div v-loading="loading">
+        <el-upload class="upload-demo" :drag="fileInfo.type !== 'btn'" multiple :limit="fileInfo.limit" ref="upload"
+            action="string" :on-remove="handleRemove" :on-exceed="handleExceed" :file-list="fileList"
+             :auto-upload="true" :show-file-list="fileInfo.type !== 'btn'"
+            :before-upload="deforeUp" :http-request="signUpload">
+            <div v-if="fileInfo.type !== 'btn'">
+                <i class="el-icon-upload"></i>
+                <div class="el-upload__text">点击上传</div>
+            </div>
+            <div v-if="fileInfo.type === 'btn'">
+                <el-button :size="fileInfo.size?fileInfo.size:'medium'" :type="fileInfo.btntype" @click="aa">{{fileInfo.typename}}</el-button>
+            </div>
+        </el-upload>
+    </div>
+</template>
+<script>
+    export default {
+        props: ['fileInfo', 'fileList','type'],
+        data() {
+            return {
+                fileLists: [],
+                attList: [],
+                loading: false,
+                num: 0,
+                s: false
+            }
+        },
+        methods: {
+            aa(){
+                this.$emit("test");
+            },
+            signUpload(){},
+            //删除
+            handleRemove(file) {
+                for (let i = 0; i < this.attList.length; i++) {
+                    if (this.attList[i].fileName === file.name) {
+                        this.attList.splice(i, 1);
+                        this.$emit('uploadBack', this.attList)
+                    }
+                }
+            },
+            //数量限制
+            handleExceed(files, fileList) {
+                this.$message.warning(
+                    `当前限制选择 ${this.fileInfo.limit} 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`
+                );
+            },
+            deforeUp(file) {
+                const isJPG = (file.type === 'image/jpeg') || (file.type ==='image/png');
+
+                if (!isJPG) {
+                    this.$message.error('只能上传jpg或png图片!');
+                    return false
+                }
+                if (this.fileInfo.fileSize) {
+                    const isLt2M = file.size / 1024 / 1024 < this.fileInfo.fileSize;
+                    if (!isLt2M) {
+                        this.$message.error('上传文件大小不能超过 '+this.fileInfo.fileSize+'MB!');
+                        return false
+                    }
+                } else{
+                    const isLt2M = file.size / 1024 / 1024 < 100;
+                    if (!isLt2M) {
+                        this.$message.error('上传文件大小不能超过 20MB!');
+                        return false
+                    }
+                }
+
+                if(this.fileInfo.type == 'img'){
+                    const isImg = file.type.split("/")[0] == 'image';
+                    if (!isImg) {
+                        this.$message.error('请上传图片格式文件!');
+                        return false
+                    }
+                }
+                if(this.fileInfo.typexz == 'ppt'){
+                    const isImg = file.name.split(".")[1] == 'pptx';
+                    // console.log(file.name.split(".")[1] == 'pptx')
+                    if (!isImg) {
+                        this.$message.error('请上传ppt格式文件!');
+                        return false
+                    }
+                }
+                if(this.fileInfo.typexz == 'csv'){
+                    const isImg = file.name.split(".")[1] == 'csv';
+                    if (!isImg) {
+                        this.$message.error('请上传csv格式文件!');
+                        return false
+                    }
+                }
+                if(this.fileInfo.typexz == 'xlsx'){
+                    const isImg = file.name.split(".")[1] == 'xlsx';
+                    if (!isImg) {
+                        this.$message.error('请上传xlsx格式文件!');
+                        return false
+                    }
+                }
+                this.loading = true;
+                let query = new FormData();
+                query.append("files", file);
+                if(this.fileInfo.typename == '一键上传'){
+                    query.append("categoryId", this.fileInfo.categoryId);
+                    query.append("categoryName", this.fileInfo.categoryName);
+                }
+                if(this.fileInfo.typename == '新增素材'){
+                    query.append("advType", this.fileInfo.advType);
+                    query.append("advTypeName", this.fileInfo.advTypeName);
+                }
+                if(this.fileInfo.url == '/market/cIllegalCallTask/importTempByProv'||this.fileInfo.url == '/market/cChannelInfo/cIllegalCallTask/importTempByProv'){
+                    query.append("taskId", this.fileInfo.taskId);
+                    query.append("tempId", this.fileInfo.tempId);
+                }
+                //违规外呼
+                if(this.fileInfo.uploadType == 'outCall'){
+                    query.append("uploadType", 'outCall');
+                    query.append("relId", this.fileInfo.relId);
+                }
+                if(this.fileInfo.uploadType == 'train'){
+                    query.append("uploadType", 'train');
+                    query.append("relId", this.fileInfo.relId);
+                }
+                //运营类项目考核及结算
+                if(this.fileInfo.url == '/market/cmkAttachInfo/upload'){
+                    query.append("uploadType", this.fileInfo.uploadType);
+                }
+                if(this.fileInfo.url == '/market/cStoreOutWo/importData'){
+                    query.append("woNo", this.fileInfo.woNo);
+                }
+                if(this.fileInfo.url == '/market/cStoreScheTrainEva/importDataEva'){
+                    query.append("evaId", this.fileInfo.evaId);
+                }
+                this.num++;
+                let _this = this;
+                this.$http({
+                    url: this.fileInfo.url,
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: query,
+                }).then((res) => {
+                    if (this.fileInfo.type === 'btn') {
+                        this.$refs['upload'].clearFiles();
+                        this.$emit('uploadBack',res)
+                        if(res.data.result==0){
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'success'
+                            });
+                            location.reload();
+                        }else if(res.data.result==1){
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'error'
+                            });
+                        }else if(res.data.result==2){
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'warning'
+                            });
+                        }else if(res.data.result==3){
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'info'
+                            });
+                        }else{
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'success'
+                            });
+
+                        }
+                        this.num--;
+                        if (this.num == 0) {
+                            this.loading = false;
+                        }
+                        return
+                    }
+                    if (this.fileInfo.type === 'voice') {
+                        this.attList = res.data;
+                    } else {
+                        this.attList.push({
+                            id: res.data.body.id,
+                            fileName: res.data.body.fileName,
+                            fileCode: res.data.body.fileCode,
+                            opName: res.data.body.opName,
+                            opNo: res.data.body.opNo,
+                            opTime: res.data.body.opTime,
+                            attchFileId: res.data.body.attchFileId,
+                            type: res.data.body.type,
+                        });
+                    }
+                    this.$emit('uploadBack', this.attList);
+                    this.num--;
+                    if (this.num == 0) {
+                        this.loading = false;
+                    }
+                    return true
+                }).catch((res) => {
+                    this.$message({
+                        message: file.name+'上传失败',
+                        type: 'error'
+                    });
+                    this.num--;
+                    if (this.num == 0) {
+                        this.loading = false;
+                    }
+                    for (let i = 0; i < this.$refs['upload'].uploadFiles.length; i++) {
+                        if(file.name == this.$refs['upload'].uploadFiles[i].name){
+                            this.$refs['upload'].uploadFiles.splice(i,1)
+                        }
+                    }
+                    return false
+                })
+            },
+        },
+        mounted() {
+
+        },
+        created() {
+            this.attList = [];
+            for (let i = 0; i < this.fileList.length; i++) {
+                this.attList.push({
+                    id: this.fileList[i].id,
+                    fileName: this.fileList[i].fileName,
+                    fileCode: this.fileList[i].fileCode,
+                    opName: this.fileList[i].opName,
+                    opNo: this.fileList[i].opNo,
+                    opTime: this.fileList[i].opTime,
+                    attchFileId: this.fileList[i].attchFileId,
+                    type: this.fileList[i].type,
+                })
+            }
+        },
+        watch: {
+            fileList() {
+                this.attList = [];
+                for (let i = 0; i < this.fileList.length; i++) {
+                    this.attList.push({
+                        id: this.fileList[i].id,
+                        fileName: this.fileList[i].fileName,
+                        fileCode: this.fileList[i].fileCode,
+                        opName: this.fileList[i].opName,
+                        opNo: this.fileList[i].opNo,
+                        opTime: this.fileList[i].opTime,
+                        attchFileId: this.fileList[i].attchFileId,
+                        type: this.fileList[i].type,
+                    })
+                }
+            }
+        }
+    }
+</script>
+<style scoped lang="scss">
+
+</style>

+ 1 - 0
src/components/p-header.vue

@@ -164,6 +164,7 @@ export default {
             window.sessionStorage.menus = undefined;
             window.sessionStorage.userInfo = undefined;
             window.sessionStorage.childrenMenus = undefined;
+            window.sessionStorage.removeItem("antiSpoofingSearchParams")
             window.opener = null;
             window.open(" ", "_self");
             window.close();

+ 1 - 0
src/components/upload.vue

@@ -122,6 +122,7 @@
                         this.$refs['upload'].clearFiles();
                         this.$emit('uploadBack',res)
                         if(res.data.result==0){
+                            this.$emit('onSuccess',file)
                             _this.$message({
                                 message: res.data.desc,
                                 type: 'success'

+ 3 - 3
src/pages/main/advertising/materiel.vue

@@ -13,7 +13,7 @@
                     class="btn-check"
                     size="medium"
                     type="primary"
-                    @click="dialogCheck(3)" v-if="userInfo.loginNo=='rensiying'"
+                    @click="dialogCheck(3)" v-if="userInfo.loginNo=='jiangshuai'"
                     >添加
                 </el-button>
                 <myUpload style="display:inline-block;" :fileInfo="fileInfot"
@@ -78,13 +78,13 @@
                             <el-button
                                 size="mini"
                                 type="primary"
-                                @click="dialogCheck(2, scope.row)" v-if="userInfo.loginNo=='rensiying'"
+                                @click="dialogCheck(2, scope.row)" v-if="userInfo.loginNo=='jiangshuai'"
                                 >修改</el-button
                             >
                             <el-button
                                 size="mini"
                                 type="danger"
-                                @click="delLine(scope.row)" v-if="userInfo.loginNo=='rensiying'"
+                                @click="delLine(scope.row)" v-if="userInfo.loginNo=='jiangshuai'"
                                 >删除</el-button
                             >
                         </template>

+ 9 - 9
src/pages/main/advertising/supplier.vue

@@ -4,7 +4,7 @@
             <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
             <div class="search">
                 <!-- <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch> -->
-                <el-button class="btn-check" size="medium" type="primary" @click="dialogCheck(3)" v-if="userInfo.loginNo=='rensiying'">添加
+                <el-button class="btn-check" size="medium" type="primary" @click="dialogCheck(3)" v-if="userInfo.loginNo=='jiangshuai'">添加
                 </el-button>
             </div>
             <div class="tabbox">
@@ -14,7 +14,7 @@
                     </el-table-column>
                     <el-table-column prop="code" label="供应商编码">
                     </el-table-column>
-					
+
 					<el-table-column prop="frameContractName" label="合同名称">
                     </el-table-column>
                     <el-table-column prop="frameContractNo" label="合同编号">
@@ -32,8 +32,8 @@
                     <el-table-column label="操作" width="160px" align="center">
                         <template slot-scope="scope">
                             <el-button size="mini" type="primary" @click="dialogCheck(1,scope.row)">查看</el-button>
-                            <el-button size="mini" type="primary" @click="dialogCheck(2,scope.row)" v-if="userInfo.loginNo=='rensiying'">修改</el-button>
-                            <el-button size="mini" type="danger" @click="delLine(scope.row)" v-if="userInfo.loginNo=='rensiying'">删除</el-button>
+                            <el-button size="mini" type="primary" @click="dialogCheck(2,scope.row)" v-if="userInfo.loginNo=='jiangshuai'">修改</el-button>
+                            <el-button size="mini" type="danger" @click="delLine(scope.row)" v-if="userInfo.loginNo=='jiangshuai'">删除</el-button>
                         </template>
                     </el-table-column>
                 </el-table>
@@ -47,7 +47,7 @@
             :modal-append-to-body="false" :close-on-click-modal="false" :before-close="closedia" :append-to-body="true" >
             <div v-loading="loadinged">
                 <el-form :model="infolist" ref="infolist" :rules="rules">
-					
+
                     <div class="info-line">
                         <el-form-item prop="name">
                             <span>供应商</span>
@@ -312,7 +312,7 @@
             //     v[1] ? this.params.buyTypeCode = v[1] : '';
             //     this.getList(this.params, this.pageSize);
             // },
-            
+
             //获取列表
             getList(v, n) {
                 this.pageSize = n;
@@ -370,7 +370,7 @@
                     this.infolist.contractSignTime = this.infolist.contractSignTime?this.$formatDate(this.infolist.contractSignTime, "YYYY-MM-DD"):'';
                     this.infolist.contractEndTime = this.infolist.contractEndTime?this.$formatDate(this.infolist.contractEndTime, "YYYY-MM-DD"):'';
                     if (this.titname === '添加') {
-                           
+
                             let supplierNameArr = this.tableData.filter(item => {
                                     return item.name == this.infolist.name
                                 });
@@ -385,9 +385,9 @@
                             }else{
                                 this.submitInfo("/market/cadvSupplier/add");
                             }
-                            
 
-                        
+
+
                     } else if (this.titname === '修改') {
                             let supplierNameArr = this.tableData.filter(item => {
                                     return item.name == this.infolist.name

+ 292 - 0
src/pages/main/antiSpoofing/channel.vue

@@ -0,0 +1,292 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;">
+        <div class="container-box">
+            <div class="search" v-if="!provincialCompany">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <div v-if="!provincialCompany">
+                    <el-button class="btn-check" plain size="medium" type="primary" @click="downloadTemplate">下载模板
+                    </el-button>
+                    <myUpload style="display:inline-block;" :fileInfo="fileInfo" @onSuccess="onSuccess"
+                              :fileList="fileInfo.fileList"></myUpload>
+                </div>
+            </div>
+            <div class="tabbox">
+                <el-table v-loading="loading" :key="key" :height="height" class="com-table" ref="multipleTable" :data="tableData"
+                          tooltip-effect="dark" size="small" border style="width: 100%" :header-cell-style="headerStyleFun" :cell-style="cellStyle">
+                    <el-table-column align="center" :label="toolTit">
+                        <el-table-column prop="cityName" align="center" label="地市" >
+                        </el-table-column>
+                        <el-table-column prop="channelName" align="center" label="渠道名称" >
+                        </el-table-column>
+                        <el-table-column prop="year" align="center" label="扣罚年份" >
+                            <template slot-scope="scope">
+                                {{$formatDate(scope.row.yearMonth, "YYYY-MM").split("-")[0]}}
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="month" align="center" label="扣罚月份" >
+                            <template slot-scope="scope">
+                                {{$formatDate(scope.row.yearMonth, "YYYY-MM").split("-")[1]}}
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="fineMoney" align="center" label="扣罚金额" >
+                        </el-table-column>
+                        <el-table-column prop="shutDownMonth" align="center" label="关停工号(1个月、3个月)" >
+                        </el-table-column>
+                        <el-table-column prop="isSixNotAllow" align="center" label="6个月不允许开户" >
+                        </el-table-column>
+                        <el-table-column prop="isCancelCooperation" align="center" label="取消合作" >
+                        </el-table-column>
+                        <el-table-column prop="warnEducation" align="center" label="警示教育(约谈、通报)" >
+                        </el-table-column>
+                        <el-table-column prop="terminalSixNotAllow" align="center" label="末梢渠道6个月不允许开户" >
+                        </el-table-column>
+                        <el-table-column prop="terminalCancelCooperation" align="center" label="末梢渠道取消合作" >
+                        </el-table-column>
+                        <el-table-column prop="terminalWarnEducation" align="center" label="末梢渠道警示教育" >
+                        </el-table-column>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                               :total="total">
+                </el-pagination>
+            </div>
+        </div>
+    </fullscreen>
+</template>
+<script>
+    import mySearch from "../../../components/search.vue";
+    import myUpload from '../../../components/upload'
+
+    export default {
+        components: {
+            mySearch,
+            myUpload
+        },
+        data() {
+
+            return {
+                toolTit: '渠道考核报表',
+                searchList: [{
+                    type: 'month',
+                    tit: '月份',
+                    value: '',
+                    width: '100%',
+                }
+                ],
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [],
+                params: {},
+                fileInfo: {
+                    type: 'btn',
+                    typename: '导入',
+                    btntype: 'primary',
+                    limit: 1,
+                    url: '/market/antiSpoofing/importChannelTemplate',
+                    fileList: [],
+                    typexz:"xlsx"
+                },
+                provincialCompany:false,
+                height:"calc(100% - 40px)",
+                key:0,
+                loading:false
+            }
+        },
+        methods: {
+            onSuccess(file){
+                this.searchInfo([this.searchList[0].value], 1);
+            },
+            cellStyle({row, column, rowIndex, columnIndex}){
+                if (columnIndex === 0){
+                    return "font-weight:bold;"
+                }else {
+                    return "";
+                }
+            },
+            headerStyleFun({row, column, rowIndex, columnIndex}){
+                if (rowIndex === 0){
+                    return "background-color:#d8e4bc;font-size:14px;font-weight:bold;color:black;"
+                }else if (rowIndex === 1){
+                    return "background-color:#d8e4bc;font-size:12px;font-weight:bold;color:black;"
+                }
+            },
+            downloadTemplate(){
+                let param = new FormData();
+                param.append("type", 'channel');
+                this.$http({
+                    url: '/market/antiSpoofing/excelExport',
+                    method: "post",
+                    responseType: 'blob',
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: param,
+                }).then((response) => {
+                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                        let blob = new Blob([response.data], {
+                            type: response.data.type
+                        });
+                        window.navigator.msSaveOrOpenBlob(blob, '渠道考核模板.xlsx');
+                    } else {
+                        /* 火狐谷歌的文件下载方式 */
+                        var blob = new Blob([response.data])
+                        var downloadElement = document.createElement('a')
+                        var href = window.URL.createObjectURL(blob);
+                        downloadElement.href = href;
+                        downloadElement.download = '渠道考核模板.xlsx';
+                        document.body.appendChild(downloadElement);
+                        downloadElement.click();
+                        document.body.removeChild(downloadElement);
+                        window.URL.revokeObjectURL(href);
+                    }
+                })
+            },
+            //搜索数据
+            searchInfo(v) {
+                this.params = new FormData();
+                this.params.append("date", v[0] ?  this.$formatDate(v[0], "YYYY-MM") + '-01' : '');
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                this.loading = true
+                this.pageSize = n;
+                v.append("type",'channel');
+                let item = window.sessionStorage.getItem("antiSpoofingSearchParams");
+                if (item){
+                    let parse = JSON.parse(item);
+                    v.append("cityName", parse.city)
+                    if (!v.get('date')){
+                        v.append("startDate", parse.queryTime[0])
+                        v.append("endDate", parse.queryTime[1])
+                    }
+                }
+                this.$http({
+                    url: "/market/antiSpoofing/getImportData",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                        "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                    },
+                    data: v,
+                }).then((res) => {
+                    if (res.data.retCode === '1'){
+                        this.$message.error(res.data.retMsg);
+                    }else {
+                        this.tableData = res.data.data;
+                        this.total = res.data.totalRecord;
+                        this.loading = false;
+                    }
+                }).catch(() => {
+                    this.tableData = []
+                    this.total = 0
+                    this.loading = false;
+                });
+            },
+            // 分页
+            currchange(v) {
+                this.pageSize = v;
+                this.searchInfo([this.searchList[0].value], this.pageSize);
+            },
+            getUser() {
+                let menus = JSON.parse(window.sessionStorage.childrenMenus);
+                let flag = false
+                for(let n=0;n<menus.length;n++){
+                    if (menus[n].jspUrl === "/antiSpoofingCityScreen") {
+                        flag = true
+                    }
+                }
+                if (!flag){
+                    this.provincialCompany = true
+                    this.height = "calc(100%)"
+                    this.key += 1
+                }
+            }
+        },
+        mounted() {
+            this.getUser()
+            let param = JSON.parse(window.sessionStorage.getItem("antiSpoofingSearchParams"));
+            if (param){
+                this.searchInfo([], 1);
+            }else {
+                this.searchList[0].value = new Date()
+                this.searchInfo([this.searchList[0].value], 1);
+            }
+        },
+        created() {
+
+        }
+    }
+</script>
+<style scoped lang="scss">
+    .onetab {
+        margin-bottom: 20px;
+        padding: 0 20px;
+    }
+
+    .titbox {
+        div {
+            float: right;
+
+            i {
+                font-size: 22px;
+                margin-left: 20px;
+                cursor: pointer;
+            }
+        }
+    }
+
+    .tabbox {
+        margin-top: 15px;
+    }
+
+    .pageBox {
+        text-align: right;
+        margin-top: 10px;
+    }
+
+    .info-line {
+        width: 100%;
+        display: block;
+        padding-left: 20px;
+
+        div {
+            width: 50%;
+            display: inline-block;
+        }
+
+        span {
+            width: 80px;
+            display: inline-block;
+            text-align: left;
+
+            i {
+                color: red;
+                display: inline-block;
+                padding-right: 5px;
+            }
+        }
+
+        .el-select,
+        .el-input {
+            width: calc(100% - 100px);
+        }
+    }
+
+    .online {
+        width: 100%;
+
+        .el-select {
+            width: calc(100% - 100px);
+        }
+
+        span {
+            vertical-align: top;
+        }
+
+        .el-textarea {
+            width: calc(100% - 100px);
+        }
+    }
+</style>

+ 282 - 0
src/pages/main/antiSpoofing/districtCounty.vue

@@ -0,0 +1,282 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;">
+        <div class="container-box">
+            <div class="search"  v-if="!provincialCompany">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <div v-if="!provincialCompany">
+                    <el-button class="btn-check" plain size="medium" type="primary" @click="downloadTemplate">下载模板
+                    </el-button>
+                    <myUpload style="display:inline-block;" :fileInfo="fileInfo" @onSuccess="onSuccess"
+                              :fileList="fileInfo.fileList"></myUpload>
+                </div>
+            </div>
+            <div class="tabbox">
+                <el-table v-loading="loading" :key="key" height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                    tooltip-effect="dark" size="small" border style="width: 100%" :header-cell-style="headerStyleFun" :cell-style="cellStyle">
+                    <el-table-column align="center" :label="toolTit">
+                        <el-table-column prop="cityName" align="center" label="地市" >
+                        </el-table-column>
+                        <el-table-column prop="districtCountyName" align="center" label="区县名" >
+                        </el-table-column>
+                        <el-table-column prop="year" align="center" label="扣罚年份" >
+                            <template slot-scope="scope">
+                                {{$formatDate(scope.row.yearMonth, "YYYY-MM").split("-")[0]}}
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="month" align="center" label="扣罚月份" >
+                            <template slot-scope="scope">
+                                {{$formatDate(scope.row.yearMonth, "YYYY-MM").split("-")[1]}}
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="deductPoints" align="center" label="扣分" >
+                        </el-table-column>
+                        <el-table-column prop="interview"  align="center" label="约谈" width="300">
+                        </el-table-column>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                    :total="total">
+                </el-pagination>
+            </div>
+        </div>
+    </fullscreen>
+</template>
+<script>
+    import mySearch from "../../../components/search.vue";
+    import toolList from "../../../components/toolList.vue";
+    import myUpload from '../../../components/upload';
+
+    export default {
+        components: {
+            mySearch,
+            toolList,
+            myUpload
+        },
+        data() {
+
+            return {
+                toolTit: '区县考核报表',
+                searchList: [{
+                        type: 'month',
+                        tit: '月份',
+                        value: '',
+                        width: '100%',
+                    }
+                ],
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [],
+                userInfo: {},
+                params: {},
+                fileInfo: {
+                    type: 'btn',
+                    typename: '导入',
+                    btntype: 'primary',
+                    limit: 1,
+                    url: '/market/antiSpoofing/importDistrictCountyTemplate',
+                    fileList: [],
+                    typexz:"xlsx"
+                },
+                provincialCompany:false,
+                key:0,
+                loading:false
+            }
+        },
+        methods: {
+            onSuccess(file){
+                this.searchInfo([this.searchList[0].value], 1);
+            },
+            cellStyle({row, column, rowIndex, columnIndex}){
+                if (columnIndex === 0){
+                    return "font-weight:bold;"
+                }else {
+                    return "";
+                }
+            },
+            headerStyleFun({row, column, rowIndex, columnIndex}){
+                if (rowIndex === 0){
+                    return "background-color:#d8e4bc;font-size:14px;font-weight:bold;color:black;"
+                }else if (rowIndex === 1){
+                    return "background-color:#d8e4bc;font-size:12px;font-weight:bold;color:black;"
+                }
+            },
+            downloadTemplate(){
+                let param = new FormData();
+                param.append("type", 'districtCounty');
+                this.$http({
+                    url: '/market/antiSpoofing/excelExport',
+                    method: "post",
+                    responseType: 'blob',
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: param,
+                }).then((response) => {
+                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                        let blob = new Blob([response.data], {
+                            type: response.data.type
+                        });
+                        window.navigator.msSaveOrOpenBlob(blob, '区县考核模板.xlsx');
+                    } else {
+                        /* 火狐谷歌的文件下载方式 */
+                        var blob = new Blob([response.data])
+                        var downloadElement = document.createElement('a')
+                        var href = window.URL.createObjectURL(blob);
+                        downloadElement.href = href;
+                        downloadElement.download = '区县考核模板.xlsx';
+                        document.body.appendChild(downloadElement);
+                        downloadElement.click();
+                        document.body.removeChild(downloadElement);
+                        window.URL.revokeObjectURL(href);
+                    }
+                })
+            },
+            //搜索数据
+            searchInfo(v) {
+                this.params = new FormData();
+                this.params.append("date", v[0] ?  this.$formatDate(v[0], "YYYY-MM") + '-01'  : '');
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                this.loading = true
+                this.pageSize = n;
+                v.append("type",'districtCounty');
+                let item = window.sessionStorage.getItem("antiSpoofingSearchParams");
+                if (item){
+                    let parse = JSON.parse(item);
+                    v.append("cityName", parse.city)
+                    if (!v.get('date')){
+                        v.append("startDate", parse.queryTime[0])
+                        v.append("endDate", parse.queryTime[1])
+                    }
+                }
+                this.$http({
+                    url: "/market/antiSpoofing/getImportData",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                        "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                    },
+                    data: v,
+                }).then((res) => {
+                    if (res.data.retCode === '1'){
+                        this.$message.error(res.data.retMsg);
+                    }else {
+                        this.tableData = res.data.data;
+                        this.total = res.data.totalRecord;
+                        this.loading = false;
+                    }
+                }).catch(() => {
+                    this.tableData = []
+                    this.total = 0
+                    this.loading = false;
+                });
+            },
+            // 分页
+            currchange(v) {
+                this.pageSize = v;
+                this.searchInfo([this.searchList[0].value], this.pageSize);
+            },
+            getUser() {
+                let menus = JSON.parse(window.sessionStorage.childrenMenus);
+                let flag = false
+                for(let n=0;n<menus.length;n++){
+                    if (menus[n].jspUrl === "/antiSpoofingCityScreen") {
+                        flag = true
+                    }
+                }
+                if (!flag){
+                    this.provincialCompany = true
+                    this.height = "calc(100%)"
+                    this.key += 1
+                }
+            }
+        },
+        mounted() {
+            this.getUser()
+            let param = JSON.parse(window.sessionStorage.getItem("antiSpoofingSearchParams"));
+            if (param){
+                this.searchInfo([], 1);
+            }else {
+                this.searchList[0].value = new Date()
+                this.searchInfo([this.searchList[0].value], 1);
+            }
+        },
+        created() {
+
+        }
+    }
+</script>
+<style scoped lang="scss">
+    .onetab {
+        margin-bottom: 20px;
+        padding: 0 20px;
+    }
+
+    .titbox {
+        div {
+            float: right;
+
+            i {
+                font-size: 22px;
+                margin-left: 20px;
+                cursor: pointer;
+            }
+        }
+    }
+
+    .tabbox {
+        margin-top: 15px;
+    }
+
+    .pageBox {
+        text-align: right;
+        margin-top: 10px;
+    }
+
+    .info-line {
+        width: 100%;
+        display: block;
+        padding-left: 20px;
+
+        div {
+            width: 50%;
+            display: inline-block;
+        }
+
+        span {
+            width: 80px;
+            display: inline-block;
+            text-align: left;
+
+            i {
+                color: red;
+                display: inline-block;
+                padding-right: 5px;
+            }
+        }
+
+        .el-select,
+        .el-input {
+            width: calc(100% - 100px);
+        }
+    }
+
+    .online {
+        width: 100%;
+
+        .el-select {
+            width: calc(100% - 100px);
+        }
+
+        span {
+            vertical-align: top;
+        }
+
+        .el-textarea {
+            width: calc(100% - 100px);
+        }
+    }
+</style>

+ 83 - 0
src/pages/main/antiSpoofing/home.vue

@@ -0,0 +1,83 @@
+<template>
+  <div class="inner-container">
+    <div v-if="menuList.indexOf(activeName) >= 0">
+        <el-col :span="3"
+        ><el-tabs
+            tab-position="left"
+            v-model="activeName"
+            @tab-click="handleClick"
+        >
+            <el-tab-pane
+                v-for="(item, index) in routerList"
+                :key="index"
+                :name="item.path"
+                :label="item.label"
+            ></el-tab-pane>
+        </el-tabs>
+        </el-col>
+        <el-col :span="21" style="background: #f4f4f4;">
+            <div style="height: 100%">
+                <router-view />
+            </div>
+        </el-col>
+    </div>
+      <div v-else>
+          <div style="height: 100%;background: #f4f4f4;">
+              <router-view />
+          </div>
+      </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      activeName: "",
+      showList: [],
+      routerList: [
+        { label: "区县考核报表", path: "/districtCounty", name: "districtCounty" },
+        { label: "人员考核报表", path: "/personnel", name: "personnel" },
+        { label: "渠道考核报表", path: "/channel", name: "channel" }
+      ],
+    };
+  },
+  computed: {
+    menuList: function () {
+      let arr = [];
+      this.routerList.map((item) => {
+        this.showList.map((row) => {
+          if (item.path == row) {
+            arr.push(item.path);
+          }
+        });
+      });
+      return arr;
+    },
+  },
+  methods: {
+    handleClick(val) {
+      if (this.$route.path != this.activeName) {
+        this.$router.push(this.activeName);
+      }
+    },
+  },
+  mounted() {
+    this.activeName = this.$route.path;
+  },
+  created() {
+    JSON.parse(sessionStorage.childrenMenus).map((item) => {
+      this.showList.push(item.jspUrl);
+    });
+  },
+  watch: {
+    $route(to, from) {
+      this.activeName = this.$route.path;
+    },
+  },
+};
+</script>
+<style>
+.el-tabs__content {
+  display: none;
+}
+</style>

+ 289 - 0
src/pages/main/antiSpoofing/personnel.vue

@@ -0,0 +1,289 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;">
+        <div class="container-box">
+            <div class="search" v-if="!provincialCompany">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <div>
+                    <el-button class="btn-check" plain size="medium" type="primary" @click="downloadTemplate">下载模板
+                    </el-button>
+                    <myUpload style="display:inline-block;" :fileInfo="fileInfo" @onSuccess="onSuccess"
+                              :fileList="fileInfo.fileList"></myUpload>
+                </div>
+            </div>
+            <div class="tabbox">
+                <el-table v-loading="loading" :key="key" :height="height" class="com-table" ref="multipleTable" :data="tableData"
+                          tooltip-effect="dark" size="small" border style="width: 100%" :header-cell-style="headerStyleFun" :cell-style="cellStyle">
+                    <el-table-column align="center" :label="toolTit">
+                        <el-table-column prop="cityName" align="center" label="地市" >
+                        </el-table-column>
+                        <el-table-column prop="jobNumber" align="center" label="工号" >
+                        </el-table-column>
+                        <el-table-column prop="userName" align="center" label="人员姓名" >
+                        </el-table-column>
+                        <el-table-column prop="post" align="center" label="职务" >
+                        </el-table-column>
+                        <el-table-column prop="year" align="center" label="扣罚年份" >
+                            <template slot-scope="scope">
+                                {{$formatDate(scope.row.yearMonth, "YYYY-MM").split("-")[0]}}
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="month" align="center" label="扣罚月份" >
+                            <template slot-scope="scope">
+                                {{$formatDate(scope.row.yearMonth, "YYYY-MM").split("-")[1]}}
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="deductPoints" align="center" label="扣绩效(分)" >
+                        </el-table-column>
+                        <el-table-column prop="fineMoney" align="center" label="罚款" >
+                        </el-table-column>
+                        <el-table-column prop="notification"  align="center" label="通报" width="300">
+                        </el-table-column>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                               :total="total">
+                </el-pagination>
+            </div>
+        </div>
+    </fullscreen>
+</template>
+<script>
+    import mySearch from "../../../components/search.vue";
+    import toolList from "../../../components/toolList.vue";
+    import myUpload from '../../../components/upload';
+
+
+    export default {
+        components: {
+            mySearch,
+            toolList,
+            myUpload
+        },
+        data() {
+
+            return {
+                toolTit: '人员考核报表',
+                searchList: [{
+                    type: 'month',
+                    tit: '月份',
+                    value: '',
+                    width: '100%',
+                }
+                ],
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [],
+                params: {},
+                fileInfo: {
+                    type: 'btn',
+                    typename: '导入',
+                    btntype: 'primary',
+                    limit: 1,
+                    url: '/market/antiSpoofing/importPersonnelTemplate',
+                    fileList: [],
+                    typexz:"xlsx"
+                },
+                provincialCompany:false,
+                height:'calc(100% - 40px)',
+                key:0,
+                loading:false
+            }
+        },
+        methods: {
+            onSuccess(file){
+                this.searchInfo([this.searchList[0].value], 1);
+            },
+            headerStyleFun({row, column, rowIndex, columnIndex}){
+                if (rowIndex === 0){
+                    return "background-color:#d8e4bc;font-size:14px;font-weight:bold;color:black;"
+                }else if (rowIndex === 1){
+                    return "background-color:#d8e4bc;font-size:12px;font-weight:bold;color:black;"
+                }
+            },
+            cellStyle({row, column, rowIndex, columnIndex}){
+                if (columnIndex === 0){
+                    return "font-weight:bold;"
+                }else {
+                    return "";
+                }
+            },
+            downloadTemplate(){
+                let param = new FormData();
+                param.append("type", 'personnel');
+                this.$http({
+                    url: '/market/antiSpoofing/excelExport',
+                    method: "post",
+                    responseType: 'blob',
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: param,
+                }).then((response) => {
+                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                        let blob = new Blob([response.data], {
+                            type: response.data.type
+                        });
+                        window.navigator.msSaveOrOpenBlob(blob, '人员考核模板.xlsx');
+                    } else {
+                        /* 火狐谷歌的文件下载方式 */
+                        var blob = new Blob([response.data])
+                        var downloadElement = document.createElement('a')
+                        var href = window.URL.createObjectURL(blob);
+                        downloadElement.href = href;
+                        downloadElement.download = '人员考核模板.xlsx';
+                        document.body.appendChild(downloadElement);
+                        downloadElement.click();
+                        document.body.removeChild(downloadElement);
+                        window.URL.revokeObjectURL(href);
+                    }
+                })
+            },
+            //搜索数据
+            searchInfo(v) {
+                this.params = new FormData();
+                this.params.append("date", v[0] ?  this.$formatDate(v[0], "YYYY-MM") + '-01'  : '');
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                this.loading = true
+                this.pageSize = n;
+                v.append("type",'personnel');
+                let item = window.sessionStorage.getItem("antiSpoofingSearchParams");
+                if (item){
+                    let parse = JSON.parse(item);
+                    v.append("cityName", parse.city)
+                    if (!v.get('date')){
+                        v.append("startDate", parse.queryTime[0])
+                        v.append("endDate", parse.queryTime[1])
+                    }
+                }
+                this.$http({
+                    url: "/market/antiSpoofing/getImportData",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                        "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                    },
+                    data: v,
+                }).then((res) => {
+                    if (res.data.retCode === '1'){
+                        this.$message.error(res.data.retMsg);
+                    }else {
+                        this.tableData = res.data.data;
+                        this.total = res.data.totalRecord;
+                        this.loading = false;
+                    }
+                }).catch(() => {
+                    this.tableData = []
+                    this.total = 0
+                    this.loading = false;
+                });
+            },
+            // 分页
+            currchange(v) {
+                this.pageSize = v;
+                this.searchInfo([this.searchList[0].value], this.pageSize);
+            },
+            getUser() {
+                let menus = JSON.parse(window.sessionStorage.childrenMenus);
+                let flag = false
+                for(let n=0;n<menus.length;n++){
+                    if (menus[n].jspUrl === "/antiSpoofingCityScreen") {
+                        flag = true
+                    }
+                }
+                if (!flag){
+                    this.provincialCompany = true
+                    this.height = "calc(100%)"
+                    this.key += 1
+                }
+            }
+        },
+        mounted() {
+            this.getUser()
+            let param = JSON.parse(window.sessionStorage.getItem("antiSpoofingSearchParams"));
+            if (param){
+                this.searchInfo([], 1);
+            }else {
+                this.searchList[0].value = new Date()
+                this.searchInfo([this.searchList[0].value], 1);
+            }
+        },
+        created() {
+
+        },
+    }
+</script>
+<style scoped lang="scss">
+    .onetab {
+        margin-bottom: 20px;
+        padding: 0 20px;
+    }
+
+    .titbox {
+        div {
+            float: right;
+
+            i {
+                font-size: 22px;
+                margin-left: 20px;
+                cursor: pointer;
+            }
+        }
+    }
+
+    .tabbox {
+        margin-top: 15px;
+    }
+
+    .pageBox {
+        text-align: right;
+        margin-top: 10px;
+    }
+
+    .info-line {
+        width: 100%;
+        display: block;
+        padding-left: 20px;
+
+        div {
+            width: 50%;
+            display: inline-block;
+        }
+
+        span {
+            width: 80px;
+            display: inline-block;
+            text-align: left;
+
+            i {
+                color: red;
+                display: inline-block;
+                padding-right: 5px;
+            }
+        }
+
+        .el-select,
+        .el-input {
+            width: calc(100% - 100px);
+        }
+    }
+
+    .online {
+        width: 100%;
+
+        .el-select {
+            width: calc(100% - 100px);
+        }
+
+        span {
+            vertical-align: top;
+        }
+
+        .el-textarea {
+            width: calc(100% - 100px);
+        }
+    }
+</style>

+ 301 - 0
src/pages/main/antiSpoofing/standingBook.vue

@@ -0,0 +1,301 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;">
+        <div class="container-box">
+            <div class="search">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <el-button class="btn-check" size="medium" type="primary" @click="outList">导出
+                </el-button>
+            </div>
+            <div class="tabbox">
+                <el-table v-loading="loading" height="100%" class="com-table" ref="multipleTable" :data="tableData" :show-summary="true" :summary-method="getSummaries"
+                    tooltip-effect="dark" size="small" border style="width: 100%" :header-cell-style="headerStyleFun" :cell-style="cellStyle">
+                    <el-table-column prop="cityName" align="center" fixed="left" label="地市"></el-table-column>
+                    <el-table-column align="center" width="800px" :label="tooltit">
+                        <el-table-column align="center" label="区县">
+                            <el-table-column prop="countyCount" align="center" label="区县个数" ></el-table-column>
+                            <el-table-column prop="countyDeductCount"  align="center" label="扣罚次数"></el-table-column>
+                            <el-table-column prop="countyDeductPoints" align="center" label="扣分" ></el-table-column>
+                            <el-table-column prop="countyInterview"  align="center" label="约谈"></el-table-column>
+                        </el-table-column>
+                        <el-table-column align="center" label="人员">
+                            <el-table-column prop="personnelPeopleNumber" align="center" label="扣罚人数" ></el-table-column>
+                            <el-table-column prop="personnelDeductCount" align="center" label="扣罚人次" ></el-table-column>
+                            <el-table-column prop="personnelDeductPoints" align="center" label="扣分" ></el-table-column>
+                            <el-table-column prop="personnelFineMoney" align="center" label="罚款" ></el-table-column>
+                            <el-table-column prop="personnelNotification"  align="center" label="通报"></el-table-column>
+                        </el-table-column>
+                        <el-table-column align="center" label="渠道">
+                            <el-table-column prop="channelCount" align="center" label="渠道个数" ></el-table-column>
+                            <el-table-column prop="channelDeductCount" align="center" label="扣罚次数" ></el-table-column>
+                            <el-table-column prop="channelFineMoney" align="center" label="扣罚金额" ></el-table-column>
+                            <el-table-column prop="channelShutDownMonth" align="center" width="100" label="关停工号(1个月、3个月)" ></el-table-column>
+                            <el-table-column prop="channelIsSixNotAllow" align="center" label="6个月不允许开户" ></el-table-column>
+                            <el-table-column prop="channelIsCancelCooperation" align="center" label="取消合作" ></el-table-column>
+                            <el-table-column prop="channelWarnEducation" align="center" width="100" label="警示教育(约谈、通报)" ></el-table-column>
+                            <el-table-column prop="channelTerminalSixNotAllow" align="center" width="100" label="末梢渠道6个月不允许开户" ></el-table-column>
+                            <el-table-column prop="channelTerminalCancelCooperation" align="center" label="末梢渠道取消合作" ></el-table-column>
+                            <el-table-column prop="channelTerminalWarnEducation" align="center" label="末梢渠道警示教育" ></el-table-column>
+                        </el-table-column>
+                    </el-table-column>
+                    <el-table-column align="center" fixed="right" label="操作">
+                        <template slot-scope="scope">
+                            <el-button @click="handleClick(scope.row)" type="text" size="small">详情</el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+            </div>
+        </div>
+    </fullscreen>
+</template>
+<script>
+    import mySearch from "../../../components/search.vue";
+
+    export default {
+        components: {
+            mySearch
+        },
+        data() {
+
+            return {
+                tooltit: '处罚台账',
+                searchList: [{
+                        type: 'month',
+                        tit: '开始月份',
+                        value: new Date(),
+                        width: '49%',
+                    },
+                    {
+                        type: 'month',
+                        tit: '结束月份',
+                        value: new Date(),
+                        width: '49%',
+                    },
+                ],
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [],
+                params: new FormData(),
+                loading:false
+            }
+        },
+        methods: {
+            cellStyle({row, column, rowIndex, columnIndex}){
+                if (columnIndex === 0){
+                    return "font-weight:bold;"
+                }else {
+                    return "";
+                }
+            },
+            headerStyleFun({row, column, rowIndex, columnIndex}){
+                if (rowIndex === 0){
+                    return "background-color:#d8e4bc;font-size:14px;font-weight:bold;color:black;"
+                }else {
+                    return "background-color:#d8e4bc;font-size:12px;font-weight:bold;color:black;"
+                }
+            },
+            handleClick(row){
+                window.sessionStorage.setItem("antiSpoofingSearchParams", JSON.stringify({
+                    queryTime:[this.$formatDate(this.searchList[0].value, "YYYY-MM") + '-01', this.$formatDate(this.searchList[1].value, "YYYY-MM") + '-01'],
+                    city:row.cityName
+                }))
+                this.$router.push({
+                    path: "/districtCounty"
+                });
+            },
+            //搜索数据
+            searchInfo(v) {
+                if (v[0] && v[1]){
+                    let begin = this.$formatDate(v[0], "YYYY-MM");
+                    let end = this.$formatDate(v[1], "YYYY-MM");
+                    if ((new Date(end)).getTime() < (new Date(begin)).getTime()){
+                        this.$message.error(
+                            "开始时间不能大于结束时间"
+                        );
+                        return
+                    }
+                }
+                this.params = new FormData();
+                this.params.append("startDate", v[0] ?  this.$formatDate(v[0], "YYYY-MM") + '-01'  : '');
+                this.params.append("endDate", v[1] ? this.$formatDate(v[1], "YYYY-MM") + '-01'  : '');
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                this.loading = true
+                this.pageSize = n;
+                this.$http({
+                    url: "/market/antiSpoofing/getAllStandingBook",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                        "page": '{"pageNo":"' + n + '","pageSize":"20"}'
+                    },
+                    data: v,
+                }).then((res) => {
+                    if (res.data.retCode === '1'){
+                        this.$message.error(res.data.retMsg);
+                    }else {
+                        res.data.data.forEach((data)=> {
+                            if (!data.countyCount){
+                                data.countyCount = "未填写"
+                            }
+                        })
+                        this.tableData = res.data.data;
+                        this.total = res.data.totalRecord;
+                        this.loading = false
+                    }
+                }).catch(() => {
+                    this.tableData = []
+                    this.total = 0
+                    this.loading = false;
+                });
+            },
+            outList() {
+                let param = new FormData();
+                let startDate = this.searchList[0].value ? this.$formatDate(this.searchList[0].value, "YYYY-MM") + '-01' : '';
+                let endDate = this.searchList[1].value ? this.$formatDate(this.searchList[1].value, "YYYY-MM") + '-01' : '';
+                param.append("startDate", startDate);
+                param.append("endDate", endDate);
+                this.$http({
+                    url: '/market/antiSpoofing/exportStandingBook',
+                    method: "post",
+                    responseType: 'blob',
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: param,
+                }).then((response) => {
+                    let fileName = '省公司汇总台账_'+(startDate===endDate ? startDate : startDate+'-'+endDate)+'.xlsx';
+                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                        let blob = new Blob([response.data], {
+                            type: response.data.type
+                        });
+                        window.navigator.msSaveOrOpenBlob(blob, fileName);
+                    } else {
+                        /* 火狐谷歌的文件下载方式 */
+                        var blob = new Blob([response.data])
+                        var downloadElement = document.createElement('a')
+                        var href = window.URL.createObjectURL(blob);
+                        downloadElement.href = href;
+                        downloadElement.download = fileName;
+                        document.body.appendChild(downloadElement);
+                        downloadElement.click();
+                        document.body.removeChild(downloadElement);
+                        window.URL.revokeObjectURL(href);
+                    }
+                })
+            },
+            getSummaries(param) {
+                const { columns, data } = param;
+                const sums = [];
+                columns.forEach((column, index) => {
+                    if (index === 0) {
+                        sums[index] = '总计';
+                        return;
+                    }
+                    if (index === 20){
+                        sums[index] = 'N/A';
+                        return;
+                    }
+                    const values = data.map(item => Number(item[column.property]));
+                    if (!values.every(value => isNaN(value))) {
+                        sums[index] = values.reduce((prev, curr) => {
+                            const value = Number(curr);
+                            if (!isNaN(value)) {
+                                return prev + curr;
+                            } else {
+                                return prev;
+                            }
+                        }, 0);
+                    } else {
+                        sums[index] = '0';
+                    }
+                });
+                return sums;
+            }
+        },
+        mounted() {
+            this.searchInfo([this.searchList[0].value, this.searchList[1].value], 1);
+        },
+        updated() {
+            this.$nextTick(() => {
+                this.$refs.multipleTable.doLayout()
+            })
+        },
+        created() {
+
+        }
+    }
+</script>
+<style scoped lang="scss">
+    .onetab {
+        margin-bottom: 20px;
+        padding: 0 20px;
+    }
+
+    .titbox {
+        div {
+            float: right;
+
+            i {
+                font-size: 22px;
+                margin-left: 20px;
+                cursor: pointer;
+            }
+        }
+    }
+
+    .tabbox {
+        margin-top: 15px;
+    }
+
+    .pageBox {
+        text-align: right;
+        margin-top: 10px;
+    }
+
+    .info-line {
+        width: 100%;
+        display: block;
+        padding-left: 20px;
+
+        div {
+            width: 50%;
+            display: inline-block;
+        }
+
+        span {
+            width: 80px;
+            display: inline-block;
+            text-align: left;
+
+            i {
+                color: red;
+                display: inline-block;
+                padding-right: 5px;
+            }
+        }
+
+        .el-select,
+        .el-input {
+            width: calc(100% - 100px);
+        }
+    }
+
+    .online {
+        width: 100%;
+
+        .el-select {
+            width: calc(100% - 100px);
+        }
+
+        span {
+            vertical-align: top;
+        }
+
+        .el-textarea {
+            width: calc(100% - 100px);
+        }
+    }
+</style>

文件差异内容过多而无法显示
+ 1276 - 0
src/pages/main/apkTestMain/index.vue


+ 408 - 203
src/pages/main/demandDevelop/index.vue

@@ -9,12 +9,14 @@
           @click="dialogCheck(3)"
           >添加</el-button
         >
-        <el-button
-          style="float: right; margin-top: 10px; margin-right: 20px"
-          type="primary"
-          @click="getStanding"
-          >台账</el-button
-        >
+          <el-button
+              v-if="standingAuth"
+              style="float: right; margin-top: 10px; margin-right: 20px"
+              type="primary"
+              @click="getStanding"
+          >台账
+          </el-button
+          >
       </div>
       <div class="tabbox">
         <el-table
@@ -43,7 +45,7 @@
               }}
             </template>
           </el-table-column>
-          <el-table-column label="操作" width="120px" align="center">
+          <el-table-column label="操作" width="150px" align="center">
             <template slot-scope="scope">
               <el-button
                 size="mini"
@@ -53,11 +55,19 @@
               >
               <el-button
                 size="mini"
-                type="danger"
+                type="warning"
                 v-if="scope.row.sts !== '4'"
                 @click="dialogCheck(2, scope.row)"
                 >处理</el-button
               >
+
+             <el-button
+                 size="mini"
+                 type="danger"
+                 v-if="scope.row.step === '0'"
+                 @click="dialogCheck(4, scope.row)"
+             >注销</el-button
+             >
               <!-- <el-button size="mini" type="danger" @click="delLine(scope.row)">删除</el-button> -->
             </template>
           </el-table-column>
@@ -250,64 +260,79 @@
               >导入</el-button
             ></el-upload
           >
-          <div
-            style="margin: 20px 0; padding: 0 20px"
-            v-if="vision == '信息补填'"
-          >
-            <el-table
-              class="com-table"
-              ref="multipleTable"
-              :data="infodatas"
-              tooltip-effect="dark"
-              size="small"
-              border
-              style="width: 100%"
+            <div
+                style="margin: 20px 0; padding: 0 20px"
+                v-if="vision == '信息补填'"
             >
-              <el-table-column prop="infoName" label="需求承接支撑方">
-                <template slot-scope="scope">
-                  <el-input
-                    v-model="scope.row.factoryName"
-                    :disabled="tableSatus === '4'"
-                  ></el-input>
-                </template>
-              </el-table-column>
-              <el-table-column prop="infoName" label="涉及发生工作量">
-                <template slot-scope="scope">
-                  <el-input
-                    v-model="scope.row.workLoad"
-                    :disabled="tableSatus === '4'"
-                  ></el-input>
-                </template>
-              </el-table-column>
-              <el-table-column
-                label="操作"
-                width="120px"
-                align="center"
-                v-if="titname == '审批'"
-              >
-                <template slot-scope="scope">
-                  <el-button
-                    size="mini"
-                    type="primary"
-                    :disabled="tableSatus === '4'"
-                    @click="choline(1, scope)"
-                    >添加</el-button
-                  >
-                  <el-button
-                    size="mini"
-                    type="danger"
-                    :disabled="tableSatus === '4'"
-                    @click="choline(2, scope)"
-                    >删除</el-button
-                  >
-                </template>
-              </el-table-column>
-            </el-table>
-          </div>
-          <el-form-item class="info-line online" v-if="visionsts == '2'">
+                <el-table
+                    class="com-table"
+                    ref="multipleTable"
+                    :data="infodatas"
+                    tooltip-effect="dark"
+                    size="small"
+                    border
+                    style="width: 100%"
+                >
+                    <el-table-column prop="factoryName" label="需求承接支撑方">
+                        <template slot-scope="scope">
+                            <el-form :ref="'supportFactoryName'+scope.$index" :model="scope.row" :rules="supportRules">
+                                <el-form-item prop="factoryName">
+                                    <el-select v-model="scope.row.factoryName" filterable placeholder="请选择厂商" :disabled="tableSatus === '4'" style="width: 100%">
+                                        <el-option
+                                            v-for="item in supportList"
+                                            :key="item"
+                                            :label="item"
+                                            :value="item"
+                                            :disabled="getDisabledFlag(item)"
+                                        >
+                                        </el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-form>
+                        </template>
+
+                    </el-table-column>
+                    <el-table-column prop="workLoad" label="涉及发生工作量">
+                        <template slot-scope="scope">
+                            <el-form :ref="'supportWorkLoad'+scope.$index" :model="scope.row" :rules="supportRules">
+                                <el-form-item prop="workLoad">
+                                    <el-input
+                                        v-model="scope.row.workLoad"
+                                        :disabled="tableSatus === '4'"
+                                    ></el-input>
+                                </el-form-item>
+                            </el-form>
+                        </template>
+                    </el-table-column>
+                    <el-table-column
+                        label="操作"
+                        width="120px"
+                        align="center"
+                        v-if="titname == '审批'"
+                    >
+                        <template slot-scope="scope">
+                            <el-button
+                                size="mini"
+                                type="primary"
+                                :disabled="tableSatus === '4'"
+                                @click="choline(1, scope)"
+                            >添加</el-button
+                            >
+                            <el-button
+                                size="mini"
+                                type="danger"
+                                :disabled="tableSatus === '4'"
+                                @click="choline(2, scope)"
+                            >删除</el-button
+                            >
+                        </template>
+                    </el-table-column>
+                </el-table>
+            </div>
+          <el-form-item class="info-line online" prop="remark" v-if="visionsts == '2'">
             <span>审批说明</span>
             <el-input
-              v-model="remark"
+              v-model="infolist.remark"
               placeholder=""
               type="textarea"
               :rows="3"
@@ -315,30 +340,41 @@
             >
             </el-input>
           </el-form-item>
-
-          <div
-            style="margin: 20px 0px; padding: 0 20px"
-            v-if="titname !== '添加'"
-          >
-            <el-table
-              class="com-table"
-              :data="rovaList"
-              tooltip-effect="dark"
-              size="small"
-              border
-              style="width: 100%"
+          <el-form-item class="info-line online" prop="opinion" v-if="visionsts === '2'">
+              <span>审批意见</span>
+              <el-select v-model="infolist.opinion" placeholder="请选择审批意见" :disabled="titname === '查看'">
+                  <el-option label="同意" value="1"></el-option>
+                  <el-option label="不同意" value="2"></el-option>
+              </el-select>
+          </el-form-item>
+            <div
+                style="margin: 20px 0px; padding: 0 20px"
+                v-if="titname !== '添加'"
             >
-              <el-table-column prop="logNo" label="编号"> </el-table-column>
-              <el-table-column prop="stepName" label="环节"> </el-table-column>
-              <el-table-column prop="processName" label="处理人">
-              </el-table-column>
-              <el-table-column prop="processWorkNo" label="处理人工号">
-              </el-table-column>
-              <el-table-column prop="updateTimeStr" label="处理时间">
-              </el-table-column>
-              <el-table-column prop="remark" label="备注"> </el-table-column>
-            </el-table>
-          </div>
+                <el-table
+                    class="com-table"
+                    :data="rovaList"
+                    tooltip-effect="dark"
+                    size="small"
+                    border
+                    style="width: 100%"
+                >
+                    <el-table-column prop="logNo" label="编号"> </el-table-column>
+                    <el-table-column prop="stepName" label="环节"> </el-table-column>
+                    <el-table-column prop="processName" label="处理人">
+                    </el-table-column>
+                    <el-table-column prop="processWorkNo" label="处理人工号">
+                    </el-table-column>
+                    <el-table-column prop="updateTimeStr" label="处理时间">
+                    </el-table-column>
+                    <el-table-column prop="remark" label="备注"> </el-table-column>
+                    <el-table-column prop="opinion" label="审批意见">
+                        <template slot-scope="scope">
+                            {{ scope.row.opinion === "1" ? '同意' : (scope.row.opinion === "2" ? '不同意' : '') }}
+                        </template>
+                    </el-table-column>
+                </el-table>
+            </div>
         </el-form>
 
         <div slot="footer" class="info-footer">
@@ -346,8 +382,8 @@
             <el-button type="primary" @click="handleApprove('送部门人员审核')"
               >送部门人员审核</el-button
             >
-            <el-button type="primary" @click="handleApprove('送领导审核')"
-              >送领导审核</el-button
+            <el-button type="primary" @click="handleApprove('送科室领导审核')"
+              >送科室领导审核</el-button
             >
             <el-button @click="handleApprove('取消')">取消</el-button>
           </div>
@@ -464,15 +500,54 @@ export default {
     deptTreeOnly,
   },
   data() {
+      const validatorWorkLoad = (rule, value, callback) => {
+          if (/^[0-9]+(\.[0-9]{1,1})?$/.test(value)){
+              callback()
+          }  else {
+              callback(new Error('只能输入一位小数数字'))
+          }
+      }
     return {
-      rules: {
-        demandName: [
+        standingAuth: false,
+        rules: {
+            demandName: [
           {
             required: true,
             trigger: "blur",
             message: "不能为空",
           },
         ],
+        remark: [
+            {
+                required: true,
+                trigger: "blur",
+                message: "不能为空",
+            },
+            {
+                trigger: "change",
+                validator:this.copyValue
+            },
+        ],
+      },
+      supportRules: {
+          factoryName: [
+          {
+            required: true,
+            trigger: "change",
+            message: "不能为空",
+          },
+        ],
+          workLoad: [
+            {
+                required: true,
+                trigger: "blur",
+                message: "不能为空",
+            },
+            {
+                trigger: "change",
+                validator:validatorWorkLoad
+            }
+        ],
       },
       // 操作名称
       operateName: "",
@@ -521,7 +596,7 @@ export default {
         },
       ],
       // 用来控制多选里的单选
-      only: false,
+      only: true,
       // 信息回显
       infolist: {},
       // 用户信息
@@ -565,7 +640,7 @@ export default {
           name: "否",
         },
       ],
-      infodatas: [],
+      infodatas: [{factoryName:'',workLoad:''}],
       busiTime: [],
       urgDegreeopt: [
         {
@@ -597,6 +672,7 @@ export default {
         fileList: [],
       },
       tempSave: false,
+      supportList:[]
     };
   },
   watch: {
@@ -614,6 +690,19 @@ export default {
     // },
   },
   methods: {
+    copyValue(rule, value, callback) {
+        this.remark = value
+        callback()
+    },
+    // 判断需求支撑方是否可选
+    getDisabledFlag(support){
+        for(let n=0;n<this.infodatas.length;n++){
+            if (this.infodatas[n].factoryName === support){
+                return true;
+            }
+        }
+        return false;
+    },
     // 新的处理方法
     handlePreview(file) {
       console.log(file, "Preview");
@@ -667,7 +756,7 @@ export default {
             case "送部门人员审核":
               this.operateName = "送部门人员审核";
               this.checkexa = true;
-              this.type = "0";
+              this.type = "1";
               console.log("送部门人员审核");
               break;
             // case "送领导审核":
@@ -677,13 +766,21 @@ export default {
             //   console.log("送领导审核");
             //   break;
             //领导审批支持整个OA组织架构
-            case "送领导审核":
-              this.operateName = "送领导审核";
-              this.type = "1";
+            case "送科室领导审核":
+              this.operateName = "送科室领导审核";
+              this.type = "2";
               // this.checkLaeder = true;
               this.checkexa = true;
               console.log("送领导审核");
               break;
+            case "送部门领导审核":
+            case "送公司领导审核":
+              this.operateName = type;
+              this.type = "3";
+              // this.checkLaeder = true;
+              this.checkexa = true;
+              console.log(type);
+              break;
             case "送起草人编号发送":
               this.operateName = "送起草人编号";
               this.handleSendNo();
@@ -692,39 +789,45 @@ export default {
               this.operateName = "确认编号";
               this.handleComfirmNo();
               break;
+            case "提交电商接口人审批":
+            case "提交省公司电商接口人审批":
+              this.operateName = type;
+              this.deliverReadOffice();
+              break;
             case "打回":
               this.operateName = "打回";
               this.handleBackRecord();
               break;
-            case "确认需求":
+            case "转交渠道经理待办":
               this.checkexa = true;
               this.type = "0";
-              this.operateName = "确认需求";
+              this.operateName = "转交渠道经理待办";
               break;
             case "送项目经理会签":
               this.checkexa = true;
               this.type = "0";
+              this.only = false;
               this.operateName = "送项目经理会签";
               break;
-            case "送电商接口人阅办":
-              this.operateName = "送电商接口人阅办";
+            case "送电商接口人":
+              this.operateName = type;
               this.handleDeliverReadOfficeOrOtherDo("1");
               break;
             case "送其他人办理":
               this.checkexa = true;
-              this.only = true;
               this.operateName = "送其他人办理";
               break;
             case "确认上线":
               this.operateName = "确认上线";
               this.handleConfirmOnline("1");
               break;
-            case "已办结":
+/*            case "已办结":
               this.operateName = "已办结";
               this.handleConfirmOnline("2");
-              break;
+              break;*/
             case "保存":
               this.operateName = "保存";
+              console.log(this.infodatas)
               this.handleConfirmOnline("3");
               break;
           }
@@ -732,22 +835,32 @@ export default {
       });
     },
     // 确认上线/已办结
-    handleConfirmOnline(type) {
+    async handleConfirmOnline(type) {
+      // 校验需求支撑方和工作量 是否合规
+        for (let i = 0; i < this.infodatas.length; i++) {
+            let supportFlag = await this.$refs['supportFactoryName' + i].validate();
+            if (supportFlag){
+                let workLoadFlag = await this.$refs['supportWorkLoad' + i].validate();
+                if (!workLoadFlag){
+                    return ;
+                }
+            }else {
+                return ;
+            }
+        }
       let flag = 1;
       const factoryName = [];
       const workLoad = [];
-      if (type !== "1") {
-        this.infodatas.forEach((el) => {
+      this.infodatas.forEach((el) => {
           // 判断条件
           if (el.factoryName && el.workLoad) {
-            flag = flag * 1;
-            factoryName.push(el.factoryName);
-            workLoad.push(el.workLoad);
+              flag = flag * 1;
+              factoryName.push(el.factoryName);
+              workLoad.push(el.workLoad);
           } else {
-            flag = flag * 0;
+              flag = flag * 0;
           }
-        });
-      }
+      });
       if (flag) {
         let reqdata = {
           operateName: this.operateName,
@@ -756,6 +869,7 @@ export default {
           support: factoryName,
           workload: workLoad,
           woNo: this.woNo + "",
+          opinion: this.infolist.opinion,
         };
         this.$http({
           url: "/market/mkOnlineChannel/confirmOnline",
@@ -764,14 +878,14 @@ export default {
             "Content-Type": "application/json",
           },
           data: reqdata,
-        }).then(({ data: { desc } }) => {
-          console.log(desc);
-          if (desc === "操作成功") {
-            this.$message.success("操作成功");
-            this.dialogStatus = false;
-            this.handleInit();
-            this.closedia();
-          } else {
+        }).then(({ data }) => {
+            console.log(data)
+            if (data && data.result === 0) {
+                this.$message.success(data.desc);
+                this.dialogStatus = false;
+                this.handleInit();
+                this.closedia();
+            } else {
             this.$message.error("操作失败");
           }
         });
@@ -794,6 +908,7 @@ export default {
         type,
         reviewOpinion: this.remark,
         woId: this.woNo + "",
+        opinion: this.infolist.opinion,
       };
       if (type === "2") {
         reqdata = {
@@ -810,15 +925,15 @@ export default {
           "Content-Type": "application/json",
         },
         data: reqdata,
-      }).then(({ data: { desc } }) => {
-        console.log(desc);
-        if (desc === "操作成功") {
-          this.$message.success("操作成功");
-          this.checkexa = false;
-          this.dialogStatus = false;
-          this.handleInit();
-          this.closedia();
-        } else {
+      }).then(({ data }) => {
+          console.log(data)
+          if (data && data.result === 0) {
+              this.$message.success(data.desc);
+              this.checkexa = false;
+              this.dialogStatus = false;
+              this.handleInit();
+              this.closedia();
+          } else {
           this.$message.error("操作失败");
         }
       });
@@ -838,6 +953,7 @@ export default {
         receiveName: receiveName.join(","),
         reviewOpinion: this.remark,
         woNo: this.woNo + "",
+        opinion: this.infolist.opinion,
       };
       console.log(reqdata);
 
@@ -848,20 +964,20 @@ export default {
           "Content-Type": "application/json",
         },
         data: reqdata,
-      }).then(({ data: { desc } }) => {
-        console.log(desc);
-        if (desc === "操作成功") {
-          this.$message.success("操作成功");
-          this.checkexa = false;
-          this.dialogStatus = false;
-          this.handleInit();
-          this.closedia();
-        } else {
-          this.$message.error("操作失败");
-        }
+      }).then(({ data }) => {
+          console.log(data)
+          if (data && data.result === 0) {
+              this.$message.success(data.desc);
+              this.checkexa = false;
+              this.dialogStatus = false;
+              this.handleInit();
+              this.closedia();
+          } else {
+              this.$message.error("操作失败");
+            }
       });
     },
-    // 确认需求
+    // 转交渠道经理待办
     handleNeedyComfirm() {
       let receiveId = [];
       let receiveName = [];
@@ -876,6 +992,7 @@ export default {
         receiveName: receiveName.join(","),
         reviewOpinion: this.remark,
         woNo: this.woNo + "",
+        opinion: this.infolist.opinion,
       };
       console.log(reqdata);
 
@@ -886,17 +1003,17 @@ export default {
           "Content-Type": "application/json",
         },
         data: reqdata,
-      }).then(({ data: { desc } }) => {
-        console.log(desc);
-        if (desc === "操作成功") {
-          this.$message.success("操作成功");
-          this.checkexa = false;
-          this.dialogStatus = false;
-          this.handleInit();
-          this.closedia();
-        } else {
-          this.$message.error("操作失败");
-        }
+      }).then(({ data }) => {
+          console.log(data)
+          if (data && data.result === 0) {
+              this.$message.success(data.desc);
+              this.checkexa = false;
+              this.dialogStatus = false;
+              this.handleInit();
+              this.closedia();
+          } else {
+              this.$message.error("操作失败");
+            }
       });
     },
     // 打回方法
@@ -909,20 +1026,19 @@ export default {
         },
         params: {
           woNo: this.woNo,
-          remark: [this.operateName, this.remark]
-            .filter((el) => el !== "")
-            .join(","),
+          remark: this.remark,
+          opinion: this.infolist.opinion,
         },
-      }).then(({ data: { desc } }) => {
-        console.log(desc);
-        if (desc === "操作成功") {
-          this.$message.success("操作成功");
-          this.dialogStatus = false;
-          this.handleInit();
-          this.closedia();
-        } else {
-          this.$message.error("操作失败");
-        }
+      }).then(({ data }) => {
+          console.log(data)
+          if (data && data.result === 0) {
+              this.$message.success(data.desc);
+              this.dialogStatus = false;
+              this.handleInit();
+              this.closedia();
+          } else {
+            this.$message.error("操作失败");
+          }
       });
     },
     // 表单提交
@@ -975,9 +1091,7 @@ export default {
         // 需求描述
         demandDesc: this.infolist.demandDesc,
         // 审批说明
-        remark: [this.operateName, this.remark]
-          .filter((el) => el !== "")
-          .join(","),
+        remark: this.remark,
         // 审核人员
         loginNameList: this.treeList.length
           ? this.treeList.map((el) => {
@@ -990,7 +1104,10 @@ export default {
             })
           : [this.leader],
         type: this.type,
-        // fileList: this.file,
+        opinion: this.infolist.opinion ? this.infolist.opinion : '',
+          // fileList: this.file,
+        // 添加操作步骤
+        operateName: this.operateName
       };
       // 处理其他参数
       for (let key in params) {
@@ -1004,7 +1121,7 @@ export default {
           }
         });
       }
-      if (this.operateName === "确认需求") {
+      if (this.operateName === "转交渠道经理待办") {
         this.handleNeedyComfirm();
         return;
       }
@@ -1026,7 +1143,7 @@ export default {
           },
           data: formData,
         }).then(({ data }) => {
-          if (data && data.desc === "操作成功") {
+          if (data && data.result === 0) {
             this.$message({
               type: "success",
               message: data.desc,
@@ -1047,19 +1164,18 @@ export default {
         },
         params: {
           woNo: this.woNo,
-          remark: [this.operateName, this.remark]
-            .filter((el) => el !== "")
-            .join(","),
+          remark: this.remark,
+          opinion: this.infolist.opinion
         },
-      }).then(({ data: { desc } }) => {
-        console.log(desc);
-        if (desc === "操作成功") {
-          this.$message.success("操作成功");
-          this.handleInit();
-          this.closedia();
-        } else {
-          this.$message.error("操作失败");
-        }
+      }).then(({ data }) => {
+          console.log(data)
+          if (data && data.result === 0) {
+              this.$message.success(data.desc);
+              this.handleInit();
+              this.closedia();
+          } else {
+              this.$message.error("操作失败");
+            }
       });
     },
     // 确认编号
@@ -1072,19 +1188,43 @@ export default {
         },
         data: {
           woNo: this.woNo + "",
-          remark: [this.operateName, this.remark]
-            .filter((el) => el !== "")
-            .join(","),
+          remark: this.remark,
+          opinion: this.infolist.opinion,
         },
-      }).then(({ data: { desc } }) => {
-        console.log(desc);
-        if (desc === "操作成功") {
-          this.$message.success("操作成功");
-          this.handleInit();
-          this.closedia();
-        } else {
-          this.$message.error("操作失败");
-        }
+      }).then(({ data }) => {
+          console.log(data)
+          if (data && data.result === 0) {
+              this.$message.success(data.desc);
+              this.handleInit();
+              this.closedia();
+          } else {
+            this.$message.error("操作失败");
+          }
+      });
+    },
+    // 确认编号后送电商接口人
+    deliverReadOffice() {
+      this.$http({
+        url: "/market/mkOnlineChannel/deliverReadOffice",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          woNo: this.woNo + "",
+          remark: this.remark,
+          opinion: this.infolist.opinion,
+          operateName: this.operateName
+        },
+      }).then(({ data }) => {
+          console.log(data)
+          if (data && data.result === 0) {
+              this.$message.success(data.desc);
+              this.handleInit();
+              this.closedia();
+            } else {
+              this.$message.error("操作失败");
+            }
       });
     },
     // 初始化列表接口
@@ -1107,9 +1247,40 @@ export default {
         }) => {
           this.total = count;
           this.tableData = data;
+          console.log("===================================")
+          console.log(this.tableData)
         }
       );
     },
+      // 注销
+      delDetails(id){
+          this.$confirm('确认注销吗?', '提示', {
+              confirmButtonText: '确定',
+              cancelButtonText: '取消',
+              type: 'warning'
+          }).then(() => {
+              this.$http({
+                  url: "/market/mkOnlineChannel/delDetailsByWoNo",
+                  method: "post",
+                  headers: {
+                      "Content-Type": "application/json",
+                  },
+                  data: id,
+              }).then(({ data }) => {
+                  if (data && data.result === 0) {
+                      this.$message.success(data.desc);
+                      this.handleInit();
+                  } else {
+                      this.$message.error("操作失败");
+                  }
+              });
+          }).catch(() => {
+              this.$message({
+                  type: 'info',
+                  message: '取消注销'
+              });
+          });
+      },
     // 查看详情接口封装
     queryDetails(id) {
       this.$http({
@@ -1135,6 +1306,7 @@ export default {
             carryChannelCode: mkOnlineChannel.carryChannelCode
               ? mkOnlineChannel.carryChannelCode.split(",")
               : [],
+            opinion: ''
           };
           this.busiTime = [
             mkOnlineChannel.busiStartTime,
@@ -1167,8 +1339,9 @@ export default {
               this.buttonList = [];
               this.disableStatus = true;
               this.visionsts = "";
-              if (this.step === "7") {
+              if (this.step === "9") {
                 this.vision = "信息补填";
+                this.getSupportList()
                 // 查看也不能操作数据
                 this.tableSatus = "4";
                 this.visionsts = "";
@@ -1194,14 +1367,12 @@ export default {
               }
               this.disableStatus = true;
               this.dialogStatus = true;
-              if (this.step === "7") {
+              if (this.step === "9") {
                 // 这个是判断最后一步是否可以导入数据
                 if (this.buttonList[0] === "确认上线") {
-                  this.vision = "";
-                  this.visionsts = "2";
-                } else {
                   this.vision = "信息补填";
                   this.visionsts = "";
+                  this.getSupportList()
                 }
                 this.infodatas = mkOnlineChannel.workloadAndsupport.length
                   ? mkOnlineChannel.workloadAndsupport.map((el) => ({
@@ -1223,6 +1394,25 @@ export default {
         }
       );
     },
+    // 获取所有需求承接支撑方
+    getSupportList(){
+        this.$http({
+            url: "/market/cChannelContract/queryList",
+            method: "post",
+            headers: {
+                "Content-Type": "application/json",
+
+            },
+            data: {},
+        }).then((res) => {
+            let supportName = []
+            for (let i = 0; i < res.data.length; i++) {
+                let datum = res.data[i];
+                supportName.push(datum.factoryName)
+            }
+            this.supportList = [...new Set(supportName)];
+        });
+    },
 
     // 老方法
     temp() {
@@ -1270,7 +1460,7 @@ export default {
     },
     choline(v, n) {
       if (v == 1) {
-        this.infodatas.push({});
+        this.infodatas.push({factoryName:'',workLoad:''});
       } else {
         this.infodatas.splice(n.$index, 1);
       }
@@ -1298,7 +1488,7 @@ export default {
       // 审核人
       this.checkexa = false;
       // 审核人单选是否开启
-      this.only = false;
+      this.only = true;
     },
     //获取列表
     getList(v, n) {
@@ -1358,6 +1548,10 @@ export default {
         //   // this.tempSave = true;
         // });
         // return;
+      } else if (type === 4) {
+          this.titname = "注销";
+          this.visionsts = "2";
+          this.delDetails(data.woNo);
       }
       // this.$http({
       //   url: "/bpm/api/taskInit",
@@ -1831,6 +2025,17 @@ export default {
         this.carryChannelopt = res.data;
       });
     },
+      ywStandingAuth(){
+          this.$http({
+              url: "/market/mkOnlineChannel/ywStandingAuth",
+              method: "post",
+              headers: {
+                  "Content-Type": "application/json",
+              },
+          }).then((res) => {
+             this.standingAuth =  res.data.body;
+          });
+      }
   },
   mounted() {
     // 调用初始化接口
@@ -1840,7 +2045,7 @@ export default {
     this.getTermianl();
     this.getsaleChnl();
   },
-  created() {},
+  created() { this.ywStandingAuth()},
 };
 </script>
 <style scoped lang="scss">

+ 141 - 127
src/pages/main/demandDevelop/ywStanding.vue

@@ -4,37 +4,20 @@
       <toolList @iconCli="iconCli" :tooltit="tooltit"></toolList>
       <div class="search">
         <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
-        <el-button
-          class="btn-check"
-          size="medium"
-          type="primary"
-          @click="outlist"
-          >导出
-        </el-button>
-      </div>
-      <div class="tabbox">
+        <div>
+            <el-button class="btn-check"  size="medium" type="primary"  @click="outlist">导出
+            </el-button>
+            <myUpload style="display:inline-block;" :fileInfo="fileInfo" @onSuccess="onSuccess"
+                      :fileList="fileInfo.fileList"></myUpload>
+        </div>
+        </div>
+        <div class="tabbox">
         <el-table
-          height="calc(100% - 40px)"
-          class="com-table"
-          ref="multipleTable"
-          :data="tableData"
-          tooltip-effect="dark"
-          size="small"
-          border
-          style="width: 100%"
+            height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+            tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading" :key= Math.random()
         >
-          <el-table-column prop="demandName" label="需求名称">
-          </el-table-column>
-          <el-table-column prop="groupName" label="提出部门/地市">
+          <el-table-column width="150" v-for="item in tableHead"  :prop=item.prop :label=item.label>
           </el-table-column>
-          <el-table-column prop="busiStartTime" label="时间段">
-            <template slot-scope="scope">
-              {{ scope.row.busiStartTime + "~" + scope.row.busiEndTime }}
-            </template>
-          </el-table-column>
-          <el-table-column prop="status" label="状态"> </el-table-column>
-          <el-table-column prop="support" label="支撑方"> </el-table-column>
-          <el-table-column prop="workload" label="工作量"> </el-table-column>
         </el-table>
         <el-pagination
           class="pageBox"
@@ -51,38 +34,53 @@
 <script>
 import mySearch from "../../../components/search.vue";
 import toolList from "../../../components/toolList.vue";
+import myUpload from '../../../components/upload';
+
 
 export default {
   components: {
-    mySearch,
-    toolList,
+      mySearch,
+      toolList,
+      myUpload
   },
   data() {
     return {
-      searchList: [
-        {
-          type: "input",
-          tit: "需求名称",
-          value: "",
-          width: "23%",
-        },
-        {
-          type: "input",
-          tit: "部门或地市",
-          value: "",
-          width: "23%",
+        // tableHead: [{prop: 'demandNo', label: '需求编号'},{prop: 'groupName', label: '提出部门'}],
+        fileInfo: {
+            type: 'btn',
+            typename: '导入',
+            btntype: 'primary',
+            limit: 1,
+            url: '/market/mkOnlineChannel/importLedgerList',
+            fileList: [],
+            typexz:"xlsx"
         },
+        loading:false,
+        tableHead:[],
+        searchList: [
+            // {
+            //   type: "input",
+        //   tit: "需求名称",
+        //   value: "",
+        //   width: "23%",
+        // },
+        // {
+        //   type: "input",
+        //   tit: "部门或地市",
+        //   value: "",
+        //   width: "23%",
+        // },
         {
           type: "date",
           tit: "开始时间",
           value: "",
-          width: "23%",
+          width: "46%",
         },
         {
           type: "date",
           tit: "结束时间",
           value: "",
-          width: "23%",
+          width: "46%",
         },
       ],
       tooltit: "线上业务需求台账",
@@ -107,20 +105,36 @@ export default {
     };
   },
   methods: {
+      headerStyleFun({rowIndex}){
+          if (rowIndex === 0){
+              return "font-size:14px;font-weight:bold;color:black;"
+          }
+      },
+      onSuccess(file){
+          this.searchInfo([this.searchList[0].value], 1);
+      },
     //搜索数据
     searchInfo(v) {
       this.params = {};
-      v[0] ? (this.params.demandName = v[0]) : "";
-      v[1] ? (this.params.deptOrCity = v[1]) : "";
-      v[2]
-        ? (this.params.startTime = this.$formatDate(v[2], "YYYY-MM-DD"))
+      // v[0] ? (this.params.demandName = v[0]) : "";
+      // v[1] ? (this.params.deptOrCity = v[1]) : "";
+      v[0]
+        ? (this.params.startTime = this.$formatDate(v[0], "YYYY-MM-DD"))
         : "";
-      v[3] ? (this.params.endTime = this.$formatDate(v[3], "YYYY-MM-DD")) : "";
-      this.handleInit();
+      v[1] ? (this.params.endTime = this.$formatDate(v[1], "YYYY-MM-DD")) : "";
+        if ((new Date(this.params.startTime)).getTime() > (new Date(this.params.endTime)).getTime()){
+            this.$message.error(
+                "开始时间不能大于结束时间"
+            );
+            return
+        }
+        this.getTableHeadlist();
+        this.handleInit();
     },
     // 初始化列表
     handleInit() {
-      this.$http({
+        this.loading=true;
+        this.$http({
         url: "/market/mkOnlineChannel/ledgerList",
         method: "post",
         headers: {
@@ -137,59 +151,41 @@ export default {
             body: { data, count },
           },
         }) => {
-          this.total = count;
-          this.tableData = data;
-          this.total = count;
+            this.loading = false;
+            this.total = count;
+            this.tableData = data;
+            this.total = count;
         }
       );
     },
+      //获取表头数据
+      getTableHeadlist() {
+          this.$http({
+              url: "/market/mkOnlineChannel/getTableHeadlist",
+              method: "post",
+              headers: {
+                  "Content-Type": "application/json",
+              },
+              data: {
+                  ...this.params,
+                  page: this.page,
+                  pageSize: this.pageSize,
+              },
+          }).then(({ data: { body } }) => {
+              this.tableHead = body;
+          });
+      },
     outlist() {
-      // let data = {
-      //   colStr:
-      //     "demandName,deptName,busiStartTime,busiEndTime,factoryName,workLoad",
-      //   fileName: "台账.xlsx",
-      //   tital: [
-      //     [
-      //       {
-      //         colNum: "0",
-      //         colSpan: "0",
-      //         rowSpan: "1",
-      //         val: "需求名称",
-      //       },
-      //       {
-      //         colNum: "1",
-      //         colSpan: "0",
-      //         rowSpan: "1",
-      //         val: "提出部门",
-      //       },
-      //       {
-      //         colNum: "2",
-      //         colSpan: "0",
-      //         rowSpan: "1",
-      //         val: "开始时间",
-      //       },
-      //       {
-      //         colNum: "3",
-      //         colSpan: "0",
-      //         rowSpan: "1",
-      //         val: "结束时间",
-      //       },
-      //       {
-      //         colNum: "4",
-      //         colSpan: "0",
-      //         rowSpan: "1",
-      //         val: "支撑方",
-      //       },
-      //       {
-      //         colNum: "5",
-      //         colSpan: "0",
-      //         rowSpan: "1",
-      //         val: "工作量",
-      //       },
-      //     ],
-      //   ],
-      // };
-      // // data.tital = JSON.stringify(data.tital)
+        var date = new Date()
+        var year = date.getFullYear()
+        var month = date.getMonth() + 1 < 10 ?
+            '0' + (date.getMonth() + 1) : date.getMonth()+ 1
+        var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
+        let hh = new Date().getHours();
+        let mf = new Date().getMinutes()<10 ? '0'+new Date().getMinutes() : new Date().getMinutes();
+        let ss = new Date().getSeconds()<10 ? '0'+new Date().getSeconds() : new Date().getSeconds();
+        var nowDate=year+month+day+hh+mf+ss
+
       this.$http({
         url: "/market/mkOnlineChannel/exportLedger",
         method: "post",
@@ -197,7 +193,11 @@ export default {
           "Content-Type": "application/json",
         },
         responseType: "blob",
-        data: this.params,
+          data: {
+              ...this.params,
+              page: this.page,
+              pageSize: this.pageSize,
+          }
       }).then((response) => {
         if (window.navigator && window.navigator.msSaveOrOpenBlob) {
           let blob = new Blob([response.data], {
@@ -205,7 +205,7 @@ export default {
           });
           window.navigator.msSaveOrOpenBlob(
             blob,
-            new Date().getTime() + ".xlsx"
+            "线上业务需求台账-"+nowDate + ".xlsx"
           );
         } else {
           /* 火狐谷歌的文件下载方式 */
@@ -213,7 +213,7 @@ export default {
           var downloadElement = document.createElement("a");
           var href = window.URL.createObjectURL(blob);
           downloadElement.href = href;
-          downloadElement.download = new Date().getTime() + ".xlsx";
+          downloadElement.download = "线上业务需求台账-"+nowDate + ".xlsx";
           document.body.appendChild(downloadElement);
           downloadElement.click();
           document.body.removeChild(downloadElement);
@@ -221,41 +221,54 @@ export default {
         }
       });
     },
+      inlist(){
+          this.$http({
+              url: "/market/mkOnlineChannel/importLedger",
+              method: "post",
+              headers: {
+                  "Content-Type": "application/json",
+              },
+              data: this.params,
+          }).then((res) => {
+              res.data;
+          });
+      },
     // 分页
     currchange(v) {
-      this.page = v;
-      this.handleInit();
+        this.page = v;
+        this.getTableHeadlist();
+        this.handleInit();
     },
 
     //获取列表
-    getList(v, n) {
-      v.sts = 1;
-      this.pageSize = n;
-      let _this = this;
-      this.$http({
-        url: "/market/cChannelDemand/queryPage",
-        method: "post",
-        headers: {
-          "Content-Type": "application/json",
-          page: '{"pageNo":"' + n + '","pageSize":"10"}',
-        },
-        data: v,
-      }).then((res) => {
-        this.tableData = res.data.data;
-        this.total = res.data.totalRecord;
-      });
-    },
+    // getList(v, n) {
+    //   v.sts = 1;
+    //   this.pageSize = n;
+    //   let _this = this;
+    //   this.$http({
+    //     url: "/market/cChannelDemand/queryPage",
+    //     method: "post",
+    //     headers: {
+    //       "Content-Type": "application/json",
+    //       page: '{"pageNo":"' + n + '","pageSize":"10"}',
+    //     },
+    //     data: v,
+    //   }).then((res) => {
+    //     this.tableData = res.data.data;
+    //     this.total = res.data.totalRecord;
+    //   });
+    // },
 
     //功能栏
     iconCli(v) {
       if (v === 1) {
-        this.handleInit();
+          this.getTableHeadlist();
+          this.handleInit();
       }
       if (v === 2) {
         this.fullscreen = !this.fullscreen;
       }
     },
-    // =======================
 
     getUser() {
       this.userInfo = JSON.parse(window.sessionStorage.userInfo);
@@ -268,9 +281,10 @@ export default {
     },
   },
   mounted() {
-    // this.getList({}, 1);
-    this.handleInit();
-    this.getUser();
+      // this.getList({}, 1);
+      this.getTableHeadlist();
+      this.handleInit();
+      this.getUser();
   },
   created() {},
 };

+ 799 - 0
src/pages/main/iptv/index.vue

@@ -0,0 +1,799 @@
+<template>
+    <fullscreen v-if="isViewer"  :fullscreen.sync="fullscreen" class="container">
+        <div class="container-box">
+            <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
+            <div class="search">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <el-button class="btn-check" size="medium" type="primary" @click="dialogCheck(1)"
+                v-if="isAuthor">新建</el-button>
+            </div>
+            <div class="tabbox">
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                          tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                    <el-table-column prop="recordName" label="备案名称" width="250">
+                    </el-table-column>
+                    <el-table-column prop="eventType"
+                     :formatter="formatter"
+                     label="事件类型" width="100">
+                    </el-table-column>
+                    <el-table-column prop="fileFrom" label="来文公司" >
+                    </el-table-column>
+                    <el-table-column prop="createTime" label="备案时间"  width="140">
+                    </el-table-column>
+                    <el-table-column prop="updateTime" label="最后一次修改时间"  width="140">
+                    </el-table-column>
+                    <el-table-column label="操作" width="160px" align="center" fixed="right">
+                        <template slot-scope="scope">
+                            <el-button size="mini" type="primary" plain @click="dialogCheck(2,scope.row)">
+                                查看
+                            </el-button>
+                            <el-button v-if="isAuthor" size="mini" type="warning" plain @click="dialogCheck(3,scope.row)">
+                                修改
+                            </el-button>
+                            <el-button v-if="isAuthor" size="mini" type="danger" plain @click="delLine(scope.row)">
+                                删除
+                            </el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="total,prev, pager, next" background
+                               :total="total">
+                </el-pagination>
+            </div>
+            <!---------------------------------------------  新建/浏览表单 -------------------------------------->
+            <el-dialog :title="titname + '备案'"
+                       :visible.sync="dialogStatus" width="70%" top="50px"
+                       :show-close="true"
+                       :before-close="closedia"
+                       :destroy-on-close="true"
+                       :modal-append-to-body="false"
+                       :close-on-click-modal="false">
+                <div v-loading="loading">
+                    <el-form :model="infolist" ref="infolist" :rules="rules" style="height: 60vh;overflow-y: scroll;" >
+                        <div class="info-line">
+                            <span><i>*</i>备案名称</span>
+                            <el-form-item prop="recordName" class="form-item">
+
+                                <el-input v-if="!disableStatus"  v-model.trim="infolist.recordName" placeholder="请输入备案名称"
+                                          :disabled="disableStatus"  maxlength="60" >
+                                </el-input>
+                                <div v-if="disableStatus" class="el-descriptions">{{infolist.recordName}}</div>
+                            </el-form-item>
+                        </div>
+
+                        <div class="info-line">
+                            <span><i>*</i>事件类型</span>
+                            <el-form-item prop="eventType" class="form-item">
+                                <el-select
+                                    v-if="!disableStatus"
+                                    v-model="infolist.eventType" :disabled="disableStatus"
+                                    placeholder="请选择事件类型">
+                                    <el-option v-for="item in eventTypeList" :key="item.orderNumber" :label="item.dataName"
+                                               :value="item.dataCode">
+                                    </el-option>
+                                </el-select>
+                                <div v-if="disableStatus" class="el-descriptions">{{viewFormatter(infolist.eventType)}}</div>
+                            </el-form-item>
+                        </div>
+
+                        <div class="info-line">
+                            <span>来文公司</span>
+                            <el-form-item prop="fileFrom" class="form-item">
+
+                                <el-input  v-model="infolist.fileFrom"
+                                v-if="!disableStatus" placeholder="请输入来文公司" maxlength="60"></el-input>
+                                <div v-if="disableStatus" class="el-descriptions">{{infolist.fileFrom}}</div>
+                            </el-form-item>
+                        </div>
+
+                        <div class="info-line">
+                            <span>来函时间以及形式</span>
+                            <el-form-item prop="fileTime" class="form-item">
+
+                                <el-input v-if="!disableStatus" v-model="infolist.fileTime"
+                                :disabled="disableStatus" placeholder="请输入来函时间以及形式"  maxlength="120"></el-input>
+                                <div v-if="disableStatus" class="el-descriptions">{{infolist.fileTime}}</div>
+                            </el-form-item>
+                        </div>
+
+                        <div class="info-line">
+                            <span>来函诉求</span>
+                            <el-form-item prop="fileAppeal" class="form-item">
+
+                                <el-input v-if="!disableStatus" v-model="infolist.fileAppeal"
+                                :disabled="disableStatus" placeholder="请输入来函诉求" maxlength="500"></el-input>
+                                <div v-if="disableStatus" class="el-descriptions">{{infolist.fileAppeal}}</div>
+                            </el-form-item>
+                        </div>
+
+                        <div class="info-line">
+                            <span>涉及内容提供方</span>
+                            <el-form-item prop="contentProvider" class="form-item">
+
+                                <el-input v-if="!disableStatus" v-model="infolist.contentProvider"
+                                :disabled="disableStatus" placeholder="请输入涉及内容提供方"  maxlength="120" ></el-input>
+                                <div v-if="disableStatus" class="el-descriptions">{{infolist.contentProvider}}</div>
+                            </el-form-item>
+                        </div>
+
+                        <div class="info-line">
+                            <span>转派文件编号</span>
+                            <el-form-item prop="docNumber" class="form-item">
+
+                                <el-input v-if="!disableStatus" v-model="infolist.docNumber"
+                                :disabled="disableStatus" placeholder="请输入转派文件编号"  maxlength="60"></el-input>
+                                <div v-if="disableStatus" class="el-descriptions">{{infolist.docNumber}}</div>
+                            </el-form-item>
+                        </div>
+
+                        <div class="info-line">
+                            <span>内容方处理情况<br/>以及回复的时间</span>
+                            <el-form-item prop="providerReplytime" class="form-item">
+
+                                <el-input  v-if="!disableStatus" v-model="infolist.providerReplytime"
+                                :disabled="disableStatus" placeholder="请输入内容方处理情况以及回复时间"   maxlength="500"></el-input>
+                                <div v-if="disableStatus" class="el-descriptions">{{infolist.providerReplytime}}</div>
+                            </el-form-item>
+                        </div>
+                        <div class="info-line">
+                            <span>附件</span>
+                            <div class="el-descriptions" v-if="!disableStatus">
+                                <myUpload @uploadBack="uploadBack" :fileInfo="fileInfo"
+                                        :fileList="fileInfo.fileList"></myUpload>
+                            </div>
+                            <div style="width: calc(100% - 140px)" v-if="disableStatus && datalist.attList.length>0">
+                                <uploadDown :datalist="datalist" :dialogStatus="uploadstatus"></uploadDown>
+                            </div>
+                            <div style="width: calc(100% - 140px)" v-if="disableStatus  && datalist.attList.length===0 "
+                                    class="el-descriptions">---- 无附件 ----</div>
+                        </div>
+                    </el-form>
+                    <div slot="footer" class="dialog-footer myfooter">
+                        <el-button type="primary" @click="dialogCli(formStatus)" v-if="!disableStatus">保 存</el-button>
+                        <el-button v-if="!disableStatus" @click="dialogCli(2)">取 消</el-button>
+                        <el-button v-if="disableStatus" @click="dialogCli(2)">关 闭</el-button>
+                    </div>
+                </div>
+            </el-dialog>
+
+        </div>
+        <myMessage :messTit='messTit' @closeMessage="closeMessage" :centerDialogVisible="centerDialogVisible"
+                   v-if="centerDialogVisible"></myMessage>
+    </fullscreen>
+</template>
+<script>
+import myUpload from '../../../components/upload'
+import uploadDown from './uploadDown'
+import mySearch from './search'
+import toolList from '../../../components/toolList'
+import myMessage from "../../../components/myMessage.vue"
+
+export default {
+    components: {
+        myUpload,
+        uploadDown,
+        mySearch,
+        toolList,
+        myMessage
+    },
+    data() {
+        const recordNameRule = (rule, value, callback) => {
+            if (!this.infolist.recordName) {
+                callback(new Error('不能为空'))
+            } else {
+                if (value.length>=60){
+                    callback(new Error('不能超过60个字'))
+                }
+                callback()
+            }
+        }
+        const eventTypeRule = (rule, value, callback) => {
+            if (!this.infolist.eventType) {
+                callback(new Error('不能为空'))
+            } else {
+                callback()
+            }
+        }
+        const fileFromRule = (rule, value, callback) => {
+            if (!this.infolist.fileFrom) {
+                callback(new Error('不能为空'))
+            } else {
+                if (value.length>=60){
+                    callback(new Error('不能超过60个字'))
+                }
+                callback()
+            }
+        }
+        const fileTimeRule = (rule, value, callback) => {
+            if (!this.infolist.fileTime) {
+                callback(new Error('不能为空'))
+            } else {
+                if (value.length>=120){
+                    callback(new Error('不能超过120个字'))
+                }
+                callback()
+            }
+        }
+        const fileAppealRule = (rule, value, callback) => {
+            if (!this.infolist.fileAppeal) {
+                callback(new Error('不能为空'))
+            } else {
+                if (value.length>=500){
+                    callback(new Error('不能超过500个字'))
+                }
+                callback()
+            }
+        }
+        const contentProviderRule = (rule, value, callback) => {
+            if (!this.infolist.contentProvider) {
+                callback(new Error('不能为空'))
+            } else {
+                if (value.length>=120){
+                    callback(new Error('不能超过120个字'))
+                }
+                callback()
+            }
+        }
+        const docNumberRule = (rule, value, callback) => {
+            if (!this.infolist.docNumber) {
+                callback(new Error('不能为空'))
+            } else {
+                if (value.length>=60){
+                    callback(new Error('不能超过60个字'))
+                }
+                callback()
+            }
+        }
+        const providerReplytimeRule = (rule, value, callback) => {
+            if (!this.infolist.providerReplytime) {
+                callback(new Error('不能为空'))
+            } else {
+                if (value.length>=500){
+                    callback(new Error('不能超过500个字'))
+                }
+                callback()
+            }
+        }
+        const urls = {
+            uploadUrl:'/market/iptv/upload',
+            downfileUrl:'/market/iptv/downfile'
+        }
+
+        return {
+            tooltit: '备案列表',
+            queryListUrl:'/market/iptv/queryPage',
+            queryInfoUrl:'/market/iptv/query',
+            addUrl:'/market/iptv/add',
+            updateUrl:'/market/iptv/update',
+            delUrl: "/market/iptv/delByid",
+            getPermUrl:"/market/iptv/getPermissions",
+            fullscreen: false,
+            total: 0,
+            pageSize: 1,
+            tableData: [{}],
+            dialogStatus: false,
+            infolist: {},
+            typeOptions: [],
+            titname: '',
+            disableStatus: false,
+            fileList: [],
+            visibleList: [],
+            attList: [],
+            searchList: [
+                {
+                    type: "input",
+                    tit: "备案名称",
+                    value: "",
+                    width: "48%"
+                },
+                {
+                    type: "sel",
+                    tit: "事件类型",
+                    value: "",
+                    width: "48%",
+                    options: []
+                }
+            ],
+            rules: {
+                recordName: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: recordNameRule
+                }],
+                eventType: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: eventTypeRule
+                }],
+                fileFrom: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: fileFromRule
+                }],
+                fileTime: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: fileTimeRule
+                }],
+                fileAppeal: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: fileAppealRule
+                }],
+                contentProvider: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: contentProviderRule
+                }],
+                docNumber: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: docNumberRule
+                }],
+                providerReplytime: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: providerReplytimeRule
+                }]
+            },
+            fileInfo: {
+                limit: 10,
+                url: urls.uploadUrl,
+                fileList: []
+            },
+            datalist: {
+                url: urls.downfileUrl,
+                type: 2,
+                attList: []
+            },
+            uploadstatus: false,
+            userInfo: {},
+            params: {},
+            centerDialogVisible: false,
+            messTit: '',
+            delid: '',
+            loading: false,
+            eventTypeList: [],
+            eventTypeMap: new Map(),
+            isAuthor: false,
+            isViewer: false,
+            formStatus:1,   //页面状态1:添加,2:浏览,3:修改
+            msg:""
+        }
+    },
+    methods: {
+        //获取当前用户权限
+        getPermissions(){
+            this.$http({
+                url: this.getPermUrl,
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {},
+            }).then((res) => {
+                this.isAuthor = res.data.isAuthor;
+                if(res.data.isAuthor){
+                    this.isViewer = true;
+                }else{
+                    this.isViewer = res.data.isViewer;
+                }
+                if(!this.isViewer){
+                    this.msg = "权限错误!";
+                    this.popupMsg();
+                }
+            });
+        },
+        //从字典表获取‘事件类型’
+         getEventType() {
+            this.$http({
+                url: "/market/cfgDataDict/queryList",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    dictCode: 'eventType'
+                },
+            }).then((res) => {
+                this.eventTypeList = res.data;
+                this.searchList[1].options = res.data;
+                 res.data.forEach(item => {
+                        this.eventTypeMap.set(item.dataCode,item.dataName);
+                    })
+            });
+        },
+        //关闭主对话框
+        closedia() {
+            this.infolist = {};
+            this.dialogCli(2);
+            this.dialogStatus = false;
+        },
+        //提交搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? this.params.recordName = v[0] : '';
+            v[1] ? this.params.eventType = v[1] : '';
+            this.getList(this.params, this.pageSize);
+        },
+
+        /************
+        * @description: 获取分页列表
+        * @param  v 查询参数
+        * @param  n 要展示页码
+        * @return void
+        *************/
+        getList(p, n) {
+            this.pageSize = n;
+            let _this = this;
+            this.tableData = [];
+            this.loading = true;
+            this.$http({
+                url: _this.queryListUrl,
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: p,
+            }).then((res) => {
+                this.tableData = res.data.data;
+                this.total = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+         /************
+        * @description: 列表页翻页查询
+        * @param  n 要展示的页码
+        * @return void
+        *************/
+        currchange(n) {
+            this.pageSize = n;
+            this.getList(this.params, this.pageSize);
+        },
+
+        /************
+        * @description: 展示不同状态(增、查、改)的主表单
+        * @param  v 状态标识(1:增;2:查,3:改)
+        * @param  row 列表行对象
+        * @return void
+        *************/
+        dialogCheck(v, row) {
+            this.infolist = {};
+            this.formStatus = v;
+            if (v === 1) {
+                this.titname = '新建';
+                this.getUser();
+                this.dialogStatus = true;
+                this.disableStatus = false;
+                this.fileInfo.fileList = [];
+                this.attList = [];
+                return
+            } else if (v === 2) {
+                this.titname = '查看';
+                this.disableStatus = true;
+                this.dialogStatus = true;
+                this.loading = true;
+            } else if (v === 3) {
+                this.dialogStatus = true;
+                this.disableStatus = false;
+                this.titname = '修改';
+                this.loading = true;
+            }
+
+           // this.infolist = Object.assign({}, row); //拷贝
+
+            this.$http({
+                url: this.queryInfoUrl,
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: row
+            }).then((res) => {
+                this.datalist.attList = res.data.attList;
+                this.uploadstatus = true;
+               // this.infolist.attList = res.data.attList;
+                this.infolist = res.data;
+                this.fileInfo.fileList = [];
+                this.attList = [];
+
+
+                if (res.data.attList) {
+                    res.data.attList.forEach(item => {
+                        this.fileInfo.fileList.push({
+                            name: item.fileName,
+                            url: '',
+                            id: item.id,
+                            fileName: item.fileName
+                        });
+                        this.attList.push({
+                            name: item.fileName,
+                            url: '',
+                            id: item.id,
+                            fileName: item.fileName
+                        });
+                    })
+                }
+
+                this.loading = false;
+            });
+        },
+
+
+        /************
+        * @description: 主页面按钮操作
+        * @param  v 状态标识(1:新增保存;2:页面关闭,3:记录修改)
+        * @return void
+        *************/
+        dialogCli(v) {
+            this.datalist.attList = [];
+            this.uploadstatus = false;
+            if (v === 2) {
+                this.fileInfo.fileList = [];
+                this.infolist = {};
+                this.dialogStatus = false;
+                this.defaultList = [];
+                return
+            }
+            if (v === 1) {
+                this.submitInfo(this.addUrl, v);
+            } else if (v === 3) {
+                this.submitInfo(this.updateUrl, v);
+            }
+        },
+
+        /************
+        * @description: 主页面数据提交
+        * @param  u 提交请求地址
+        * @param  v 状态标识(1:新增保存;3:记录修改)
+        * @return void
+        *************/
+        submitInfo(u, v) {
+            let _this = this;
+            this.$refs.infolist.validate(valid => {
+                if (valid) {
+                    let attList = [];
+                    for (let i = 0; i < this.attList.length; i++) {
+                        attList.push({
+                            id: this.attList[i].id,
+                            fileCode: this.attList[i].fileCode,
+                            fileName: this.attList[i].fileName,
+                            opName: this.attList[i].opName,
+                            opNo: this.attList[i].opNo,
+                            opTime: this.attList[i].opTime
+                        });
+                    }
+                    this.infolist.attList = attList;
+                    this.$http({
+                        url: u,
+                        method: "post",
+                        headers: {
+                            "Content-Type": "application/json",
+                        },
+                        data: this.infolist
+                    }).then((res) => {
+                        if (res.data.result === 1) {
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'error'
+                            });
+                        } else {
+                            _this.$message({
+                                message: '保存成功',
+                                type: 'success'
+                            });
+                            _this.fileInfo.fileList = [];
+                            _this.infolist = {};
+                            _this.dialogStatus = false;
+                            _this.getList(this.params, this.pageSize);
+                            _this.defaultList = [];
+                        }
+
+                    });
+                }
+            })
+        },
+        //记录删除提示框
+        closeMessage(v) {
+            this.centerDialogVisible = false;
+            let _this = this;
+            if (v === 1) {
+                _this.$http({
+                    url: _this.delUrl,
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {
+                            id: _this.delid
+                    }
+                }).then((res) => {
+                    if (res.data.result === 1) {
+                        _this.$message({
+                            message: res.data.desc,
+                            type: 'error'
+                        });
+                    } else {
+                        _this.$message({
+                            message: '删除成功',
+                            type: 'success'
+                        });
+                        _this.getList(this.params, this.pageSize);
+                    }
+                });
+            }
+        },
+        //删除
+        delLine(v) {
+            this.centerDialogVisible = true;
+            this.messTit = '即将删除此条数据, 是否删除?';
+            this.delid = v.id;
+        },
+        //文件返回值
+        uploadBack(v) {
+            this.attList = v;
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList(this.params, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen
+            }
+        },
+        getUser() {
+            this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+            this.infolist = {};
+            this.infolist.opNo = this.userInfo.loginNo;
+            this.infolist.opName = this.userInfo.loginName;
+        },
+        //弹出提示框
+        popupMsg() {
+            this.$notify.error({
+            title: '错误',
+            message: this.msg
+            });
+        },
+        formatter(row, column) {
+            return this.eventTypeMap.get(row.eventType);
+        },
+
+        viewFormatter(v) {
+            return this.eventTypeMap.get(v);
+        }
+
+    },
+    mounted() {
+        this.getEventType();
+        this.getPermissions();
+        this.getList(this.params, this.pageSize);
+        this.getUser();
+    },
+    created() {
+
+    }
+}
+</script>
+<style scoped lang="scss">
+@import "../../../assets/style";
+
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.el-table__row.to-do {
+    background: rgb(248, 207, 133);
+}
+
+.el-table .success-row {
+    background: #f0f9eb;
+}
+
+.tabbox {
+    margin-top: 16px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+.info-line {
+    width: 100%;
+    display: block;
+    padding-left: 20px;
+
+    div {
+        width: 100%;
+        display: inline-block;
+    }
+
+    span {
+        width: 120px;
+        display: inline-block;
+        padding-top: 10px;
+        text-align: left;
+        line-height:15px;
+        vertical-align: top;
+
+        i {
+            color: red;
+            display: inline-block;
+            padding-right: 5px;
+
+        }
+    }
+
+    .form-item{
+        width: calc(100% - 140px);
+    }
+
+    .el-select,.el-textarea,
+    .el-input {
+        width: 100%;
+    }
+
+
+    .tree
+    {
+        width: calc(100% - 100px);
+    }
+
+    .el-descriptions{
+        border: 1px solid #ddd;
+        background-color: #f5f7fa;
+        color: rgb(2, 30, 58);
+        padding-top: 5px;
+        padding-left: 10px;
+        height: 100%;
+        line-height:30px;
+        width: 100%;
+        border-radius: 5px;
+        min-height:35px;
+
+    }
+
+    .el-radio-group{
+        border: 1px solid #ddd;
+        padding-top: 12px;
+        padding-left: 20px;
+        height: 100%;
+        line-height:30px;
+        width: 100%;
+        border-radius: 5px;
+    }
+
+}
+
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+}
+
+pre {
+    white-space: pre-wrap;
+    word-wrap: break-word;
+}
+
+</style>

+ 886 - 0
src/pages/main/iptv/planApproval.vue

@@ -0,0 +1,886 @@
+<template>
+    <fullscreen  :fullscreen.sync="fullscreen" class="container">
+        <div class="container-box">
+            <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
+            <div class="search">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <el-button class="btn-check" size="medium" type="primary" @click="dialogCheck(1)"
+                v-if="isAuthor">新建</el-button>
+            </div>
+            <div class="tabbox">
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                        :row-style="tableRowClassName"
+                        tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                    <el-table-column prop="itemName" label="申请事项" width="200"></el-table-column>
+                    <el-table-column prop="planPurpose" label="策划目的" :formatter="formatter" ></el-table-column>
+                    <el-table-column prop="createTime" label="申请时间" width="150"></el-table-column>
+                    <el-table-column prop="createName" label="申请人" width="100"></el-table-column>
+                    <el-table-column prop="queryStatus" label="状态" width="100">
+                    </el-table-column>
+                    <el-table-column label="操作" width="150" align="center" fixed="right">
+                        <template slot-scope="scope">
+                            <el-button size="mini" type="primary" plain @click="dialogCheck(2,scope.row)">
+                                查看
+                            </el-button>
+                            <el-button  v-if="scope.row.queryStatus==='待办'"
+                                size="mini" type="success" plain @click="dialogCheck(3,scope.row)">
+                                处理
+                            </el-button>
+                            <el-button  v-if="'9'.includes(scope.row.status) && scope.row.isSponsor==='1'"
+                                size="mini" type="danger" plain @click="delLine(scope.row)">
+                                删除
+                            </el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="total, prev, pager, next" background
+                               :total="total">
+                </el-pagination>
+            </div>
+            <!---------------------------------------------  新建/浏览表单 -------------------------------------->
+            <el-dialog :title="titname + '申请'"
+                       :visible.sync="dialogStatus" width="70%" top="50px"
+                       :show-close="true"
+                       :before-close="closedia"
+                       :destroy-on-close="true"
+                       :modal-append-to-body="false"
+                       :close-on-click-modal="false">
+                <div v-loading="loading">
+                    <el-form :model="infolist" ref="infolist" :rules="rules" style="height: 60vh;overflow-y: scroll;" >
+                        <div class="info-line">
+                            <span><i>*</i>申请事项</span>
+                            <el-form-item prop="itemName" class="form-item">
+                                <el-input v-if="this.formStatus!=2 && '06'.includes(infolist.status)"
+                                v-model.trim="infolist.itemName" placeholder="请输入申请事项内容"
+                                          :disabled="disableStatus" maxlength="61">
+                                </el-input>
+                                <div v-if="this.formStatus===2 || !'06'.includes(infolist.status)"
+                                 class="el-descriptions">{{infolist.itemName}}</div>
+                            </el-form-item>
+                        </div>
+                        <div class="info-line">
+                            <span><i>*</i>频道选取</span>
+                            <el-form-item prop="channelName" class="form-item">
+                                <el-radio-group v-if="this.formStatus!=2 && '06'.includes(infolist.status)" class="el-radio-group"
+                                 v-model="infolist.channelName" @change="handleRadioChanges" >
+                                    <el-radio v-for="item in channelList" :key="item.orderNumber"   :label="item.dataName">
+                                    </el-radio>
+                                </el-radio-group>
+                                <div v-if="this.formStatus===2 || !'06'.includes(infolist.status)"
+                                 class="el-descriptions">{{infolist.channelName}}</div>
+                            </el-form-item>
+                        </div>
+                        <div class="info-line" v-if="isOther">
+                            <span><i>*</i>其他频道名称</span>
+                            <el-form-item prop="otherName" class="form-item">
+                                <el-input v-if="this.formStatus!=2 && '06'.includes(infolist.status)"
+                                 v-model.trim="infolist.otherName"
+                                :disabled="disableStatus" placeholder="请输入其他频道名称"  maxlength="17" ></el-input>
+                                <div v-if="this.formStatus===2 || !'06'.includes(infolist.status)"
+                                 class="el-descriptions">{{infolist.otherName}}</div>
+                            </el-form-item>
+                        </div>
+
+                        <div class="info-line">
+                            <span><i>*</i>策划目的</span>
+                            <el-form-item prop="planPurpose" class="form-item">
+                                <el-input v-if="this.formStatus!=2 && '06'.includes(infolist.status)"
+                                 v-model="infolist.planPurpose" type="textarea" :autosize="{ minRows: 3}"
+                                :disabled="disableStatus" placeholder="请输入策划目的"  ></el-input>
+                                <pre v-if="this.formStatus===2 || !'06'.includes(infolist.status)"
+                                 class="el-descriptions">{{infolist.planPurpose}}</pre>
+                            </el-form-item>
+                        </div>
+
+                        <div class="info-line">
+                            <span><i>*</i>策划描述</span>
+                            <el-form-item prop="planDescription" class="form-item">
+                                <el-input v-if="this.formStatus!=2 && '06'.includes(infolist.status)"
+                                 v-model="infolist.planDescription"  type="textarea" :autosize="{ minRows: 3}"
+                                :disabled="disableStatus" placeholder="请输入策划描述" ></el-input>
+                                <pre v-if="this.formStatus===2 || !'06'.includes(infolist.status)"
+                                 class="el-descriptions">{{infolist.planDescription}}</pre>
+                            </el-form-item>
+                        </div>
+
+                        <div class="info-line"  v-if="this.formStatus!=2 && '123'.includes(infolist.status) " >
+                            <span><i>{{this.isr}}</i>审批意见</span>
+                            <el-form-item prop="opinions" class="form-item">
+                                <el-input v-model="infolist.opinions" type="textarea" :autosize="{ minRows: 3}"
+                                :disabled="disableStatus" placeholder="请输入审批意见" ></el-input>
+                            </el-form-item>
+                        </div>
+
+                        <div class="info-line" v-if="this.formStatus!=2 && '0126'.includes(infolist.status) " >
+                            <span><i>*</i>下一步审批人<br/>{{this.nextStep}}</span>
+                            <el-form-item prop="assigneeName" class="form-item">
+                                <el-input type="input" placeholder="请选择审批人" readonly @click.native="showUserTreeDlg"
+                                v-model="infolist.assigneeName" style="width:500px">
+                                </el-input>
+                                <el-button type="primary" plain icon="el-icon-search" @click="showUserTreeDlg"></el-button>
+                                <el-input type="hidden" v-show="false" v-model="infolist.assigneeNo"/>
+                            </el-form-item>
+                        </div>
+                        <div class="info-line" style="margin-bottom: 22px">
+                            <span>附件</span>
+                            <div class="form-item">
+                                <div class="el-descriptions" v-if="this.formStatus!=2 && '06'.includes(infolist.status)">
+                                    <myUpload @uploadBack="uploadBack" :fileInfo="fileInfo"
+                                            :fileList="fileInfo.fileList"></myUpload>
+                                </div>
+                                <div style="el-descriptions" v-if="(disableStatus || !'06'.includes(infolist.status)) && datalist.attList.length>0">
+                                    <uploadDown :datalist="datalist" :dialogStatus="uploadstatus"></uploadDown>
+                                </div>
+                                <div v-if="(disableStatus || !'06'.includes(infolist.status)) && datalist.attList.length===0 "
+                                    class="el-descriptions">---- 无附件 ----</div>
+                            </div>
+                        </div>
+
+                        <div class="info-line" v-if="this.formStatus!=1">
+                            <span>审批记录</span>
+                            <el-table  class="form-item"  :data="flowHistory"
+                                :header-cell-style="{background:'#eee',color:'#0c1d3e',height:'20px'}"
+                                 size="mini" border >
+                                <el-table-column prop="step" label="流程环节" width="200"></el-table-column>
+                                <el-table-column prop="handler" label="处理人" width="100"></el-table-column>
+                                <el-table-column prop="time" label="处理时间" width="150"></el-table-column>
+                                <el-table-column prop="flag" label="操作" width="100"></el-table-column>
+                                <el-table-column prop="opinion" label="审批意见" ></el-table-column>
+                            </el-table>
+                        </div>
+                        <div class="info-line" v-if="'458'.includes(infolist.status)" >
+                            <span>执行结果</span>
+                            <el-form-item prop="result" class="form-item">
+                                <el-input v-if="this.formStatus!=2 && '4'.includes(infolist.status)"
+                                 v-model="infolist.result" type="textarea" :autosize="{ minRows: 3}"
+                                :disabled="disableStatus" placeholder="请输入执行结果" ></el-input>
+                                <div v-if="this.formStatus===2 || !'458'.includes(infolist.status)"
+                                 class="el-descriptions">{{infolist.result}}</div>
+                            </el-form-item>
+                        </div>
+
+                    </el-form>
+                    <div slot="footer" class="dialog-footer myfooter">
+                        <span v-if="this.formStatus===1 || this.formStatus===3">
+                        <el-button v-if="infolist.status==='0' || infolist.status==='1'"
+                        type="primary" @click="dialogCli('submit')" >提 交</el-button>
+                        <el-button v-if="infolist.status==='2' || infolist.status=='3'"
+                        type="primary" @click="dialogCli('agree')">同 意</el-button>
+                        <el-button v-if="infolist.status==='3'"
+                        type="danger" @click="dialogCli('disagree')">不同意</el-button>
+                        <el-button v-if="infolist.status==='2' || infolist.status=='3'"
+                         type="warning" @click="dialogCli('return')">退回修改</el-button>
+                        <el-button v-if="infolist.status==='4'"
+                         type="primary" @click="dialogCli('exe')">已执行</el-button>
+                        <el-button v-if="infolist.status==='4'"
+                         type="info" @click="dialogCli('unexe')">未执行</el-button>
+                        <el-button v-if="infolist.status==='6'"
+                         type="primary" @click="dialogCli('submit')">重新发起</el-button>
+                        <el-button v-if="infolist.status==='6'"
+                         type="info" @click="dialogCli('over')">结束流程</el-button>
+                        <el-button @click="dialogCli('close')">取 消</el-button>
+                        </span>
+                        <el-button v-if="this.formStatus===2" @click="dialogCli('close')">关 闭</el-button>
+                    </div>
+                </div>
+            </el-dialog>
+            <userDlg :visible="userTreeDlgVisual" :ns="this.nextStep" :zIndex=10 @handleSelect="handleUserSelect" @close="closeUserSelect"/>
+        </div>
+        <myMessage :messTit='messTit' @closeMessage="closeMessage" :centerDialogVisible="centerDialogVisible"
+                   v-if="centerDialogVisible"></myMessage>
+    </fullscreen>
+</template>
+<script>
+import myUpload from '../../../components/upload'
+import uploadDown from './uploadDown'
+import mySearch from './search'
+import toolList from '../../../components/toolList'
+import myMessage from "../../../components/myMessage.vue"
+import userDlg from "./userDlg.vue"
+
+
+export default {
+    components: {
+        myUpload,
+        uploadDown,
+        mySearch,
+        toolList,
+        myMessage,
+        userDlg
+    },
+    data() {
+        const assigneeNameRule = (rule, value, callback) => {
+            if (this.infolist.operation ==='return' || this.infolist.operation ==='over'){
+                callback()
+            }else{
+                if (!this.infolist.assigneeName) {
+                    callback(new Error('请选择审批人'))
+                } else {
+                    callback()
+                }
+            }
+        }
+        const opinionsRule = (rule, value, callback) => {
+            if (this.infolist.status ==='1'){
+                if (!this.infolist.opinions) {
+                    callback(new Error('审批意见不能为空'))
+                } else {
+                    callback()
+                }
+            }else{
+                callback()
+            }
+        }
+        const nullRule = (rule, value, callback) => {
+            if(value) {
+                let  trimValue = value.replace(/^\s+|\s+$/gm,'');
+                if (!trimValue) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }else{
+                callback(new Error('不能为空'))
+            }
+
+        }
+
+        const itemNameRule = (rule, value, callback) => {
+            if(value) {
+                let  trimValue = value.replace(/^\s+|\s+$/gm,'');
+                if (!trimValue) {
+                    callback(new Error('不能为空'))
+                } else {
+                    if (value.length>60){
+                        callback(new Error('不能超过60个字'))
+                    }
+                    callback()
+                }
+            }else{
+                callback(new Error('不能为空'))
+            }
+        }
+
+        const otherNameRule = (rule, value, callback) => {
+            if(value) {
+                let  trimValue = value.replace(/^\s+|\s+$/gm,'');
+                if (!trimValue) {
+                    callback(new Error('不能为空'))
+                } else {
+                    if (value.length>16){
+                        callback(new Error('不能超过16个字'))
+                    }
+                    callback()
+                }
+            }else{
+                callback(new Error('不能为空'))
+            }
+        }
+
+        const urls = {
+            uploadUrl:'/market/iptv/upload',
+            downfileUrl:'/market/iptv/downfile'
+        }
+
+        return {
+            tooltit: '上线审批列表',
+            queryListUrl:'/market/iptvPlanApproval/queryPage',
+            queryInfoUrl:'/market/iptvPlanApproval/query',
+            addUrl:'/market/iptvPlanApproval/add',
+            updateUrl:'/market/iptvPlanApproval/update',
+            delUrl: "/market/iptvPlanApproval/delByid",
+            getPermUrl:"/market/iptvPlanApproval/getPermissions",
+            fullscreen: false,
+            total: 0,
+            pageSize: 1,
+            tableData: [{}],
+            dialogStatus: false,
+            infolist: {},
+            typeOptions: [],
+            titname: '',
+            disableStatus: false,
+            fileList: [],
+            attList: [],
+            searchList: [
+                {
+                    type: "input",
+                    tit: "申请事项",
+                    value: "",
+                    width: "48%",
+                },
+                {
+                    type: "sel",
+                    tit: "状态",
+                    value: "",
+                    width: "48%",
+                    options: [
+                         {
+                            dataCode: "待办",
+                            dataName: "待办"
+                        },
+                        {
+                            dataCode: "已办",
+                            dataName: "已办"
+                        },
+                        {
+                            dataCode: "已归档",
+                            dataName: "已归档"
+                        }
+                    ]
+                }
+            ],
+            rules: {
+                itemName: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: itemNameRule
+                }],
+                channelName: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: nullRule
+                }],
+                otherName: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: otherNameRule
+                }],
+                planPurpose: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: nullRule
+                }],
+                planDescription: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: nullRule
+                }],
+                assigneeName: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: assigneeNameRule
+                }],
+                opinions: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: opinionsRule
+                }]
+            },
+            fileInfo: {
+                limit: 10,
+                url: urls.uploadUrl,
+                fileList: []
+            },
+            datalist: {
+                url: urls.downfileUrl,
+                type: 2,
+                attList: []
+            },
+            uploadstatus: false,
+            userInfo: {},
+            params: {},
+            centerDialogVisible: false,
+            messTit: '',
+            delid: '',
+            loading: false,
+            channelList: [],
+            flowHistory:[{}],
+            isAuthor: false,
+            isViewer: false,
+            formStatus:1,   //页面状态1:添加,2:浏览,3:处理
+            isOther:false,
+            userTreeDlgVisual:false,
+            firstChannel:'',
+            nextStep:'',
+            isr:'',
+            msg:""
+        }
+    },
+    methods: {
+        //获取当前用户权限
+        getPermissions(){
+            this.$http({
+                url: this.getPermUrl,
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {},
+            }).then((res) => {
+                this.isAuthor = res.data.isAuthor;
+                if(res.data.isAuthor){
+                    this.isViewer = true;
+                }else{
+                    this.isViewer = res.data.isViewer;
+                }
+                /*if(!this.isViewer){
+                    this.msg = "权限错误!";
+                    this.popupMsg();
+                }*/
+            });
+        },
+        //从字典表获取‘频道名称’
+         getChannelList() {
+            this.$http({
+                url: "/market/cfgDataDict/queryList",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    dictCode: 'channel'
+                },
+            }).then((res) => {
+                this.channelList = res.data;
+                this.firstChannel = res.data[0].dataName;
+            });
+        },
+        //关闭主对话框
+        closedia() {
+            this.infolist = {};
+            this.flowHistory=[];
+            this.dialogCli('close');
+        },
+        //提交搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? this.params.itemName = v[0] : '';
+            v[1] ? this.params.queryStatus = v[1] : '';
+            this.getList(this.params, this.pageSize);
+        },
+
+        /************
+        * @description: 获取分页列表
+        * @param  v 查询参数
+        * @param  n 要展示页码
+        * @return void
+        *************/
+        getList(p, n) {
+            this.pageSize = n;
+            let _this = this;
+            this.tableData = [];
+            this.loading = true;
+            this.$http({
+                url: _this.queryListUrl,
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: p,
+            }).then((res) => {
+                this.tableData = res.data.data;
+                this.total = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+         /************
+        * @description: 列表页翻页查询
+        * @param  n 要展示的页码
+        * @return void
+        *************/
+        currchange(n) {
+            this.pageSize = n;
+            this.getList(this.params, this.pageSize);
+        },
+
+        /************
+        * @description: 展示不同状态(增、查、改)的主表单
+        * @param  v 状态标识(1:增;2:查,3:改)
+        * @param  row 列表行对象
+        * @return void
+        *************/
+        dialogCheck(v, row) {
+            this.infolist = {};
+            this.formStatus = v;
+            if (v === 1) {
+                this.titname = '新建';
+                this.getUser();
+                this.dialogStatus = true;
+                this.disableStatus = false;
+                this.fileInfo.fileList = [];
+                this.attList = [];
+                this.formStatus = 1;   //页面状态1:添加,2:浏览,3:处理
+                this.nextStep='  [频道负责人]';
+                this.infolist.status = '0';
+                //this.infolist.channelName = this.firstChannel;
+                return
+            } else if (v === 2) {
+                this.titname = '查看';
+                this.disableStatus = true;
+                this.dialogStatus = true;
+                this.formStatus = 2;
+                this.loading = true;
+            } else if (v === 3) {
+                this.dialogStatus = true;
+                this.disableStatus = false;
+                this.titname = '处理';
+                this.formStatus = 3;
+                this.loading = true;
+                this.isr = "";
+            }
+
+           // this.infolist = Object.assign({}, row); //拷贝
+
+            this.$http({
+                url: this.queryInfoUrl,
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: row
+            }).then((res) => {
+                this.datalist.attList = res.data.attList;
+                this.uploadstatus = true;
+                this.infolist = res.data;
+                this.fileInfo.fileList = [];
+                this.attList = [];
+                this.flowHistory = JSON.parse(res.data.history).history_list;
+                if (res.data.attList) {
+                    res.data.attList.forEach(item => {
+                        this.fileInfo.fileList.push({
+                            name: item.fileName,
+                            url: '',
+                            id: item.id,
+                            fileName: item.fileName
+                        });
+                        this.attList.push({
+                            name: item.fileName,
+                            url: '',
+                            id: item.id,
+                            fileName: item.fileName
+                        });
+                    })
+                }
+                if(this.infolist.status==='1') {
+                    this.nextStep="[科室经理]";
+                    this.isr = "*";
+                }
+                if(this.infolist.status==='2') this.nextStep="[分管副总]";
+                if(this.infolist.status==='6') this.nextStep="[频道负责人]";
+                if (this.infolist.channelName==='其他'){
+                    this.isOther = true;
+                }else{
+                    this.isOther = false;
+                }
+                this.loading = false;
+            });
+        },
+
+
+        /************
+        * @description: 主页面按钮操作
+        * @param  v 状态标识(1:新增保存;2:页面关闭,3:记录修改)
+        * @return void
+        *************/
+        dialogCli(v) {
+
+            if (v === "close") {
+                this.datalist.attList = [];
+                this.uploadstatus = false;
+                this.fileInfo.fileList = [];
+                this.infolist = {};
+                this.dialogStatus = false;
+                this.defaultList = [];
+                this.isOther = false;
+                return
+            }
+
+            if (this.formStatus===1){
+                this.submitInfo(this.addUrl, v);
+            }else{
+                this.submitInfo(this.updateUrl, v);
+            }
+
+        },
+
+        /************
+        * @description: 主页面数据提交
+        * @param  u 提交请求地址
+        * @param  v 状态标识(1:新增保存;3:记录修改)
+        * @return void
+        *************/
+        submitInfo(u, v) {
+            let _this = this;
+            this.infolist.operation = v;
+            this.$refs.infolist.validate(valid => {
+                if (valid) {
+                    let attList = [];
+
+                    this.datalist.attList = [];
+                    this.uploadstatus = false;
+                    for (let i = 0; i < this.attList.length; i++) {
+                        attList.push({
+                            id: this.attList[i].id,
+                            fileCode: this.attList[i].fileCode,
+                            fileName: this.attList[i].fileName,
+                            opName: this.attList[i].opName,
+                            opNo: this.attList[i].opNo,
+                            opTime: this.attList[i].opTime
+                        });
+                    }
+                    this.infolist.attList = attList;
+                    this.$http({
+                        url: u,
+                        method: "post",
+                        headers: {
+                            "Content-Type": "application/json",
+                        },
+                        data: this.infolist
+                    }).then((res) => {
+                        if (res.data.result === 1) {
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'error'
+                            });
+                        } else {
+                            _this.$message({
+                                message: '操作成功',
+                                type: 'success'
+                            });
+                            _this.fileInfo.fileList = [];
+                            _this.infolist = {};
+                            _this.dialogStatus = false;
+                            _this.getList(this.params, this.pageSize);
+                            _this.defaultList = [];
+                        }
+
+                    });
+                }
+            })
+        },
+        //记录删除提示框
+        closeMessage(v) {
+            this.centerDialogVisible = false;
+            let _this = this;
+            if (v === 1) {
+                _this.$http({
+                    url: _this.delUrl,
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {
+                            id: _this.delid
+                    }
+                }).then((res) => {
+                    if (res.data.result === 1) {
+                        _this.$message({
+                            message: res.data.desc,
+                            type: 'error'
+                        });
+                    } else {
+                        _this.$message({
+                            message: '删除成功',
+                            type: 'success'
+                        });
+                        _this.getList(this.params, this.pageSize);
+                    }
+                });
+            }
+        },
+        //删除
+        delLine(v) {
+            this.centerDialogVisible = true;
+            this.messTit = '即将删除此条数据, 是否删除?';
+            this.delid = v.id;
+        },
+        //文件返回值
+        uploadBack(v) {
+            this.attList = v;
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList(this.params, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen
+            }
+        },
+        getUser() {
+            this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+            this.infolist = {};
+            this.infolist.opNo = this.userInfo.loginNo;
+            this.infolist.opName = this.userInfo.loginName;
+        },
+        //弹出提示框
+        popupMsg() {
+            this.$notify.error({
+            title: '错误',
+            message: this.msg
+            });
+        },
+        //频道切换触发
+        handleRadioChanges(value) {
+            if (value==='其他'){
+                this.isOther = true;
+            }else{
+                this.isOther = false;
+            }
+        },
+        showUserTreeDlg(){
+                this.userTreeDlgVisual = true
+        },
+        handleUserSelect(v){
+                this.infolist.assigneeNo = v.leaderAuditNo
+                this.infolist.assigneeName = v.leaderAuditName
+                this.closeUserSelect()
+        },
+        closeUserSelect(){
+            this.userTreeDlgVisual = false;
+        },
+        tableRowClassName({row, rowIndex}) {
+            let stylejson={}
+            if (row.queryStatus === '待办') {
+                stylejson.background ='oldlace';
+                return stylejson;
+            }
+            return ''
+        },
+        formatter(row, column) {
+            if (row.planPurpose){
+                if (row.planPurpose.length>100){
+                    return row.planPurpose.slice(1,100)+"......";
+                }else{
+                    return row.planPurpose;
+                }
+            }else{
+                return row.planPurpose;
+            }
+
+        }
+    },
+    mounted() {
+        this.getPermissions();
+        this.getUser();
+        this.getChannelList();
+        this.getList(this.params, this.pageSize);
+
+    },
+    created() {
+
+    }
+}
+</script>
+<style scoped lang="scss">
+@import "../../../assets/style";
+
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+  .el-table__row.to-do {
+    background: rgb(248, 207, 133);
+  }
+
+  .el-table .success-row {
+    background: #f0f9eb;
+  }
+
+.tabbox {
+    margin-top: 16px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+.info-line {
+    width: 100%;
+    display: block;
+    padding-left: 20px;
+
+    div {
+        width: 100%;
+        display: inline-block;
+    }
+
+    span {
+        width: 120px;
+        display: inline-block;
+        padding-top: 10px;
+        text-align: left;
+        line-height:15px;
+        vertical-align: top;
+
+        i {
+            color: red;
+            display: inline-block;
+            padding-right: 5px;
+
+        }
+    }
+
+    .form-item{
+        width: calc(100% - 140px);
+    }
+
+    .el-select,.el-textarea,
+    .el-input {
+        width: 100%;
+    }
+
+
+    .tree
+    {
+        width: calc(100% - 100px);
+    }
+
+    .el-descriptions{
+        border: 1px solid #ddd;
+        background-color: #f5f7fa;
+        color: rgb(2, 30, 58);
+        padding-top: 5px;
+        padding-left: 10px;
+        height: 100%;
+        line-height:30px;
+        width: 100%;
+        border-radius: 5px;
+        min-height:35px;
+
+    }
+
+    .el-radio-group{
+        border: 1px solid #ddd;
+        padding-top: 12px;
+        padding-left: 20px;
+        height: 100%;
+        line-height:30px;
+        width: 100%;
+        border-radius: 5px;
+    }
+
+}
+
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+}
+
+pre {
+    white-space: pre-wrap;
+    word-wrap: break-word;
+}
+
+</style>

+ 95 - 0
src/pages/main/iptv/search.vue

@@ -0,0 +1,95 @@
+<template>
+    <div class="search-box">
+        <div class="box-l">
+            <div v-for="(item, index) in searchList" :key="index" class="box-info" :style="'width:' + item.width">
+                <el-input v-model="item.value" v-if="item.type === 'input'" size="medium" :placeholder="item.tit">
+                </el-input>
+                <el-select :popper-append-to-body="false" clearable v-if="item.type === 'sel'" v-model="item.value"
+                           :placeholder="item.tit" size="medium">
+                    <el-option v-for="items in item.options" :key="items.dataCode" :label="items.dataName"
+                               :value="items.dataCode">
+                    </el-option>
+                </el-select>
+                <el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'date'" size="medium"
+                                type="date" :placeholder="item.tit">
+                </el-date-picker>
+                <el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'datetime'"
+                                size="medium" type="datetime" :placeholder="item.tit">
+                </el-date-picker>
+                <el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'month'"
+                                size="medium" type="month" :placeholder="item.tit">
+                </el-date-picker>
+                <el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'year'"
+                                size="medium" type="year" :placeholder="item.tit">
+                </el-date-picker>
+            </div>
+        </div>
+        <el-button class="btn-check" size="medium" type="primary" plain icon="el-icon-search" @click="searchInfo">搜索
+        </el-button>
+        <el-button class="btn-check" size="medium" type="primary" plain icon="el-icon-refresh" @click="reset">重置
+        </el-button>
+    </div>
+</template>
+<script>
+    export default {
+        props: ["searchList"],
+        data() {
+            return {
+                infoList: [],
+            };
+        },
+        methods: {
+            reset(){
+                this.infoList = [];
+                for (let i = 0; i < this.searchList.length; i++) {
+                    this.searchList[i].value = "";
+                }
+                this.searchInfo();
+            },
+            searchInfo() {
+                this.infoList = [];
+                for (let i = 0; i < this.searchList.length; i++) {
+                    let v = this.searchList[i].value;
+                    if (this.searchList[i].value){
+                        v = v.replace(/%/gm,'\\%');
+                    }
+                    if (this.searchList[i].type === "date" && v) {
+                        this.infoList.push(Date.parse(v));
+                    } else {
+                        this.infoList.push(v);
+                    }
+                }
+                this.$emit("searchInfo", this.infoList);
+            },
+        },
+        mounted() {},
+        created() {},
+    };
+</script>
+<style scoped lang="scss">
+    .search-box {
+        display: flex;
+        justify-content: space-between;
+
+        .box-l {
+            display: flex;
+            justify-content: space-between;
+
+            .box-info {
+                display: inline-block;
+                // min-width: 100px;
+            }
+        }
+
+        .btn-check {}
+
+        .el-date-editor.el-input,
+        .el-date-editor.el-input__inner {
+            width: 100%;
+        }
+
+        .el-select-dropdown {
+            z-index: 100000 !important;
+        }
+    }
+</style>

+ 196 - 0
src/pages/main/iptv/uploadDown.vue

@@ -0,0 +1,196 @@
+<template>
+    <div class="back-box">
+        <div v-for="item in infolist" :key="item.id" @click="downcheck(item)">
+            <i class="iconfont icon-word" v-if="item.type==='word'"></i>
+            <i class="iconfont icon-excel" v-if="item.type==='excel'"></i>
+            <i class="iconfont icon-ppt" v-if="item.type==='ppt'"></i>
+            <i class="iconfont icon-wenjian" v-if="item.type==='wenjian'"></i>
+            <i class="el-icon-picture" v-if="item.type==='png'"></i>
+            <el-tooltip class="item" effect="dark" :content="item.fileName" placement="right" :enterable="false">
+                <span class="tab-long">{{item.fileName}}</span>
+            </el-tooltip>
+            <div class="seedown" v-if="datalist.type===2">
+                <a @click="uploaddown(item)">下载</a>
+            </div>
+        </div>
+        <div class="if-box-top" v-if="ifrshow" @keyup.esc="ifrshow=false">
+            <i class="el-icon-close" @click="ifrshow=false"></i>
+            <iframe
+                height="100%"
+                width="100%"
+                :src="srcsc">
+            </iframe>
+        </div>
+    </div>
+</template>
+<script>
+    export default {
+        props: ['datalist', 'dialogStatus'],
+        data() {
+            return {
+                infolist: [],
+                status: false,
+                srcsc: '',
+                ifrshow:false,
+            }
+        },
+        methods: {
+            downcheck(v) {
+                if (this.datalist.type === 1) {
+                    this.uploaddown(v);
+                }
+            },
+            uploadsee(v) {
+                let url = encodeURIComponent(v.callPath);
+                this.srcsc = 'http://114.215.71.182:8012/onlinePreview?url=' + url;
+                this.ifrshow=true;
+                // window.open('http://114.215.71.182:8012/onlinePreview?url=' + url);
+            },
+            //下载e
+            uploaddown(v) {
+                let fileData = v;
+                this.$http({
+                    url: this.datalist.url,
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    responseType: "blob",
+                    data: {"id": fileData.id, "fileName": fileData.fileName},
+                }).then((response) => {
+                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                        let blob = new Blob([response.data], {
+                            type: 'application/vnd.ms-excel'
+                        });
+                        window.navigator.msSaveOrOpenBlob(blob, fileData.fileName);
+                    } else {
+                        /* 火狐谷歌的文件下载方式 */
+                        var blob = new Blob([response.data])
+                        var downloadElement = document.createElement('a')
+                        var href = window.URL.createObjectURL(blob);
+                        downloadElement.href = href;
+                        downloadElement.download = fileData.fileName;
+                        document.body.appendChild(downloadElement);
+                        downloadElement.click();
+                        document.body.removeChild(downloadElement);
+                        window.URL.revokeObjectURL(href);
+                    }
+                });
+            },
+            dataHandle() {
+                this.infolist = this.datalist.attList;
+                if (this.infolist) {
+                    for (let i = 0; i < this.infolist.length; i++) {
+                        let f = this.infolist[i].fileName.split(".");
+                        let type = f[f.length - 1];
+                        if (type === 'doc' || type === 'docx') {
+                            this.infolist[i].type = 'word';
+                        } else if (type === 'ppt') {
+                            this.infolist[i].type = 'ppt';
+                        } else if (type === 'xlsx' || type === 'xls') {
+                            this.infolist[i].type = 'excel';
+                        } else if (type === 'png' || type === 'jpg' || type === 'svg' || type === 'gif' || type === 'psd') {
+                            this.infolist[i].type = 'png';
+                        } else {
+                            this.infolist[i].type = 'wenjian';
+                        }
+                    }
+                }
+            }
+        },
+        mounted() {
+
+        },
+        created() {
+            this.dataHandle();
+        },
+        watch: {
+            dialogStatus() {
+                this.$forceUpdate()
+                let _this = this;
+                _this.dataHandle();
+            }
+        }
+    }
+</script>
+<style scoped lang="scss">
+    .if-box-top{
+        background: #fff;
+        width: 80vw;
+        height: 80vh;
+        margin-top: 10vh;
+        margin-left: 10vw;
+    }
+
+    .iconfont {
+        font-size: 42px;
+    }
+
+    .icon-excel {
+        color: #67DB63;
+    }
+
+    .icon-word {
+        color: #FF654E;
+    }
+
+    .icon-ppt {
+        color: #FF8943;
+    }
+
+    .icon-wenjian {
+        color: #ccc;
+    }
+
+    .el-icon-picture {
+        font-size: 36px;
+        color: #ccc;
+        background: #fff;
+        padding: 4px 2px;
+        margin-bottom: 2px;
+        border-radius: 3px;
+    }
+
+    .back-box {
+        margin-top: 20px;
+        background: #F2F2F2;
+        padding: 20px;
+
+        div {
+            display: inline-block;
+            text-align: center;
+            margin-right: 20px;
+            cursor: pointer;
+
+            span {
+                display: block;
+                width: 80px;
+                overflow: hidden;
+                padding-top: 5px;
+                margin: 0 10px;
+                overflow: hidden;
+                text-overflow: ellipsis;
+                display: -webkit-box; /* 将对象作为弹性伸缩盒子模型显示 */
+                -webkit-line-clamp: 1; /* 控制最多显示几行 */
+                -webkit-box-orient: vertical; /* 设置或检索伸缩盒对象的子元素的排列方式 */
+            }
+        }
+
+        .seedown {
+            margin: 0;
+            margin-top: 5px;
+
+            a {
+                font-size: 12px;
+                padding: 2px 5px;
+                border: 1px solid transparent;
+                color: #999;
+            }
+
+            a:hover {
+                color: #0b82ff;
+            }
+        }
+    }
+
+</style>

+ 59 - 0
src/pages/main/iptv/userDlg.vue

@@ -0,0 +1,59 @@
+<template>
+  <div>
+      <el-dialog
+          :title="'请选择'+ns"
+          :visible.sync="visible"
+          width="40%"
+          :modal-append-to-body="false"
+          :close-on-click-modal="false"
+          :before-close="close"
+          >
+          <div class="tree">
+            <el-row>
+                <deptTreeOnly @treeCheck="treeCheck"></deptTreeOnly>
+            </el-row>
+          </div>
+
+      <span slot="footer" class="dialog-footer">
+          <el-button @click="close">取 消</el-button>
+          <el-button type="primary" @click="checkSelectUser">确 定</el-button>
+      </span>
+  </el-dialog>
+</div>
+</template>
+<script>
+import deptTreeOnly from "@/components/deptTreeOnly.vue"
+
+export default {
+  props: {
+    visible: { type: Boolean, required: true, default () { return false } },
+    ns:String
+  },
+  components: {deptTreeOnly},
+  data(){
+    return{
+        treeList:[]
+    }
+  },
+  methods:{
+      treeCheck(v) {
+        this.treeList = v;
+      },
+      checkSelectUser(){
+        this.$emit('handleSelect',this.treeList)
+        this.close()
+      },
+      close(){
+        this.$emit('update:visible', false) // 直接修改父组件的属性
+        this.$emit('close')
+
+      }
+  }
+}
+</script>
+<style scoped lang="scss">
+.tree{
+  height: 400px;
+  overflow:scroll;
+}
+</style>

+ 658 - 0
src/pages/main/keyChannelCoop/appendix.vue

@@ -0,0 +1,658 @@
+<template>
+    <div style="display: flex; justify-content: space-between">
+        <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;width: 100%;">
+            <div class="container-box" style="padding: 0 20px 0 0;">
+                <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
+                <div style="overflow: hidden;">
+                    <div class="search" style="float: left;">
+                        <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                    </div>
+                    <div style="margin-top: 20px;float: right;" class="bigbtns">
+                    </div>
+                </div>
+                <div class="tabbox">
+                    <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                              tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                        <el-table-column prop="name" label="模板名称">
+                        </el-table-column>
+                        <el-table-column prop="opTime" label="创建时间">
+                        </el-table-column>
+                        <el-table-column label="操作" width="180px" align="center" fixed="right">
+                            <template slot-scope="scope">
+                                <el-button size="mini" type="primary" @click="appendixInfo(1,scope.row)">查看</el-button>
+                                <el-button size="mini" v-if="scope.row.finishStatus == 0" type="primary"
+                                           @click="appendixInfoAdd(1,scope.row)">处理
+                                </el-button>
+                                <el-button size="mini" v-if="scope.row.finishStatus == 0 && advInfo.isAdmin"
+                                           type="danger" @click="delLine(scope.row)">办结
+                                </el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                                   :total="total">
+                    </el-pagination>
+                </div>
+
+                <el-dialog title="查看" :visible.sync="appendixInfoStatus" width="70%" :close-on-press-escape="false"
+                           :show-close="true" :before-close="closeAppendixInfoList" :destroy-on-close="true"
+                           :modal-append-to-body="false"
+                           :close-on-click-modal="false" :fullscreen="false">
+                    <div class="tabbox" style="height: 500px">
+                        <el-table height="calc(100% - 50px)" class="com-table" ref="multipleTable"
+                                  :data="appendixInfoData"
+                                  tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                            <el-table-column prop="appendixName" label="模板名称">
+                            </el-table-column>
+                            <el-table-column prop="cityName" label="地市">
+                            </el-table-column>
+                            <el-table-column prop="townName" label="区县">
+                            </el-table-column>
+                            <el-table-column prop="agentName" label="渠道名称">
+                            </el-table-column>
+                            <el-table-column prop="uploadUserName" label="上报人">
+                            </el-table-column>
+                            <el-table-column prop="opTime" label="创建时间">
+                            </el-table-column>
+                            <el-table-column label="操作" width="180px" align="center" fixed="right" v-if="appendixInfoFinishStatus == 0">
+                                <template slot-scope="scope">
+                                    <el-button size="mini" type="primary" @click="appendixInfoEdit(1,scope.row)">编辑
+                                    </el-button>
+                                    <el-button size="mini" type="danger" @click="appendixInfoDel(scope.row)">删除
+                                    </el-button>
+                                </template>
+                            </el-table-column>
+                        </el-table>
+                        <el-pagination class="pageBox" @current-change="appendixInfoListChange"
+                                       layout="prev, pager, next" background
+                                       :total="appendixInfoTotal">
+                        </el-pagination>
+                    </div>
+                    <div class="dialog-footer myfooter">
+                        <el-button v-if="advInfo.isAdmin" @click="exportZip()" type="primary">导 出</el-button>
+                        <el-button @click="appendixInfoStatus = false">关 闭</el-button>
+                    </div>
+                </el-dialog>
+
+                <el-dialog title="附件处理" :visible.sync="appendixInfoAddStatus" width="50%" :destroy-on-close="true"
+                           :modal-append-to-body="false" :close-on-click-modal="false">
+                    <div v-loading="loading">
+                        <el-form :model="appendixInfoList" ref="appendixInfoList" :rules="appendixInfoRules">
+                            <div class="info-line">
+                                <el-form-item prop="cityName">
+                                    <span>地市</span>
+                                    <el-input v-model="appendixInfoList.cityName" placeholder="地市"
+                                              :disabled="disableStatus"></el-input>
+                                </el-form-item>
+                                <el-form-item prop="townName">
+                                    <span>区县</span>
+                                    <el-input v-model="appendixInfoList.townName" placeholder="区县"
+                                              :disabled="disableStatus"></el-input>
+                                </el-form-item>
+                            </div>
+                            <div class="info-line">
+                                <el-form-item prop="agentName">
+                                    <span>渠道名称</span>
+                                    <el-input v-model="appendixInfoList.agentName" placeholder="渠道名称"
+                                              :disabled="disableStatus"></el-input>
+                                </el-form-item>
+                                <el-form-item prop="uploadUserName">
+                                    <span>上报人</span>
+                                    <el-input v-model="appendixInfoList.uploadUserName" placeholder="上报人"
+                                              :disabled="disableStatus"></el-input>
+                                </el-form-item>
+                            </div>
+                            <div style="padding-left: 80px" v-if="!disableStatus">
+                                <myUpload @uploadBack="uploadBack" :fileInfo="fileInfo"
+                                          :fileList="fileInfo.fileList"></myUpload>
+                            </div>
+                            <div style="padding:0 20px 0 100px" v-if="disableStatus">
+                                <uploadDown :datalist="datalist" :dialogStatus="uploadstatus"></uploadDown>
+                            </div>
+                            <div class="info-line">
+                                注:上传附件请以渠道名称命名
+                            </div>
+                        </el-form>
+                        <div slot="footer" class="dialog-footer myfooter">
+                            <el-button @click="saveAppendixInfo(1)" type="primary">保 存</el-button>
+                            <el-button @click="appendixInfoAddStatus = false">取 消</el-button>
+                        </div>
+                    </div>
+                </el-dialog>
+            </div>
+            <myMessage :messTit='messTit' @closeMessage="closeMessage" :centerDialogVisible="centerDialogVisible"
+                       v-if="centerDialogVisible"></myMessage>
+            <myMessage :messTit='appendixInfoDelTit' @closeMessage="appendixInfoDelCloseMessage"
+                       :centerDialogVisible="appendixInfoDelStatus" v-if="appendixInfoDelStatus"></myMessage>
+        </fullscreen>
+    </div>
+</template>
+<script>
+import mySearch from "../../../components/search.vue";
+import myUpload from "../../../components/upload";
+import toolList from "../../../components/toolList";
+import myMessage from "../../../components/myMessage.vue"
+
+export default {
+    components: {
+        myUpload,
+        mySearch,
+        toolList,
+        myMessage
+    },
+    data() {
+        const cityName = (rule, value, callback) => {
+            if (!this.appendixInfoList.cityName) {
+                callback(new Error('不能为空'))
+            } else {
+                callback()
+            }
+        }
+        const townName = (rule, value, callback) => {
+            if (!this.appendixInfoList.townName) {
+                callback(new Error('不能为空'))
+            } else {
+                callback()
+            }
+        }
+        const agentName = (rule, value, callback) => {
+            if (!this.appendixInfoList.agentName) {
+                callback(new Error('不能为空'))
+            } else {
+                callback()
+            }
+        }
+        const uploadUserName = (rule, value, callback) => {
+            if (!this.appendixInfoList.uploadUserName) {
+                callback(new Error('不能为空'))
+            } else {
+                callback()
+            }
+        }
+
+        return {
+            appendixInfoRules: {
+                cityName: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: cityName
+                }],
+                townName: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: townName
+                }],
+                agentName: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: agentName
+                }],
+                uploadUserName: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: uploadUserName
+                }],
+            },
+            tooltit: '重点攻坚渠道合作率-附件统计',
+            searchList: [{
+                type: 'input',
+                tit: '名称',
+                value: '',
+                width: '100%',
+            },],
+            fullscreen: false,
+            total: 0,
+            pageSize: 1,
+            tableData: [{}],
+            dialogStatus: false,
+            disableStatus: false,
+            titname: '终端',
+            infolist: {},
+            typeOptions: [{
+                dataCode: 1,
+                dataName: 111,
+            }],
+            userInfo: {},
+            params: {},
+            termOption: [],
+            centerDialogVisible: false,
+            messTit: '',
+            delid: '',
+            loading: false,
+            attList: [],
+            uploadstatus: false,
+            fileInfo: {
+                limit: 50,
+                url: '/market/cKeyChannelCoopAppendix/upload',
+                fileList: []
+            },
+            datalist: {
+                url: '/sysmgr/noticeatt/downfile',
+                type: 2,
+                attList: []
+            },
+            appendixInfoStatus: false,
+            appendixId: '',
+            appendixName:'',
+            appendixInfoData: [{}],
+            appendixInfoTotal: 0,
+            appendixInfoListPageSize: 1,
+            appendixInfoDelTit: '',
+            appendixInfoDelStatus: false,
+            appendixInfoDelId: '',
+            appendixInfoAddStatus: false,
+            appendixInfoList: {},
+            appendixInfoFinishStatus:'',
+            advInfo: {},
+        }
+    },
+    methods: {
+        //搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? this.params.name = v[0] : '';
+            this.getList(this.params, this.pageSize);
+        },
+        //获取列表
+        getList(v, n) {
+            this.pageSize = n;
+            this.loading = true;
+            this.tableData = [];
+            let _this = this;
+            this.$http({
+                url: "/market/cKeyChannelCoopAppendix/queryPage",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: v,
+            }).then((res) => {
+                this.tableData = res.data.data;
+                this.total = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+        //获取列表
+        getAppendixInfoList(v, n) {
+            this.appendixInfoListPageSize = n;
+            this.loading = true;
+            this.appendixInfoData = [];
+            let _this = this;
+            this.$http({
+                url: "/market/cKeyChannelCoopAppendix/queryAppendixInfoPage",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: {
+                    appendixId: this.appendixId
+                },
+            }).then((res) => {
+                this.appendixInfoData = res.data.data;
+                this.appendixInfoTotal = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+        // 分页
+        currchange(v) {
+            this.pageSize = v;
+            this.getList(this.params, this.pageSize);
+        },
+        appendixInfoListChange(v) {
+            this.pageSize = v;
+            this.getAppendixInfoList(null, this.appendixInfoListPageSize)
+
+        },
+        //查看
+        appendixInfo(v, n) {
+            this.appendixId = n.id;
+            this.appendixName = n.name;
+            this.appendixInfoFinishStatus = n.finishStatus;
+            //获取列表数据
+            this.getAppendixInfoList(1, this.appendixInfoListPageSize)
+            this.appendixInfoStatus = true;
+
+        },
+        //删除
+        delLine(v) {
+            this.centerDialogVisible = true;
+            this.messTit = '是否确认办结?';
+            this.delid = v.id;
+        },
+        closeMessage(v) {
+            this.centerDialogVisible = false;
+            let _this = this;
+            if (v === 1) {
+                this.$http({
+                    url: "/market/cKeyChannelCoopAppendix/finishAppendix",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {
+                        id: this.delid
+                    },
+                }).then((res) => {
+                    if (res.data.result === 1) {
+                        _this.$message({
+                            message: res.data.desc,
+                            type: 'error'
+                        });
+                    } else {
+                        _this.$message({
+                            message: '办结成功',
+                            type: 'success'
+                        });
+                        _this.getList(this.params, this.pageSize);
+                    }
+                });
+            }
+        },
+        appendixInfoDel(v) {
+            this.appendixInfoDelStatus = true;
+            this.appendixInfoDelTit = '是否确认删除?';
+            this.appendixInfoDelId = v.id;
+        },
+        appendixInfoDelCloseMessage(v) {
+            this.appendixInfoDelStatus = false;
+            let _this = this;
+            if (v === 1) {
+                this.$http({
+                    url: "/market/cKeyChannelCoopAppendix/delAppendixInfo",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {
+                        id: this.appendixInfoDelId
+                    },
+                }).then((res) => {
+                    if (res.data.result === 1) {
+                        _this.$message({
+                            message: res.data.desc,
+                            type: 'error'
+                        });
+                    } else {
+                        _this.$message({
+                            message: '删除成功',
+                            type: 'success'
+                        });
+                        _this.getAppendixInfoList(null, this.pageSize);
+                    }
+                });
+            }
+        },
+        //查看
+        appendixInfoAdd(v, n) {
+            this.appendixInfoList = {
+                cityName: "",
+                uploadUserName: "",
+                agentName: "",
+                townName: "",
+                appendixId: n.id,
+                appendixName: n.name
+            };
+            this.disableStatus = false;
+            var adv = this.advInfo;
+            this.appendixInfoList.cityName = adv.cityName;
+            this.appendixInfoList.uploadUserName = adv.userName;
+            this.attList = [];
+            this.fileInfo.fileList = [];
+            this.appendixInfoAddStatus = true;
+        },
+        appendixInfoEdit(v, n) {
+            var _this = this;
+            //获取文件列表
+            this.$http({
+                url: '/market/cKeyChannelCoopAppendix/queryAppendixFilesList',
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    appendixInfoId: n.id,
+                },
+            }).then((res) => {
+                if (res.data.result === 1) {
+                    _this.$message({
+                        message: res.data.desc,
+                        type: 'error'
+                    });
+                } else {
+                    console.log(res.data);
+                    //显示文件列表
+                    this.datalist.attList = res.data;
+                    this.attList = [];
+                    this.fileInfo.fileList = [];
+                    res.data.forEach(item => {
+                        this.fileInfo.fileList.push({
+                            name: item.fileName,
+                            id: item.id,
+                            fileName: item.fileName,
+                            fileCode: item.fileCode,
+                            opName:item.opName,
+                            opNo: item.opNo,
+                            opTime: item.opTime
+                        });
+                        this.attList.push({
+                            name: item.fileName,
+                            id: item.id,
+                            fileName: item.fileName,
+                            fileCode: item.fileCode,
+                            opName:item.opName,
+                            opNo: item.opNo,
+                            opTime: item.opTime
+                        });
+                    })
+                    this.appendixInfoList = Object.assign({}, n); //拷贝
+                    this.appendixInfoAddStatus = true;
+                }
+            });
+
+        },
+        saveAppendixInfo(v) {
+            let _this = this;
+            _this.appendixInfoList.opNo = _this.userInfo.loginNo;
+            _this.appendixInfoList.opName = _this.userInfo.loginName;
+            _this.appendixInfoList.opTime = _this.$formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss');
+            if (v === 1) {
+                //判断是否上传了附件
+                if (_this.attList.length > 0) {
+                    this.submitAppendixInfo("/market/cKeyChannelCoopAppendix/addAppendixInfo");
+                } else {
+                    _this.$message({
+                        message: '请上传附件',
+                        type: 'error'
+                    });
+                }
+            }
+        },
+        submitAppendixInfo(u) {
+            let _this = this;
+            this.$refs.appendixInfoList.validate(valid => {
+                if (valid) {
+                    this.$http({
+                        url: u,
+                        method: "post",
+                        headers: {
+                            "Content-Type": "application/json",
+                        },
+                        data: {
+                            appendixInfo: _this.appendixInfoList,
+                            filesList: _this.attList
+                        },
+                    }).then((res) => {
+                        if (res.data.result === 1) {
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'error'
+                            });
+                        } else {
+                            _this.$message({
+                                message: '成功',
+                                type: 'success'
+                            });
+                            _this.fileInfo.fileList = [];
+                            _this.attList = [];
+                            _this.appendixInfoAddStatus = false;
+                            _this.getAppendixInfoList(1, this.appendixInfoListPageSize)
+                        }
+                    });
+                }
+            })
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList(this.params, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen
+            }
+        },
+        getUser() {
+            this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+            this.infolist = {
+                opNo: '',
+                opName: '',
+            };
+            this.infolist.opNo = this.userInfo.loginNo;
+            this.infolist.opName = this.userInfo.loginName;
+        },
+        closeAppendixInfoList() {
+            this.appendixInfoStatus = false;
+        },
+        //文件返回值
+        uploadBack(v) {
+            this.attList = v;
+        },
+        getAdvUserInfo() {
+            this.$http({
+                url: "/market/cKeyChannelCoopExcel/getUserInfo",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+            }).then((res) => {
+                if (res.data.result !== 1) {
+                    this.advInfo = res.data.body;
+                }
+            });
+        },
+        exportZip() {
+            let _this = this;
+            let param = new FormData();
+            param.append("id",_this.appendixId);
+            _this.$http({
+                url: '/market/cKeyChannelCoopAppendix/downloadAppendixZip',
+                method: "post",
+                responseType: 'blob',
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    id:_this.appendixId
+                },
+            }).then(res => {
+                if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                    let blob = new Blob([res.data], {
+                        type: "application/x-msdownload"
+                    });
+                    window.navigator.msSaveOrOpenBlob(
+                        blob,
+                        // this.wo.bizName + ".xlsx"
+                        this.appendixName + ".zip"
+                    );
+                } else {
+                    /* 火狐谷歌的文件下载方式 */
+                    var blob = new Blob([res.data]);
+                    var downloadElement = document.createElement("a");
+                    var href = window.URL.createObjectURL(blob);
+                    downloadElement.href = href;
+                    downloadElement.download = this.appendixName + ".zip";
+                    document.body.appendChild(downloadElement);
+                    downloadElement.click();
+                    document.body.removeChild(downloadElement);
+                    window.URL.revokeObjectURL(href);
+                }
+            });
+        }
+    },
+    mounted() {
+        this.getAdvUserInfo();
+        this.getList({}, 1);
+        this.getUser();
+    },
+    created() {
+
+    }
+}
+</script>
+<style scoped lang="scss">
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.tabbox {
+    margin-top: 16px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+.info-line {
+    width: 100%;
+    display: block;
+    padding-left: 20px;
+
+    div {
+        width: 50%;
+        display: inline-block;
+    }
+
+    span {
+        width: 80px;
+        display: inline-block;
+        text-align: left;
+
+        i {
+            color: red;
+            display: inline-block;
+            padding-right: 5px;
+        }
+    }
+
+    .el-select,
+    .el-input {
+        width: calc(100% - 100px);
+    }
+}
+
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+}
+</style>

+ 74 - 0
src/pages/main/keyChannelCoop/home.vue

@@ -0,0 +1,74 @@
+<template>
+    <div class="inner-container">
+        <el-col :span="3">
+            <el-tabs
+                tab-position="left"
+                v-model="activeName"
+                @tab-click="handleClick">
+                <el-tab-pane
+                    v-for="(item, index) in routerList"
+                    :key="index"
+                    :name="item.path"
+                    :label="item.label">
+                </el-tab-pane>
+            </el-tabs>
+        </el-col>
+        <el-col :span="21" style="background: #f4f4f4;">
+            <div style="height: 100%">
+                <router-view/>
+            </div>
+        </el-col>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            activeName: "",
+            showList: [],
+            routerList: [
+                {label: "在线表格", path: "/onlineExcel", name: "onlineExcel"},
+                {label: "附件统计", path: "/appendix", name: "appendix"},
+            ],
+        };
+    },
+    computed: {
+        menuList: function () {
+            let arr = [];
+            this.routerList.map((item) => {
+                this.showList.map((row) => {
+                    if (item.path == row) {
+                        arr.push(item);
+                    }
+                });
+            });
+            return arr;
+        },
+    },
+    methods: {
+        handleClick(val) {
+            if (this.$route.path != this.activeName) {
+                this.$router.push(this.activeName);
+            }
+        },
+    },
+    mounted() {
+        this.activeName = this.$route.path;
+    },
+    created() {
+        JSON.parse(sessionStorage.childrenMenus).map((item) => {
+            this.showList.push(item.jspUrl);
+        });
+    },
+    watch: {
+        $route(to, from) {
+            this.activeName = this.$route.path;
+        },
+    },
+};
+</script>
+<style>
+.el-tabs__content {
+    display: none;
+}
+</style>

+ 390 - 0
src/pages/main/keyChannelCoop/onlineExcel.vue

@@ -0,0 +1,390 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;width: 100%;">
+        <div class="container-box" style="padding: 0 20px 0 0;">
+            <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
+            <div style="overflow: hidden;">
+                <div class="search" style="float: left;">
+                    <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                </div>
+                <div style="margin-top: 20px;float: right;" class="bigbtns">
+                    <el-button style="margin-left: 20px;" class="btn-check" size="medium" type="primary" v-if="advInfo.isAdmin" @click="dialogCheck(1)">新建
+                    </el-button>
+                </div>
+            </div>
+            <div class="tabbox">
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                          tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                    <el-table-column prop="name" label="模板名称">
+                    </el-table-column>
+                    <el-table-column prop="opTime" label="创建时间">
+                    </el-table-column>
+                    <el-table-column label="操作" width="180px" align="center" fixed="right">
+                        <template slot-scope="scope">
+                            <el-button size="mini" type="primary" @click="jumpinfop('/onlineExcelInfo',1,'在线表格查看',scope.row)">查看</el-button>
+                            <el-button size="mini" v-if="scope.row.finishStatus == 0" type="primary" @click="jumpinfop('/onlineExcelInfo',2,'在线表格处理',scope.row)">处理</el-button>
+                            <el-button size="mini" v-if="scope.row.finishStatus == 0 && advInfo.isAdmin" type="danger" @click="delLine(scope.row)">办结</el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                               :total="total">
+                </el-pagination>
+            </div>
+            <el-dialog :title="'新增表格模板'" :visible.sync="dialogStatus" width="50%" :destroy-on-close="true"
+                       :modal-append-to-body="false" :close-on-click-modal="false">
+                <div v-loading="loading">
+                    <el-form :model="infolist" ref="infolist" :rules="rules">
+                        <div class="online">
+                            <el-form-item prop="name">
+                                <span>模板名称</span>
+                                <el-input v-model="infolist.name" placeholder="模板名称" :disabled="disableStatus"></el-input>
+                            </el-form-item>
+                        </div>
+                    </el-form>
+                    <div slot="footer" class="dialog-footer myfooter">
+                        <el-button type="primary" @click="dialogCli(2)" v-if="titname !== '查看'">确 定</el-button>
+                        <el-button @click="dialogCli(1)" v-if="titname === '查看'">确 定</el-button>
+                        <el-button @click="dialogCli(1)">取 消</el-button>
+                    </div>
+                </div>
+            </el-dialog>
+        </div>
+        <myMessage :messTit='messTit' @closeMessage="closeMessage" :centerDialogVisible="centerDialogVisible" v-if="centerDialogVisible"></myMessage>
+    </fullscreen>
+</template>
+<script>
+import mySearch from "../../../components/search.vue";
+import myUpload from "../../../components/upload";
+import toolList from "../../../components/toolList";
+import myMessage from "../../../components/myMessage.vue"
+
+export default {
+    components: {
+        myUpload,
+        mySearch,
+        toolList,
+        myMessage
+    },
+    data() {
+        const name = (rule, value, callback) => {
+            if (!this.infolist.name) {
+                callback(new Error('不能为空'))
+            } else {
+                callback()
+            }
+        }
+        return {
+            rules: {
+                name: [{
+                    required: true,
+                    trigger: 'change',
+                    validator: name
+                }],
+            },
+            tooltit: '重点攻坚渠道合作率-在线表格',
+            searchList: [{
+                type: 'input',
+                tit: '名称',
+                value: '',
+                width: '100%',
+            },],
+            fullscreen: false,
+            total: 0,
+            pageSize: 1,
+            tableData: [{}],
+            dialogStatus: false,
+            disableStatus: false,
+            titname: '终端',
+            infolist: {},
+            typeOptions: [{
+                dataCode: 1,
+                dataName: 111,
+            }],
+            userInfo: {},
+            params: {},
+            termOption: [],
+            centerDialogVisible: false,
+            messTit: '',
+            delid: '',
+            loading: false,
+            advInfo: {},
+        }
+    },
+    methods: {
+        //搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? this.params.name = v[0] : '';
+            this.getList(this.params, this.pageSize);
+        },
+        //获取列表
+        getList(v, n) {
+            this.pageSize = n;
+            this.loading = true;
+            this.tableData = [];
+            let _this = this;
+            this.$http({
+                url: "/market/cKeyChannelCoopExcel/queryPage",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: v,
+            }).then((res) => {
+                this.tableData = res.data.data;
+                this.total = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+        // 分页
+        currchange(v) {
+            this.pageSize = v;
+            this.getList(this.params, this.pageSize);
+        },
+        //查看
+        dialogCheck(v, n) {
+            this.dialogStatus = true;
+            this.disableStatus = false;
+            if (v === 1) {
+                this.titname = '新建';
+                this.getUser();
+                return
+            } else if (v === 2) {
+                this.titname = '查看';
+                this.disableStatus = true;
+            } else if (v === 3) {
+                this.titname = '修改';
+                this.loading = true;
+            }
+            this.infolist = Object.assign({}, n); //拷贝
+            this.infolist.opNo = this.userInfo.loginNo;
+            this.infolist.opName = this.userInfo.loginName;
+            this.loading = false;
+        },
+        //修改  添加
+        dialogCli(v) {
+            if (v === 1) {
+                this.infolist = {};
+                this.dialogStatus = false;
+                return
+            }
+            this.infolist.opTime = this.$formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss');
+            this.infolist.finishStatus = 0;
+            if (this.titname === '新建') {
+                this.submitInfo("/market/cKeyChannelCoopExcel/add", v);
+            } else if (this.titname === '修改') {
+                this.submitInfo("/market/keyChannelCoopExcel/update", v);
+            }
+        },
+        submitInfo(u, v) {
+            let _this = this;
+            this.$refs.infolist.validate(valid => {
+                if (valid) {
+                    this.$http({
+                        url: u,
+                        method: "post",
+                        headers: {
+                            "Content-Type": "application/json",
+                        },
+                        data: this.infolist,
+                    }).then((res) => {
+                        if (res.data.result === 1) {
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'error'
+                            });
+                        } else {
+                            _this.$message({
+                                message: '成功',
+                                type: 'success'
+                            });
+                            var id = res.data.desc;
+                            var row = {
+                                id:id
+                            };
+                            _this.infolist = {};
+                            console.log(_this.infolist);
+                            _this.dialogStatus = false;
+                            _this.getList({}, _this.pageSize);
+                            //跳转到编辑
+                            _this.jumpinfop('/onlineExcelInfo',2,'在线表格处理',row)
+                        }
+
+                    });
+                }
+            })
+        },
+        //删除
+        delLine(v) {
+            this.centerDialogVisible = true;
+            this.messTit = '是否确认办结?';
+            this.delid = v.id;
+        },
+        closeMessage(v) {
+            this.centerDialogVisible = false;
+            let _this = this;
+            if (v === 1) {
+                this.$http({
+                    url: "/market/cKeyChannelCoopExcel/finishExcel",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {
+                        id: this.delid
+                    },
+                }).then((res) => {
+                    if (res.data.result === 1) {
+                        _this.$message({
+                            message: res.data.desc,
+                            type: 'error'
+                        });
+                    } else {
+                        _this.$message({
+                            message: '办结成功',
+                            type: 'success'
+                        });
+                        _this.getList(this.params, this.pageSize);
+                    }
+                });
+            }
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList(this.params, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen
+            }
+        },
+        getUser() {
+            this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+            this.infolist = {
+                opNo: '',
+                opName: '',
+            };
+            this.infolist.opNo = this.userInfo.loginNo;
+            this.infolist.opName = this.userInfo.loginName;
+        },
+        jumpinfop(p,v,n,row){
+            this.$router.push({
+                path: p,
+                query:{
+                    type:v,
+                    id:row.id
+                }
+            });
+            this.setabList(n, p + '?type='+ v + '&id=' + row.id);
+        },
+        setabList(n, p) {
+            let params = {
+                children: "",
+                name: n,
+                rountPath: p,
+                target: "_self",
+            };
+            for (let i = 0; i < this.$store.state.tabList.length; i++) {
+                if (this.$store.state.tabList[i].name === params.name) {
+                    this.$store.state.tabList[i] = params;
+                }
+            }
+            let set = new Set([...this.$store.state.tabList, params]);
+            set.add(params);
+            this.$store.commit("setDefaultActive", params.rountPath);
+            this.$store.commit("setTabList", Array.from(set));
+        },
+        getAdvUserInfo() {
+            console.log("getAdvUserInfo");
+            this.$http({
+                url: "/market/cKeyChannelCoopExcel/getUserInfo",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+            }).then((res) => {
+                if (res.data.result !== 1) {
+                    console.log(res);
+                    this.advInfo = res.data.body;
+                    console.log(this.advInfo);
+                }
+            });
+        }
+    },
+    mounted() {
+        this.getAdvUserInfo();
+        this.getList({}, 1);
+        this.getUser();
+    },
+    created() {
+
+    }
+}
+</script>
+<style scoped lang="scss">
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.tabbox {
+    margin-top: 16px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+.info-line {
+    width: 100%;
+    display: block;
+    padding-left: 20px;
+
+    div {
+        width: 50%;
+        display: inline-block;
+    }
+
+    span {
+        width: 80px;
+        display: inline-block;
+        text-align: left;
+
+        i {
+            color: red;
+            display: inline-block;
+            padding-right: 5px;
+        }
+    }
+
+    .el-select,
+    .el-input {
+        width: calc(100% - 100px);
+    }
+}
+
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+}
+</style>

+ 16 - 0
src/pages/main/keyChannelCoop/onlineExcelInfo.vue

@@ -0,0 +1,16 @@
+<template>
+    <div class="container" id="container">
+        <iframe height="100%" width="100%" src="/static/views/kccExcel.html" frameborder="0"></iframe>
+    </div>
+</template>
+<style scoped>
+.containerr {
+    background: #fff;
+    height: calc(100vh);
+    width: calc(100vw);
+    position: fixed;
+    left: 0;
+    top: 0;
+    overflow: hidden;
+}
+</style>

文件差异内容过多而无法显示
+ 1292 - 0
src/pages/main/mbh/CMkMagicBoxTop.vue


+ 4 - 2
src/pages/main/organizaStructure/index.vue

@@ -15,9 +15,11 @@
             <div class="box-level1" @click="infochose(1)">{{title2.roleName}} ({{title2.cnt}}) 人</div>
             <div class="top-box">
                 <div class="box-level2" v-for="item in regionList">
-                    <span @click="jumpto(2,item,2,1)">{{item.roleName}} ({{item.cnt}}) 人</span>
+                    <span v-if="item.roleName == '稽核中心'" style="background: #108ee9;height: 41px;" @click="jumpto(2,item,2,1)">{{item.roleName}} ({{item.cnt}}) 人</span>
+                    <span v-else @click="jumpto(2,item,2,1)">{{item.roleName}} ({{item.cnt}}) 人</span>
                     <div class="box-level3" v-for="items in item.thirdList">
-                        <span @click="jumpto(2,items,2,1)">{{items.roleName}} ({{items.cnt}}) 人</span>
+                        <span v-if="items.roleName == '稽核管理'" style="background: #32ccfe;height: 41px;" @click="jumpto(2,items,2,1)">{{items.roleName}} ({{items.cnt}}) 人</span>
+                        <span v-else @click="jumpto(2,items,2,1)">{{items.roleName}} ({{items.cnt}}) 人</span>
                     </div>
                 </div>
             </div>

+ 3 - 3
src/pages/main/performance/components/deptTreeOnly.vue

@@ -118,7 +118,7 @@ export default {
         }
       }
     },
-    handleCheckChange() {
+    handleCheckChange(node) {
       console.log(this.only, "only");
       const nodeList = this.$refs.tree.store.getCheckedNodes();
       if (this.only) {
@@ -128,10 +128,10 @@ export default {
           this.$refs.tree.setCheckedKeys([]);
           this.$emit("treeCheck", nodeList);
         } else {
-          let obj = { ...nodeList[0] };
+          let obj = nodeList.filter(item => item.o !== node.data.o)
           this.$refs.tree.setCheckedKeys([]);
           this.$nextTick(() => {
-            this.$refs.tree.setChecked(obj, true);
+            this.$refs.tree.setChecked(obj[0], true);
           });
           this.$message.error("这里只能选择一个审批人");
         }

+ 13 - 9
src/pages/main/performance/components/form.vue

@@ -82,16 +82,16 @@
 
     <div v-if="form.length < 5" class="margin-bottom-10">
       <div class="template-input width-100">
-        <div class="template-input width-80">
+        <div class="template-input " style="width:94%">
           <div
-            class="margin-right-10"
+            class="margin-right-100"
             v-for="({ props, label, type, dictionary }, index) in form.slice(
               0,
               2
             )"
             :key="index"
           >
-            <el-form-item :label="label">
+            <el-form-item :label="label" style="padding-right:140px">
               <template v-if="type === 'select'">
                 <el-select
                   v-model="object[props]"
@@ -137,7 +137,7 @@
             </el-form-item>
           </div>
         </div>
-        <div class="width-20 flex-justify-align-end">
+        <div class="width-20" style="width:70px">
           <el-form-item>
             <el-button type="primary" @click="handleSearch">搜索</el-button>
           </el-form-item>
@@ -145,14 +145,14 @@
       </div>
       <div class="template-input width-100 margin-top-10 margin-bottom-10">
         <div
-          class="margin-right-10"
+          class="margin-right-100"
           v-for="({ props, label, type, dictionary }, index) in form.slice(2)"
           :key="index"
           :span="6"
         >
-          <el-form-item :label="label">
+          <el-form-item :label="label" style="padding-right:140px">
             <template v-if="type === 'select'">
-              <el-select
+              <el-select 
                 v-model="object[props]"
                 :placeholder="label"
                 filterable
@@ -174,7 +174,7 @@
               >
               </el-date-picker>
             </template>
-            <template v-else-if="type === 'dateRange'">
+            <template v-else-if="type === 'dateRange'" >
               <el-date-picker
                 v-model="object[props]"
                 type="datetimerange"
@@ -457,6 +457,7 @@ export default {
 };
 </script>
 <style lang="scss" scope>
+
 .width-100 {
   width: 100%;
 }
@@ -464,7 +465,10 @@ export default {
   width: 80%;
 }
 .width-20 {
-  width: 20%;
+  // float: right;
+  // position: relative;
+  // left: 180px;
+  // margin-left: 180px;
 }
 .border {
   border: 1px solid red;

+ 10 - 10
src/pages/main/performance/components/sheet.vue

@@ -2,7 +2,7 @@
  * @Author       : yuanrunwei
  * @Date         : 2021-12-04 14:23:58
  * @LastEditors: daiqisheng
- * @LastEditTime: 2022-04-25 19:11:41
+ * @LastEditTime: 2022-05-10 11:24:05
  * @FilePath     : \spfm-market-front\src\pages\main\performance\components\sheet.vue
 -->
 <template>
@@ -222,11 +222,11 @@
       </el-form>
       <template v-slot:footer>
         <div>
-          <el-button @click.prevent="handleApprove('1')">结束</el-button>
-          <el-button @click.prevent="handleApprove('4')" type="primary"
+          <el-button @click.prevent="handleApprove('1')" type="primary">结束</el-button>
+          <el-button @click.prevent="handleApprove('4')"
             >转副总审批</el-button
           >
-          <el-button @click.prevent="handleApprove('3')" type="primary"
+          <el-button @click.prevent="handleApprove('3')"
             >转总经理审批</el-button
           >
         </div>
@@ -448,10 +448,8 @@ export default {
             return time.getTime() > value.getTime();
           },
         };
-        if (
-          this.superviseForm.write &&
-          value.getTime() < this.superviseForm.write.getTime()
-        ) {
+        let write = new Date(this.superviseForm.write).getTime();
+        if (this.superviseForm.write && value.getTime() < write) {
           this.superviseForm.endTime = "";
         }
       } else {
@@ -532,6 +530,7 @@ export default {
           endTime: distributeEndTime, // 截止时间
         };
       }
+      console.log(this.superviseForm, "this.superviseForm");
       this.templateType = templateType;
       this.template_id = templateId;
       this.issued_id = issuedId;
@@ -626,7 +625,8 @@ export default {
             3;
         if (filled) {
           let time = new Date().getTime();
-          if (time > this.superviseForm.endTime.getTime()) {
+          let endTime = new Date(this.superviseForm.endTime).getTime();
+          if (time > endTime) {
             this.$message.error("截止时间不能小于当前时间");
             return;
           }
@@ -713,7 +713,7 @@ export default {
           ]) {
             if (!that.handleAllow({ row, column })) {
               that.$message.error("您没有编辑权限");
-              return false
+              return false;
             }
           },
           updated: function ({ range }) {

+ 84 - 24
src/pages/main/performance/department.vue

@@ -83,9 +83,6 @@
           status="10"
           @save="handleSave"
         />
-        <!-- <analysis
-          :edit="edit_form.department_status === '待处理' && edit_visible"
-        /> -->
       </template>
       <template v-slot:footer><div></div></template>
     </simple-dialog>
@@ -129,19 +126,19 @@
       <template v-slot:footer
         ><div>
           <div v-if="type === '1'">
-            <el-button @click="handleTurn('finish')">结束</el-button>
-            <el-button @click="handleTurn('transfer')" type="primary"
+            <el-button @click="handleTurn('finish')" type="primary">结束</el-button>
+            <el-button @click="handleTurn('transfer')" 
               >转副总审批</el-button
             >
-            <el-button @click="handleTurn('transfermanger')" type="primary"
+            <el-button @click="handleTurn('transfermanger')"
               >转总经理审批</el-button
             >
           </div>
           <div v-else-if="type === '2'">
-            <el-button @click="handleTurn('finish')">结束</el-button>
-            <el-button @click="handleTurn('return')">退回</el-button>
-            <el-button @click="handleTurn('back')">打回</el-button>
-            <el-button @click="handleTurn('transfer')" type="primary"
+            <el-button @click="handleTurn('finish')" type="primary">结束</el-button>
+            <el-button @click="handleTurn('return')" type="primary">退回</el-button>
+            <el-button @click="handleTurn('back')" type="primary">打回</el-button>
+            <el-button @click="handleTurn('transfer')" 
               >转总经理审批</el-button
             >
           </div>
@@ -211,7 +208,7 @@
                 ></el-option>
               </el-select>
             </div>
-            <div v-if="permission_type === 2">
+            <!-- <div v-if="permission_type === 2">
               <span class="form-content">可编辑列:</span>
               <el-select
                 class="margin-bottom-20 margin-right-10"
@@ -227,7 +224,7 @@
                   :value="item"
                 ></el-option>
               </el-select>
-            </div>
+            </div> -->
           </div>
         </el-form-item>
         <div>
@@ -299,6 +296,7 @@ export default {
   data() {
     return {
       page: 1,
+      idx: "",
       rows: 10,
       total: 0,
       reviewType: "",
@@ -609,6 +607,7 @@ export default {
       ...this.table_search,
       page: this.page,
       pageSize: this.rows,
+      id : this.getUrlKey("id")//获取地址栏参数
     });
     // 职位
     this.duty = JSON.parse(sessionStorage.userInfo).duty;
@@ -630,6 +629,15 @@ export default {
     }
   },
   methods: {
+    getUrlKey(name) {
+      return (
+        decodeURIComponent(
+          (new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(
+            location.href
+          ) || [, ""])[1].replace(/\+/g, "%20")
+        ) || null
+      );
+    },
     //   初始化
     handleInit(data) {
       this.table_loading = true;
@@ -641,6 +649,20 @@ export default {
         },
         data: data,
       }).then(({ data: { count, data } }) => {
+        // if (this.idx) {
+        //   var data1;
+        //   for (var i = 0; i < data.length; i++) {
+        //     if (data[i].id != this.idx) {
+        //     } else {
+        //       data1 = data[i];
+        //       data.length = 0;
+        //       data.push(data1);
+        //       this.table_loading = false;
+        //       this.total = count;
+        //       this.table_list = data || [];
+        //     }
+        //   }
+        // }
         this.table_loading = false;
         this.total = count;
         this.table_list = data || [];
@@ -710,7 +732,6 @@ export default {
     },
     // 查看按钮
     handleCheck(row) {
-      console.log(row, "row");
       this.edit_form = row;
       this.edit_visible = false;
       this.id = row.id;
@@ -787,11 +808,19 @@ export default {
     handleCharge(type) {
       switch (type) {
         case "add":
-          this.transfer_form.charge.push({
-            person: "",
-            allowEditingColumns: [],
-            rowNum: [],
-          });
+          if (
+            this.transfer_form.charge[this.transfer_form.charge.length - 1]
+              .rowNum.length
+          ) {
+            this.transfer_form.charge.push({
+              person: "",
+              allowEditingColumns: [],
+              rowNum: [],
+            });
+          } else {
+            this.$message.error("请先选择需要转派的列");
+          }
+
           break;
         case "delete":
           this.transfer_form.charge.pop();
@@ -827,13 +856,24 @@ export default {
       } else if (permission_type === 2) {
         // 特殊权限
         console.log(permission_type, "permission_type");
-        charge.forEach((el) => {
-          if (el.person && el.allowEditingColumns.length && el.rowNum.length) {
+        if (this.transfer_form.charge.length === 1) {
+          charge.forEach((el) => {
+            if (el.person) {
+              flag = flag * 1;
+            } else {
+              flag = flag * 0;
+            }
+          });
+        } else if (this.transfer_form.charge.length > 1) {
+          if (
+            this.transfer_form.charge[this.transfer_form.charge.length - 1]
+              .rowNum.length
+          ) {
             flag = flag * 1;
           } else {
             flag = flag * 0;
           }
-        });
+        }
       }
       return flag;
     },
@@ -856,8 +896,14 @@ export default {
             } else if (this.permission_type === 2) {
               params.transferAuthority = charge.map((el) =>
                 JSON.stringify({
-                  allowEditingColumns: el.allowEditingColumns.join(","),
-                  rowNum: el.rowNum.join(","),
+                  allowEditingColumns: this.transfer_cols_orgin.join(","),
+                  rowNum: el.rowNum.length
+                    ? el.rowNum
+                        .sort(function (a, b) {
+                          return a - b;
+                        })
+                        .join(",")
+                    : this.transfer_rows_orgin.join(","),
                   principalId: el.person.split(",")[0],
                   principalName: el.person.split(",")[1],
                 })
@@ -882,12 +928,26 @@ export default {
                   page: this.page,
                   pageSize: this.rows,
                 });
+                this.transfer_form.charge = [
+                  {
+                    person: "",
+                    allowEditingColumns: [],
+                    rowNum: [],
+                  },
+                ];
                 this.handleCancel("visible");
               }
             });
             console.log(params, "this.transfer_form");
           } else {
-            this.$message.error("请填写必要的信息");
+            if (
+              !this.transfer_form.charge[this.transfer_form.charge.length - 1]
+                .rowNum.length
+            ) {
+              this.$message.error("请填写完整可编辑行");
+            } else {
+              this.$message.error("请填写必要的信息");
+            }
           }
         }
       });

+ 1 - 0
src/pages/main/performance/mould.vue

@@ -6,6 +6,7 @@
         :handle="table_handle"
         @search="handleSearch"
         @add="handleVisible('add')"
+        class="department-form"
       ></simple-form>
       <simple-table
         :list="table_list"

+ 6 - 5
src/pages/main/performance/reply.vue

@@ -6,6 +6,7 @@
         :handle="table_handle"
         @search="handleSearch"
         @download="handleDownload"
+        class="department-form"
       ></simple-form>
       <simple-table
         :list="table_list"
@@ -41,17 +42,17 @@ export default {
       table_search: {},
       table_form: [
         {
+          label: "模板类型",
+          props: "templateType",
+          type: "input",
+        },
+        {
           label: "统计时间",
           props: "Time",
           type: "dateRange",
           default: [new Date(), new Date().setDate(new Date().getDate() + 1)],
         },
         {
-          label: "模板类型",
-          props: "templateType",
-          type: "input",
-        },
-        {
           label: "模板名称",
           props: "templateName",
           type: "input",

+ 73 - 0
src/pages/main/stockOperate/stockHandle.vue

@@ -0,0 +1,73 @@
+<template>
+    <div class="container" id="container">
+        <iframe
+            height="100%"
+            width="100%"
+            src="/marketfront/static/views/stockHandle.html"
+            frameborder="0"
+			:strategyid="strategyId"
+			:usrname="usrName"
+			:sts="sts"
+            :countyFlag="countyFlag"
+            :fillFlag = "fillFlag"
+            :regionName = "regionName"
+            :woName = "woName"
+			id="iframeBox"
+        ></iframe>
+    </div>
+    <!-- <div class="container" id="container">
+        <iframe
+            height="100%"
+            width="100%"
+            src="/static/views/stockHandle.html"
+            frameborder="0"
+			:strategyid="strategyId"
+			:usrname="usrName"
+			:sts="sts"
+            :countyFlag="countyFlag"
+            :fillFlag = "fillFlag"
+            :regionName = "regionName"
+            :woName = "woName"
+			id="iframeBox"
+        ></iframe>
+    </div> -->
+</template>
+<script>
+export default {
+	data() {
+		return {
+			strategyId: '',
+			usrName:'',
+			sts:'',
+			query: {},
+            countyFlag: '',
+            fillFlag:'',
+            regionName: '',
+            woName: ''
+		}
+	},
+    mounted() {
+        if (JSON.stringify(this.$route.query) != "{}") {
+			this.strategyId = this.$route.query.strategyId;
+			this.usrName = this.$route.query.usrName;
+			this.sts = this.$route.query.sts;
+            this.countyFlag = this.$route.query.countyFlag;
+            this.fillFlag = this.$route.query.fillFlag;
+            this.regionName = this.$route.query.regionName;
+            this.woName = this.$route.query.woName;
+			// this.query = this.$route.query
+        }
+    }
+};
+</script>
+<style scoped>
+.containerr {
+    background: #fff;
+    height: calc(100vh);
+    width: calc(100vw);
+    position: fixed;
+    left: 0;
+    top: 0;
+    overflow: hidden;
+}
+</style>

+ 930 - 0
src/pages/main/stockOperate/stockOperate.vue

@@ -0,0 +1,930 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container">
+        <div class="container-box">
+            <toolList @iconCli="iconCli" :tooltit="tooltit"></toolList>
+            <div class="search">
+                <mySearch
+                    :searchList="searchList"
+                    @searchInfo="searchInfo"
+                ></mySearch>
+                <div>
+                    <el-button
+                        class="btn-check"
+                        size="medium"
+                        type="primary"
+                        @click="jumpadd"
+                        v-if="isFuncBtnShow"
+                    >新建
+                    </el-button>
+                    <!-- <el-button class="btn-check" size="medium" type="primary"
+                               @click="getTemple"
+                    >下载模板
+                    </el-button> -->
+                </div>
+            </div>
+
+            <div class="tabbox">
+                <el-table
+                    height="calc(100% - 40px)"
+                    class="com-table"
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    size="small"
+                    border
+                    style="width: 100%"
+                    v-loading="loading"
+                >
+                    <el-table-column prop="woName" label="模板名称">
+                    </el-table-column>
+                    <el-table-column prop="opTime" label="创建时间">
+                    </el-table-column>
+                    <el-table-column prop="sts" label="状态">
+                        <template slot-scope="scope">
+                            {{ stsArr[scope.row.sts] }}
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="reCode" label="分发范围">
+                    </el-table-column>
+                    <!-- <el-table-column prop="opName" label="分发范围">
+                        <template slot-scope="scope">
+                            <span
+                                :style="{color:'#606266'}"
+                                style="cursor:pointer"
+                                v-for="(item, index) in scope.row.groupNameList"
+                                :key="index"
+                            >
+                              {{
+                                    item + ","
+                                }}
+                            </span>
+                        </template>
+                    </el-table-column> -->
+                    <el-table-column label="操作" width="300px" align="center">
+                        <template slot-scope="scope">
+                            <!-- <el-button
+                                size="mini"
+                                type="primary"
+                                @click="jump(2, scope.row)"
+                                >查看</el-button
+                            > -->
+                            <el-button
+                                size="mini"
+                                type="primary"
+                                @click="jump(1, scope.row)"
+                                >{{
+                                    scope.row.fillFlag == 1 ? "处理" : "查看"
+                                }}</el-button
+                            >
+                            <el-button
+                                size="mini"
+                                type="primary"
+                                @click="jump(2, scope.row)"
+                                v-if="scope.row.fillFlag == 0"
+                                >办结</el-button
+                            >
+                            <!-- <el-button size="mini" type="primary" @click="jump(3, scope.row)" v-if="(loginNoStr == scope.row.nextOpNo && ((scope.row.provinceCity == 1 && scope.row.nextStep ==7) || (scope.row.provinceCity == 1 && scope.row.nextStep ==11) || (scope.row.provinceCity == 2 && scope.row.nextStep == 9) || (scope.row.provinceCity == 3 && scope.row.nextStep == 10))) && (scope.row.sts != 3)">子任务列表</el-button>
+                            <el-button size="mini" type="danger" @click="delLine(scope.row)" v-if="(loginNoStr == scope.row.opNo && ((scope.row.provinceCity == 1 && scope.row.nextStep <= 7) || (scope.row.provinceCity == 2 && scope.row.nextStep <= 10) || (scope.row.provinceCity == 3 && scope.row.nextStep <= 11)) && (scope.row.sts != 3))">删除</el-button>
+                            <el-button size="mini" type="primary" @click="jump(4, scope.row)" v-if="((scope.row.provinceCity == 1 && scope.row.nextStep == 12) || (scope.row.provinceCity == 2 && scope.row.nextStep == 10) || (scope.row.provinceCity == 3 && scope.row.nextStep == 11)) && (scope.row.countrySts == 0 || scope.row.countrySts == 2)">验收</el-button> -->
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-pagination
+                    class="pageBox"
+                    @current-change="currchange"
+                    layout="prev, pager, next"
+                    background
+                    :total="total"
+                >
+                </el-pagination>
+            </div>
+        </div>
+
+        <!-- 添加 -->
+        <el-dialog
+            title="添加"
+            :visible.sync="dialogStatus"
+            width="50%"
+            :destroy-on-close="true"
+            :modal-append-to-body="false"
+            :close-on-click-modal="false"
+            :fullscreen="true"
+        >
+            <el-form
+                :model="infolist"
+                ref="infolist"
+                :rules="rules"
+                style="height: calc(100vh - 180px);"
+            >
+                <el-form-item prop="woName" class="info-line online">
+                    <span>模板名称</span>
+                    <el-input
+                        v-model="infolist.woName"
+                        placeholder="模板名称"
+                    ></el-input>
+                </el-form-item>
+                <!-- <el-form-item prop="opTime" class="info-line online" v-if="regionFlag != '1'">
+                    <span>创建时间</span>
+                    <el-input
+                        v-model="infolist.opTime"
+                        placeholder="创建时间"
+                    ></el-input>
+                </el-form-item> -->
+                <!-- <el-form-item prop="modelName" class="info-line online"  v-if="regionFlag == '1'"> -->
+                <!-- 20220523功能取消 -->
+                <!-- <el-form-item prop="modelName" class="info-line online"  v-if="regionFlag == '1'">
+                    <span>模板选择</span>
+                    <el-select
+                        clearable
+                        v-model="infolist.modelName"
+                        placeholder="模板选择"
+                    >
+                        <el-option
+                            v-for="item in modelList"
+                            :key="item.woNo"
+                            :label="item.woName"
+                            :value="item.woNo"
+                        >
+                        </el-option>
+                    </el-select>
+                </el-form-item> -->
+
+                <!-- <el-form-item prop="time" class="info-line online">
+                    <span>统计周期</span>
+                    <el-date-picker
+                        v-model="infolist.time"
+                        type="daterange"
+                    ></el-date-picker>
+                </el-form-item> -->
+
+                <!-- <el-form-item class="info-line online">
+                    <span>填报人</span>
+                    <deptTree
+                        v-if="!disableStatus"
+                        :closeList="closeList"
+                        class="tree"
+                        @treeCheck="treeCheck"
+                    >
+                    </deptTree>
+                    <div
+                        :class="
+                            !disableStatus ? 'tree treeUser' : 'tree treeUserb'
+                        "
+                    >
+                        <p v-for="(item, index) in treeList" :key="index">
+                            {{ item.receiveName }}
+                            <i
+                                @click="deletess(item, index)"
+                                class="el-icon-error"
+                            ></i>
+                        </p>
+                    </div>
+                </el-form-item> -->
+                <!-- 20220523修改-取消功能 -->
+                <!-- <el-form-item class="info-line online" v-loading="loadinged">
+                    <span>地市选择</span>
+                    <div
+                        class="tree treeUser"
+                        style="width: 30%;margin-right: 1%;"
+                    >
+                        <p
+                            v-for="(item, index) in deptList"
+                            :key="index"
+                            @click="choseDepta(item)"
+                        >
+                            {{ item.ou }}
+                        </p>
+                    </div>
+                    <div
+                        :class="
+                            !disableStatus ? 'tree treeUser' : 'tree treeUserb'
+                        "
+                        style="width: 30%;"
+                    >
+                        <p v-for="(item, index) in treeListp" :key="index">
+                            <span>{{ item.ou }}</span>
+                            <i
+                                @click="deletes(item, index)"
+                                class="el-icon-error"
+                            ></i>
+                        </p>
+                    </div>
+                </el-form-item> -->
+            </el-form>
+            <div style="text-align: right;margin-top: 20px">
+                <el-button @click="dialogCli(1)" type="primary"
+                    >确 定</el-button
+                >
+                <el-button @click="dialogCli(2)">取 消</el-button>
+            </div>
+        </el-dialog>
+
+        <myMessage
+            :messTit="messTit"
+            @closeMessage="closeMessage"
+            :centerDialogVisible="centerDialogVisible"
+            v-if="centerDialogVisible"
+        ></myMessage>
+    </fullscreen>
+</template>
+<script>
+import mySearch from "../../../components/search.vue";
+import myMessage from "../../../components/myMessage.vue";
+import toolList from "../../../components/toolList";
+import myUpload from "../../../components/upload";
+import deptTree from "../../../components/deptTreeUser.vue";
+import deptTreep from "../../../components/deptTreeP.vue";
+
+export default {
+    components: {
+        mySearch,
+        myMessage,
+        toolList,
+        myUpload,
+        deptTree,
+        deptTreep
+    },
+    data() {
+        const woName = (rule, value, callback) => {
+            if (!this.infolist.woName) {
+                callback(new Error("不能为空"));
+            } else {
+                callback();
+            }
+        };
+        // const time = (rule, value, callback) => {
+        //     if (!this.infolist.time) {
+        //         callback(new Error("不能为空"));
+        //     } else {
+        //         callback();
+        //     }
+        // };
+        return {
+            rules: {
+                woName: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        validator: woName
+                    }
+                ]
+
+            },
+            searchList: [
+
+                {
+                    type: "sel",
+                    tit: "状态",
+                    value: "",
+                    width: "100%",
+                    options: [
+                        {
+                            dataCode: "0",
+                            dataName: "待上传模板"
+                        },
+                        {
+                            dataCode: "1",
+                            dataName: "填写中"
+                        },
+                        {
+                            dataCode: "2",
+                            dataName: "已锁定"
+                        },
+                        {
+                            dataCode: "3",
+                            dataName: "已办结"
+                        }
+                    ]
+                }
+
+            ],
+            tooltit: "存量运营策略征集",
+            fullscreen: false,
+            total: 0,
+            pageSize: 1,
+            tableData: [],
+            dialogStatus: false,
+            disableStatus: false,
+            titname: "",
+            infolist: {},
+            // treeList: [],
+            treeListp: [],
+            treeListponly: [],
+            closeList: [],
+            defaultList: [],
+            depttype: 0,
+            fadept: {},
+            deptList: [],
+            userInfo: {},
+            params: {},
+            centerDialogVisible: false,
+            messTit: "",
+            delid: "",
+            loading: false,
+            loadinged: false,
+
+            stsArr: ["待上传模板", "填写中", "已锁定","已办结"],
+            provinceCityArr: ["省", "地市", "区县"],
+            loginNoStr: "",
+            cityWoId: "",
+            menus: JSON.parse(window.sessionStorage.childrenMenus),
+            isFuncBtnShow: false,
+            countyFlag: "0",
+            regionList: [],
+            currentData: {},
+            regionFlag: "", //地区 0 省 1 地市 2 区
+            modelList: [], //模板列表
+            modelName: "", //模板名称
+        };
+    },
+
+    methods: {
+        jumpadd() {
+            this.dialogStatus = true;
+            this.getModelList();
+            this.advadd();
+        },
+        jump(v, n) {
+            if (v === 1) {
+                this.$router.push({
+
+                    path: "/stockHandle",
+                    query: {
+                        strategyId: n.woNo,
+                        usrName: n.fillName,
+                        sts: n.sts,
+                        countyFlag: this.countyFlag,
+                        fillFlag: n.fillFlag,
+                        regionName:'',
+                        woName: n.woName
+                    }
+                });
+            } else if (v === 2) {
+                this.centerDialogVisible = true;
+                this.messTit = "是否确定办结?";
+                this.currentData = n;
+            }
+        },
+        jumpjd(v, item) {
+            this.$router.push({
+                path: "/stockOperateCityList",
+                query: {
+                    regionCode: item,
+                    parentWoNo: v.woNo,
+                    woName: v.woName
+                }
+            });
+            // this.setabList("进度跟踪", "/stockOperateCityList?groupName=" + v.receiverGroupName);
+        },
+        dialogCli(v) {
+            let _this = this;
+            if (v === 1) {
+                let param = {};
+                param.mkStrategyBic = { fillName: this.userInfo.loginName };
+                param.mkStrategyBic.woName = this.infolist.woName;
+
+                if(this.regionFlag == '0'){
+                    param.mkStrategyBic.groupName = this.userInfo.areaName
+                }else if(this.regionFlag == '1'){
+                    param.mkStrategyBic.groupName = this.userInfo.cityName
+                }
+                param.mkStrategyBic.parentWoNo = this.infolist.modelName;
+                // 20220523取消功能
+                // param.regionList = [];
+                // for (let i = 0; i < this.treeListp.length; i++) {
+                //     param.regionList.push(
+                //         // dutyNo: this.treeListp[i].loginNoStr,
+                //         // dutyName: this.treeListp[i].loginNameStr,
+                //         // groupId: this.treeListp[i].o,
+                //         // groupName: this.treeListp[i].ou
+                //         this.treeListp[i].ou
+                //     );
+                // }
+                param.countyFlag = this.countyFlag;
+                this.$refs.infolist.validate(valid => {
+                    if (valid) {
+                        this.$http({
+                            url: "/market/cStrategyBic/add",
+                            method: "post",
+                            headers: {
+                                "Content-Type": "application/json"
+                            },
+                            data: param
+                        }).then(res => {
+                            if (res.data.result === 1) {
+                                _this.$message({
+                                    message: res.data.desc,
+                                    type: "error"
+                                });
+                            } else {
+                                _this.$message({
+                                    message: "成功",
+                                    type: "success"
+                                });
+                                _this.infolist = {};
+                                // _this.treeList = [];
+                                _this.treeListp = [];
+                                _this.dialogStatus = false;
+                                this.getList({}, 1);
+                                // location.reload();
+                            }
+                        });
+                    }
+                });
+            } else if (v === 2) {
+                this.infolist = {};
+                // this.treeList = [];
+                this.treeListp = [];
+                this.dialogStatus = false;
+            }
+        },
+
+        deletes(val, index) {
+            this.treeListp.splice(index, 1);
+        },
+        choseDepta(v) {
+            let x = "no";
+            for (let i = 0; i < this.treeListp.length; i++) {
+                if (this.treeListp[i].o == v.o) {
+                    x = i;
+                }
+            }
+            if (x != "no") {
+                this.treeListp.splice(x, 1);
+            } else {
+                this.treeListp.push(v);
+            }
+        },
+        advadd() {
+            this.dialogStatus = true;
+            this.loadinged = true;
+            if (
+                this.userInfo.cityName != null &&
+                this.userInfo.countyName == null
+            ) {
+                //地市
+                this.$http({
+                    url: "/sysmgr/csysdept/queryListByoO",
+                    method: "post",
+                    async: false,
+                    headers: {
+                        "Content-Type": "application/json"
+                    },
+                    data: {
+                        o: this.userInfo.groupId
+                    }
+                }).then(res => {
+                    // this.loadinged = false;
+                    // this.deptList = res.data;
+                    this.$http({
+                        url: "/sysmgr/csysdept/queryListByParent",
+                        method: "post",
+                        async: false,
+                        headers: {
+                            "Content-Type": "application/json"
+                        },
+                        data: {
+                            parentorgid: res.data[0].parentorgid
+                        }
+                    }).then(res => {
+                        this.loadinged = false;
+                        this.deptList = res.data;
+                    });
+                });
+            } else if (
+                this.userInfo.cityName == null &&
+                this.userInfo.countyName == null
+            ) {
+                this.$http({
+                    url: "/sysmgr/csysdept/queryRegionDeptList",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json"
+                    },
+                    data: {}
+                }).then(res => {
+                    this.loadinged = false;
+                    this.deptList = res.data[0].children;
+                });
+            } else {
+                this.isFuncBtnShow = false;
+            }
+        },
+        setabList(n, p) {
+            let params = {
+                children: "",
+                name: n,
+                rountPath: p,
+                target: "_self"
+            };
+            for (let i = 0; i < this.$store.state.tabList.length; i++) {
+                if (this.$store.state.tabList[i].name === params.name) {
+                    this.$store.state.tabList[i] = params;
+                }
+            }
+            let set = new Set([...this.$store.state.tabList, params]);
+            set.add(params);
+            this.$store.commit("setDefaultActive", params.rountPath);
+            this.$store.commit("setTabList", Array.from(set));
+        },
+        closedia() {
+            this.infolist = {};
+            this.dialogStatus = false;
+        },
+        //搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? (this.params.sts = v[0]) : "";
+
+            this.getList(this.params, this.pageSize);
+        },
+        //获取列表
+        getList(v, n) {
+            this.pageSize = n;
+            let _this = this;
+            this.loading = true;
+            // let regionList = [];
+
+            if (
+                this.userInfo.cityName != null &&
+                this.userInfo.countyName == null
+            ) {
+                //地市
+                this.regionList.push(this.userInfo.cityName);
+            } else if (this.userInfo.countyName != null) {
+                this.regionList.push(this.userInfo.countyName);
+            }
+
+            this.tableData = [];
+            this.$http({
+                url: "/market/cStrategyBic/queryMemeberWoInfo",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    page: '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: {
+                    mkStrategyBic: {
+                        fillName: this.userInfo.loginName, //登陆用户名
+                        sts: v.sts
+                    },
+                    regionList: this.regionList //用户区域
+                }
+            }).then(res => {
+                this.tableData = res.data.data;
+                this.total = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+        getModelList() {
+            this.loading = true;
+            this.$http({
+                url: "/market/cStrategyBic/queryByRegionCode",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json"
+                },
+                data: {
+                    param: { regionCode: this.userInfo.cityName }
+                }
+            }).then(res => {
+                this.modelList = res.data;
+                this.loading = false;
+            });
+        },
+        // 分页
+        currchange(v) {
+            this.pageSize = v;
+            this.getList({}, this.pageSize);
+        },
+
+        closeMessage(v) {
+            this.centerDialogVisible = false;
+            let _this = this;
+            if (v === 1) {
+                _this
+                    .$http({
+                        url: "/market/cStrategyBic/update",
+                        method: "post",
+                        headers: {
+                            "Content-Type": "application/json"
+                        },
+                        data: {
+                            fillName: this.userInfo.loginName,
+                            woNo: this.currentData.woNo,
+                            sts: 3
+                        }
+                    })
+                    .then(res => {
+                        if (res.data.result === 1) {
+                            _this.$message({
+                                message: res.data.desc,
+                                type: "error"
+                            });
+                        } else {
+                            _this.$message({
+                                message: "办结成功",
+                                type: "success"
+                            });
+                            _this.getList({}, this.pageSize);
+                        }
+                    });
+            }
+        },
+        //删除
+        delLine(v) {
+            this.centerDialogVisible = true;
+            this.messTit = "即将删除此条数据, 是否删除?";
+            this.delid = v.id;
+        },
+        //文件返回值
+        uploadBack(v) {
+            console.log(v);
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList({}, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen;
+            }
+        },
+        getUser() {
+            this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+            this.loginNoStr = this.userInfo.loginNoStr;
+        },
+        getTemple() {
+            let param = new FormData();
+            param.append("type", 'channel');
+            this.$http({
+                url: '/market/cAdvStrategy/downTemple',
+                method: "post",
+                responseType: 'blob',
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: param,
+            }).then((response) => {
+                if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                    let blob = new Blob([response.data], {
+                        type: response.data.type
+                    });
+                    window.navigator.msSaveOrOpenBlob(blob, '存量运营策略征集模板.xlsx');
+                } else {
+                    /* 火狐谷歌的文件下载方式 */
+                    var blob = new Blob([response.data])
+                    var downloadElement = document.createElement('a')
+                    var href = window.URL.createObjectURL(blob);
+                    downloadElement.href = href;
+                    downloadElement.download = '存量运营策略征集模板.xlsx';
+                    document.body.appendChild(downloadElement);
+                    downloadElement.click();
+                    document.body.removeChild(downloadElement);
+                    window.URL.revokeObjectURL(href);
+                }
+            })
+        }
+    },
+    mounted() {
+        this.getUser();
+        this.getList({}, 1);
+        for (var i = 0; i < this.menus.length; i++) {
+            if (this.menus[i].jspUrl == "/stockOperate") {
+                this.isFuncBtnShow = true;
+                break;
+            }
+        }
+
+        if (this.userInfo.countyName != null) {
+            this.countyFlag = "0";
+            this.isFuncBtnShow = false;
+            this.regionFlag = "2";
+        } else if (
+            this.userInfo.cityName != null &&
+            this.userInfo.countyName == null
+        ) {
+            this.countyFlag = "1";
+            this.isFuncBtnShow = true;
+            this.regionFlag = "1";
+        } else if (
+            this.userInfo.cityName == null &&
+            this.userInfo.countyName == null
+        ) {
+            this.countyFlag = "1";
+            this.isFuncBtnShow = true;
+            this.regionFlag = "0";
+        }
+        this.userInfo.countyName != null
+            ? (this.countyFlag = "0")
+            : (this.countyFlag = "1");
+    },
+
+    created() {}
+};
+</script>
+<style scoped lang="scss">
+.onetab {
+    margin-bottom: 20px;
+    padding: 0 20px;
+}
+
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.tabbox {
+    margin-top: 15px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+.info-line {
+    width: 100%;
+    display: block;
+    padding-left: 20px;
+
+    div {
+        width: 50%;
+        display: inline-block;
+    }
+
+    span {
+        width: 80px;
+        display: inline-block;
+        text-align: left;
+
+        i {
+            color: red;
+            display: inline-block;
+            padding-right: 5px;
+        }
+    }
+
+    .el-select,
+    .el-input {
+        width: calc(100% - 100px);
+    }
+}
+
+.online::v-deep {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 120px);
+    }
+
+    span {
+        // vertical-align: top;
+    }
+
+    .el-textarea,
+    .el-date-editor {
+        width: calc(100% - 100px);
+        display: inline-flex;
+    }
+    .el-form-item__content {
+        display: flex;
+    }
+}
+.adv-type {
+    margin-top: 20px;
+    display: flex;
+    justify-content: space-between;
+    flex-wrap: wrap;
+    // border: 1px solid #ddd;
+    border-radius: 5px;
+    padding: 20px;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+    div {
+        width: 33%;
+        text-align: center;
+        height: 80px;
+        overflow: hidden;
+        min-width: 100px;
+        cursor: pointer;
+        padding-top: 10px;
+        margin: 10px 0;
+    }
+    div:hover {
+        background: #cfe8fc;
+        border-radius: 5px;
+    }
+    span {
+        width: 100%;
+        display: inline-block;
+        height: 40px;
+        // line-height: 40px;
+        i {
+            color: #0074d9;
+            font-size: 36px;
+        }
+    }
+}
+
+.boximgc {
+    display: flex;
+    flex-wrap: wrap;
+    width: 100% !important;
+    margin-top: 20px;
+
+    div {
+        display: inline-block;
+        width: 18% !important;
+        margin-right: 2%;
+        margin-bottom: 20px;
+        overflow: hidden;
+        border: 1px solid #ddd;
+        border-radius: 3px;
+        background: #fff;
+        position: relative;
+        height: 100px;
+
+        img {
+            width: 100%;
+            position: absolute;
+            top: 0;
+            bottom: 0;
+            margin: auto;
+            // height: 100%;
+        }
+    }
+}
+.tree {
+    width: calc(50% - 60px);
+    display: inline-block;
+    margin-right: 20px;
+    height: 300px;
+    overflow-y: scroll;
+    flex: 1;
+    p {
+        overflow: hidden;
+        display: flex;
+        justify-content: space-between;
+    }
+    .p-btn {
+        width: 50px !important;
+        cursor: pointer;
+        color: #0074da;
+    }
+    span {
+        display: inline-block;
+        width: calc(100% - 100px);
+    }
+
+    .el-icon-error {
+        float: right;
+        font-size: 20px;
+        margin-top: 9px;
+        cursor: pointer;
+    }
+}
+
+.treeUser {
+    // margin: 0;
+    border: 1px solid #ddd;
+
+    p {
+        background: #f4f4f4;
+        padding: 0 20px;
+        margin-bottom: 5px;
+    }
+}
+
+.treeUserb {
+    width: calc(100% - 100px);
+    border: 1px solid #ddd;
+    background: #f4f4f4;
+    border-radius: 3px;
+    height: auto;
+    overflow: hidden;
+
+    p {
+        display: inline-block;
+        padding: 0 20px;
+        margin-bottom: 5px;
+    }
+}
+
+.treeUserp {
+    p {
+        padding: 5px;
+    }
+    p:hover {
+        background: #01bef0;
+        color: #fff;
+        cursor: pointer;
+    }
+}
+</style>

+ 559 - 0
src/pages/main/stockOperate/stockOperateCityList.vue

@@ -0,0 +1,559 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container">
+        <div class="container-box">
+            <toolList @iconCli="iconCli" :tooltit="tooltit"></toolList>
+            <!-- <div class="search">
+                <mySearch
+                    :searchList="searchList"
+                    @searchInfo="searchInfo"
+                ></mySearch>
+                <el-button
+                    class="btn-check"
+                    size="medium"
+                    type="primary"
+                    @click="jumpadd"
+                    v-if="isFuncBtnShow"
+                    >新建
+                </el-button>
+            </div> -->
+            <div class="tabbox">
+                <el-table
+                    height="calc(100% - 40px)"
+                    class="com-table"
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    size="small"
+                    border
+                    style="width: 100%"
+                    v-loading="loading"
+                >
+                    <el-table-column prop="regionName" label="模板名称">
+                    </el-table-column>
+                    <el-table-column label="操作" width="300px" align="center">
+                        <template slot-scope="scope">
+                            <!-- <el-button
+                                size="mini"
+                                type="primary"
+                                @click="jump(2, scope.row)"
+                                >查看</el-button
+                            > -->
+                            <el-button
+                                size="mini"
+                                type="primary"
+                                @click="jump(1, scope.row)"
+                                >查看</el-button
+                            >
+                            <!-- <el-button
+                                size="mini"
+                                type="primary"
+                                @click="jump(2, scope.row)"
+                                v-if="scope.row.fillFlag == 0"
+                                >办结</el-button
+                            > -->
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-pagination
+                    class="pageBox"
+                    @current-change="currchange"
+                    layout="prev, pager, next"
+                    background
+                    :total="total"
+                >
+                </el-pagination>
+            </div>
+        </div>
+
+        <myMessage
+            :messTit="messTit"
+            @closeMessage="closeMessage(1)"
+            :centerDialogVisible="centerDialogVisible"
+            v-if="centerDialogVisible"
+        ></myMessage>
+    </fullscreen>
+</template>
+<script>
+import mySearch from "../../../components/search.vue";
+import myMessage from "../../../components/myMessage.vue";
+import toolList from "../../../components/toolList";
+import myUpload from "../../../components/upload";
+import deptTree from "../../../components/deptTreeUser.vue";
+import deptTreep from "../../../components/deptTreeP.vue";
+
+export default {
+    components: {
+        mySearch,
+        myMessage,
+        toolList,
+        myUpload,
+        deptTree,
+        deptTreep
+    },
+    data() {
+        const woName = (rule, value, callback) => {
+            if (!this.infolist.woName) {
+                callback(new Error("不能为空"));
+            } else {
+                callback();
+            }
+        };
+        // const time = (rule, value, callback) => {
+        //     if (!this.infolist.time) {
+        //         callback(new Error("不能为空"));
+        //     } else {
+        //         callback();
+        //     }
+        // };
+        return {
+            rules: {
+                woName: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        validator: woName
+                    }
+                ]
+                // time: [
+                //     {
+                //         required: true,
+                //         trigger: "change",
+                //         validator: time
+                //     }
+                // ]
+            },
+            searchList: [
+                // {
+                //     type: 'input',
+                //     tit: '业务名称',
+                //     value: '',
+                //     width: '32%',
+                // },
+                {
+                    type: "sel",
+                    tit: "状态",
+                    value: "",
+                    width: "100%",
+                    options: [
+                        {
+                            dataCode: "0",
+                            dataName: "待上传模板"
+                        },
+                        {
+                            dataCode: "1",
+                            dataName: "填写中"
+                        },
+                        {
+                            dataCode: "2",
+                            dataName: "已锁定"
+                        }
+                    ]
+                }
+                // {
+                //     type: 'date',
+                //     tit: '申请时间',
+                //     value: '',
+                //     width: '32%',
+                // },
+            ],
+            tooltit: "存量运营策略征集",
+            fullscreen: false,
+            total: 0,
+            pageSize: 1,
+            tableData: [],
+            dialogStatus: false,
+            disableStatus: false,
+            titname: "",
+            infolist: {},
+            // treeList: [],
+            treeListp: [],
+            treeListponly: [],
+            closeList: [],
+            defaultList: [],
+            depttype: 0,
+            fadept: {},
+            deptList: [],
+            userInfo: {},
+            params: {},
+            centerDialogVisible: false,
+            messTit: "",
+            delid: "",
+            loading: false,
+            loadinged: false,
+            fileInfo: {
+                limit: 10,
+                url: "/market/cwo/upload",
+                fileList: []
+            },
+            infoApply: {},
+            rovaList: [],
+            applicationDialogStatus: false,
+
+            stsArr: ["待上传模板", "填写中", "已锁定"],
+            provinceCityArr: ["省", "地市", "区县"],
+            loginNoStr: "",
+            cityWoId: "",
+            menus: JSON.parse(window.sessionStorage.childrenMenus),
+            isFuncBtnShow: false,
+            countyFlag: "0",
+            regionList: [],
+            currentData: {},
+            regionFlag: "0", //地区 0 省 1 地市 2 区
+            regionCode: "", //地市名称
+            parentWoNo: "", //工单id
+            woName: "" //模板名称
+        };
+    },
+    methods: {
+        jump(v, n) {
+            if (v === 1) {
+                this.$router.push({
+                    path: "/stockHandle",
+                    query: {
+                        strategyId: n.strategyId,
+                        usrName: this.userInfo.loginName,
+                        sts:'2',
+                        countyFlag: '2',
+                        fillFlag:'0',
+                        regionName: n.regionName,
+                        woName: this.woName
+                    }
+                });
+            }
+        },
+        //搜索数据
+        // searchInfo(v) {
+        //     this.params = {};
+        //     v[0] ? (this.params.sts = v[0]) : "";
+
+        //     this.getList(this.params, this.pageSize);
+        // },
+        //获取列表
+        getList(v, n) {
+            this.pageSize = n;
+            this.loading = true;
+            this.tableData = [];
+            this.$http({
+                url: "/market/cAdvStrategy/queryMkAdvStrategyByPWoNo",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    page: '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: {
+                    mkStrategyBic: {
+                        parentWoNo: this.parentWoNo
+                    },
+                    regionList: [this.regionCode]
+                }
+            }).then(res => {
+                this.tableData = res.data.data;
+                this.total = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+        // 分页
+        currchange(v) {
+            this.pageSize = v;
+            this.getList({}, this.pageSize);
+        },
+
+        closeMessage(v) {
+            this.centerDialogVisible = false;
+            let _this = this;
+            if (v === 1) {
+                _this
+                    .$http({
+                        url: "/market/cStrategyBic/update",
+                        method: "post",
+                        headers: {
+                            "Content-Type": "application/json"
+                        },
+                        data: {
+                            fillName: this.userInfo.loginName,
+                            woNo: this.currentData.woNo,
+                            sts: this.currentData.sts
+                        }
+                    })
+                    .then(res => {
+                        if (res.data.result === 1) {
+                            _this.$message({
+                                message: res.data.desc,
+                                type: "error"
+                            });
+                        } else {
+                            _this.$message({
+                                message: "办结成功",
+                                type: "success"
+                            });
+                            _this.getList({}, this.pageSize);
+                        }
+                    });
+            }
+        },
+        //删除
+        delLine(v) {
+            this.centerDialogVisible = true;
+            this.messTit = "即将删除此条数据, 是否删除?";
+            this.delid = v.id;
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList({}, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen;
+            }
+        },
+        getUser() {
+            this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+            this.loginNoStr = this.userInfo.loginNoStr;
+        }
+    },
+    mounted() {
+        if (JSON.stringify(this.$route.query) != "{}") {
+            this.regionCode = this.$route.query.regionCode;
+            this.parentWoNo = this.$route.query.parentWoNo;
+            this.woName = this.$route.query.woName;
+        }
+        this.getUser();
+        this.getList({}, 1);
+        // for (var i = 0; i < this.menus.length; i++) {
+        //     if (this.menus[i].jspUrl == "/stockOperate") {
+        //         this.isFuncBtnShow = true;
+        //         break;
+        //     }
+        // }
+
+        // if (this.userInfo.countyName != null) {
+        //     this.countyFlag = "0";
+        //     this.isFuncBtnShow = false;
+        //     this.regionFlag = "2";
+        // } else if (
+        //     this.userInfo.cityName != null &&
+        //     this.userInfo.countyName == null
+        // ) {
+        //     this.countyFlag = "1";
+        //     this.isFuncBtnShow = true;
+        //     this.regionFlag = "1";
+        // } else if (
+        //     this.userInfo.cityName == null &&
+        //     this.userInfo.countyName == null
+        // ) {
+        //     this.countyFlag = "1";
+        //     this.isFuncBtnShow = true;
+        //     this.regionFlag = "0";
+        // }
+        // this.userInfo.countyName != null
+        //     ? (this.countyFlag = "0")
+        //     : (this.countyFlag = "1");
+    },
+    created() {}
+};
+</script>
+<style scoped lang="scss">
+.onetab {
+    margin-bottom: 20px;
+    padding: 0 20px;
+}
+
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.tabbox {
+    margin-top: 15px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+.info-line {
+    width: 100%;
+    display: block;
+    padding-left: 20px;
+
+    div {
+        width: 50%;
+        display: inline-block;
+    }
+
+    span {
+        width: 80px;
+        display: inline-block;
+        text-align: left;
+
+        i {
+            color: red;
+            display: inline-block;
+            padding-right: 5px;
+        }
+    }
+
+    .el-select,
+    .el-input {
+        width: calc(100% - 100px);
+    }
+}
+
+.online::v-deep {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 120px);
+    }
+
+    span {
+        // vertical-align: top;
+    }
+
+    .el-textarea,
+    .el-date-editor {
+        width: calc(100% - 100px);
+        display: inline-flex;
+    }
+    .el-form-item__content {
+        display: flex;
+    }
+}
+.adv-type {
+    margin-top: 20px;
+    display: flex;
+    justify-content: space-between;
+    flex-wrap: wrap;
+    // border: 1px solid #ddd;
+    border-radius: 5px;
+    padding: 20px;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+    div {
+        width: 33%;
+        text-align: center;
+        height: 80px;
+        overflow: hidden;
+        min-width: 100px;
+        cursor: pointer;
+        padding-top: 10px;
+        margin: 10px 0;
+    }
+    div:hover {
+        background: #cfe8fc;
+        border-radius: 5px;
+    }
+    span {
+        width: 100%;
+        display: inline-block;
+        height: 40px;
+        // line-height: 40px;
+        i {
+            color: #0074d9;
+            font-size: 36px;
+        }
+    }
+}
+
+.boximgc {
+    display: flex;
+    flex-wrap: wrap;
+    width: 100% !important;
+    margin-top: 20px;
+
+    div {
+        display: inline-block;
+        width: 18% !important;
+        margin-right: 2%;
+        margin-bottom: 20px;
+        overflow: hidden;
+        border: 1px solid #ddd;
+        border-radius: 3px;
+        background: #fff;
+        position: relative;
+        height: 100px;
+
+        img {
+            width: 100%;
+            position: absolute;
+            top: 0;
+            bottom: 0;
+            margin: auto;
+            // height: 100%;
+        }
+    }
+}
+.tree {
+    width: calc(50% - 60px);
+    display: inline-block;
+    margin-right: 20px;
+    height: 300px;
+    overflow-y: scroll;
+    flex: 1;
+    p {
+        overflow: hidden;
+        display: flex;
+        justify-content: space-between;
+    }
+    .p-btn {
+        width: 50px !important;
+        cursor: pointer;
+        color: #0074da;
+    }
+    span {
+        display: inline-block;
+        width: calc(100% - 100px);
+    }
+
+    .el-icon-error {
+        float: right;
+        font-size: 20px;
+        margin-top: 9px;
+        cursor: pointer;
+    }
+}
+
+.treeUser {
+    // margin: 0;
+    border: 1px solid #ddd;
+
+    p {
+        background: #f4f4f4;
+        padding: 0 20px;
+        margin-bottom: 5px;
+    }
+}
+
+.treeUserb {
+    width: calc(100% - 100px);
+    border: 1px solid #ddd;
+    background: #f4f4f4;
+    border-radius: 3px;
+    height: auto;
+    overflow: hidden;
+
+    p {
+        display: inline-block;
+        padding: 0 20px;
+        margin-bottom: 5px;
+    }
+}
+
+.treeUserp {
+    p {
+        padding: 5px;
+    }
+    p:hover {
+        background: #01bef0;
+        color: #fff;
+        cursor: pointer;
+    }
+}
+</style>

+ 22 - 13
src/pages/main/terminal/advertincrease.vue

@@ -33,7 +33,7 @@
                         </el-form-item> -->
                         <el-form-item prop="num">
                             <span>文件编号</span>
-                            <el-input v-model="infolist.num" placeholder="文件编号" :disabled="disableStatus"></el-input>
+                            <el-input v-model="infolist.num" placeholder="文件编号" :disabled="true"></el-input>
                         </el-form-item>
                         <el-form-item prop="overtime">
                             <span>完成时间</span>
@@ -194,13 +194,13 @@
                     callback()
                 }
             }
-            const num = (rule, value, callback) => {
-                if (!this.infolist.num) {
-                    callback(new Error('不能为空'))
-                } else {
-                    callback()
-                }
-            }
+            // const num = (rule, value, callback) => {
+            //     if (!this.infolist.num) {
+            //         callback(new Error('不能为空'))
+            //     } else {
+            //         callback()
+            //     }
+            // }
             const overtime = (rule, value, callback) => {
                 if (!this.infolist.overtime) {
                     callback(new Error('不能为空'))
@@ -263,11 +263,11 @@
                         trigger: 'change',
                         validator: time
                     }],
-                    num: [{
-                        required: true,
-                        trigger: 'blur',
-                        validator: num
-                    }],
+                    // num: [{
+                    //     required: true,
+                    //     trigger: 'blur',
+                    //     validator: num
+                    // }],
                     overtime: [{
                         required: true,
                         trigger: 'change',
@@ -501,6 +501,15 @@
             this.getTermianl();
             this.getUser();
             this.getlist();
+            var _this = this;
+            let yy = new Date().getFullYear();
+            let mm = new Date().getMonth()+1;
+            let dd = new Date().getDate();
+            let hh = new Date().getHours();
+            let mf = new Date().getMinutes()<10 ? '0'+new Date().getMinutes() : new Date().getMinutes();
+            let ss = new Date().getSeconds()<10 ? '0'+new Date().getSeconds() : new Date().getSeconds();
+            _this.gettime = yy+""+mm+""+dd+""+hh+""+mf+""+ss;
+            this.infolist.num=_this.gettime
         },
         created() {
 

+ 11 - 4
src/pages/main/terminal/components/advert.vue

@@ -38,13 +38,23 @@
                     </el-form-item>
                 </div>
                 <div class="info-line">
+                     <el-form-item>
+                        <span>文件编号</span>
+                        <el-input disabled v-model="infoApply.num"
+                            placeholder="文件编号">
+                        </el-input>
+                    </el-form-item>
                     <el-form-item>
                         <span>完成时间</span>
                         <el-date-picker disabled v-model="infoApply.overtime" type="date"
                             placeholder="完成时间">
                         </el-date-picker>
                     </el-form-item>
-                    <el-form-item>
+                   
+                </div>
+
+                <div class="info-line">
+                     <el-form-item>
                         <span>紧急程度</span>
                         <el-select disabled clearable v-model="infoApply.urgent" placeholder="紧急程度">
                             <el-option v-for="items in fireopt" :key="items.dataCode" :label="items.dataName"
@@ -52,9 +62,6 @@
                             </el-option>
                         </el-select>
                     </el-form-item>
-                </div>
-
-                <div class="info-line">
                     <el-form-item>
                         <span>素材类型</span>
                         <el-select disabled clearable v-model="infoApply.materType" placeholder="素材类型">

+ 92 - 0
src/router/index.js

@@ -2072,6 +2072,73 @@ const routes = [{
             component: (resolve) => require( /* webpackChunkName: "system" */ ['../pages/main/collect/index'], resolve)
         },
         {
+            meta: { name:  '重点攻坚渠道合作率', keepAlive: false },
+            path: '/keyChannelHome',
+            name: 'keyChannelHome',
+            redirect: 'onlineExcel',
+            component: (resolve) => require( /* webpackChunkName: "system" */
+                ['../pages/main/keyChannelCoop/home.vue'], resolve),
+            children: [
+                {
+                    meta: { name:  '在线表格', keepAlive: false },
+                    path: '/onlineExcel',
+                    name: 'onlineExcel',
+                    component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/keyChannelCoop/onlineExcel'], resolve)
+                },
+                {
+                    meta: { name:  '附件统计', keepAlive: false },
+                    path: '/appendix',
+                    name: 'appendix',
+                    component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/keyChannelCoop/appendix'], resolve)
+                },
+            ]
+        },
+        {
+            meta: {
+                name: '在线表格详情',
+                keepAlive: false
+            },
+            path: '/onlineExcelInfo',
+            name: 'onlineExcelInfo',
+            component: (resolve) => require( /* webpackChunkName: "system" */ ['../pages/main/keyChannelCoop/onlineExcelInfo'], resolve)
+        },
+        {
+            meta: { name:  '反诈骗处罚报表', keepAlive: false },
+            path: '/antiSpoofing',
+            name: 'antiSpoofing',
+            redirect: 'districtCounty',
+            component: (resolve) => require( /* webpackChunkName: "system" */
+                ['../pages/main/antiSpoofing/home.vue'], resolve),
+            children: [
+                {
+                    meta: { name:  '地市公司-区县考核报表', keepAlive: false },
+                    path: '/districtCounty',
+                    name: 'districtCounty',
+                    component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/antiSpoofing/districtCounty'], resolve)
+                },
+                {
+                    meta: { name:  '地市公司-人员考核报表', keepAlive: false },
+                    path: '/personnel',
+                    name: 'personnel',
+                    component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/antiSpoofing/personnel'], resolve)
+                },
+                {
+                    meta: { name:  '地市公司-渠道考核报表', keepAlive: false },
+                    path: '/channel',
+                    name: 'channel',
+                    component: (resolve) => require( /* webpackChunkName: "system" */
+                        ['../pages/main/antiSpoofing/channel'], resolve)
+                },
+                {
+                    meta: { name:  '省公司处罚台账', keepAlive: false },
+                    path: '/standingBook',
+                    name: 'standingBook',
+                    component: (resolve) => require( /* webpackChunkName: "system" */
+                        ['../pages/main/antiSpoofing/standingBook'], resolve)
+                }
+            ]
+        },
+        {
             meta: { name: '日志查询', keepAlive: false },
             path: '/logQueryList',
             name: 'logQueryList',
@@ -2178,6 +2245,31 @@ const routes = [{
         },
         {
             meta: {
+                name: '魔百和列表',
+                keepAlive: false
+            },
+            path: '/CMkMagicBoxTop1',
+            name: 'CMkMagicBoxTop1',
+            component: (resolve) => require( /* webpackChunkName: "system" */ ['../pages/main/mbh/CMkMagicBoxTop'], resolve)
+        }, {
+            meta: {
+                name: '存量运营列表',
+                keepAlive: false
+            },
+            path: '/stockOperate',
+            name: 'stockOperate',
+            component: (resolve) => require( /* webpackChunkName: "system" */ ['../pages/main/stockOperate/stockOperate'], resolve)
+        }, {
+            meta: {
+                name: '存量运营办结',
+                keepAlive: false
+            },
+            path: '/stockHandle',
+            name: 'stockHandle',
+            component: (resolve) => require( /* webpackChunkName: "system" */ ['../pages/main/stockOperate/stockHandle'], resolve)
+        },
+        {
+            meta: {
                 name: '经分文件收集',
                 keepAlive: false
             },

+ 4 - 4
vue.config.js

@@ -93,7 +93,7 @@ module.exports = {
         proxy: {
             // 开发环境变化可注释 ⬇️⬇️
             "/market/CMK": {
-                target: "http://mbx14sduu65j.ngrok2.xiaomiqiu.cn",
+                target: "http://124.223.66.248:9600",
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {
@@ -101,7 +101,7 @@ module.exports = {
                 },
             },
             "/market/mk": {
-                target: "http://mbx14sduu65j.ngrok2.xiaomiqiu.cn",
+                target: "http://124.223.66.248:9600",
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {
@@ -109,7 +109,7 @@ module.exports = {
                 },
             },
             "/market/techcentergj": {
-                target: "http://mbx14sduu65j.ngrok2.xiaomiqiu.cn",
+                target: "http://124.223.66.248:9600",
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {
@@ -117,7 +117,7 @@ module.exports = {
                 },
             },
             "/mkWangge": {
-                target: "http://mbx14sduu65j.ngrok2.xiaomiqiu.cn",
+                target: "http://124.223.66.248:9600",
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {