liyuanpeng 3 роки тому
батько
коміт
dd98a459a9

+ 2 - 2
public/index.html

@@ -18,9 +18,9 @@
   <div id="app"></div>
   <!-- built files will be auto injected -->
   <script type="text/javascript">
-    window.staticHost = 'http://10.230.26.15:8000/spfm';
+    // window.staticHost = 'http://10.230.26.15:8000/spfm';
     // window.staticHost = 'http://114.215.71.182:29600';
-    // window.staticHost = 'http://192.168.2.145:9600/';
+    window.staticHost = 'http://192.168.2.145:9600/';
   </script>
 </body>
 

+ 66 - 105
src/components/search.vue

@@ -1,115 +1,76 @@
 <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>
-      </div>
-    </div>
-    <el-button
-      class="btn-check"
-      size="medium"
-      type="primary"
-      plain
-      icon="el-icon-search"
-      @click="searchInfo"
-      >搜索</el-button
-    >
-  </div>
+	<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>
+			</div>
+		</div>
+		<el-button class="btn-check" size="medium" type="primary" plain icon="el-icon-search" @click="searchInfo">搜索
+		</el-button>
+	</div>
 </template>
 <script>
-export default {
-  props: ["searchList"],
-  data() {
-    return {
-      infoList: [],
-    };
-  },
-  methods: {
-    searchInfo() {
-      this.infoList = [];
-      for (let i = 0; i < this.searchList.length; i++) {
-        if (this.searchList[i].type === "date" && this.searchList[i].value) {
-          this.infoList.push(Date.parse(this.searchList[i].value));
-        } else {
-          this.infoList.push(this.searchList[i].value);
-        }
-      }
-      this.$emit("searchInfo", this.infoList);
-    },
-  },
-  mounted() {},
-  created() {},
-};
+	export default {
+		props: ["searchList"],
+		data() {
+			return {
+				infoList: [],
+			};
+		},
+		methods: {
+			searchInfo() {
+				this.infoList = [];
+				for (let i = 0; i < this.searchList.length; i++) {
+					if (this.searchList[i].type === "date" && this.searchList[i].value) {
+						this.infoList.push(Date.parse(this.searchList[i].value));
+					} else {
+						this.infoList.push(this.searchList[i].value);
+					}
+				}
+				this.$emit("searchInfo", this.infoList);
+			},
+		},
+		mounted() {},
+		created() {},
+	};
 </script>
 <style scoped lang="scss">
-.search-box {
-  display: flex;
-  justify-content: space-between;
+	.search-box {
+		display: flex;
+		justify-content: space-between;
 
-  .box-l {
-    display: flex;
-    justify-content: space-between;
+		.box-l {
+			display: flex;
+			justify-content: space-between;
 
-    .box-info {
-      display: inline-block;
-      // min-width: 100px;
-    }
-  }
+			.box-info {
+				display: inline-block;
+				// min-width: 100px;
+			}
+		}
 
-  .btn-check {
-  }
+		.btn-check {}
 
-  .el-date-editor.el-input,
-  .el-date-editor.el-input__inner {
-    width: 100%;
-  }
-  .el-select-dropdown {
-    z-index: 100000 !important;
-  }
-}
+		.el-date-editor.el-input,
+		.el-date-editor.el-input__inner {
+			width: 100%;
+		}
+
+		.el-select-dropdown {
+			z-index: 100000 !important;
+		}
+	}
 </style>

+ 0 - 5
src/pages/main/achievements/achievementsIndex.vue

@@ -31,11 +31,6 @@
 						name: "recallBm"
 					},
 					{
-						label: "科室绩效",
-						path: "/recallkpi",
-						name: "recallkpi"
-					},
-					{
 						label: "副总GS",
 						path: "/recallGs",
 						name: "recallGs"

+ 459 - 495
src/pages/main/achievements/recallMuban.vue

@@ -1,68 +1,33 @@
 <template>
-  <div class="container" style="margin: 15px 0 0 0" v-loading="loading">
-    <fullscreen
-      :fullscreen.sync="fullscreen"
-      class="container-box"
-      style="margin: 0 !important; padding: 0 !important"
-    >
-      <div class="titbox">
-        <h2>科室绩效回复</h2>
-        <div>
-          <i class="el-icon-refresh" @click="iconCli(1)"></i>
-          <i class="el-icon-full-screen" @click="iconCli(2)"></i>
-        </div>
-      </div>
-      <div style="height: 100%">
-        <div style="overflow: none">
-          <el-date-picker
-            v-model="monthValue"
-            @change="checkMonth"
-            value-format="yyyy-MM"
-            type="month"
-            placeholder="选择月"
-          >
-          </el-date-picker>
-          <el-select
-            v-model="value"
-            @change="checkDecpt"
-            clearable
-            placeholder="请选择部门"
-          >
-            <el-option
-              v-for="item in options"
-              :key="item.receiveName"
-              :label="item.receiveDeptName"
-              :value="item.receiveDeptCode"
-            >
-            </el-option>
-          </el-select>
-          <div style="float: right">
-            <el-button
-              v-if="dataBody.task.sts == '0' && dataBody.rows.length > 0"
-              size="small"
-              @click="submit"
-              type="primary"
-              >回复</el-button
-            >
-            <el-button
-              v-if="dataBody.task.sts == '0' && dataBody.rows.length > 0"
-              size="small"
-              @click="save"
-              type="primary"
-              >保存</el-button
-            >
-            <el-button
-              v-if="dataBody.rows.length > 0"
-              size="small"
-              type="primary"
-              @click="exportExcel"
-              >导出</el-button
-            >
-            <el-button size="small" @click="goBack" type="primary"
-              >返回</el-button
-            >
-          </div>
-          <!-- <el-upload
+	<div class="container" v-loading="loading">
+		<fullscreen :fullscreen.sync="fullscreen" class="container-box">
+			<div class="titbox">
+				<h2>科室绩效回复</h2>
+				<div>
+					<i class="el-icon-refresh" @click="iconCli(1)"></i>
+					<i class="el-icon-full-screen" @click="iconCli(2)"></i>
+				</div>
+			</div>
+			<div style="height: 100%">
+				<div style="overflow: none">
+					<el-date-picker v-model="monthValue" @change="checkMonth" value-format="yyyy-MM" type="month"
+						placeholder="选择月">
+					</el-date-picker>
+					<el-select v-model="value" @change="checkDecpt" clearable placeholder="请选择部门">
+						<el-option v-for="item in options" :key="item.receiveName" :label="item.receiveDeptName"
+							:value="item.receiveDeptCode">
+						</el-option>
+					</el-select>
+					<div style="float: right">
+						<el-button v-if="dataBody.task.sts == '0' && dataBody.rows.length > 0" size="small"
+							@click="submit" type="primary">回复</el-button>
+						<el-button v-if="dataBody.task.sts == '0' && dataBody.rows.length > 0" size="small"
+							@click="save" type="primary">保存</el-button>
+						<el-button v-if="dataBody.rows.length > 0" size="small" type="primary" @click="exportExcel">导出
+						</el-button>
+						<el-button size="small" @click="goBack" type="primary">返回</el-button>
+					</div>
+					<!-- <el-upload
             v-if="dataBody.task.sts == '0'"
             :disabled="value == '' ? true : false"
             style="float: right"
@@ -82,448 +47,447 @@
               >点击上传</el-button
             >
           </el-upload> -->
-        </div>
+				</div>
 
-        <div v-if="dataBody.rows.length > 0" id="tabbox">
-          <div style="width: 30%; margin: 15px auto">
-            <el-input readonly v-model="dataBody.table.tabName"></el-input>
-          </div>
-          <table class="dataBody-box" border-collapse="collapse" border="1">
-            <tbody>
-              <tr v-for="(item, index) in dataBody.rows" :key="index">
-                <td
-                  @contextmenu="showMenu(index, zindex)"
-                  class="cell"
-                  v-for="(row, zindex) in item"
-                  :key="zindex"
-                  :rowspan="row.rowSpan"
-                  :colspan="row.colSpan"
-                  v-show="row.displayFlag == '0'"
-                >
-                  <div v-show="false">
-                    {{ (dataBody.rows[index][zindex].colNum = zindex) }}
-                    {{ (dataBody.rows[index][zindex].rowNum = index) }}
-                  </div>
-                  <el-input
-                    :disabled="dataBody.task.sts != '0'"
-                    class="table-input"
-                    v-model="row.cellVal"
-                  ></el-input>
-                </td>
-              </tr>
-            </tbody>
-          </table>
-        </div>
-        <div class="center-style" v-else>请选择需要查看的绩效</div>
-      </div>
-      <vue-context-menu
-        :contextMenuData="contextMenuData"
-        @deleteHang="deleteHang"
-        @addHangUp="addHangUp"
-      ></vue-context-menu>
-    </fullscreen>
-  </div>
+				<div v-if="dataBody.rows.length > 0" id="tabbox">
+					<div style="width: 30%; margin: 15px auto">
+						<el-input readonly v-model="dataBody.table.tabName"></el-input>
+					</div>
+					<table class="dataBody-box" border-collapse="collapse" border="1">
+						<tbody>
+							<tr v-for="(item, index) in dataBody.rows" :key="index">
+								<td @contextmenu="showMenu(index, zindex)" class="cell" v-for="(row, zindex) in item"
+									:key="zindex" :rowspan="row.rowSpan" :colspan="row.colSpan"
+									v-show="row.displayFlag == '0'">
+									<div v-show="false">
+										{{ (dataBody.rows[index][zindex].colNum = zindex) }}
+										{{ (dataBody.rows[index][zindex].rowNum = index) }}
+									</div>
+									<el-input :disabled="dataBody.task.sts != '0'" class="table-input"
+										v-model="row.cellVal"></el-input>
+								</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+				<div class="center-style" v-else>请选择需要查看的绩效</div>
+			</div>
+			<vue-context-menu :contextMenuData="contextMenuData" @deleteHang="deleteHang" @addHangUp="addHangUp">
+			</vue-context-menu>
+		</fullscreen>
+	</div>
 </template>
 <script>
-export default {
-  data() {
-    return {
-      disabled: true,
-      options: [],
-      value: "",
-      monthValue: "",
-      cellWidth: { width: "auto" },
-      isMove: false,
-      autoStyle: {},
-      xindex: "",
-      yindex: "",
-      dataBody: {
-        rows: [],
-        table: {
-          opName: "",
-          opNo: "",
-          opTime: "",
-          opTimeFrom: "",
-          opTimeTo: "",
-          tabCode: "",
-          tabCodePks: "",
-          tabName: "",
-        },
-        task: {
-          sts: 0,
-        },
-      },
-      contextMenuData: {
-        menuName: "demo",
-        //菜单显示的位置
-        axis: {
-          x: null,
-          y: null,
-        },
-        //菜单选项
-        menulists: [
-          {
-            fnHandler: "deleteHang", //绑定事件
-            btnName: "删除行", //菜单名称
-          },
-          {
-            fnHandler: "addHangUp", //绑定事件
-            btnName: "插入行", //菜单名称
-          },
-        ],
-      },
-      hangIndex: "",
-      lieIndex: "",
-      fullscreen: false,
-      loading: false,
-      fileList: [],
-    };
-  },
-  methods: {
-    isDisabled() {
-      if (this.value == "") {
-        this.$message({
-          message: "请先选择部门!",
-          type: "warning",
-        });
-        return false;
-      }
-    },
-    // 回复
-    submit() {
-      this.loading = true;
-      this.$http({
-        url: "/market/kpidepts/saveInfo",
-        method: "post",
-        headers: {
-          "Content-Type": "application/json",
-        },
-        data: this.dataBody,
-      }).then((res) => {
-        if (res.data.result == 0) {
-          this.$message({
-            message: "回复成功",
-            type: "success",
-          });
-          this.getInitData(this.value);
-        }
-        this.loading = false;
-      });
-    },
-    beforeUploadForm(file) {
-      // 验证文件类型
-      var testmsg = file.name.substring(file.name.lastIndexOf(".") + 1);
-      const extension = testmsg === "xlsx";
-      if (!extension) {
-        this.$message({
-          message: "上传文件只能是excel格式!",
-          duration: 1000,
-          showClose: true,
-          type: "warning",
-        });
-        return false;
-      }
-    },
-    // 提交文件
-    fileChange(param, type) {
-      let formData = new FormData();
-      formData.append("file", param.file);
-      formData.append("tabCode", "");
-      this.loading = true;
-      this.$http({
-        url: "/market/kpitemps/addTemp",
-        method: "post",
-        headers: {
-          "Content-Type": "application/json",
-        },
-        data: formData,
-      })
-        .then((res) => {
-          if (res.data.result == 0) {
-            this.closeMenu = true;
-            this.$message({
-              message: "上传成功",
-              type: "success",
-            });
-            this.dataBody = res.data.body;
-            this.$forceUpdate();
-          }
-          this.loading = false;
-        })
-        .catch((err) => {
-          this.loading = false;
-        });
-    },
-    beforeRemove(file, fileList) {
-      // return this.$confirm(`确定移除 ${file.name}?`);
-    },
-    exportExcel() {
-      this.$http({
-        url: "/market/kpidepts/downloadKpi",
-        method: "get",
-        headers: {
-          "Content-Type": "application/json",
-        },
-        responseType: "blob",
-        params: { tabInstId: this.dataBody.tabInstId },
-      }).then((response) => {
-        if (window.navigator && window.navigator.msSaveOrOpenBlob) {
-          let blob = new Blob([response.data], {
-            type: "application/vnd.ms-excel",
-          });
-          window.navigator.msSaveOrOpenBlob(
-            blob,
-            this.dataBody.table.tabName + ".xlsx"
-          );
-        } else {
-          /* 火狐谷歌的文件下载方式 */
-          var blob = new Blob([response.data]);
-          var downloadElement = document.createElement("a");
-          var href = window.URL.createObjectURL(blob);
-          downloadElement.href = href;
-          downloadElement.download = this.dataBody.table.tabName + ".xlsx";
-          document.body.appendChild(downloadElement);
-          downloadElement.click();
-          document.body.removeChild(downloadElement);
-          window.URL.revokeObjectURL(href);
-        }
-      });
-    },
-    imports() {},
-    checkDecpt(val) {
-      if (val == "") {
-        this.dataBody.rows = [];
-      } else {
-        this.getInitData(val);
-      }
-    },
-    checkMonth(val) {
-      this.$http({
-        url: "/market/kpidepts/loadReceiver",
-        method: "post",
-        headers: {
-          "Content-Type": "application/json",
-        },
-        data: { kpiMonth: val },
-      }).then((res) => {
-        if (res.data.result == 0) {
-          this.options = res.data.body;
-          if (res.data.body.length > 0) {
-            this.value = res.data.body[0].receiveDeptCode;
-            this.getInitData(res.data.body[0].receiveDeptCode);
-          } else {
-            this.value = "";
-            this.dataBody.rows = [];
-          }
-        } else {
-          this.value = "";
-          this.dataBody.rows = [];
-        }
-      });
-    },
-    goBack() {
-      this.$router.push("/leader");
-    },
-    //功能栏
-    iconCli(v) {
-      if (v === 1) {
-        this.getList(this.params, this.pageSize);
-      }
-      if (v === 2) {
-        this.fullscreen = !this.fullscreen;
-      }
-    },
-    showMenu(index, zindex) {
-      this.hangIndex = index;
-      this.lieIndex = zindex;
-      event.preventDefault();
-      var x = event.clientX;
-      var y = event.clientY;
-      // Get the current location
-      this.contextMenuData.axis = {
-        x,
-        y,
-      };
-    },
-    // 保存
-    save() {
-      this.loading = true;
-      this.$http({
-        url: "/market/kpidepts/save",
-        method: "post",
-        headers: {
-          "Content-Type": "application/json",
-        },
-        data: this.dataBody,
-      }).then((res) => {
-        if (res.data.result == 0) {
-          this.loading = false;
-          this.$message({
-            message: "操作成功",
-            type: "success",
-          });
-        }
-      });
-    },
-    // 向上增加行
-    addHangUp() {
-      let itemArr = [];
-      for (let i = 0; i < this.hangIndex; i++) {
-        this.dataBody.rows[i].map((item) => {
-          if (
-            this.hangIndex <= parseInt(item.rowSpan) + i - 1 &&
-            parseInt(item.rowSpan) > 1
-          ) {
-            item.rowSpan = parseInt(item.rowSpan) + 1;
-          }
-        });
-      }
-      itemArr = JSON.parse(JSON.stringify(this.dataBody.rows[this.hangIndex]));
-      itemArr.map((item) => {
-        item.rowSpan = "1";
-        item.cellVal = "";
-      });
-      this.dataBody.rows.splice(this.hangIndex, 0, itemArr);
-    },
-    // 删除行
-    deleteHang() {
-      if (
-        parseInt(this.dataBody.rows[this.hangIndex][this.lieIndex].rowSpan) > 1
-      ) {
-        this.$message({
-          message: "当前行有合并项不能删除",
-          type: "wanrning",
-        });
-        return;
-      }
-      let num = 0;
-      this.dataBody.rows[this.hangIndex].map((item, index) => {
-        if (parseInt(item.rowSpan) > 1) {
-          this.dataBody.rows[parseInt(this.hangIndex) + 1][index].displayFlag =
-            "0";
-          this.dataBody.rows[parseInt(this.hangIndex) + 1][index].rowSpan =
-            parseInt(item.rowSpan) - 1;
-        } else if (item.displayFlag == "1") {
-          for (let i = this.hangIndex; i >= 0; i--) {
-            num = 0;
-            this.dataBody.rows[i].map((item, zindex) => {
-              if (item.displayFlag == "0") {
-                num++;
-              }
-              if (
-                parseInt(item.rowSpan) > 1 &&
-                zindex == index &&
-                this.hangIndex <= parseInt(item.rowSpan) + i - 1
-              ) {
-                item.rowSpan = parseInt(item.rowSpan) - 1;
-              }
-            });
-            if (num == this.dataBody.rows[i].length) {
-              return;
-            }
-          }
-        }
-      });
-      this.dataBody.rows.splice(this.hangIndex, 1);
-    },
-    getInitData(val) {
-      this.loading = true;
-      this.$http({
-        url: "/market/kpidepts/load",
-        method: "post",
-        headers: {
-          "Content-Type": "application/json",
-        },
-        data: {
-          kpiMonth: this.monthValue,
-          receiveDeptCode: val,
-          tempType: "0",
-          subType: "a",
-        },
-      }).then((res) => {
-        if (res.data.result == 0) {
-          this.dataBody = res.data.body;
-        } else {
-          this.$message({
-            message: "无绩效数据",
-            type: "success",
-          });
-          this.dataBody.rows = [];
-        }
-        this.loading = false;
-      });
-    },
-  },
-  mounted() {},
-};
+	export default {
+		data() {
+			return {
+				disabled: true,
+				options: [],
+				value: "",
+				monthValue: "",
+				cellWidth: {
+					width: "auto"
+				},
+				isMove: false,
+				autoStyle: {},
+				xindex: "",
+				yindex: "",
+				dataBody: {
+					rows: [],
+					table: {
+						opName: "",
+						opNo: "",
+						opTime: "",
+						opTimeFrom: "",
+						opTimeTo: "",
+						tabCode: "",
+						tabCodePks: "",
+						tabName: "",
+					},
+					task: {
+						sts: 0,
+					},
+				},
+				contextMenuData: {
+					menuName: "demo",
+					//菜单显示的位置
+					axis: {
+						x: null,
+						y: null,
+					},
+					//菜单选项
+					menulists: [{
+							fnHandler: "deleteHang", //绑定事件
+							btnName: "删除行", //菜单名称
+						},
+						{
+							fnHandler: "addHangUp", //绑定事件
+							btnName: "插入行", //菜单名称
+						},
+					],
+				},
+				hangIndex: "",
+				lieIndex: "",
+				fullscreen: false,
+				loading: false,
+				fileList: [],
+			};
+		},
+		methods: {
+			isDisabled() {
+				if (this.value == "") {
+					this.$message({
+						message: "请先选择部门!",
+						type: "warning",
+					});
+					return false;
+				}
+			},
+			// 回复
+			submit() {
+				this.loading = true;
+				this.$http({
+					url: "/market/kpidepts/saveInfo",
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+					},
+					data: this.dataBody,
+				}).then((res) => {
+					if (res.data.result == 0) {
+						this.$message({
+							message: "回复成功",
+							type: "success",
+						});
+						this.getInitData(this.value);
+					}
+					this.loading = false;
+				});
+			},
+			beforeUploadForm(file) {
+				// 验证文件类型
+				var testmsg = file.name.substring(file.name.lastIndexOf(".") + 1);
+				const extension = testmsg === "xlsx";
+				if (!extension) {
+					this.$message({
+						message: "上传文件只能是excel格式!",
+						duration: 1000,
+						showClose: true,
+						type: "warning",
+					});
+					return false;
+				}
+			},
+			// 提交文件
+			fileChange(param, type) {
+				let formData = new FormData();
+				formData.append("file", param.file);
+				formData.append("tabCode", "");
+				this.loading = true;
+				this.$http({
+						url: "/market/kpitemps/addTemp",
+						method: "post",
+						headers: {
+							"Content-Type": "application/json",
+						},
+						data: formData,
+					})
+					.then((res) => {
+						if (res.data.result == 0) {
+							this.closeMenu = true;
+							this.$message({
+								message: "上传成功",
+								type: "success",
+							});
+							this.dataBody = res.data.body;
+							this.$forceUpdate();
+						}
+						this.loading = false;
+					})
+					.catch((err) => {
+						this.loading = false;
+					});
+			},
+			beforeRemove(file, fileList) {
+				// return this.$confirm(`确定移除 ${file.name}?`);
+			},
+			exportExcel() {
+				this.$http({
+					url: "/market/kpidepts/downloadKpi",
+					method: "get",
+					headers: {
+						"Content-Type": "application/json",
+					},
+					responseType: "blob",
+					params: {
+						tabInstId: this.dataBody.tabInstId
+					},
+				}).then((response) => {
+					if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+						let blob = new Blob([response.data], {
+							type: "application/vnd.ms-excel",
+						});
+						window.navigator.msSaveOrOpenBlob(
+							blob,
+							this.dataBody.table.tabName + ".xlsx"
+						);
+					} else {
+						/* 火狐谷歌的文件下载方式 */
+						var blob = new Blob([response.data]);
+						var downloadElement = document.createElement("a");
+						var href = window.URL.createObjectURL(blob);
+						downloadElement.href = href;
+						downloadElement.download = this.dataBody.table.tabName + ".xlsx";
+						document.body.appendChild(downloadElement);
+						downloadElement.click();
+						document.body.removeChild(downloadElement);
+						window.URL.revokeObjectURL(href);
+					}
+				});
+			},
+			imports() {},
+			checkDecpt(val) {
+				if (val == "") {
+					this.dataBody.rows = [];
+				} else {
+					this.getInitData(val);
+				}
+			},
+			checkMonth(val) {
+				this.$http({
+					url: "/market/kpidepts/loadReceiver",
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+					},
+					data: {
+						kpiMonth: val
+					},
+				}).then((res) => {
+					if (res.data.result == 0) {
+						this.options = res.data.body;
+						if (res.data.body.length > 0) {
+							this.value = res.data.body[0].receiveDeptCode;
+							this.getInitData(res.data.body[0].receiveDeptCode);
+						} else {
+							this.value = "";
+							this.dataBody.rows = [];
+						}
+					} else {
+						this.value = "";
+						this.dataBody.rows = [];
+					}
+				});
+			},
+			goBack() {
+				this.$router.push("/leader");
+			},
+			//功能栏
+			iconCli(v) {
+				if (v === 1) {
+					this.getList(this.params, this.pageSize);
+				}
+				if (v === 2) {
+					this.fullscreen = !this.fullscreen;
+				}
+			},
+			showMenu(index, zindex) {
+				this.hangIndex = index;
+				this.lieIndex = zindex;
+				event.preventDefault();
+				var x = event.clientX;
+				var y = event.clientY;
+				// Get the current location
+				this.contextMenuData.axis = {
+					x,
+					y,
+				};
+			},
+			// 保存
+			save() {
+				this.loading = true;
+				this.$http({
+					url: "/market/kpidepts/save",
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+					},
+					data: this.dataBody,
+				}).then((res) => {
+					if (res.data.result == 0) {
+						this.loading = false;
+						this.$message({
+							message: "操作成功",
+							type: "success",
+						});
+					}
+				});
+			},
+			// 向上增加行
+			addHangUp() {
+				let itemArr = [];
+				for (let i = 0; i < this.hangIndex; i++) {
+					this.dataBody.rows[i].map((item) => {
+						if (
+							this.hangIndex <= parseInt(item.rowSpan) + i - 1 &&
+							parseInt(item.rowSpan) > 1
+						) {
+							item.rowSpan = parseInt(item.rowSpan) + 1;
+						}
+					});
+				}
+				itemArr = JSON.parse(JSON.stringify(this.dataBody.rows[this.hangIndex]));
+				itemArr.map((item) => {
+					item.rowSpan = "1";
+					item.cellVal = "";
+				});
+				this.dataBody.rows.splice(this.hangIndex, 0, itemArr);
+			},
+			// 删除行
+			deleteHang() {
+				if (
+					parseInt(this.dataBody.rows[this.hangIndex][this.lieIndex].rowSpan) > 1
+				) {
+					this.$message({
+						message: "当前行有合并项不能删除",
+						type: "wanrning",
+					});
+					return;
+				}
+				let num = 0;
+				this.dataBody.rows[this.hangIndex].map((item, index) => {
+					if (parseInt(item.rowSpan) > 1) {
+						this.dataBody.rows[parseInt(this.hangIndex) + 1][index].displayFlag =
+							"0";
+						this.dataBody.rows[parseInt(this.hangIndex) + 1][index].rowSpan =
+							parseInt(item.rowSpan) - 1;
+					} else if (item.displayFlag == "1") {
+						for (let i = this.hangIndex; i >= 0; i--) {
+							num = 0;
+							this.dataBody.rows[i].map((item, zindex) => {
+								if (item.displayFlag == "0") {
+									num++;
+								}
+								if (
+									parseInt(item.rowSpan) > 1 &&
+									zindex == index &&
+									this.hangIndex <= parseInt(item.rowSpan) + i - 1
+								) {
+									item.rowSpan = parseInt(item.rowSpan) - 1;
+								}
+							});
+							if (num == this.dataBody.rows[i].length) {
+								return;
+							}
+						}
+					}
+				});
+				this.dataBody.rows.splice(this.hangIndex, 1);
+			},
+			getInitData(val) {
+				this.loading = true;
+				this.$http({
+					url: "/market/kpidepts/load",
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+					},
+					data: {
+						kpiMonth: this.monthValue,
+						receiveDeptCode: val,
+						tempType: "0",
+						subType: "a",
+					},
+				}).then((res) => {
+					if (res.data.result == 0) {
+						this.dataBody = res.data.body;
+					} else {
+						this.$message({
+							message: "无绩效数据",
+							type: "success",
+						});
+						this.dataBody.rows = [];
+					}
+					this.loading = false;
+				});
+			},
+		},
+		mounted() {},
+	};
 </script>
 <style>
-#tabbox .el-input.is-disabled .el-input__inner {
-  color: black;
-  background-color: white;
-}
-.btn-wrapper-simple {
-  height: auto !important;
-}
+	#tabbox .el-input.is-disabled .el-input__inner {
+		color: black;
+		background-color: white;
+	}
+
+	.btn-wrapper-simple {
+		height: auto !important;
+	}
 </style>
 <style lang="scss" scoped>
-#tabbox {
-  height: 75%;
-  overflow-y: auto;
-}
-.dataBody-box {
-  border-collapse: collapse;
-  margin-top: 20px;
-  .cell {
-    position: relative;
-  }
-}
+	#tabbox {
+		height: 75%;
+		overflow-y: auto;
+	}
+
+	.dataBody-box {
+		border-collapse: collapse;
+		margin-top: 20px;
 
-.fcous {
-  border-color: red;
-}
-.center-style {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 100%;
-}
-.auto-dom {
-  width: 3px;
-  opacity: 0;
-  position: absolute;
-  right: 0;
-  top: 0;
-  z-index: 1000;
-  cursor: pointer;
-  height: 100%;
-}
+		.cell {
+			position: relative;
+		}
+	}
+
+	.fcous {
+		border-color: red;
+	}
+
+	.center-style {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		height: 100%;
+	}
+
+	.auto-dom {
+		width: 3px;
+		opacity: 0;
+		position: absolute;
+		right: 0;
+		top: 0;
+		z-index: 1000;
+		cursor: pointer;
+		height: 100%;
+	}
 </style>>
 <style scoped lang="scss">
-.btn-default {
-  display: inline;
-  margin-left: 10px;
-}
-.titbox {
-  margin-bottom: 20px;
-  div {
-    float: right;
+	.btn-default {
+		display: inline;
+		margin-left: 10px;
+	}
 
-    i {
-      font-size: 22px;
-      margin-left: 20px;
-      cursor: pointer;
-    }
-  }
-}
+	.titbox {
+		margin-bottom: 20px;
 
-.tabbox {
-  margin-top: 15px;
-}
+		div {
+			float: right;
 
-.pageBox {
-  text-align: right;
-  margin-top: 10px;
-}
-</style>
+			i {
+				font-size: 22px;
+				margin-left: 20px;
+				cursor: pointer;
+			}
+		}
+	}
+
+	.tabbox {
+		margin-top: 15px;
+	}
 
+	.pageBox {
+		text-align: right;
+		margin-top: 10px;
+	}
+</style>

+ 1 - 1
src/pages/main/advertising/index.vue

@@ -87,7 +87,7 @@
             return {
                 fullscreen: false,
 				lockFlag:'see',
-				province:false
+				province:true
             }
         },
         methods: {

+ 1 - 1
src/pages/main/competitor/competExa.vue

@@ -72,7 +72,7 @@
 
                         <el-table-column label="操作" width="100" align="center" fixed="right">
                             <template slot-scope="scope" class="tab-btn">
-                                <el-button :disabled="btnctrlStatus" size="mini" type="danger" @click="checkInfo(scope.row.id)">审核</el-button>
+                                <el-button  size="mini" type="danger" @click="checkInfo(scope.row.id)">审核</el-button>
                             </template>
                         </el-table-column>
                     </el-table>

+ 3 - 0
src/pages/main/groupMSsend/index.vue

@@ -266,16 +266,19 @@
 					this.attList = [];
 					this.fileInfo.fileList = [];
 					this.datalist.attList.forEach(item => {
+						item.id = item.attchFileId;
 					    this.fileInfo.fileList.push({
 					        name: item.fileName,
 					        url: '',
 					        id: item.id,
+							attchFileId:item.attchFileId,
 					        fileName: item.fileName
 					    });
 					    this.attList.push({
 					        name: item.fileName,
 					        url: '',
 					        id: item.id,
+							attchFileId:item.attchFileId,
 					        fileName: item.fileName
 					    });
 					})

+ 671 - 0
src/pages/main/introduce/index.vue

@@ -0,0 +1,671 @@
+<template>
+	<fullscreen :fullscreen.sync="fullscreen" class="container">
+		<div class="container-box">
+			<toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
+			<div style="overflow: hidden;">
+				<el-button style="float: right;margin-top: 10px;" type="primary" @click="dialogCheck(3)">添加</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="woTitle" label="业务名称">
+					</el-table-column>
+					<el-table-column prop="opName" label="申请姓名">
+					</el-table-column>
+					<el-table-column prop="createTime" label="申请时间">
+					</el-table-column>
+					<el-table-column prop="stsDesc" label="状态">
+					</el-table-column>
+					<el-table-column label="操作" width="120px" align="center">
+						<template slot-scope="scope">
+							<el-button size="mini" type="primary" @click="dialogCheck(1,scope.row)">查看</el-button>
+							<el-button size="mini" type="danger" v-if="scope.row.sts != 1"
+								@click="dialogCheck(2,scope.row)">处理</el-button>
+							<!-- <el-button size="mini" 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>
+		</div>
+
+		<el-dialog :title="titname" :visible.sync="dialogStatus" width="50%" :destroy-on-close="true"
+			:modal-append-to-body="false" :close-on-click-modal="false" :before-close="closedia" :fullscreen="true">
+			<div v-loading="loadinged">
+				<el-form :model="infolist" ref="infolist" :rules="rules" style="height: calc(100vh - 180px);overflow-y: scroll;">
+					<div class="info-line">
+						<el-form-item  prop="woName">
+							<span>工单名称</span>
+							<el-input v-model="infolist.woName" placeholder="工单名称" :disabled="disableStatus">
+							</el-input>
+						</el-form-item>
+						<el-form-item prop="terminal">
+							<span>申请流程</span>
+							<el-select clearable v-model="terminal" placeholder="申请流程" :disabled="disableStatus">
+								<el-option v-for="items in options" :key="items.procId" :label="items.procName"
+									:value="items.procId">
+								</el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item>
+							<span>合作伙伴</span>
+							<el-input v-model="infolist.factoryName" placeholder="合作伙伴名称" :disabled="disableStatus">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>信用编码</span>
+							<el-input v-model="infolist.factoryCode" placeholder="合规伙伴统一信用编码"
+								:disabled="disableStatus"></el-input>
+						</el-form-item>
+					</div>
+					<el-form-item class="info-line online">
+						<span>正文内容</span>
+						<el-input v-model="infolist.textContent" placeholder="正文内容" type="textarea" :rows="3"
+							:disabled="disableStatus">
+						</el-input>
+					</el-form-item>
+					<div class="info-line" v-if="titname == '审批'&&opno == userInfo.loginNo">
+						<el-form-item>
+							<span>请示汇报名称</span>
+							<el-input v-model="infolist.reportName" placeholder="请示汇报名称" :disabled="disableStatus">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>请示汇报编码</span>
+							<el-input v-model="infolist.reportNo" placeholder="请示汇报编码" :disabled="disableStatus">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>请示汇报时间</span>
+							<el-date-picker style="display: inline-flex;width: calc(100% - 120px);"
+								:disabled="disableStatus" v-model="infolist.reportPassTime" type="daterange"
+								placeholder="请示汇报时间">
+							</el-date-picker>
+						</el-form-item>
+					</div>
+					<div class="info-line" v-if="titname == '审批'&&opno == userInfo.loginNo">
+						<el-form-item>
+							<span>合同名称</span>
+							<el-input v-model="infolist.contractName" placeholder="合同名称" :disabled="disableStatus">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>合同编码</span>
+							<el-input v-model="infolist.contractNo" placeholder="合同编码" :disabled="disableStatus">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>合同开始时间</span>
+							<el-date-picker style="display: inline-flex;width: calc(100% - 120px);"
+								:disabled="disableStatus" v-model="infolist.contractStartTime" type="daterange"
+								placeholder="合同开始时间">
+							</el-date-picker>
+						</el-form-item>
+						<el-form-item>
+							<span>合同截至时间</span>
+							<el-date-picker style="display: inline-flex;width: calc(100% - 120px);"
+								:disabled="disableStatus" v-model="infolist.contractEndTime" type="daterange"
+								placeholder="合同截至时间">
+							</el-date-picker>
+						</el-form-item>
+					</div>
+
+					<div style="padding:0 20px 0 120px;margin-bottom: 20px;" v-if="disableStatus">
+						<uploadDown :datalist="datalist" :dialogStatus="uploadstatus"></uploadDown>
+					</div>
+					<div style="padding-left: 100px" v-if="!disableStatus">
+						<myUpload @uploadBack="uploadBack" :fileInfo="fileInfo" :fileList="fileInfo.fileList">
+						</myUpload>
+					</div>
+					<el-form-item class="info-line online" v-if="titname != '添加'&&titname != '修改'">
+						<span>审批说明</span>
+						<el-input v-model="remark" placeholder="审批说明" type="textarea" :rows="3"
+							:disabled="titname == '查看'">
+						</el-input>
+					</el-form-item>
+
+					<div style="margin-bottom: 20px;padding: 0 20px;" v-if="titname != '添加'">
+						<el-table class="com-table" ref="multipleTable" :data="rovaList" tooltip-effect="dark"
+							size="small" border style="width: 100%">
+							<el-table-column prop="taskId" label="编号">
+							</el-table-column>
+							<el-table-column prop="taskName" label="环节">
+							</el-table-column>
+							<el-table-column prop="assigneeName" label="处理人">
+							</el-table-column>
+							<el-table-column prop="assigneeNo" label="处理人工号">
+							</el-table-column>
+							<el-table-column prop="opTime" label="处理时间">
+							</el-table-column>
+							<el-table-column prop="remark" label="备注">
+							</el-table-column>
+						</el-table>
+					</div>
+				</el-form>
+
+				<div slot="footer" class="dialog-footer myfooter">
+					<el-button v-if="titname != '添加' && vision != '流程发起'" type="primary" @click="dialogCli(2)">同 意
+					</el-button>
+					<el-button v-if="titname != '添加' && vision != '流程发起'" type="primary" @click="dialogCli(1)">驳 回
+					</el-button>
+					<el-button v-if="titname == '添加'" type="primary" @click="dialogCliadd">确 定</el-button>
+					<el-button @click="dialogCli(3)">取 消</el-button>
+				</div>
+			</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 uploadDown from '../../../components/uploadDown.vue'
+
+	export default {
+		components: {
+			mySearch,
+			myMessage,
+			toolList,
+			myUpload,
+			uploadDown
+		},
+		data() {
+			const woName = (rule, value, callback) => {
+				if (!this.infolist.woName) {
+					callback(new Error('不能为空'))
+				} else {
+					callback()
+				}
+			}
+			const terminal = (rule, value, callback) => {
+				if (!this.terminal) {
+					callback(new Error('不能为空'))
+				} else {
+					callback()
+				}
+			}
+			return {
+				rules: {
+					woName: [{
+						required: true,
+						trigger: 'blur',
+						validator: woName
+					}],
+					terminal: [{
+						required: true,
+						trigger: 'change',
+						validator: terminal
+					}],
+				},
+				tooltit: '线上合作渠道合作引入',
+				fullscreen: false,
+				total: 0,
+				pageSize: 1,
+				tableData: [{}],
+				dialogStatus: false,
+				disableStatus: false,
+				titname: '',
+				infolist: {},
+				userInfo: {},
+				params: {},
+				centerDialogVisible: false,
+				messTit: '',
+				delid: '',
+				loading: false,
+				loadinged: false,
+				fileInfo: {
+					limit: 5,
+					url: '/bpm/api/upload',
+					fileList: []
+				},
+				rovaList: [],
+				vision: '',
+				datalist: {
+					url: '/bpm/api/download',
+					type: 1
+				},
+				uploadstatus: false,
+				rovaList: [],
+				mydisable: 1,
+				opname: '',
+				opno: '',
+				attList: [],
+				options: [],
+				terminal:'',
+				remark:'',
+				
+			}
+		},
+		methods: {
+			closedia() {
+				this.infolist = {};
+				this.attList = [];
+				this.fileInfo.fileList = [];
+				this.dialogStatus = false;
+			},
+			//获取列表
+			getList(v, n) {
+				this.pageSize = n;
+				let _this = this;
+				this.loading = true;
+				v.procName = "合作引入流程";
+				this.$http({
+					url: "/bpm/api/queryToDoAndFinishTaskList",
+					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;
+				let infolist = Object.assign({}, n);
+				if (v === 1) {
+					this.titname = '查看';
+					this.disableStatus = true;
+				} else if (v === 2) {
+					this.titname = '审批';
+					this.disableStatus = true;
+				} else if (v === 3) {
+					this.titname = '添加';
+					this.disableStatus = false;
+					return
+				}
+				this.$http({
+					url: '/bpm/api/taskInit',
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+					},
+					data: {
+						woNo: n.woNo
+					},
+				}).then((res) => {
+					// this.infolist = Object.assign({}, res.data);
+					this.terminal = infolist.procId;
+					this.opname = res.data.opName;
+					this.opno = res.data.opNo;
+					this.infolist = JSON.parse(res.data.params.terminalRes);
+					this.infolist.procId=infolist.procId;
+					this.infolist.procVersion=infolist.procVersion;
+					this.remark=infolist.remark;
+					this.infolist.stepId=infolist.stepId;
+					this.infolist.taskId=infolist.taskId;
+					this.infolist.taskName=infolist.taskName;
+					this.infolist.opName=infolist.opName;
+					this.infolist.opNo=infolist.opNo;
+					this.infolist.opTime=infolist.opTime;
+					if (res.data.taskList[res.data.taskList.length - 1].taskName == '流程发起') {
+						this.vision = '流程发起';
+					} else {
+						this.vision = '审批';
+					}
+					this.datalist.attList = JSON.parse(res.data.params.attList);
+					this.attList = [];
+					this.fileInfo.fileList = [];
+					this.datalist.attList.forEach(item => {
+						item.id = item.attchFileId;
+						this.fileInfo.fileList.push({
+							name: item.fileName,
+							url: '',
+							id: item.id,
+							attchFileId: item.attchFileId,
+							fileName: item.fileName
+						});
+						this.attList.push({
+							name: item.fileName,
+							url: '',
+							id: item.id,
+							attchFileId: item.attchFileId,
+							fileName: item.fileName
+						});
+					})
+					this.rovaList = res.data.taskList;
+					this.uploadstatus = true;
+				});
+			},
+			//审批
+			dialogCli(v) {
+				this.dialogStatus = false;
+				if (v === 3) {
+					this.infolist = {};
+					this.attList = [];
+					this.fileInfo.fileList = [];
+					return
+				}
+				let _this = this;
+				this.infolist.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD HH:mm:ss")
+				this.infolist.opNo = this.userInfo.loginNo;
+				this.infolist.opName = this.userInfo.loginName;
+				if (v === 1) {
+					let params = {
+						dealType: '1',
+						dealTypeDesc: '打回',
+						procId: this.infolist.procId,
+						procVersion: this.infolist.procVersion,
+						remark: this.remark,
+						stepId: this.infolist.stepId,
+						taskId: this.infolist.taskId,
+						taskName: this.infolist.taskName,
+						opName: this.infolist.opName,
+						opNo: this.infolist.opNo,
+						opTime: this.infolist.opTime,
+						params: {
+							procExeCondiVal: '不同意',
+							terminalRes: JSON.stringify(this.infolist),
+							assigneeNo: this.opno,
+							assigneeName: this.opname,
+						},
+						woNo: this.infolist.woNo,
+					}
+					this.submitInfo("/bpm/api/submitTask", params);
+				} else if (v === 2) {
+					let param = {
+						dealType: '0',
+						dealTypeDesc: '提交',
+						procId: this.infolist.procId,
+						procVersion: this.infolist.procVersion,
+						remark: this.remark,
+						stepId: this.infolist.stepId,
+						taskId: this.infolist.taskId,
+						taskName: this.infolist.taskName,
+						opName: this.infolist.opName,
+						opNo: this.infolist.opNo,
+						opTime: this.infolist.opTime,
+						params: {
+							terminalRes: JSON.stringify(this.infolist)
+						},
+						woNo: this.infolist.woNo,
+						
+					}
+					console.log(this.infolist)
+					// 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,
+					// 		woNo: this.infolist.woNo,
+					// 		attchFileId: this.attList[i].attchFileId,
+					// 	});
+					// }
+					// param.params.attList = JSON.stringify(attList)
+					this.submitInfo("/bpm/api/submitTask", param);
+				}
+			},
+			//添加
+			dialogCliadd(v) {
+				let _this = this;
+				let info = {};
+				info.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD HH:mm:ss");
+				info.opNo = this.userInfo.loginNo;
+				info.opName = this.userInfo.loginName;
+				info.woTitle = this.infolist.woName;
+				info.params = {};
+				info.params.terminalRes = this.infolist;
+				info.procId = this.terminal;
+				for (let i = 0; i < this.options.length; i++) {
+					if (this.terminal == this.options[i].procId) {
+						info.procName = this.options[i].procName;
+						info.procVersion = this.options[i].procVersion;
+					}
+				}
+				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,
+						woNo: this.infolist.woNo,
+						attchFileId: this.attList[i].attchFileId,
+					});
+				}
+				info.params.attList = JSON.stringify(attList)
+				info.params.terminalRes = JSON.stringify(info.params.terminalRes);
+				this.submitInfo("/bpm/api/startProc", info);
+			},
+
+			submitInfo(u, v) {
+				let _this = this;
+				this.$refs.infolist.validate(valid => {
+					console.log(valid)
+					if (valid) {
+						console.log(2)
+						this.$http({
+							url: u,
+							method: "post",
+							headers: {
+								"Content-Type": "application/json",
+							},
+							data: v,
+						}).then((res) => {
+							if (res.data.result === 1) {
+								_this.$message({
+									message: res.data.desc,
+									type: 'error'
+								});
+							} else {
+								_this.$message({
+									message: '成功',
+									type: 'success'
+								});
+								_this.closedia();
+								_this.getList(this.params, this.pageSize);
+							}
+
+						});
+					}
+				})
+			},
+			//流程
+			getTermianl() {
+				this.$http({
+					url: "/bpm/api/queryBpmProcList",
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+						"page": '{"pageNo":"' + 1 + '","pageSize":"100"}'
+					},
+					data: {},
+				}).then((res) => {
+					this.options = res.data.data;
+				});
+			},
+			closeMessage(v) {
+				this.centerDialogVisible = false;
+				let _this = this;
+				if (v === 1) {
+					_this.$http({
+						url: "/bpm/api/deleteBpmPrePlugin",
+						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);
+
+			}
+		},
+		mounted() {
+			this.getList({}, 1);
+			this.getUser();
+			this.getTermianl();
+		},
+		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: 100px;
+			display: inline-block;
+			text-align: left;
+
+			i {
+				color: red;
+				display: inline-block;
+				padding-right: 5px;
+			}
+		}
+
+		.el-select,
+		.el-input {
+			width: calc(100% - 120px);
+		}
+	}
+
+	.online {
+		width: 100%;
+
+		.el-select {
+			width: calc(100% - 120px);
+		}
+
+		span {
+			vertical-align: top;
+		}
+
+		.el-textarea {
+			width: calc(100% - 120px);
+		}
+	}
+
+	.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, .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;
+			}
+		}
+	}
+</style>

+ 1 - 1
src/pages/main/leader/processInitiation.vue

@@ -7,7 +7,7 @@
 					<div v-for="item in ite.unitList" :key="item.unitName" class="function-box">
 						<div class="f-box-tit">{{ item.unitName }}</div>
 						<div v-for="items in item.modList" :key="items.moduleName" class="f-box-info">
-							<el-badge :value="items.todoNum" :max="99" :hidden="items.noTaskNum == 0">
+							<el-badge :value="items.noTaskNum" :max="99" :hidden="items.noTaskNum == 0">
 								
 								<!-- <i @click="jumpTo(items)" class="el-icon-document" v-if="items.sts == '0' && items.moduleName == '竞争对手信息上报'" style="background: #0b82ff"></i>
 								<i @click="jumpTo(items)" class="el-icon-user" v-if="items.sts == '0' && items.moduleName == '广告宣传设计审批'" style="background: #0b82ff"></i>

+ 387 - 0
src/pages/main/serviceQuality/contractInfo.vue

@@ -0,0 +1,387 @@
+<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(3)">添加
+				</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="contractName" label="合同名称">
+					</el-table-column>
+					<el-table-column prop="treatyNo" label="协议编号">
+					</el-table-column>
+					<el-table-column prop="factoryName" label="厂家名称">
+					</el-table-column>
+					<el-table-column prop="frameMoney" label="框架金额">
+					</el-table-column>
+					<el-table-column prop="purchasePeriod" label="采购时段">
+					</el-table-column>
+					<el-table-column prop="unitPrice" label="人天单价">
+					</el-table-column>
+					<el-table-column prop="treaTime" label="协议时间">
+					</el-table-column>
+					<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)">修改</el-button>
+							<el-button size="mini" 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>
+		</div>
+
+		<el-dialog :title="titname + '合同'" :visible.sync="dialogStatus" width="50%" :destroy-on-close="true"
+			:modal-append-to-body="false" :close-on-click-modal="false" :before-close="closedia">
+			<div v-loading="loadinged">
+				<el-form :model="infolist" ref="infolist" :rules="rules">
+					<div class="info-line">
+						<el-form-item prop="contractName">
+							<span>合同名称</span>
+							<el-input v-model="infolist.contractName" placeholder="合同名称" :disabled="disableStatus">
+							</el-input>
+						</el-form-item>
+						<el-form-item prop="treatyNo">
+							<span>协议编号</span>
+							<el-input v-model="infolist.treatyNo" placeholder="协议编号" :disabled="disableStatus">
+							</el-input>
+						</el-form-item>
+						<el-form-item prop="factoryName">
+							<span>厂家名称</span>
+							<el-input v-model="infolist.factoryName" placeholder="厂家名称" :disabled="disableStatus">
+							</el-input>
+						</el-form-item>
+						<el-form-item prop="purchasePeriod">
+							<span>采购时段</span>
+							<el-date-picker v-model="infolist.purchasePeriod" type="daterange" placeholder="协议时间"
+								:disabled="disableStatus" style="display: inline-flex;width: calc(100% - 100px);">
+							</el-date-picker>
+						</el-form-item>
+						<el-form-item prop="frameMoney">
+							<span>框架金额</span>
+							<el-input v-model="infolist.frameMoney" placeholder="框架金额" :disabled="disableStatus">
+							</el-input>
+						</el-form-item>
+						<el-form-item prop="treaTime">
+							<span>协议时间</span>
+							<el-date-picker v-model="infolist.treaTime" type="daterange" placeholder="协议时间"
+								:disabled="disableStatus" style="display: inline-flex;width: calc(100% - 100px);">
+							</el-date-picker>
+						</el-form-item>
+						<el-form-item prop="unitPrice">
+							<span>人天单价</span>
+							<el-input v-model="infolist.unitPrice" 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>
+
+		<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'
+
+	export default {
+		components: {
+			mySearch,
+			myMessage,
+			toolList
+		},
+		data() {
+
+			return {
+				rules: {
+
+				},
+				searchList: [{
+					type: 'input',
+					tit: '合同名称',
+					value: '',
+					width: '98%',
+				}],
+				tooltit: '合同信息管理',
+				fullscreen: false,
+				total: 0,
+				pageSize: 1,
+				tableData: [],
+				dialogStatus: false,
+				disableStatus: false,
+				titname: '',
+				infolist: {},
+				userInfo: {},
+				params: {},
+				centerDialogVisible: false,
+				messTit: '',
+				delid: '',
+				loading: false,
+				loadinged: false,
+
+			}
+		},
+		methods: {
+			closedia() {
+				this.infolist = {};
+				this.dialogStatus = false;
+			},
+			//搜索数据
+			searchInfo(v) {
+				this.params = {};
+				v[0] ? this.params.name = v[0] : '';
+				v[1] ? this.params.buyTypeCode = v[1] : '';
+				this.getList(this.params, this.pageSize);
+			},
+			//获取列表
+			getList(v, n) {
+				this.pageSize = n;
+				let _this = this;
+				this.loading = true;
+				this.tableData = [];
+				this.$http({
+					url: "/market/cChannelContract/queryList",
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+						"page": '{"pageNo":"' + n + '","pageSize":"10"}'
+					},
+					data: v,
+				}).then((res) => {
+					this.tableData = res.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.infolist = Object.assign({}, n);
+				if (v === 1) {
+					this.titname = '查看';
+					this.disableStatus = true;
+					return
+				} else if (v === 2) {
+					this.titname = '修改';
+					this.disableStatus = false;
+				} else if (v === 3) {
+					this.titname = '添加';
+					this.disableStatus = false;
+				}
+				let t1 = this.infolist.treaTime.split('~')[0];
+				let t2 = this.infolist.treaTime.split('~')[1];
+				let t3 = this.infolist.purchasePeriod.split('~')[0];
+				let t4 = this.infolist.purchasePeriod.split('~')[1];
+				this.infolist.treaTime = [t1,t2];
+				this.infolist.purchasePeriod = [t3,t4];
+				this.infolist.opNo = this.userInfo.loginNo;
+				this.infolist.opName = this.userInfo.loginName;
+			},
+			//添加
+			dialogCli(v) {
+				if (v === 1) {
+					this.infolist = {};
+					this.dialogStatus = false;
+					return
+				} else {
+					let t1 = this.$formatDate(this.infolist.purchasePeriod[0], "YYYY-MM-DD");
+					let t2 = this.$formatDate(this.infolist.purchasePeriod[1], "YYYY-MM-DD");
+					this.infolist.purchasePeriod = t1 + '~' + t2;
+					let t3 = this.$formatDate(this.infolist.treaTime[0], "YYYY-MM-DD");
+					let t4 = this.$formatDate(this.infolist.treaTime[1], "YYYY-MM-DD");
+					this.infolist.treaTime = t3+ '~' +t4;
+					if (this.titname === '添加') {
+						this.submitInfo("/market/cChannelContract/add");
+					} else if (this.titname === '修改') {
+						this.submitInfo("/market/cChannelContract/update", v);
+					}
+				}
+			},
+			submitInfo(u) {
+				let _this = this;
+				this.$refs.infolist.validate(valid => {
+					if (valid) {
+						this.loadinged = true;
+						this.$http({
+							url: u,
+							method: "post",
+							headers: {
+								"Content-Type": "application/json",
+							},
+							data: this.infolist,
+						}).then((res) => {
+							this.loadinged = false;
+							if (res.data.result === 1) {
+								_this.$message({
+									message: res.data.desc,
+									type: 'error'
+								});
+							} else {
+								_this.$message({
+									message: '成功',
+									type: 'success'
+								});
+								_this.infolist = {};
+								_this.dialogStatus = false;
+								_this.getList({}, _this.pageSize);
+							}
+
+						});
+					}
+				})
+			},
+			closeMessage(v) {
+				this.centerDialogVisible = false;
+				let _this = this;
+				if (v === 1) {
+					_this.$http({
+						url: "/market/cChannelContract/del",
+						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) {
+				console.log(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);
+
+			}
+		},
+		mounted() {
+			this.getList({}, 1);
+			this.getUser();
+		},
+		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>

+ 767 - 0
src/pages/main/serviceQuality/index.vue

@@ -0,0 +1,767 @@
+<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="dialogCheck(5)">合同信息管理
+					</el-button>
+					<el-button class="btn-check" size="medium" type="primary" @click="dialogCheck(6)">添加
+					</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="ledgerName" label="工单名称">
+					</el-table-column>
+					<el-table-column prop="opTime" label="创建时间">
+					</el-table-column>
+					<el-table-column prop="stsDesc" label="状态">
+					</el-table-column>
+					<el-table-column label="操作" width="160px" align="center">
+						<template slot-scope="scope">
+							<span style="margin:0 5px;">
+								<el-button size="mini" type="primary" @click="dialogCheck(1,scope.row)">查看</el-button>
+							</span>
+							<span style="margin:0 5px;" v-if="scope.row.opNo == userInfo.loginNo">
+								<el-button v-if="scope.row.sts == 3" size="mini" type="primary" @click="dialogCli(6,scope.row)">归档</el-button>
+								<el-button v-if="scope.row.sts == 0 || scope.row.sts == 2" size="mini" type="primary" @click="dialogCheck(4,scope.row)">修改</el-button>
+								<el-button v-if="scope.row.sts == 0 || scope.row.sts == 2" size="mini" type="danger" @click="delLine(scope.row)">删除</el-button>
+							</span>
+							<span style="margin:0 5px;" v-if="scope.row.secNo == userInfo.loginNo">
+								<el-button v-if="scope.row.sts == 1" size="mini" type="danger" @click="dialogCheck(2,scope.row)">审核</el-button>
+							</span>
+						</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="titname + '服务质量考核及结算审批'" :visible.sync="dialogStatus" width="50%" :destroy-on-close="true"
+			:modal-append-to-body="false" :close-on-click-modal="false" :before-close="closedia" :fullscreen="true">
+			<div v-loading="loadinged">
+				<el-form :model="infolist" ref="infolist" style="height: calc(100vh - 180px);overflow-y: scroll;">
+					<el-form-item class="info-line online">
+						<span>台账名称</span>
+						<el-input v-model="infolist.ledgerName" :disabled="disableStatus"></el-input>
+					</el-form-item>
+					<div class="tit">基本信息</div>
+					<div class="info-line">
+						<el-form-item>
+							<span>支撑方名称</span>
+							<el-input v-model="infolist.factoryName" :disabled="disableStatus" placeholder="支撑方名称">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>采购时段</span>
+							<el-date-picker v-model="infolist.purchasePeriod" type="daterange" placeholder="采购时段"
+								:disabled="disableStatus" style="display: inline-flex;width: calc(100% - 120px);">
+							</el-date-picker>
+						</el-form-item>
+						<el-form-item>
+							<span>协议编号</span>
+							<el-input v-model="infolist.treatyNo" :disabled="disableStatus" placeholder="协议编号">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>协议名称</span>
+							<el-select :popper-append-to-body="false" clearable v-model="infolist.contractName" placeholder="协议名称" @change="choContra">
+							    <el-option v-for="items in suppOpt" :key="items.id" :label="items.contractName"
+							        :value="items.id">
+							    </el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item>
+							<span>协议时段</span>
+							<el-date-picker v-model="infolist.treaTime" type="daterange" placeholder="协议时段"
+								:disabled="disableStatus" style="display: inline-flex;width: calc(100% - 120px);">
+							</el-date-picker>
+						</el-form-item>
+						<el-form-item>
+							<span>框架金额</span>
+							<el-input v-model="infolist.frameMoney" :disabled="disableStatus" placeholder="框架金额">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>人天单价</span>
+							<el-input v-model="infolist.unitPrice" :disabled="disableStatus" placeholder="人天单价">
+							</el-input>
+						</el-form-item>
+					</div>
+					<div style="padding-left: 100px">
+						<myUpload @uploadBack="uploadBack1" :fileInfo="fileInfo1" :fileList="fileInfo1.fileList">
+						</myUpload>
+					</div>
+					<div style="padding: 0 20px 0 100px;margin-bottom: 20px;">
+						<uploadDown :datalist="datalist" :dialogStatus="uploadstatus"></uploadDown>
+					</div>
+
+					<div class="tit" style="margin-top: 20px;">工作量核定信息</div>
+					<div class="info-line">
+						<el-form-item>
+							<span>评审工单名称</span>
+							<el-input v-model="infolist.workName" :disabled="disableStatus" placeholder="评审工单名称">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>评审工单编号</span>
+							<el-input v-model="infolist.workNo" :disabled="disableStatus" placeholder="评审工单编号">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>评审提交时间</span>
+							<el-date-picker v-model="infolist.workSubTime" type="date" placeholder="评审提交时间"
+								:disabled="disableStatus">
+							</el-date-picker>
+						</el-form-item>
+						<el-form-item>
+							<span>结果反馈时间</span>
+							<el-date-picker v-model="infolist.workFeedTime" type="date" placeholder="结果反馈时间"
+								:disabled="disableStatus">
+							</el-date-picker>
+						</el-form-item>
+						<el-form-item>
+							<span>报审量(人/天)</span>
+							<el-input v-model="infolist.workAmount" :disabled="disableStatus" placeholder="报审量(人/天)">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>核减(人/天)</span>
+							<el-input v-model="infolist.workCheck" :disabled="disableStatus" placeholder="核减(人/天)">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>有效(人/天)</span>
+							<el-input v-model="infolist.workValid" :disabled="disableStatus" placeholder="有效(人/天)">
+							</el-input>
+						</el-form-item>
+					</div>
+					<div style="padding-left: 100px">
+						<myUpload @uploadBack="uploadBack2" :fileInfo="fileInfo2" :fileList="fileInfo2.fileList">
+						</myUpload>
+					</div>
+					<!-- <div style="padding: 0 20px 0 100px;margin-bottom: 20px;">
+						<uploadDown :datalist="datalist" :dialogStatus="uploadstatus"></uploadDown>
+					</div> -->
+
+					<div class="tit" style="margin-top: 20px;">服务考核信息</div>
+					<div class="info-line">
+						<el-form-item>
+							<span>会议纪要名称</span>
+							<el-input v-model="infolist.serveName" :disabled="disableStatus" placeholder="会议纪要名称">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>会议纪要编号</span>
+							<el-input v-model="infolist.serveNo" :disabled="disableStatus" placeholder="会议纪要编号">
+							</el-input>
+						</el-form-item>
+					</div>
+					<el-form-item class="info-line mouth">
+						<span>服务评分</span>
+						<el-input v-model="serveScore[0]" :disabled="disableStatus" placeholder="月份">
+						</el-input>
+						月
+						<el-input v-model="serveScore[1]" :disabled="disableStatus"  style="margin-right:30px">
+						</el-input>
+						<el-input v-model="serveScore[2]" :disabled="disableStatus" placeholder="月份">
+						</el-input>
+						月
+						<el-input v-model="serveScore[3]" :disabled="disableStatus"  style="margin-right:30px">
+						</el-input>
+						<el-input v-model="serveScore[4]" :disabled="disableStatus" placeholder="月份">
+						</el-input>
+						月
+						<el-input v-model="serveScore[5]" :disabled="disableStatus"  style="margin-right:30px">
+						</el-input>
+					</el-form-item>
+					<div class="info-line">
+						<el-form-item>
+							<span>平均得分</span>
+							<el-input v-model="infolist.serveAveScore" :disabled="disableStatus" placeholder="平均得分">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>审批人员</span>
+							<el-input v-model="infolist.serveAuditName" :disabled="disableStatus" placeholder="审批人员">
+							</el-input>
+						</el-form-item>
+					</div>
+					<div style="padding-left: 100px">
+						<myUpload @uploadBack="uploadBack3" :fileInfo="fileInfo3" :fileList="fileInfo3.fileList">
+						</myUpload>
+					</div>
+					<!-- <div style="padding: 0 20px 0 100px;margin-bottom: 20px;">
+						<uploadDown :datalist="datalist" :dialogStatus="uploadstatus"></uploadDown>
+					</div> -->
+
+					<div class="tit" style="margin-top: 20px;">补充协议信息</div>
+					<div class="info-line">
+						<el-form-item>
+							<span>协议名称</span>
+							<el-input v-model="infolist.dealName" :disabled="disableStatus" placeholder="协议名称">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>签署时间</span>
+							<el-date-picker v-model="infolist.dealTime" type="date" placeholder="签署时间"
+								:disabled="disableStatus">
+							</el-date-picker>
+						</el-form-item>
+						<el-form-item>
+							<span>协议编号</span>
+							<el-input v-model="infolist.dealNo" :disabled="disableStatus" placeholder="协议编号">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>支付金额</span>
+							<el-input v-model="infolist.dealPay" :disabled="disableStatus" placeholder="支付金额">
+							</el-input>
+						</el-form-item>
+						<el-form-item>
+							<span>剩余预算</span>
+							<el-input v-model="infolist.dealSurplus" :disabled="disableStatus" placeholder="剩余预算">
+							</el-input>
+						</el-form-item>
+					</div>
+					<div style="padding-left: 100px">
+						<myUpload @uploadBack="uploadBack4" :fileInfo="fileInfo4" :fileList="fileInfo4.fileList">
+						</myUpload>
+					</div>
+					<!-- <div style="padding: 0 20px 0 100px;margin-bottom: 20px;">
+						<uploadDown :datalist="datalist" :dialogStatus="uploadstatus"></uploadDown>
+					</div> -->
+
+				</el-form>
+
+				<div slot="footer" class="dialog-footer myfooter">
+					<el-button type="primary" @click="dialogCli(2)" v-if="titname === '审核'">通 过
+					</el-button>
+					<el-button type="primary" @click="dialogCli(3)" v-if="titname === '审核'">打 回
+					</el-button>
+					<el-button type="primary" @click="dialogCli(4)" v-if="titname === '修改'||titname === '添加'">发 布
+					</el-button>
+					<el-button type="primary" @click="dialogCli(5)" v-if="titname === '修改'||titname === '添加'">草 稿
+					</el-button>
+					<el-button @click="dialogCli(1)" v-if="titname === '查看'">确 定</el-button>
+					<el-button @click="dialogCli(1)">取 消</el-button>
+				</div>
+			</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.vue";
+	import uploadDown from "../../../components/uploadDown.vue";
+	import deptTreeOnly from "../../../components/deptTreeOnly.vue"
+
+	export default {
+		components: {
+			mySearch,
+			myMessage,
+			toolList,
+			myUpload,
+			uploadDown,
+			deptTreeOnly
+		},
+		data() {
+			return {
+				searchList: [{
+					type: 'input',
+					tit: '合同名称',
+					value: '',
+					width: '24%',
+				}, {
+					type: 'input',
+					tit: '台账名称',
+					value: '',
+					width: '24%',
+				}, {
+					type: 'date',
+					tit: '开始时间',
+					value: '',
+					width: '24%',
+				}, {
+					type: 'date',
+					tit: '结束时间',
+					value: '',
+					width: '24%',
+				}, ],
+				tooltit: '服务质量考核及结算审批',
+				fullscreen: false,
+				total: 0,
+				pageSize: 1,
+				tableData: [],
+				dialogStatus: false,
+				disableStatus: false,
+				titname: '',
+				infolist: {},
+				userInfo: {},
+				params: {},
+				centerDialogVisible: false,
+				messTit: '',
+				delid: '',
+				loading: false,
+				loadinged: false,
+				attList1: [],
+				attList2: [],
+				attList3: [],
+				attList4: [],
+				fileInfo1: {
+					url: '/market/cmkAttachInfo/upload?uploadType=area1',
+					fileList: []
+				},
+				fileInfo2: {
+					url: '/market/cmkAttachInfo/upload?uploadType=area2',
+					fileList: []
+				},
+				fileInfo3: {
+					url: '/market/cmkAttachInfo/upload?uploadType=area3',
+					fileList: []
+				},
+				fileInfo4: {
+					url: '/market/cmkAttachInfo/upload?uploadType=area4',
+					fileList: []
+				},
+				datalist: {
+					url: '/market/compatt/downfile',
+					type: 1
+				},
+				uploadstatus: false,//文件状态
+				suppOpt: [],
+				serveScore: [],
+			}
+		},
+		methods: {
+			//选择合同
+			choContra(v){
+				for (let i = 0; i < this.suppOpt.length; i++) {
+					if(this.suppOpt[i].id == v){
+						this.infolist.contractName = this.suppOpt[i].contractName;
+						this.infolist.treatyNo = this.suppOpt[i].treatyNo;
+						this.infolist.factoryName = this.suppOpt[i].factoryName;
+						this.infolist.frameMoney = this.suppOpt[i].frameMoney;
+						this.infolist.unitPrice = this.suppOpt[i].unitPrice;
+						this.infolist.treaTime = [this.suppOpt[i].treaTime.split('~')[0], this.suppOpt[i].treaTime.split('~')[1]];
+						this.infolist.purchasePeriod = [this.suppOpt[i].purchasePeriod.split('~')[0], this.suppOpt[i].purchasePeriod.split('~')[1]];
+					}
+				}
+			},
+			closedia() {
+				this.infolist = {};
+				this.dialogStatus = false;
+			},
+			//搜索数据
+			searchInfo(v) {
+				this.params = {};
+				v[0] ? this.params.contractName = v[0] : '';
+				v[1] ? this.params.ledgerName = v[1] : '';
+				v[2] ? this.params.startTime = v[2] : '';
+				v[3] ? this.params.endTime = v[3] : '';
+				this.getList(this.params, this.pageSize);
+			},
+			//获取列表
+			getList(v, n) {
+				this.pageSize = n;
+				let _this = this;
+				this.loading = true;
+				this.tableData = [];
+				this.$http({
+					url: "/market/cChannelBusi/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) {
+				let _this = this;
+				this.dialogStatus = true;
+				this.infolist = Object.assign({}, n);
+				this.disableStatus = false;
+				if (v === 1) {
+					this.titname = '查看';
+					this.disableStatus = true;
+				} else if (v === 2) { //审核
+					this.titname = '审核';
+				} else if (v === 3) { //归档
+					this.titname = '归档';
+				} else if (v === 4) { //修改
+					this.titname = '修改';
+				} else if (v === 6) { //添加
+					this.titname = '添加';
+				} else if (v == 5) {
+					_this.$router.push({
+						path: '/contractInfo',
+					});
+					_this.setabList('合同信息管理', '/contractInfo');
+				}
+				this.infolist.treaTime = [this.infolist.treaTime.split('~')[0], this.infolist.treaTime.split('~')[1]];
+				this.infolist.purchasePeriod = [this.infolist.purchasePeriod.split('~')[0], this.infolist.purchasePeriod.split('~')[1]];
+				let serveScore1 = this.infolist.serveScore.split(';')[0];
+				let serveScore2 = this.infolist.serveScore.split(';')[1];
+				let serveScore3 = this.infolist.serveScore.split(';')[2];
+				this.serveScore = [serveScore1.split(',')[0],serveScore1.split(',')[1],serveScore2.split(',')[0],serveScore2.split(',')[1],serveScore3.split(',')[0],serveScore3.split(',')[1]];
+				this.infolist.opNo = this.userInfo.loginNo;
+				this.infolist.opName = this.userInfo.loginName;
+				this.infolist.opTime =  this.$formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss')
+			},
+			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));
+			},
+			//添加
+			dialogCli(v,n) {
+				if (v == 1) {
+					this.infolist = {};
+					this.dialogStatus = false;
+					return
+				}
+				// 0 草稿;1审核中;2未通过;3通过;4办结
+				let info = this.infolist;
+				info.attList1 = this.attList1;
+				info.attList2 = this.attList2;
+				info.attList3 = this.attList3;
+				info.attList4 = this.attList4;
+				info.workSubTime =  this.$formatDate(info.workSubTime, 'YYYY-MM-DD HH:mm:ss')
+				info.dealTime =  this.$formatDate(info.dealTime, 'YYYY-MM-DD HH:mm:ss')
+				info.workFeedTime =  this.$formatDate(info.workFeedTime, 'YYYY-MM-DD HH:mm:ss')
+				let t1 = this.$formatDate(info.purchasePeriod[0], "YYYY-MM-DD");
+				let t2 = this.$formatDate(info.purchasePeriod[1], "YYYY-MM-DD");
+				info.purchasePeriod = t1 + '~' + t2;
+				let t3 = this.$formatDate(info.treaTime[0], "YYYY-MM-DD");
+				let t4 = this.$formatDate(info.treaTime[1], "YYYY-MM-DD");
+				info.treaTime = t3+ '~' +t4;
+				info.serveScore = this.serveScore[0]+','+this.serveScore[1]+';'+this.serveScore[2]+','+this.serveScore[3]+';'+this.serveScore[4]+','+this.serveScore[5]+';';
+				if (v == 2) { //通过
+					info.sts = "3";
+					info.stsDesc = "通过";
+					this.submitInfo("/market/cChannelBusi/update", info);
+				}
+				if (v == 3) { //打回
+					info.sts = "2";
+					info.stsDesc = "打回";
+					this.submitInfo("/market/cChannelBusi/update", info);
+				}
+				if (v == 4) { //发布
+					info.sts = "1";
+					info.stsDesc = "待审核";
+					this.$http({
+						url: "/sysmgr/csysuserinfo/queryUserListByLoginNoAndDuty",
+						method: "post",
+						headers: {
+							"Content-Type": "application/json",
+							"page": '{"pageNo":"' + 1 + '","pageSize":"100"}'
+						},
+						data: {"duty":"7,12"},
+					}).then((res) => {
+						if(res.data.length == 0){
+							this.$message({
+								message: '暂无领导审批,发起失败!',
+								type: 'error'
+							});
+							return
+						}
+						info.secNo = res.data[0].loginNoStr;
+						info.secName = res.data[0].loginNameStr;
+						if(info.id){
+							this.submitInfo("/market/cChannelBusi/update", info);
+						}else{
+							this.submitInfo("/market/cChannelBusi/add", info);
+						}
+					});
+				}
+				if (v == 5) { //草稿
+					info.sts = "0";
+					info.stsDesc = "草稿";
+					if(info.id){
+						this.submitInfo("/market/cChannelBusi/update", info);
+					}else{
+						this.submitInfo("/market/cChannelBusi/add", info);
+					}
+				}
+				if (v == 6) { //归档
+					info.sts = "4";
+					info.stsDesc = "归档";
+					this.submitInfo("/market/cChannelBusi/update", n);
+				}
+			},
+			submitInfo(u, v) {
+				let _this = this;
+				this.$refs.infolist.validate(valid => {
+					if (valid) {
+						this.loadinged = true;
+						this.$http({
+							url: u,
+							method: "post",
+							headers: {
+								"Content-Type": "application/json",
+							},
+							data: v,
+						}).then((res) => {
+							this.loadinged = false;
+							if (res.data.result === 1) {
+								_this.$message({
+									message: res.data.desc,
+									type: 'error'
+								});
+							} else {
+								_this.$message({
+									message: '成功',
+									type: 'success'
+								});
+								_this.infolist = {};
+								_this.dialogStatus = false;
+								_this.getList({}, _this.pageSize);
+							}
+
+						});
+					}
+				})
+			},
+			closeMessage(v) {
+				this.centerDialogVisible = false;
+				let _this = this;
+				if (v === 1) {
+					_this.$http({
+						url: "/market/cChannelBusi/del",
+						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;
+			},
+			//文件返回值
+			uploadBack1(v) {
+				this.attList1 = v;
+			},
+			uploadBack2(v) {
+				this.attList2 = v;
+			},
+			uploadBack3(v) {
+				this.attList3 = v;
+			},
+			uploadBack4(v) {
+				this.attList4 = 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.$http({
+					url: "/market/cChannelContract/queryList",
+					method: "post",
+					headers: {
+						"Content-Type": "application/json",
+						"page": '{"pageNo":"' + 1 + '","pageSize":"1000"}'
+					},
+					data: {},
+				}).then((res) => {
+					this.suppOpt = res.data;
+				});
+
+			}
+		},
+		mounted() {
+			this.getList({}, 1);
+			this.getUser();
+		},
+		created() {
+
+		}
+	}
+</script>
+<style scoped lang="scss">
+	.tit {
+		font-size: 20px;
+		margin-bottom: 20px;
+	}
+
+	.compListree {
+		width: 100% !important;
+
+		span {
+			width: 100% !important;
+			display: inline-block;
+			padding: 10px 0;
+
+			em {
+				width: 120px;
+				display: inline-block;
+				font-style: normal;
+			}
+
+			.el-select {
+				width: calc(100% - 120px)
+			}
+		}
+	}
+
+	.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: 100px;
+			display: inline-block;
+			text-align: left;
+
+			i {
+				color: red;
+				display: inline-block;
+				padding-right: 5px;
+			}
+		}
+
+		.el-select,
+		.el-input {
+			width: calc(100% - 120px);
+		}
+	}
+	.mouth{
+		.el-input {
+			width: 95px;
+		}
+	}
+	.online {
+		width: 100%;
+
+		.el-select {
+			width: calc(100% - 100px);
+		}
+
+		span {
+			vertical-align: top;
+		}
+
+		.el-textarea {
+			width: calc(100% - 100px);
+		}
+
+		.tree {
+			width: calc(50% - 60px);
+			display: inline-block;
+			margin-right: 20px;
+			height: 300px;
+			overflow-y: scroll;
+
+			.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;
+			}
+		}
+	}
+</style>

+ 25 - 6
src/router/index.js

@@ -10,6 +10,24 @@ const routes = [{
     redirect: '/leader',
     children: [
         {
+            meta: { name:  '线上合作渠道合作引入', keepAlive: false },
+            path: '/introduce',
+            name: 'introduce',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/introduce/index.vue'], resolve)
+        },
+		{
+            meta: { name:  '服务质量考核及结算审批', keepAlive: false },
+            path: '/serviceQuality',
+            name: 'serviceQuality',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/serviceQuality/index.vue'], resolve)
+        },
+		{
+            meta: { name:  '合同信息管理', keepAlive: false },
+            path: '/contractInfo',
+            name: 'contractInfo',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/serviceQuality/contractInfo.vue'], resolve)
+        },
+		{
             meta: { name:  '营销类短信群发', keepAlive: false },
             path: '/groupMSsend',
             name: 'groupMSsend',
@@ -223,6 +241,13 @@ const routes = [{
                 },
             ]
         },
+		{
+		    meta: { name:  '科室绩效', keepAlive: false },
+		    path: '/recallkpi',
+		    name: 'recallkpi',
+		    component: (resolve) => require( /* webpackChunkName: "system" */
+		        ['../pages/main/achievements/recallMuban.vue'], resolve)
+		}, 
         {
             meta: { name:  '绩效管理', keepAlive: false },
             path: '/kpi',
@@ -256,12 +281,6 @@ const routes = [{
                     component: (resolve) => require( /* webpackChunkName: "system" */
                         ['../pages/main/achievements/seeMuban.vue'], resolve)
                 }, {
-                    meta: { name:  '科室绩效', keepAlive: false },
-                    path: '/recallkpi',
-                    name: 'recallkpi',
-                    component: (resolve) => require( /* webpackChunkName: "system" */
-                        ['../pages/main/achievements/recallMuban.vue'], resolve)
-                }, {
                     meta: { name:  '部门绩效', keepAlive: false },
                     path: '/recallBm',
                     name: 'recallBm',

+ 2 - 2
vue.config.js

@@ -94,8 +94,8 @@ module.exports = {
                 // target: 'http://192.168.2.149:9600',
                 // target: 'http://10.64.42.70:8088/',
                 // target: 'http://114.215.71.182:29600',
-                target: 'http://10.230.26.15:8000/spfm',
-                // target: 'http://192.168.2.145:9600/',
+                // target: 'http://10.230.26.15:8000/spfm',
+                target: 'http://192.168.2.145:9600/',
                 // target: 'http://192.168.2.170:9600/',
                 // target: 'http://192.168.2.169:9600/',
                 changeOrigin: true