Procházet zdrojové kódy

Merge branch 'master' of https://git.agilestar.cn/yangbifan/spfm-market-front

yangbifan před 2 roky
rodič
revize
64b71968ac

+ 592 - 0
src/components/workflowBase.vue

@@ -0,0 +1,592 @@
+<template>
+  <div>
+    <div class="flex-handle">
+      <div class="flex-left">
+        <div class="flex-left-header">
+          <div class="flex-path">
+            <div class="flex-left-header-text">
+              选择路径
+
+              <div class="flex-path-list">
+                <div v-if="transferStatus" @click="clickTransfer(1)">转派</div>
+                <div v-if="copyStatus" @click="clickTransfer(2)">抄送</div>
+                <div
+                  v-for="(item, index) in node.nextShapes"
+                  :key="index"
+                  :class="seleIndex == index ? 'active' : ''"
+                  @click="clickGetTree(item, index)"
+                >
+                  {{ item.properties.name }}
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="flex-commons">
+            <div class="flex-left-header-text">
+              常用意见
+              <span @click="clickEdit" class="flex-icon"
+                ><i class="el-icon-edit"></i>修改</span
+              >
+            </div>
+            <div class="flex-slide">
+              <div
+                v-for="(item, index) in commonlyList"
+                :key="index"
+                ref="common"
+                class="flex-common"
+                @click="clickCommonly($event)"
+              >
+                {{ item.dataName }}
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="flex-opinion">
+          <div class="flex-left-header-text">意见内容</div>
+          <el-input
+            type="textarea"
+            autosize
+            placeholder="请输入内容"
+            v-model="textarea"
+          >
+          </el-input>
+        </div>
+      </div>
+      <div class="flex-right" :class="{ copyClass: CopyStatus }">
+        <div
+          class="flex-left-header-text"
+          :class="{ 'flex-right-text': CopyStatus }"
+        >
+          本部门人员办理
+          <div style="display: flex">
+            <div class="flex-header-text-tree">
+              候选人
+              <deptTree
+                ref="defTree"
+                class="flex-slide"
+                :treeList="treeList"
+                @changeTree="changeTree"
+              />
+            </div>
+            <div class="flex-header-text-tree">
+              已选人员
+              <div class="">{{ selectUser }}</div>
+            </div>
+          </div>
+        </div>
+        <div v-if="CopyStatus" class="flex-left-header-text flex-right-text">
+          抄送人员
+          <div style="display: flex">
+            <div class="flex-header-text-tree">
+              抄送人
+              <deptTree
+                ref="defTrees"
+                class="flex-slide"
+                :treeList="treeCopyList"
+                @changeTree="changeTreeCopy"
+              />
+            </div>
+            <div class="flex-header-text-tree">
+              已选人员
+              <div class="">{{ copyUser }}</div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="flex-footer-botton">
+      <div class="flex-button">
+        <el-button type="primary" @click="submitWork()">提交</el-button>
+      </div>
+    </div>
+    <el-dialog
+      title="修改常用意见"
+      :visible.sync="editStatus"
+      width="100%"
+      :before-close="editCloses"
+      :modal="false"
+      :destroy-on-close="true"
+    >
+      <div style="overflow-y: scroll; overflow-x: hidden; height: 240px">
+        <div
+          v-for="(item, index) in commonlyList"
+          :key="index"
+          ref="common"
+          class="flex-common"
+        >
+          {{ item.dataName
+          }}<i class="el-icon-circle-close" @click="deleStatus(item)"></i>
+        </div>
+        <div class="flex-common">
+          <i class="el-icon-circle-plus-outline" @click="addStatus()"></i>
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import deptTree from "./workDeptThree.vue";
+export default {
+  components: {
+    deptTree,
+  },
+  name: "workflow",
+  data() {
+    return {
+      transferStatus: false, //转派按钮控制
+      TransferStatus: false, //是否点击转派状态
+      copyStatus: false, //抄送按钮控制
+      CopyStatus: false, //是否点击抄送状态
+      node: [], //路径列表
+      seleIndex: "", //点击路径下标
+      commonlyList: [], //常用意见数组
+      textarea: "未填写意见", //意见内容字段
+      copyUser: "", //抄送人员列表
+      selectUser: "", //已选人员列表
+      treeList: [], // 待选人员列表
+      propsList: [],
+      nodes: [],
+      initialList: [], //第一次进入是加载节点
+      clicknextName: "", //获取的流程节点
+      backThree: [],
+    };
+  },
+  props: {
+    //  表格数据和表格部分属性的对象
+    // eslint-disable-next-line vue/require-default-prop
+    list: {
+      type: Object,
+    },
+    requestForm: {
+      type: Object,
+    },
+  },
+  created() {
+    this.getNextPath(this.list.resourceId, 1);
+    this.getMetirialType();
+  },
+  methods: {
+    submitWork() {
+      if (this.TransferStatus === true) {
+        if (this.backThree.length > 0) {
+          this.nextWork();
+        } else {
+          this.$message.error("请选择候选人");
+          return false;
+        }
+      } else {
+        let list = {
+          userId: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员id
+          taskId: this.list.taskId, //表单标识
+          taskName: this.clicknextName, //流程节点
+          userCode: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员code
+          content: this.textarea, //意见内容
+          // resolution: this.nodes.currentShape[0].condition.resolution, //流程图线节点
+          // nextDealMan: this.backThree[0].loginNoStr || '', //下一步处理人
+        };
+        if (this.copyUser) {
+          //抄送
+          list.copyman = this.backCopyThree[0].loginNoStr;
+        }
+        if (this.nodes.currentShape) {
+          list.resolution = this.nodes.currentShape[0].condition.resolution;
+          list.approve = this.nodes.currentShape[0].condition.approve;
+        }
+        if (this.clicknextName === "") {
+          this.$message.error("请选择流程节点");
+          return false;
+        }
+        if (this.backThree.length > 0) {
+          list.nextDealMan = this.backThree[0].loginNoStr;
+        } else {
+          if (this.clicknextName === "流程结束") {
+          } else {
+            this.$message.error("请选择候选人");
+            return false;
+          }
+        }
+        this.nextWork(list);
+      }
+    },
+    async nextWork(list) {
+      //e:yes||no,list:传入数组,title:结束标签,res:驳回标签,id:工单更新id
+      let _this = this;
+      let obj = {
+        url: _this.$url.formList.nextWork, //下一步工作流接口
+        data: list,
+        status: "form",
+      };
+      if (_this.TransferStatus === true) {
+        let lists = {
+          userId: _this.backThree[0].loginNoStr,
+          taskId: _this.list.taskId,
+          content: _this.textarea,
+          tableName: _this.requestForm.processDefinitionKey,
+        };
+        obj.url = _this.$url.formList.transferTask + _this.list.taskId;
+        obj.data = lists;
+      }
+      await this.common.httpPost(obj, success);
+      function success(data) {
+        if (data != null) {
+          if (_this.TransferStatus === true) {
+            let list = {
+              taskId: data.taskid,
+              id: _this.list.id,
+              tableName: _this.requestForm.processDefinitionKey,
+            };
+
+            _this.setUpdate(list);
+          } else {
+            let list = {
+              taskId: data.taskid,
+              id: _this.list.id,
+              resourceId: _this.nodes.currentShape[0].resourceId,
+              taskName: _this.nodes.nextShapes[0].properties.name,
+              tableName: _this.requestForm.processDefinitionKey,
+            };
+            if (data.copytaskid) {
+              list.copytaskid = data.copytaskid;
+              list.copyman = _this.backCopyThree[0].loginNoStr;
+              // list.tableName = _this.requestForm.processDefinitionKey;
+            }
+            _this.setUpdate(list);
+          }
+        } else {
+          let list = {
+            taskName: "结束",
+            id: _this.list.id,
+            tableName: _this.requestForm.processDefinitionKey,
+          };
+          _this.setUpdate(list);
+        }
+        _this.dialogStatus = false;
+        _this.handleCloses();
+      }
+    },
+    setUpdate(e) {
+      this.$http({
+        url: "/market/waf/updateBase",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: e,
+      }).then((res) => {
+        this.$emit("updateForm", true);
+      });
+    },
+    //查询路径接口
+    getNextPath(e, status) {
+      let list = {
+        // fresourceId: "bf79721c-33f3-11ed-ba0b-00505687dcd3", //测试环境
+        fresourceId: this.requestForm.fresourceId, // 本地环境
+        processId: this.requestForm.processDefinitionKey,
+        // resourceId: e,
+      };
+      if (e) {
+        list.resourceId = e;
+      }
+      this.$http({
+        url: "/market/waf/queryPath",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: list,
+      }).then((res) => {
+        if (status === 1) {
+          //第一次进入取路径
+          this.initialList = res.data.body;
+          if (res.data.body.nextShapes[0].loop !== null) {
+            if (res.data.body.nextShapes[0].loop.loop === "true") {
+              this.transferStatus = true; //转派按钮生效
+            } else {
+              this.transferStatus = false;
+            }
+          } else {
+            this.transferStatus = false;
+          }
+          if (res.data.body.nextShapes[0].copy !== null) {
+            console.log(res.data.body.nextShapes[0].copy.copy);
+            if (res.data.body.nextShapes[0].copy.copy === "true") {
+              this.copyStatus = true; //抄送按钮生效
+            } else {
+              this.copyStatus = false;
+            }
+          } else {
+            this.copyStatus = false;
+          }
+          res.data.body.currentShape.map((item, index) => {
+            this.getNextPath(item.resourceId, 2);
+          });
+        }
+        if (status === 2) {
+          if (res.data.body.nextShapes[0].condition !== null) {
+            this.node = res.data.body;
+          } else {
+            this.getNextPath(res.data.body.nextShapes[0].resourceId, 2);
+          }
+        }
+        if (status === 3) {
+          this.nodes = res.data.body;
+          this.getTreeLists(res.data.body, 1);
+        }
+      });
+    },
+    //查询候选人接口
+    getTreeLists(e, status) {
+      let createdId = "createld";
+      let id =
+        e.nextShapes[0].properties.documentation === createdId
+          ? this.list.createId
+          : e.nextShapes[0].properties.documentation;
+      console.log(id);
+      this.$http({
+        url: "/market/api/user/info/queryNodePers?params=" + id,
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: "",
+      }).then((res) => {
+        console.log(status);
+        if (status === 2) {
+          this.treeCopyList = res.data; //抄送
+          //  this.$refs.defTrees.treeList = res.data;
+        } else {
+          this.treeList = res.data; //抄送
+          // this.$refs.defTree.treeList = res.data;
+          console.log(this.treeList);
+        }
+      });
+    },
+    //转派按钮方法
+    clickTransfer(e) {
+      if (e == 1) {
+        this.TransferStatus = true;
+      } else if (e == 2) {
+        this.CopyStatus = true;
+      }
+      this.getTreeLists(this.initialList, e);
+    },
+    //点击节点获取下一步的处理人字段
+    clickGetTree(e, index) {
+      this.CopyStatus = false;
+      this.TransferStatus = false;
+      //   this.clickTaskName = e.properties.name;
+      this.clicknextName = e.properties.name;
+      this.seleIndex = index;
+      this.getNextPath(e.resourceId, 3); //1 为点击后获取线
+    },
+    //点击常用意见方法
+    clickCommonly(e) {
+      this.textarea = e.currentTarget.innerHTML;
+    },
+    //点击修改
+    clickEdit() {
+      this.editStatus = true;
+    },
+    //选择树的回调
+    changeTree(e) {
+      if (e.length > 1) {
+        this.$message.error("只能选择一个人");
+        return;
+      } else {
+        this.backThree = e;
+        if (e[0]) {
+          this.selectUser = e[0].loginNameStr;
+        } else {
+          this.selectUser = "暂无选择";
+        }
+      }
+    },
+    //获取字典表常用意见
+    getMetirialType(e) {
+      this.$http({
+        url: "/market/cfgDataDict/queryList",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          dictCodePks: "approval",
+        },
+      }).then((res) => {
+        console.log(res);
+        this.commonlyList = res.data;
+      });
+    },
+    //添加字典表常用意见
+    geaddctType(e) {
+      this.$http({
+        url: "/market/cfgDataDict/add",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: e,
+      }).then((res) => {
+        this.getMetirialType();
+      });
+    },
+    //关闭修改
+    editCloses() {
+      this.editStatus = false;
+    },
+    //常用意见添加
+    addStatus() {
+      let newData = Date.parse(new Date());
+      this.$prompt("请输入常用意见", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+      })
+        .then(({ value }) => {
+          let list = {
+            dictCode: "approval",
+            dataCode: newData,
+            dataName: value,
+            dictName: "审批意见",
+          };
+          this.geaddctType(list);
+          this.$message({
+            type: "success",
+            message: "常用意见添加成功",
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "取消输入",
+          });
+        });
+    },
+    //常用意见删除
+    deleStatus(e) {
+      this.$confirm("此操作将删除此常用意见, 是否继续?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          let list = {
+            dataCode: e.dataCode,
+            dictCode: "approval",
+          };
+          this.geDelectType(list);
+          this.$message({
+            type: "success",
+            message: "删除成功!",
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除",
+          });
+        });
+    },
+    //删除字典表常用意见
+    geDelectType(e) {
+      this.$http({
+        url: "/market/cfgDataDicts/del",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: e,
+      }).then((res) => {
+        this.getMetirialType();
+      });
+    },
+  },
+};
+</script>
+
+<style lang='scss' scoped>
+.flex-header-text-tree {
+  width: 50%;
+  text-align: center;
+}
+.flex-icon {
+  float: right;
+  margin-right: 20px;
+  color: #4277a1;
+}
+.flex-handle {
+  width: 100%;
+  padding: 30px;
+  display: flex;
+  .flex-right {
+    width: 50%;
+    border: 1px solid #e1e1e1;
+    margin-left: 20px;
+  }
+}
+.flex-left {
+  width: 50%;
+  display: flex;
+  flex-direction: column;
+  .flex-left-header {
+    display: flex;
+    justify-content: space-around;
+    .flex-path {
+      height: 280px;
+      border: 1px solid #e1e1e1;
+      width: 68%;
+    }
+  }
+}
+.flex-common {
+  padding: 10px 5%;
+  font-size: 18px;
+}
+.flex-left-header-text {
+  height: 40px;
+  line-height: 40px;
+  color: black;
+  padding-left: 10px;
+  background-color: #cde4f6;
+  font-size: 18px;
+  font-weight: bold;
+}
+.flex-path-list {
+  overflow-y: scroll;
+  overflow-x: hidden;
+  height: 14rem;
+}
+.flex-slide {
+  overflow-y: scroll;
+  overflow-x: hidden;
+}
+.active {
+  background-color: #f3faff;
+}
+.flex-opinion {
+  height: 280px;
+  border: 1px solid #e1e1e1;
+  width: 100%;
+  margin-top: 20px;
+}
+.flex-right-text {
+  margin-right: 20px;
+  width: 50%;
+}
+.flex-commons {
+  height: 280px;
+  border: 1px solid #e1e1e1;
+  width: 30%;
+}
+.flex-footer-botton {
+  display: flex;
+  justify-content: space-evenly;
+}
+.flex-button {
+  margin-top: 10px;
+  margin-bottom: 10px;
+  ::v-deep .el-button--primary {
+    width: 222px;
+  }
+}
+</style>

+ 673 - 0
src/pages/main/terminals/advcheck.vue

@@ -0,0 +1,673 @@
+<template>
+  <fullscreen :fullscreen.sync="fullscreen" class="container">
+    <div class="container-box">
+      <toolList @iconCli="iconCli" :tooltit="tooltit"></toolList>
+      <div class="search">
+        <el-select v-model="advstatus" @change="advchange">
+          <el-option
+            v-for="items in advopt"
+            :key="items.id"
+            :label="items.name"
+            :value="items.id"
+          >
+          </el-option>
+        </el-select>
+      </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="process_id" label="工单编号">
+          </el-table-column>
+          <el-table-column prop="need_name" label="工单标题"> </el-table-column>
+          <el-table-column prop="createId" label="发起人"> </el-table-column>
+          <el-table-column prop="proposer" label="发起人姓名">
+          </el-table-column>
+          <el-table-column prop="proposer_time" label="发起时间">
+          </el-table-column>
+          <el-table-column prop="taskName" label="状态"> </el-table-column>
+          <el-table-column label="操作" width="120px" align="center">
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="primary"
+                @click="dialogCheck(scope.row, 1)"
+                >查看</el-button
+              >
+              <!--<el-button size="mini" type="danger" v-if="scope.row.sts==3"-->
+              <el-button
+                size="mini"
+                v-if="scope.row.status === '1'"
+                type="danger"
+                @click="dialogCheck(scope.row, 2)"
+                >审核</el-button
+              >
+              <!-- <el-button
+                v-if="
+                  userInfo.loginName == scope.row.opName && scope.row.sts == '3'
+                "
+                size="mini"
+                type="primary"
+                @click="advSure(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="广告管理"
+        v-if="dialogStatus"
+        :visible.sync="dialogStatus"
+        width="80%"
+        :destroy-on-close="true"
+        :modal-append-to-body="false"
+        :close-on-click-modal="false"
+      >
+        <div>
+          <advert
+            v-if="typestatsu === 2"
+            @closeEdio="closeEdio"
+            :componentInfo="componentInfo"
+            :componentStatus="componentStatus"
+            :changeinfo="changeinfo"
+          ></advert>
+        </div>
+      </el-dialog>
+
+      <el-dialog
+        title="定稿素材"
+        :visible.sync="dialogStatusc"
+        width="50%"
+        :destroy-on-close="true"
+        :modal-append-to-body="false"
+        :close-on-click-modal="false"
+      >
+        <!-- <el-form>
+                    <el-form-item class="info-line online">
+                        <span>素材类型</span>
+                        <el-select :popper-append-to-body="false" v-model="advtype" placeholder="素材类型">
+                            <el-option v-for="item in typeList" :key="item.dataCode" :label="item.dataName"
+                                :value="item.dataCode">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-form> -->
+        <div slot="footer" class="dialog-footer">
+          <el-button @click="dialogCli(1)" type="primary">确 定</el-button>
+          <el-button @click="dialogCli(2)">取 消</el-button>
+        </div>
+      </el-dialog>
+    </div>
+  </fullscreen>
+</template>
+<script>
+import {
+  getTodoBase,
+  getDoneBase,
+  getInitiateBase,
+} from "../../../http/api.js";
+import mySearch from "../../../components/search.vue";
+import toolList from "../../../components/toolList.vue";
+import advert from "./components/advert.vue";
+
+export default {
+  components: {
+    mySearch,
+    toolList,
+    advert,
+  },
+  data() {
+    return {
+      tooltit: "广告管理",
+      auditStatus: false,
+      fullscreen: false,
+      total: 0,
+      pageSize: 1,
+      tableData: [{}],
+      dialogStatus: false,
+      disableStatus: false,
+      infolist: {},
+      userInfo: {},
+      params: {},
+      typestatsu: 1,
+      options: [],
+      typeopt: [],
+      componentInfo: {},
+      componentStatus: false,
+      dialogStatusc: false,
+      loading: false,
+      changeinfo: false,
+      advstatus: "",
+      advopt: [
+        {
+          id: "0",
+          name: "待审批",
+        },
+        {
+          id: "1",
+          name: "已审批",
+        },
+        {
+          id: "2",
+          name: "我发起的",
+        },
+        {
+          id: "3",
+          name: "定稿 ",
+        },
+      ],
+      btnctrlStatus: false,
+      typeList: [],
+      advtype: "",
+      dgid: "",
+      singleTable: {},
+      shParam: {},
+      // isBtnShow: false,
+      isGDClick: false,
+      tableName: "ggsj_process",
+    };
+  },
+  methods: {
+    //我的待办
+    getQueryList() {
+      let list = {
+        tableName: this.tableName,
+      };
+      getTodoBase(this.pageSize, "", list).then((res) => {
+        this.tableData = res.data.data;
+        this.tableData.map((item) => {
+          item.status = "1";
+        });
+      });
+
+      // console.log(this.$utilflow);
+      // let res = this.$utilflow.getQueryList()
+      // console.log(res);
+      // this.$http({
+      //   url: "/market/waf/queryTodoBase",
+      //   method: "post",
+      //   headers: {
+      //     "Content-Type": "application/json",
+      //     page: '{"pageNo":"' + this.pageSize + '","pageSize":"10"}',
+      //   },
+      //   data: { tableName: this.tableName },
+      // }).then((res) => {
+      //   // console.log(res);
+      //   this.tableData = res.data.data;
+      //   // let data = res.data.list;
+      //   this.tableData.map((item) => {
+      //     // status === 1 需要审核
+      //     item.status = "1";
+      //   });
+      //   console.log(this.tableData);
+      //   this.total = res.data.totalRecord;
+      //   this.loading = false;
+      //   // this.isGDClick = false;
+      //   // if(this.advstatus==0){
+      //   // 	data.forEach(item => {
+      //   //         item.isBtnShow = false;
+      //   //         this.getSts(item)
+      //   // 	});
+      //   // }
+      //   // this.tableData = data;
+      // });
+    },
+    //我的已办
+    getQueryDone() {
+      let list = {
+        tableName: this.tableName,
+      };
+      getDoneBase(this.pageSize, "", list).then((res) => {
+        this.tableData = res.data.data;
+        this.tableData.map((item) => {
+          item.status = "2";
+        });
+        this.total = res.data.totalRecord;
+        this.loading = false;
+      });
+      // this.$http({
+      //   url: "/market/waf/queryDoneBase",
+      //   method: "post",
+      //   headers: {
+      //     "Content-Type": "application/json",
+      //     page: '{"pageNo":"' + this.pageSize + '","pageSize":"10"}',
+      //   },
+      //   data: { tableName: this.tableName },
+      // }).then((res) => {
+      //   console.log(res);
+      //   this.tableData = res.data.data;
+      //   // let data = res.data.list;
+      //   this.tableData.map((item) => {
+      //     // status === 2 不需要审核
+      //     item.status = "2";
+      //   });
+      //   this.total = res.data.totalRecord;
+      //   this.loading = false;
+      //   // this.isGDClick = false;
+      //   // if(this.advstatus==0){
+      //   // 	data.forEach(item => {
+      //   //         item.isBtnShow = false;
+      //   //         this.getSts(item)
+      //   // 	});
+      //   // }
+      //   // this.tableData = data;
+      // });
+    },
+    //我发起的
+    getMeLaunch() {
+      let list = {
+        tableName: this.tableName,
+      };
+      getInitiateBase(this.pageSize, "", list).then((res) => {
+        this.tableData = res.data.data;
+        this.tableData.map((item) => {
+          if (item.taskName === "起草") {
+            item.status = "1";
+          } else {
+            item.status = "2";
+          }
+        });
+        this.total = res.data.totalRecord;
+        this.loading = false;
+      });
+      // this.$http({
+      //   url: "/market/waf/queryInitiateBase",
+      //   method: "post",
+      //   headers: {
+      //     "Content-Type": "application/json",
+      //     page: '{"pageNo":"' + this.pageSize + '","pageSize":"10"}',
+      //   },
+      //   data: { tableName: this.tableName },
+      // }).then((res) => {
+      //   // let size = this.isNaNStatus(res.data);
+      //   this.tableData = res.data.data;
+      //   this.tableData.map((item) => {
+      //     if (item.taskName === "起草") {
+      //       item.status = "1";
+      //     } else {
+      //       item.status = "2";
+      //     }
+      //   });
+      //   // let data = res.data.list;
+      //   this.total = res.data.totalRecord;
+      //   this.loading = false;
+      // });
+    },
+    //定稿
+    getFinalized() {
+      this.$http({
+        url: "/market/ggsj/queryDone",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+          page: '{"pageNo":"' + this.pageSize + '","pageSize":"10"}',
+        },
+        data: {},
+      }).then((res) => {
+        console.log(res);
+        // let size = this.isNaNStatus(res.data);
+        this.tableData = res.data.data;
+        this.tableData.map((item) => {
+          item.status = "2";
+        });
+        // let data = res.data.list;
+        this.total = res.data.totalRecord;
+        this.loading = false;
+      });
+    },
+    //获取列表
+    getList(e) {
+      switch (e) {
+        //我的待办
+        case "0":
+          this.auditStatus = true;
+          this.getQueryList();
+          break;
+        //我的已办
+        case "1":
+          this.getQueryDone();
+          break;
+        //我发起的
+        case "2":
+          this.getMeLaunch();
+          break;
+        //定稿
+        case "3":
+          this.getFinalized();
+          break;
+      }
+      // this.pageSize = n;
+      // let _this = this;
+      // this.tableData = [];
+      // this.loading = true;
+      // let param = {
+      //   tableName: "ggsj_process",
+      // };
+      // this.$http({
+      //   url: "/market/waf/queryTodoBase",
+      //   method: "post",
+      //   headers: {
+      //     "Content-Type": "application/json",
+      //     page: '{"pageNo":"' + n + '","pageSize":"10"}',
+      //   },
+      //   data: param,
+      // }).then((res) => {
+      //   console.log(res);
+      //   this.tableData = res.data.data;
+      //   // let data = res.data.list;
+      //   this.total = res.data.totalRecord;
+      //   this.loading = false;
+      //   // this.isGDClick = false;
+      //   // if(this.advstatus==0){
+      //   // 	data.forEach(item => {
+      //   //         item.isBtnShow = false;
+      //   //         this.getSts(item)
+      //   // 	});
+      //   // }
+      //   // this.tableData = data;
+      // });
+      // this.$http({
+      //   url: "/market/waf/queryDoneBase",
+      //   method: "post",
+      //   headers: {
+      //     "Content-Type": "application/json",
+      //     page: '{"pageNo":"' + n + '","pageSize":"10"}',
+      //   },
+      //   data: param,
+      // }).then((res) => {
+      //   // console.log(res);
+      //   // this.tableData = res.data.data;
+      //   // // let data = res.data.list;
+      //   // this.total = res.data.totalRecord;
+      //   // this.loading = false;
+      //   // this.isGDClick = false;
+      //   // if(this.advstatus==0){
+      //   // 	data.forEach(item => {
+      //   //         item.isBtnShow = false;
+      //   //         this.getSts(item)
+      //   // 	});
+      //   // }
+      //   // this.tableData = data;
+      // });
+    },
+    async getSts(v) {
+      await this.$http({
+        url: "/bpm/api/taskInit",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          taskId: v.taskId,
+          woNo: v.id,
+        },
+      }).then((res) => {
+        this.shParam = res.data;
+        //  this.dialogCli(1);
+        // callback&&callback()
+        if (this.isGDClick) {
+          this.dialogCli(1);
+          return;
+        }
+        if (res.data.taskName == "需求部门") {
+          v.sts = "3";
+          return;
+        }
+        if (res.data.assigneeNo == this.userInfo.loginNo) {
+          v.sts = "0";
+          v.isBtnShow = true;
+          return;
+        }
+      });
+    },
+    // 分页
+    currchange(v) {
+      this.pageSize = v;
+      this.getList(this.params, this.pageSize);
+    },
+    advchange(e) {
+      this.getList(e);
+    },
+    //处理申请
+    dialogCheck(n, v) {
+      if (v == 1) {
+        console.log(n);
+        this.changeinfo = false;
+      } else {
+        this.changeinfo = true;
+      }
+      this.typestatsu = 2;
+      this.dialogStatus = true;
+      let params = {
+        woNo: n.id,
+        taskId: n.taskId,
+      };
+      this.componentInfo = n;
+      this.componentStatus = true;
+    },
+    // 归档
+    advSure(v) {
+      let _this = this;
+      // this.dialogStatusc = true;
+      this.isGDClick = true;
+      this.dgid = v.id;
+
+      this.getSts(v);
+    },
+    dialogCli(v) {
+      let _this = this;
+
+      if (v == 1) {
+        // let advTypeName = '';
+        // for (let i = 0; i < this.typeList.length; i++) {
+        //     if (this.typeList[i].dataCode == this.advtype) {
+        //         advTypeName = this.typeList[i].dataName;
+        //     }
+        // }
+        // let param = {
+        //     woNo: this.dgid,
+        //     advTypeName: advTypeName,
+        //     advType: this.advtype
+        // }
+        let gdParam = {
+          woNo: this.dgid,
+          // advTypeName: advTypeName,
+          // advType: this.advtype
+        };
+
+        this.shParam.params.terminalRes = JSON.stringify(
+          Object.assign(JSON.parse(this.shParam.params.terminalRes), gdParam)
+        );
+
+        let param = this.shParam;
+        this.$http({
+          // url: "/market/cadv/mkConfirmAdv",
+          url: "/bpm/api/submitTask",
+          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.getList(_this.params, _this.pageSize);
+          }
+        });
+      }
+      // this.dialogStatusc = false;
+      // this.advtype = '';
+      return;
+    },
+    closeEdio() {
+      this.getList(this.params, this.pageSize);
+      this.typestatsu = 1;
+      this.dialogStatus = false;
+      this.componentStatus = false;
+    },
+    gettype() {
+      this.$http({
+        url: "/sysmgr/cfgDataDicts/queryMap",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          dictCodePks: "materType",
+        },
+      }).then((res) => {
+        this.typeList = res.data.body.materType;
+      });
+    },
+    //功能栏
+    iconCli(v) {
+      if (v === 1) {
+        this.getList(this.params, this.pageSize);
+      }
+      if (v === 2) {
+        this.fullscreen = !this.fullscreen;
+      }
+    },
+    ctrlbtn() {
+      let v = JSON.parse(window.sessionStorage.childrenMenus);
+      for (let i = 0; i < v.length; i++) {
+        if (v[i].jspUrl == this.$route.path && v[i].systemflag == "1") {
+          this.btnctrlStatus = true;
+          return;
+        }
+      }
+    },
+  },
+  mounted() {
+    this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+    this.advstatus = this.$route.query.type;
+    this.getList(this.$route.query.type);
+    this.ctrlbtn();
+    this.gettype();
+  },
+  created() {},
+};
+</script>
+<style scoped lang="scss">
+.approval {
+  .roval-box {
+    padding: 0 20px;
+    margin-top: 20px;
+    margin-bottom: 10px;
+
+    .el-input {
+      width: calc(100% - 200px);
+      display: inline-block;
+    }
+
+    span {
+      display: inline-block;
+      width: 80px;
+      font-size: 14px;
+      margin-right: 20px;
+
+      .el-input {
+        width: 100%;
+        display: inline-block;
+      }
+    }
+  }
+}
+
+.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>

+ 308 - 0
src/pages/main/terminals/advdetailed.vue

@@ -0,0 +1,308 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container">
+        <div class="container-box">
+            <toolList :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">
+                <table cellspacing='0' style="width: auto;">
+                    <tr>
+                        <th colspan="8">广告设计费</th>
+                    </tr>
+                    <tr>
+                        <th>序号</th>
+                        <th>文件编号</th>
+                        <th>文件名称</th>
+                        <th>提供物料</th>
+                        <th>折后单价(含税,元)</th>
+                        <th>数量</th>
+                        <th>结算费用(含税,元)</th>
+                    </tr>
+                    <tr v-for="(item,index) in tabList">
+                        <td>
+                            <div style="text-align: left">{{index+1}}</div>
+                        </td>
+                        <td>
+                            <div style="text-align: left;">{{item.code}}</div>
+                        </td>
+                        <td>
+                            <div style="text-align: left;">{{item.name}}</div>
+                        </td>
+                        <td>
+                            <div class="tab-f" style="text-align: left;" v-for="items in item.wl">{{items}}</div>
+                        </td>
+                        <td>
+                            <div class="tab-f" style="text-align: left;" v-for="items in item.dj">{{items}}</div>
+                        </td>
+                        <td>
+                            <div class="tab-f" style="text-align: left;" v-for="items in item.sl">{{items}}</div>
+                        </td>
+                        <td>
+                            <div class="tab-f" style="text-align: left;" v-for="items in item.fy">{{items}}</div>
+                        </td>
+                        <!-- <td rowspan="11" v-if="index == 0">
+                            <el-input v-model="factoryName" :disabled="disableStatus"
+                                style="text-align: left;width: 200px;">
+                            </el-input>
+                        </td> -->
+                    </tr>
+                </table>
+                <div style="text-align: right;padding-top: 10px;padding-right: 20px;">
+                    <span style="margin-right: 20px;">合计数量:{{allNum}}</span>
+                    <span>结算费用:{{allPrice}}</span>
+                </div>
+            </div>
+        </div>
+    </fullscreen>
+</template>
+<script>
+    import mySearch from "../../../components/search.vue";
+    import toolList from "../../../components/toolList.vue";
+
+    export default {
+        components: {
+            mySearch,
+            toolList
+        },
+        data() {
+
+            return {
+				searchList: [{
+					type: 'input',
+					tit: '供应商名称',
+					value: '',
+					width: '98%',
+				},
+    //             {
+				// 	type: 'date',
+				// 	tit: '开始时间',
+				// 	value: '',
+				// 	width: '32%',
+				// }, {
+				// 	type: 'date',
+				// 	tit: '结束时间',
+				// 	value: '',
+				// 	width: '32%',
+				// },
+                ],
+                tooltit: '广告设计费明细',
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [],
+                dialogStatus: false,
+                disableStatus: false,
+                titname: '终端',
+                infolist: {},
+                typeOptions: [{
+                    dataCode: 1,
+                    dataName: 111,
+                }],
+                userInfo: {},
+                params: {},
+                infoApply: [],
+                tabList:[],
+                allPrice:0,
+                allNum:0,
+            }
+        },
+        methods: {
+			//搜索数据
+			searchInfo(v) {
+				this.params = {};
+				v[0] ? this.params.supplier = v[0] : '';
+				v[1] ? this.params.contractStartTimeFrom = this.$formatDate(v[1] , "YYYY-MM-DD") : '';
+				v[2] ? this.params.contractStartTimeTo = this.$formatDate(v[2] , "YYYY-MM-DD") : '';
+				this.getList(this.params, this.pageSize);
+			},
+            //获取列表
+            getList(v, n) {
+                this.pageSize = n;
+                let _this = this;
+                this.$http({
+                    url: "/market/cDesignSupplier/queryList",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                        "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                    },
+                    data: v,
+                }).then((res) => {
+                    this.tabList = res.data;
+                    this.allPrice = res.data[res.data.length-1].amountPrice;
+                    this.allNum = res.data[res.data.length-1].numTotal;
+                    this.tabList.pop();
+                });
+            },
+            // 分页
+            currchange(v) {
+                this.pageSize = v;
+                this.getList(this.params, this.pageSize);
+            },
+
+            // =======================
+            outlist() {
+                this.$http({
+                    url: "/market/cDesignSupplier/download",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    responseType: "blob",
+                    data: {supplier:this.params.supplier},
+                }).then((response) => {
+                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                        let blob = new Blob([response.data], {
+                            type: 'application/vnd.ms-excel'
+                        })
+                        window.navigator.msSaveOrOpenBlob(blob,
+                            new Date().getTime() + '.xlsx')
+                    } else {
+                        /* 火狐谷歌的文件下载方式 */
+                        var blob = new Blob([response.data])
+                        var downloadElement = document.createElement('a')
+                        var href = window.URL.createObjectURL(blob)
+                        downloadElement.href = href
+                        downloadElement.download = new Date().getTime() + '.xlsx'
+                        document.body.appendChild(downloadElement)
+                        downloadElement.click()
+                        document.body.removeChild(downloadElement)
+                        window.URL.revokeObjectURL(href)
+                    }
+                });
+            },
+            getUser() {
+                this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+                this.infolist = {
+                    opNo: '',
+                    opName: '',
+                };
+                this.infolist.opNo = this.userInfo.loginNo;
+                this.infolist.opName = this.userInfo.loginName;
+
+            }
+        },
+        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;
+            }
+        }
+    }
+
+
+    .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);
+        }
+    }
+
+    .tabbox {
+        margin-top: 15px;
+        height: calc(100vh - 300px);
+        overflow-y: scroll;
+
+        table {
+            border-bottom: 1px solid #ddd;
+            border-right: 1px solid #ddd;
+            text-align: center;
+            width: 100%!important;
+        }
+
+        tr {
+            // width: 100%;
+        }
+
+        th {
+            border: 1px solid #ddd;
+            border-bottom: 0;
+            border-right: 0;
+            padding: 5px 10px;
+            font-size: 14px;
+        }
+
+        td {
+            border: 1px solid #ddd;
+            border-bottom: 0;
+            border-right: 0;
+            // padding: 5px 10px;
+            font-size: 12px;
+            width: 10%;
+            div{
+                padding-left: 10px;
+            }
+        }
+    }
+    .tab-f{
+        padding: 10px 0;
+        border-bottom: 1px solid #ddd;
+    }
+    .tab-f:last-child{
+        border-bottom: 0;
+    }
+</style>

+ 894 - 0
src/pages/main/terminals/advertincrease.vue

@@ -0,0 +1,894 @@
+<template>
+  <div>
+    <!-- :rules="rules" -->
+    <div class="container">
+      <el-form :model="infolist" ref="infolist" class="container-box">
+        <h2 style="display: block; margin-bottom: 20px">广告申请</h2>
+        <div style="height: calc(100% - 160px); overflow-y: scroll">
+          <div class="info-line">
+            <el-form-item prop="need_name">
+              <span>文件标题</span>
+              <el-input
+                v-model="infolist.need_name"
+                placeholder="文件标题"
+                :disabled="disableStatus"
+              ></el-input>
+            </el-form-item>
+            <el-form-item prop="applydept">
+              <span>申请部门</span>
+              <el-input
+                v-model="infolist.applydept"
+                placeholder="申请部门"
+              ></el-input>
+              <!-- <el-select clearable v-model="infolist.dept" placeholder="申请部门">
+                                <el-option v-for="items in terminalopt" :key="items.procId" :label="items.procName"
+                                    :value="items.procId">
+                                </el-option>
+                            </el-select> -->
+            </el-form-item>
+            <el-form-item prop="proposer">
+              <span>申请人</span>
+              <el-input
+                v-model="infolist.proposer"
+                placeholder="申请人"
+              ></el-input>
+            </el-form-item>
+            <el-form-item prop="tel">
+              <span>联系电话</span>
+              <el-input
+                v-model="infolist.tel"
+                placeholder="联系电话"
+              ></el-input>
+            </el-form-item>
+            <!-- <el-form-item prop="time">
+                            <span>申请时间</span>
+                            <el-date-picker v-model="infolist.time" type="date" placeholder="申请时间">
+                            </el-date-picker>
+                        </el-form-item> -->
+            <el-form-item prop="filenum">
+              <span>文件编号</span>
+              <el-input
+                v-model="infolist.filenum"
+                placeholder="文件编号"
+                :disabled="true"
+              ></el-input>
+            </el-form-item>
+            <el-form-item prop="donetime">
+              <span>完成时间</span>
+              <el-date-picker
+                v-model="infolist.donetime"
+                type="date"
+                placeholder="完成时间"
+                :pickerOptions="pickerOptions"
+              >
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item prop="importance">
+              <span>紧急程度</span>
+              <el-select
+                :popper-append-to-body="false"
+                clearable
+                v-model="infolist.importance"
+                placeholder="紧急程度"
+              >
+                <el-option
+                  v-for="items in fireopt"
+                  :key="items.dataCode"
+                  :label="items.dataName"
+                  :value="items.dataCode"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item prop="sourcetype">
+              <span>素材类型</span>
+              <el-select
+                :popper-append-to-body="false"
+                clearable
+                v-model="infolist.sourcetype"
+                placeholder="素材类型"
+              >
+                <el-option
+                  v-for="items in materTypeopt"
+                  :key="items.dataCode"
+                  :label="items.dataName"
+                  :value="items.dataCode"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </div>
+
+          <div class="tgqd">
+            <span class="qd-tit">推广渠道</span>
+            <div class="qd-box">
+              <div class="zy">
+                <span>自有渠道</span>
+                <div style="display: flex">
+                  <el-checkbox-group v-model="spreadchannelzList">
+                    <el-checkbox label="实体渠道"></el-checkbox>
+                    <el-checkbox label="门户网站"></el-checkbox>
+                    <el-checkbox label="移动旗舰店app"></el-checkbox>
+                    <el-checkbox label="官方网站"></el-checkbox>
+                    <el-checkbox label="官方微信"></el-checkbox>
+                    <el-checkbox label="电视营业厅(魔百和)"></el-checkbox>
+                    <el-checkbox label="其他"></el-checkbox>
+                  </el-checkbox-group>
+                  <el-input
+                    v-model="spreadchannelzList"
+                    size="mini"
+                    style="margin-left: 20px"
+                  ></el-input>
+                </div>
+              </div>
+              <div class="zy">
+                <span>外部渠道</span>
+                <div>
+                  <el-checkbox-group v-model="spreadchannelwList">
+                    <el-checkbox label="广播"></el-checkbox>
+                    <el-checkbox label="电视"></el-checkbox>
+                    <el-checkbox label="报纸"></el-checkbox>
+                    <el-checkbox label="互联网"></el-checkbox>
+                    <el-checkbox label="户外"></el-checkbox>
+                    <el-checkbox label="社会渠道"></el-checkbox>
+                    <el-checkbox label="手机卖场"></el-checkbox>
+                  </el-checkbox-group>
+                </div>
+              </div>
+              <div class="zy">
+                <span style="width: 60px; text-align: right">其他</span>
+                <div>
+                  <el-input v-model="checkList3" size="mini"></el-input>
+                </div>
+              </div>
+            </div>
+          </div>
+
+          <el-form-item class="info-line online" prop="sellingpoint">
+            <span>产品及卖点</span>
+            <el-input
+              v-model="infolist.sellingpoint"
+              placeholder="产品及卖点"
+              type="textarea"
+              :rows="3"
+            >
+            </el-input>
+          </el-form-item>
+          <el-form-item class="info-line online" prop="procontent">
+            <span>宣传内容</span>
+            <el-input
+              v-model="infolist.procontent"
+              placeholder="宣传内容"
+              type="textarea"
+              :rows="3"
+            ></el-input>
+          </el-form-item>
+          <div style="padding-left: 80px">
+            <myUpload
+              @uploadBack="uploadBack"
+              :fileInfo="fileInfo"
+              :fileList="fileInfo.fileList"
+            >
+            </myUpload>
+          </div>
+        </div>
+        <div class="t-footer">
+          <el-button type="primary" @click="clickCheckexa">处 理</el-button>
+          <el-button type="primary" @click="clickSave">保 存</el-button>
+          <el-button @click="dialogCli(1)">取 消</el-button>
+        </div>
+      </el-form>
+    </div>
+    <el-dialog
+      title="选择审批人"
+      :visible.sync="checkexa"
+      width="100%"
+      :destroy-on-close="true"
+      :modal-append-to-body="false"
+      :close-on-click-modal="false"
+    >
+      <Workflow
+        :list="infolist"
+        :requestForm="requestForm"
+        @updateForm="updateForm"
+      />
+      <!-- <div>
+        <el-form :model="infolist" ref="infolist">
+          <el-form-item prop="visiblec" class="info-line online">
+            <span>审批人员</span>
+            <deptTreeOnly
+              class="tree"
+              @treeCheck="treeCheckonly"
+              :defaultList="defaultList"
+              :type="depttype"
+              :closeList="closeList"
+            ></deptTreeOnly>
+            <div class="tree treeUser">
+              <p>
+                {{ treeListonly.leaderAuditName }}
+                <i
+                  v-if="treeListonly.leaderAuditName"
+                  @click="deletes()"
+                  class="el-icon-error"
+                ></i>
+              </p>
+            </div>
+          </el-form-item>
+        </el-form>
+
+        <div slot="footer" style="text-align: right; padding-bottom: 20px">
+          <el-button type="primary" @click="dialogCli(2)">确 定</el-button>
+          <el-button @click="checkexa = false">取 消</el-button>
+        </div>
+      </div> -->
+    </el-dialog>
+  </div>
+</template>
+<script>
+import Qs from "qs";
+import { updateBase } from "../../../http/api.js";
+import Workflow from "../../../components/workflowBase";
+import mySearch from "../../../components/search.vue";
+import myUpload from "../../../components/upload.vue";
+import deptTreeOnly from "../../../components/deptTreeOnly.vue";
+
+export default {
+  components: {
+    mySearch,
+    myUpload,
+    deptTreeOnly,
+    Workflow,
+  },
+  data() {
+    // const tit = (rule, value, callback) => {
+    //   if (!this.infolist.tit) {
+    //     callback(new Error("不能为空"));
+    //   } else {
+    //     callback();
+    //   }
+    // };
+    // const dept = (rule, value, callback) => {
+    //   if (!this.infolist.dept) {
+    //     callback(new Error("不能为空"));
+    //   } else {
+    //     callback();
+    //   }
+    // };
+    // const opName = (rule, value, callback) => {
+    //   if (!this.infolist.opName) {
+    //     callback(new Error("不能为空"));
+    //   } else {
+    //     callback();
+    //   }
+    // };
+    // const phone = (rule, value, callback) => {
+    //   if (!this.infolist.phone) {
+    //     callback(new Error("不能为空"));
+    //   } else {
+    //     callback();
+    //   }
+    // };
+    // const time = (rule, value, callback) => {
+    //   if (!this.infolist.time) {
+    //     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("不能为空"));
+    //   } else {
+    //     callback();
+    //   }
+    // };
+    // const urgent = (rule, value, callback) => {
+    //   if (!this.infolist.urgent) {
+    //     callback(new Error("不能为空"));
+    //   } else {
+    //     callback();
+    //   }
+    // };
+    // const materType = (rule, value, callback) => {
+    //   if (!this.infolist.materType) {
+    //     callback(new Error("不能为空"));
+    //   } else {
+    //     callback();
+    //   }
+    // };
+    // const propaganda = (rule, value, callback) => {
+    //   if (!this.infolist.propaganda) {
+    //     callback(new Error("不能为空"));
+    //   } else {
+    //     callback();
+    //   }
+    // };
+    // const explain = (rule, value, callback) => {
+    //   if (!this.infolist.explain) {
+    //     callback(new Error("不能为空"));
+    //   } else {
+    //     callback();
+    //   }
+    // };
+    return {
+      // rules: {
+      //   tit: [
+      //     {
+      //       required: true,
+      //       trigger: "blur",
+      //       validator: tit,
+      //     },
+      //   ],
+      //   dept: [
+      //     {
+      //       required: true,
+      //       trigger: "blur",
+      //       validator: dept,
+      //     },
+      //   ],
+      //   opName: [
+      //     {
+      //       required: true,
+      //       trigger: "blur",
+      //       validator: opName,
+      //     },
+      //   ],
+      //   phone: [
+      //     {
+      //       required: true,
+      //       trigger: "blur",
+      //       validator: phone,
+      //     },
+      //   ],
+      //   time: [
+      //     {
+      //       required: true,
+      //       trigger: "change",
+      //       validator: time,
+      //     },
+      //   ],
+      //   // num: [{
+      //   //     required: true,
+      //   //     trigger: 'blur',
+      //   //     validator: num
+      //   // }],
+      //   overtime: [
+      //     {
+      //       required: true,
+      //       trigger: "change",
+      //       validator: overtime,
+      //     },
+      //   ],
+      //   urgent: [
+      //     {
+      //       required: true,
+      //       trigger: "change",
+      //       validator: urgent,
+      //     },
+      //   ],
+      //   materType: [
+      //     {
+      //       required: true,
+      //       trigger: "change",
+      //       validator: materType,
+      //     },
+      //   ],
+      //   propaganda: [
+      //     {
+      //       required: true,
+      //       trigger: "blur",
+      //       validator: propaganda,
+      //     },
+      //   ],
+      //   explain: [
+      //     {
+      //       required: true,
+      //       trigger: "blur",
+      //       validator: explain,
+      //     },
+      //   ],
+      // },
+      fullscreen: false,
+      total: 0,
+      pageSize: 1,
+      tableData: [{}],
+      disableStatus: false,
+      titname: "终端",
+      infolist: {},
+      terminal: "688225294361509888",
+      terminalopt: [
+        {
+          procId: "111",
+          procName: "1111",
+        },
+      ],
+      userInfo: {},
+      params: {},
+      infoApply: [],
+      options: [],
+      fireopt: [],
+      typeopt: [],
+
+      materTypeopt: [],
+      attList: [],
+      fileInfo: {
+        type: "img",
+        limit: 50,
+        url: "/market/ggsj/upload",
+        fileList: [],
+      },
+      checkList: [],
+      spreadchannelzList: [],
+      checkList1: "",
+      checkList2: [],
+      spreadchannelwList: [],
+      checkList3: "",
+      checkexa: false,
+      treeListonly: {},
+      defaultList: [],
+      closeList: false,
+      visionchonly: false,
+      depttype: 0,
+      request_form: {
+        userId: "",
+        userName: "",
+        path: this.$router.currentRoute.name,
+        userCode: JSON.parse(window.sessionStorage.userInfo).loginNo,
+        title: "",
+        businessKey: "",
+        processDefinitionKey: "ggsj_process",
+      },
+      requestForm: {
+          fresourceId: "99e7da22-5f04-11ed-b399-e00084564cce", //线上环境
+        // fresourceId: "e817fc35-5a51-11ed-8912-00505687dcd3", //测试环境
+        // fresourceId: "3c9baf21-3e43-11ed-ad6b-d6cd97160e00",//本地环境
+        processDefinitionKey: "ggsj_process",
+      },
+    };
+  },
+  computed: {
+    pickerOptions: function () {
+      return {
+        disabledDate(time) {
+          // if(time.getTime() < Date.now() - 8.64e7 || (time.getTime() > Date.now() && time.getTime() < Date.now() + 8.64e7*3) ){
+          //     return true
+          // }
+          if (time.getTime() < Date.now() + 8.64e7 * 3) {
+            return true;
+          }
+        },
+      };
+    },
+  },
+  methods: {
+    clickCheckexa() {
+      if (this.infolist.process_id) {
+        this.checkexa = true;
+      } else {
+        this.$message.error("请先保存工单");
+      }
+    },
+    updateForm(e) {
+      if (e) {
+        this.$router.push({
+          path: "/advcheck",
+          query: { type: 2 },
+        });
+      }
+    },
+    getUserIds() {
+      this.$http({
+        url: "/market/waf/queryRoleByName",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          userCode: JSON.parse(window.sessionStorage.userInfo).loginNo,
+        },
+      }).then((res) => {
+        this.request_form.title = this.userInfo.need_name;
+        this.request_form.userName = res.data.data.rows[0].name;
+        this.request_form.userId = res.data.data.rows[0].userCode;
+      });
+    },
+    //保存工单启动工作流
+    clickSave() {
+      if (this.spreadchannelzList !== []) {
+        this.infolist.spreadchannelzList = this.spreadchannelzList;
+      }
+      if (this.spreadchannelwList !== []) {
+        this.infolist.spreadchannelwList = this.spreadchannelwList;
+      }
+      if (this.attList !== []) {
+        this.infolist.mkFileShareAttachList = this.attList;
+      }
+      this.getUserIds();
+      this.$http({
+        url: "/market/ggsj/add",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: this.infolist,
+      }).then((res) => {
+        this.request_form.businessKey = res.data.body;
+        this.clickHandle(res.data.body);
+      });
+    },
+    async clickHandle(e) {
+      let _this = this;
+      let obj = {
+        url: this.$url.formList.startWork, //开始工作流接口
+        data: _this.request_form,
+        status: "form",
+        headers: {
+          "Content-Type": "application/x-www-form-urlencoded",
+        },
+      };
+
+      let res = await this.common.httpPost(obj, success);
+      function success(data) {
+        // _this.fromList.taskId = data.data;
+        // _this.taskId = data.data;
+        let list = {
+          id: e,
+          tableName: _this.request_form.processDefinitionKey,
+          // taskId:_this.formId,
+          processId: data.data,
+          // resourceId: _this.nextPath.currentShape[0].resourceId,
+        };
+        _this.setUpdate(list);
+      }
+    },
+    //更新工作流接口
+    setUpdate(e) {
+      updateBase(e).then((res) => {
+        this.infolist = res.data.body[0];
+      });
+      // this.$http({
+      //   url: "/market/waf/updateBase",
+      //   method: "post",
+      //   headers: {
+      //     "Content-Type": "application/json",
+      //   },
+      //   data: e,
+      // }).then((res) => {
+      //   this.infolist = res.data.body[0];
+      //   console.log(this.infolist);
+      //   // this.fromList.taskId = res.data.body.taskId;
+      //   // this.fromList.taskName = res.data.body.taskName;
+      //   // if (res.data.body.taskName === "起草") {
+      //   //   this.isSync = res.data.body.isSync;
+      //   // } else {
+      //   //   this.isSync = "1";
+      //   // }
+      //   // if (res.data.result === 0) {
+      //   //   this.$message.success("工作流更新成功");
+      //   // }
+      // });
+    },
+    deletes() {
+      this.treeListonly = {};
+      this.closeList = !this.closeList;
+    },
+    treeCheckonly(v) {
+      this.treeListonly = v;
+    },
+    //添加
+    dialogCli(v) {
+      if (v === 1) {
+        this.fileInfo.fileList = [];
+        this.infolist = {};
+        this.$router.go(-1);
+        return;
+      }
+      let _this = this;
+      let info = {};
+      info.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD");
+      info.opNo = this.userInfo.loginNo;
+      info.opName = this.userInfo.loginName;
+      info.woTitle = this.infolist.tit;
+
+      this.infolist.time = info.opTime;
+
+      info.params = {};
+      info.params.terminalRes = this.infolist;
+      for (let i = 0; i < this.checkList.length; i++) {
+        this.checkList[i] == "其他";
+        this.checkList[i] = this.checkList1;
+      }
+      info.params.terminalRes.checkList = this.checkList;
+      info.params.terminalRes.checkList2 = this.checkList2;
+      info.params.terminalRes.checkList3 = this.checkList3;
+
+      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.assigneeNo = this.treeListonly.leaderAuditNo;
+      info.params.assigneeName = this.treeListonly.leaderAuditName;
+
+      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) => {
+        if (valid) {
+          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.$router.push({
+                path: "/advcheck",
+                query: {
+                  type: 0,
+                },
+              });
+              // _this.setabList("广告管理列表", "/advcheck?type="+0);
+            }
+          });
+        }
+      });
+    },
+    //流程
+    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;
+      });
+    },
+    getlist() {
+      this.$http({
+        url: "/sysmgr/cfgDataDicts/queryMap",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          dictCodePks: "materType,jjcd,tgqd",
+        },
+      }).then((res) => {
+        this.materTypeopt = res.data.body.materType;
+        this.fireopt = res.data.body.jjcd;
+        this.extensionopt = res.data.body.tgqd;
+      });
+    },
+    getUser() {
+      this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+      this.infolist.proposer = this.userInfo.loginName;
+      // this.infolist.phone = this.userInfo.phoneNo;
+      this.infolist.applydepartment = this.userInfo.groupName;
+    },
+    uploadBack(v) {
+      this.attList = v;
+      console.log(this.attList);
+    },
+  },
+  mounted() {
+    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.filenum = _this.gettime;
+  },
+  created() {},
+};
+</script>
+<style scoped lang="scss">
+.t-footer {
+  text-align: right;
+  padding-right: 20px;
+  margin-top: 20px;
+}
+
+.onetab {
+  padding: 20px;
+  height: calc(100% - 180px);
+}
+
+.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);
+  }
+
+  .el-checkbox-group {
+    border: 1px solid #ddd;
+    padding-left: 20px;
+    height: 40px;
+    width: calc(100% - 100px);
+    border-radius: 5px;
+  }
+}
+
+.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;
+    }
+  }
+
+  .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;
+    }
+  }
+}
+
+.tgqd {
+  margin-bottom: 20px;
+
+  .qd-tit {
+    display: inline-block;
+    width: 100px;
+    padding-left: 20px;
+    vertical-align: top;
+  }
+
+  .qd-box {
+    border: 1px solid #ddd;
+    border-radius: 5px;
+    display: inline-block;
+    width: calc(100% - 120px);
+    min-height: 120px;
+    .zy {
+      display: flex;
+      line-height: 40px;
+      span {
+        display: inline-block;
+        margin: 0 20px;
+      }
+      .el-input {
+        width: 200px;
+      }
+    }
+  }
+}
+</style>

+ 241 - 0
src/pages/main/terminals/advertisement.vue

@@ -0,0 +1,241 @@
+<template>
+  <div>
+    <div class="container">
+      <div class="container-box">
+        <h2 class="font-ui">素材库</h2>
+        <div class="adv-type">
+          <div
+            v-for="item in typeList"
+            :key="item.dataCode"
+            @click="advmaterial(item)"
+          >
+            <span><i class="el-icon-folder-opened"></i></span>
+            <span>{{ item.dataName }}</span>
+          </div>
+        </div>
+        <h2 class="font-ui" style="margin-top: 20px">广告管理</h2>
+        <div class="adv-box">
+          <div class="adv-tit" @click="jumpadv('0')">
+            <i class="el-icon-time"></i>
+            <span
+              >待审批 
+              <!-- <em>{{ info.approvalNum || 0 }}</em> -->
+              </span
+            >
+          </div>
+          <div class="adv-tit" @click="jumpadv('1')">
+            <i class="el-icon-time"></i>
+            <span
+              >已审批 
+              <!-- <em>{{ info.approvalNum || 0 }}</em> -->
+              </span
+            >
+          </div>
+          <div class="adv-tit" @click="jumpadv('2')">
+            <i class="el-icon-time"></i>
+            <span
+              >我发起的
+               <!-- <em>{{ info.approvalNum || 0 }}</em> -->
+               </span
+            >
+          </div>
+          <div class="adv-tit" @click="jumpadv('3')">
+            <i class="el-icon-notebook-1"></i>
+            <!-- <span>定稿 <em>{{info.designNum||0}}</em></span> -->
+            <span
+              >定稿 
+              <!-- <em>{{ info.finalNum || 0 }}</em> -->
+              </span
+            >
+          </div>
+          <div class="adv-tit" @click="jumpinfo">
+            <span>广告设计费明细</span>
+          </div>
+          <div class="adv-tit" @click="advadd">
+            <i class="el-icon-plus"></i>
+            <span>申请</span>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  components: {},
+  data() {
+    return {
+      info: {},
+      typeList: [],
+    };
+  },
+  methods: {
+    jumpinfo() {
+      this.$router.push({
+        path: "/advdetailed",
+      });
+      this.setabList("广告设计费明细", "/advdetailed");
+    },
+    advadd() {
+      this.$router.push({
+        path: "/advertincrease",
+      });
+      this.setabList("广告申请", "/advertincrease");
+    },
+    jumpadv(v) {
+      this.$router.push({
+        path: "/advcheck",
+        query: {
+          type: v,
+        },
+      });
+      this.setabList("广告管理列表", "/advcheck?type=" + v);
+    },
+    advmaterial(v) {
+      this.$router.push({
+        path: "/advertmaterial",
+        query: {
+          type: v.dataCode,
+        },
+      });
+      this.setabList("素材库", "/advertmaterial?type=" + v.dataCode);
+    },
+    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));
+    },
+    getlist() {
+      this.$http({
+        url: "/market/cadv/queryMkAdvStsNum",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {},
+      }).then((res) => {
+        this.info = res.data;
+      });
+    },
+    gettype() {
+      this.$http({
+        url: "/sysmgr/cfgDataDicts/queryMap",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          dictCodePks: "materType",
+        },
+      }).then((res) => {
+        this.typeList = res.data.body.materType;
+      });
+    },
+    getUser() {
+      this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+    },
+  },
+  mounted() {
+    this.gettype();
+    // this.getUser();
+    this.getlist();
+  },
+  created() {},
+};
+</script>
+<style scoped lang="scss">
+.container-box {
+  padding: 0 30px;
+  height: calc(100% - 40px);
+  overflow-y: scroll;
+  padding-bottom: 20px;
+}
+.adv-box {
+  margin-top: 20px;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+
+  div {
+    display: inline-block;
+    cursor: pointer;
+    .el-card {
+      width: 100%;
+    }
+    i {
+      margin-right: 10px;
+    }
+  }
+
+  .adv-tit {
+    width: 28%;
+    border: 1px solid transparent;
+    border-radius: 5px;
+    height: 60px;
+    line-height: 60px;
+    padding-left: 20px;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+    overflow: hidden;
+    em {
+      float: right;
+      margin-right: 20px;
+      font-style: normal;
+      color: #0074d9;
+    }
+  }
+  .adv-tit:hover {
+    border: 1px solid #cfe8fc;
+    background: #cfe8fc;
+  }
+
+  .adv-add {
+    width: 100px;
+  }
+}
+.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: 24%;
+    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>

+ 241 - 0
src/pages/main/terminals/advertisements.vue

@@ -0,0 +1,241 @@
+<template>
+  <div>
+    <div class="container">
+      <div class="container-box">
+        <h2 class="font-ui">素材库</h2>
+        <div class="adv-type">
+          <div
+            v-for="item in typeList"
+            :key="item.dataCode"
+            @click="advmaterial(item)"
+          >
+            <span><i class="el-icon-folder-opened"></i></span>
+            <span>{{ item.dataName }}</span>
+          </div>
+        </div>
+        <h2 class="font-ui" style="margin-top: 20px">广告管理</h2>
+        <div class="adv-box">
+          <div class="adv-tit" @click="jumpadv('0')">
+            <i class="el-icon-time"></i>
+            <span
+              >待审批 
+              <!-- <em>{{ info.approvalNum || 0 }}</em> -->
+              </span
+            >
+          </div>
+          <div class="adv-tit" @click="jumpadv('1')">
+            <i class="el-icon-time"></i>
+            <span
+              >已审批 
+              <!-- <em>{{ info.approvalNum || 0 }}</em> -->
+              </span
+            >
+          </div>
+          <div class="adv-tit" @click="jumpadv('2')">
+            <i class="el-icon-time"></i>
+            <span
+              >我发起的
+               <!-- <em>{{ info.approvalNum || 0 }}</em> -->
+               </span
+            >
+          </div>
+          <div class="adv-tit" @click="jumpadv('3')">
+            <i class="el-icon-notebook-1"></i>
+            <!-- <span>定稿 <em>{{info.designNum||0}}</em></span> -->
+            <span
+              >定稿 
+              <!-- <em>{{ info.finalNum || 0 }}</em> -->
+              </span
+            >
+          </div>
+          <div class="adv-tit" @click="jumpinfo">
+            <span>广告设计费明细</span>
+          </div>
+          <div class="adv-tit" @click="advadd">
+            <i class="el-icon-plus"></i>
+            <span>申请</span>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  components: {},
+  data() {
+    return {
+      info: {},
+      typeList: [],
+    };
+  },
+  methods: {
+    jumpinfo() {
+      this.$router.push({
+        path: "/advdetailed",
+      });
+      this.setabList("广告设计费明细", "/advdetailed");
+    },
+    advadd() {
+      this.$router.push({
+        path: "/advertincrease",
+      });
+      this.setabList("广告申请", "/advertincrease");
+    },
+    jumpadv(v) {
+      this.$router.push({
+        path: "/advcheck",
+        query: {
+          type: v,
+        },
+      });
+      this.setabList("广告管理列表", "/advcheck?type=" + v);
+    },
+    advmaterial(v) {
+      this.$router.push({
+        path: "/advertmaterial",
+        query: {
+          type: v.dataCode,
+        },
+      });
+      this.setabList("素材库", "/advertmaterial?type=" + v.dataCode);
+    },
+    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));
+    },
+    getlist() {
+      this.$http({
+        url: "/market/cadv/queryMkAdvStsNum",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {},
+      }).then((res) => {
+        this.info = res.data;
+      });
+    },
+    gettype() {
+      this.$http({
+        url: "/sysmgr/cfgDataDicts/queryMap",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          dictCodePks: "materType",
+        },
+      }).then((res) => {
+        this.typeList = res.data.body.materType;
+      });
+    },
+    getUser() {
+      this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+    },
+  },
+  mounted() {
+    this.gettype();
+    // this.getUser();
+    this.getlist();
+  },
+  created() {},
+};
+</script>
+<style scoped lang="scss">
+.container-box {
+  padding: 0 30px;
+  height: calc(100% - 40px);
+  overflow-y: scroll;
+  padding-bottom: 20px;
+}
+.adv-box {
+  margin-top: 20px;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+
+  div {
+    display: inline-block;
+    cursor: pointer;
+    .el-card {
+      width: 100%;
+    }
+    i {
+      margin-right: 10px;
+    }
+  }
+
+  .adv-tit {
+    width: 28%;
+    border: 1px solid transparent;
+    border-radius: 5px;
+    height: 60px;
+    line-height: 60px;
+    padding-left: 20px;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+    overflow: hidden;
+    em {
+      float: right;
+      margin-right: 20px;
+      font-style: normal;
+      color: #0074d9;
+    }
+  }
+  .adv-tit:hover {
+    border: 1px solid #cfe8fc;
+    background: #cfe8fc;
+  }
+
+  .adv-add {
+    width: 100px;
+  }
+}
+.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: 24%;
+    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>

+ 513 - 0
src/pages/main/terminals/advertmaterial.vue

@@ -0,0 +1,513 @@
+<template>
+    <div>
+        <div class="container">
+            <div class="container-box">
+                <h2>素材库</h2>
+                <div class="adv-type">
+                    <div class="search-list-box">
+                    <el-select v-model="infotype" @change="changeType" class="search-box">
+                        <el-option v-for="items in typeList" :key="items.dataCode" :label="items.dataName"
+                            :value="items.dataCode">
+                        </el-option>
+                    </el-select>
+                    <el-input v-model="fileNameSearch" placeholder="文件名称" @input="searchInput" class="file-name-search search-box"></el-input>
+                    <el-select v-model="timeSort" @change="timeSortChange" class="search-box">
+                        <el-option v-for="item in sortList" :key="item.sortCode" :label="item.sortName"
+                            :value="item.sortCode">
+                        </el-option>
+                    </el-select>
+                    <div class="block search-box search-box1">
+                        <el-date-picker
+                        v-model="dateSearch"
+                        type="daterange"
+                        range-separator="至"
+                        start-placeholder="开始日期"
+                        end-placeholder="结束日期"
+                        @change="dateSearchChange"
+                        class="search-inner-box">
+                        </el-date-picker>
+                    </div>
+                    
+                    </div>
+                    <span>
+                        <myUpload style="float: left;" @uploadBack="uploadBack" :fileInfo="fileInfot"
+                            :fileList="fileInfot.fileList"></myUpload>
+                        <el-button type="primary" @click="mstatuschange" size="medium">{{mstatus?'取消多选':'多选'}}
+                        </el-button>
+                        <el-button type="primary" @click="dialogCli(1)" size="medium" :disabled="!mstatus">导出
+                        </el-button>
+                        <el-button type="danger" @click="dialogCli(2)" size="medium" :disabled="!mstatus">删除</el-button>
+                    </span>
+                </div>
+
+                <div class="img-box">
+                    <div class="boximg">
+                        <div v-for="(item,index) in imgList" :key="item.id" class="img-list">
+                            <div class="img-content">
+                                <img :src="item.fileBase64" alt="" @click="checkimg(item,index)">                           
+                                <el-checkbox v-if="mstatus" v-model="item.checked" @change="checkAdd(item)"></el-checkbox>
+                            </div>
+                            <input type="text" class="file-name" v-model="item.fileName" :readonly="!item.isRename" @dblclick="renameFile(item)" :style="{'border':!item.isRename ? 'none' : '1px solid #ddd'}" @blur="submitFileName(item)">
+                        </div>
+                    </div>
+                    <el-pagination :page-size="20" class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                        :total="total">
+                    </el-pagination>
+                </div>
+            </div>
+            <div v-if="bigImgs" class="bigimgcheck">
+                <i class="el-icon-close close" @click="bigImgs = false"></i>
+                <img :src="checksrc" alt="">
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+    import myUpload from "../../../components/upload";
+    export default {
+        components: {
+            myUpload
+        },
+        data() {
+            return {
+                info: {},
+                delbox: [],
+                infotype: "",
+                typeList: [],
+                fileInfot: {
+                    type: 'btn',
+                    typename: '新增素材',
+                    btntype: 'success',
+                    limit: 10,
+                    url: '/market/cadvMaterial/upload',
+                    fileList: [],
+                    advType: '',
+                    advTypeName: '',
+                },
+                total: 0,
+                pageSize: 1,
+                imgList: [],
+                bigImgs: false,
+                checksrc: null,
+                mstatus: false,
+                checkList: [],
+                params:{},
+                fileNameSearch: '',
+                isRename: true,
+
+                //时间排序
+                sortList:[
+                    {
+                        sortCode: '1',
+                        sortName: '倒序'
+                    },
+                    {
+                        sortCode: '2',
+                        sortName: '正序'
+                    }
+                ],
+                timeSort:'倒序',
+                isDesc: "desc",
+                dateSearch:[],
+                createTimeFrom: '',
+                createTimeTo:''
+            }
+        },
+        methods: {
+            changeType(v) {
+                for (let i = 0; i < this.typeList.length; i++) {
+                    if (this.typeList[i].dataCode == v) {
+                        this.fileInfot.advType = v;
+                        this.fileInfot.advTypeName = this.typeList[i].dataName;
+                        // this.infotype = v
+                        this.getlist(this.pageSize);
+                    }
+                }
+            },
+            timeSortChange(v){
+                if(v==1){
+                    this.isDesc = 'desc'
+                    this.getlist(this.pageSize);
+                }else if(v==2){
+                    this.isDesc = ''
+                    this.getlist(this.pageSize);
+                }
+            },
+            dateSearchChange(v){
+                this.createTimeFrom = this.$formatDate(v[0],"YYYY-MM-DD")
+                this.createTimeTo = this.$formatDate(v[1],"YYYY-MM-DD")
+                this.getlist(this.pageSize);
+                
+
+            },
+            searchInput(v){
+                this.fileNameSearch = v
+                this.getlist(this.pageSize);
+            },
+            uploadBack(v) {
+                this.getlist(this.pageSize);
+            },
+            dialogCli(v) {
+                let params = [];
+                let paramsf = [];
+                for (let i = 0; i < this.checkList.length; i++) {
+                    params.push({
+                        id: this.checkList[i].id
+                    })
+                    paramsf.push({
+                        compressFileId: this.checkList[i].compressFileId,
+                        fileName: this.checkList[i].fileName
+                    })
+                }
+                let _this = this;
+                if (v == 2) {
+                    this.$http({
+                        url: "/market/cadvMaterial/delBatchAdvMaterial",
+                        method: "post",
+                        headers: {
+                            "Content-Type": "application/json",
+                        },
+                        data: params,
+                    }).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);
+                        }
+                    });
+                }else if(v == 1){
+                    this.$http({
+                        url: "/market/cadvMaterial/exportAdvMaterialZip",
+                        method: "post",
+                        responseType: 'blob',
+                        headers: {
+                            "Content-Type": "application/json",
+                        },
+                        data: paramsf,
+                    }).then((response) => {
+                        if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                            let blob = new Blob([response.data], {
+                                type: response.data.type
+                            });
+                            window.navigator.msSaveOrOpenBlob(blob, 'adv.zip');
+                        } else {
+                            /* 火狐谷歌的文件下载方式 */
+                            console.log(response.data.type)
+                            var blob = new Blob([response.data])
+                            var downloadElement = document.createElement('a')
+                            var href = window.URL.createObjectURL(blob);
+                            downloadElement.href = href;
+                            downloadElement.download = 'adv.zip';
+                            document.body.appendChild(downloadElement);
+                            downloadElement.click();
+                            document.body.removeChild(downloadElement);
+                            window.URL.revokeObjectURL(href);
+                        }
+                    });
+                }
+            },
+            renameFile(v){
+                this.$set(v,'isRename',true)
+            },
+            submitFileName(v){
+                v.isRename = false;
+                let params = {
+                    id: v.id,
+                    fileName: v.fileName
+                }
+                this.$http({
+                    url: "/market/cadvMaterial/updateMkAdvFileName",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: params,
+                }).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);
+                        }
+                });
+               
+            },
+            getlist(v) {
+                let params = {
+                    advType: this.infotype,
+                    fileName: this.fileNameSearch,
+                    isDesc: this.isDesc,
+                    createTimeFrom: this.createTimeFrom,
+                    createTimeTo: this.createTimeTo,
+                };
+                if (this.infotype == '08') {
+                    params.advType = ''
+                }
+                this.$http({
+                    url: "/market/cadvMaterial/queryPage",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                        "page": '{"pageNo":"' + v + '","pageSize":"20"}'
+                    },
+                    data: params,
+                }).then((res) => {
+                    this.total = res.data.totalRecord;
+                    this.imgList = [];
+                    this.imgListold = res.data.data;
+                    res.data.data.forEach(item => {
+                        item.checked = false;
+                        this.imgList.push(item)
+                    })
+                });
+            },
+            // 分页
+            currchange(v) {
+                this.pageSize = v;
+                this.getlist(this.pageSize);
+            },
+            gettype() {
+                this.$http({
+                    url: "/sysmgr/cfgDataDicts/queryMap",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {
+                        dictCodePks: 'materType'
+                    },
+                }).then((res) => {
+                    this.typeList = res.data.body.materType;
+                    this.infotype = this.$route.query.type;
+                    this.changeType(this.infotype);
+                });
+            },
+            //切换状态
+            mstatuschange() {
+                this.mstatus = !this.mstatus;
+                this.checkList = [];
+                this.imgList = [];
+                for (let i = 0; i < this.imgListold.length; i++) {
+                    let item = this.imgListold[i];
+                    item.checked = false;
+                    this.imgList.push(item)
+                }
+            },
+            //点击图片
+            checkimg(v, i) {
+                if (this.mstatus) {
+                    this.imgList[i].checked = !this.imgList[i].checked;
+                    this.checkAdd(v);
+                    return
+                }
+                // this.bigImgs = true;
+                // this.checksrc = v.fileBase64;
+                this.$http({
+                    url: "/market/cadvMaterial/previewAdvMaterial?compressFileId=" + v.fileId,
+                    method: "post",
+                    responseType: 'blob',
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {},
+                }).then((res) => {
+                    let _this = this;
+                    if (res && res.data && res.data.size) {
+                        const dataInfo = res.data
+                        let reader = new window.FileReader()
+                        reader.readAsArrayBuffer(dataInfo)
+                        reader.onload = function(e) {
+                            const result = e.target.result
+                            const contentType = dataInfo.type;
+                            const blob = new Blob([result], {
+                                type: contentType
+                            })
+                            const url = window.URL.createObjectURL(blob)
+                            _this.bigImgs = true;
+                            _this.checksrc = url;
+                        }
+                    }
+                });
+            },
+            //选中图片
+            checkAdd(v) {
+                let s = true;
+                for (let i = 0; i < this.checkList.length; i++) {
+                    if (this.checkList[i].id == v.id) {
+                        s = false;
+                        this.checkList.splice(i, 1)
+                        return
+                    }
+                }
+                if (s) {
+                    this.checkList.push(v);
+                }
+            },
+            getUser() {
+                this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+            },
+        },
+        mounted() {
+            this.gettype();
+            this.getUser();
+            // this.getlist(this.pageSize);
+        },
+        created() {
+
+        },
+    }
+</script>
+<style scoped lang="scss">
+    .container-box {
+        h2 {
+            margin-bottom: 20px;
+        }
+
+        .adv-type {
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            .file-name-search{
+                width: 30%;
+            }
+            span {
+                display: inline-block;
+
+            }
+        }
+
+        .img-box {
+            height: 90%;
+
+            .boximg {
+                height: calc(100% - 190px);
+                overflow-y: scroll;
+                display: flex;
+                flex-wrap: wrap;
+                // justify-content: space-between;
+                margin-top: 20px;
+
+                .img-list {
+                    display: inline-block;
+                    width: 18%;
+                    margin-right: 2%;
+                    margin-bottom: 20px;
+                    overflow: hidden;
+                    // border: 1px solid #ddd;
+                    border-radius: 3px;
+                    background: #fff;
+                    position: relative;
+                    height: 50%;
+                    
+                   
+                    .img-content{
+                        border: 1px solid #ddd;
+                        display: flex;
+                        align-items: center;
+                        width: 100%;
+                        height: 80%;
+                        text-align: center;
+                        img {
+                        // width: 100%;
+                            display: block;
+                            max-width: 100%;
+                            max-height: 100%;
+                            // position: absolute;
+                            // top: 0;
+                            // bottom: 0;
+                            margin: auto;
+                            // height: 100%;
+                        }
+
+                        .el-checkbox {
+                            position: absolute;
+                            top: 0;
+                            right: 0;
+                            display: inline-block;
+                        }
+
+                        span {}
+                    }
+                    .file-name{
+                        margin-top: 5px;
+                        border: none;
+                        outline: none;
+                        width: 100%;
+                        white-space: nowrap;
+                        text-overflow: ellipsis;
+                        overflow: hidden;
+                    }
+                    
+                }
+            }
+        }
+
+        .pageBox {
+            text-align: right;
+            margin-top: 10px;
+        }
+    }
+
+    .bigimgcheck {
+        position: absolute;
+        top: 0;
+        left: 0;
+        width: 100vw;
+        height: 100vh;
+        z-index: 10000;
+        background: rgba(0, 0, 0, .6);
+
+        img {
+            position: absolute;
+            top: 0;
+            left: 0;
+            bottom: 0;
+            right: 0;
+            margin: auto;
+            max-width: 90vw;
+        }
+
+        .close {
+            position: absolute;
+            top: 40px;
+            right: 40px;
+            font-size: 28px;
+            color: #fff;
+            background: rgba(0, 0, 0, .5);
+            border-radius: 50%;
+            padding: 5px;
+            cursor: pointer;
+        }
+    }
+    .search-list-box{
+        display: flex;
+        flex-wrap: wrap;
+        max-width: 50%;
+        .search-box{
+            width: 30%;
+            margin-right: 10px;
+            margin-bottom: 10px;
+            .search-inner-box{
+                width: 100%
+            }
+        }
+        .search-box1{
+            width: 80%;
+        }
+
+    }
+    
+</style>

+ 914 - 0
src/pages/main/terminals/components/advert.vue

@@ -0,0 +1,914 @@
+<template>
+  <div>
+    <div style="height: 50vh; overflow-y: scroll">
+      <el-form :model="infoApply" ref="infoApply">
+        <div class="info-line">
+          <el-form-item prop="need_name">
+            <span>申请标题</span>
+            <el-input
+              disabled
+              v-model="infoApply.need_name"
+              placeholder="申请标题"
+            ></el-input>
+          </el-form-item>
+          <el-form-item prop="applydept">
+            <span>申请流程</span>
+            <el-input
+              disabled
+              v-model="infoApply.applydept"
+              placeholder="广告申请"
+            ></el-input>
+          </el-form-item>
+        </div>
+        <div class="info-line">
+          <el-form-item prop="applydept">
+            <span>申请部门</span>
+            <el-input
+              disabled
+              v-model="infoApply.applydept"
+              placeholder="申请部门"
+            ></el-input>
+            <!-- <el-select disabled clearable v-model="infoApply.dept" placeholder="申请部门">
+                            <el-option v-for="items in terminalopt" :key="items.id" :label="items.ou" :value="items.id">
+                            </el-option>
+                        </el-select> -->
+          </el-form-item>
+          <el-form-item prop="proposer">
+            <span>申请人</span>
+            <el-input
+              disabled
+              v-model="infoApply.proposer"
+              placeholder="申请人"
+            ></el-input>
+          </el-form-item>
+        </div>
+        <div class="info-line">
+          <el-form-item>
+            <span>申请时间</span>
+            <el-date-picker
+              disabled
+              v-model="infoApply.time"
+              type="date"
+              placeholder="申请时间"
+            >
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item prop="tel">
+            <span>联系电话</span>
+            <el-input
+              disabled
+              v-model="infoApply.tel"
+              placeholder="联系电话"
+            ></el-input>
+          </el-form-item>
+        </div>
+        <div class="info-line">
+          <el-form-item prop="filenum">
+            <span>文件编号</span>
+            <el-input
+              disabled
+              v-model="infoApply.filenum"
+              placeholder="文件编号"
+            >
+            </el-input>
+          </el-form-item>
+          <el-form-item>
+            <span>完成时间</span>
+            <el-date-picker
+              disabled
+              v-model="infoApply.donetime"
+              type="date"
+              placeholder="完成时间"
+            >
+            </el-date-picker>
+          </el-form-item>
+        </div>
+
+        <div class="info-line">
+          <el-form-item>
+            <span>紧急程度</span>
+            <el-select
+              disabled
+              clearable
+              v-model="infoApply.importance"
+              placeholder="紧急程度"
+            >
+              <el-option
+                v-for="items in fireopt"
+                :key="items.dataCode"
+                :label="items.dataName"
+                :value="items.dataCode"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <span>素材类型</span>
+            <el-select
+              disabled
+              clearable
+              v-model="infoApply.sourcetype"
+              placeholder="素材类型"
+            >
+              <el-option
+                v-for="items in materTypeopt"
+                :key="items.dataCode"
+                :label="items.dataName"
+                :value="items.dataCode"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </div>
+
+        <!-- <el-form-item class="info-line online">
+                    <span>自有渠道</span>
+                    <el-input disabled v-model="infoApply.checkList"></el-input>
+                </el-form-item>
+                <el-form-item class="info-line online">
+                    <span>外部渠道</span>
+                    <el-input disabled v-model="infoApply.checkList2"></el-input>
+                </el-form-item>
+                <el-form-item class="info-line online">
+                    <span>其他</span>
+                    <el-input disabled v-model="infoApply.checkList3"></el-input>
+                </el-form-item> -->
+
+        <el-form-item class="info-line online">
+          <span>宣传内容</span>
+          <el-input
+            disabled
+            v-model="infoApply.sellingpoint"
+            placeholder="广告宣传内容"
+            type="textarea"
+            :rows="3"
+          ></el-input>
+        </el-form-item>
+        <el-form-item class="info-line online">
+          <span>其他说明</span>
+          <el-input
+            disabled
+            v-model="infoApply.procontent"
+            placeholder="设计稿内容描述"
+            type="textarea"
+            :rows="3"
+          ></el-input>
+        </el-form-item>
+        <div style="padding: 0 20px 0 100px; margin-bottom: 20px">
+          <uploadDown
+            ref="myupload"
+            :datalist="datalist"
+            :dialogStatus="uploadstatus"
+          ></uploadDown>
+        </div>
+        <div
+          style="padding: 0 20px 0 100px; margin-bottom: 20px"
+          v-if="uploadsts"
+        >
+          <myUpload
+            @uploadBack="uploadBack"
+            :fileInfo="fileInfo"
+            :fileList="fileInfo.fileList"
+          >
+          </myUpload>
+        </div>
+        <!-- <el-form-item class="info-line online" v-if="changeinfo">
+          <span>备注</span>
+          <el-input
+            :disabled="!changeinfo"
+            v-model="infolist.remark"
+            placeholder="备注"
+          ></el-input>
+        </el-form-item> -->
+      </el-form>
+
+      <div v-if="suppSts" class="supp-box">
+        <span style="padding-left: 20px; padding-top: 8px">简易设计</span>
+        <div v-for="item in gys" class="suppdiv">
+          <el-checkbox
+            :disabled="!changeinfo || !suppdis"
+            v-model="item.sts"
+            @change="cancel(item)"
+            ><span>{{ item.type }}</span></el-checkbox
+          >
+          <div class="box">
+            <div v-for="one in item.list" class="supp-list">
+              <el-select
+                :disabled="!changeinfo || !suppdis"
+                v-model="one.cho"
+                placeholder="请选择供应商"
+                @change="priceone(one, item)"
+              >
+                <el-option
+                  v-for="items in item.supplier"
+                  :key="items.name"
+                  :label="items.name"
+                  :value="items.name"
+                >
+                </el-option>
+              </el-select>
+              <el-input
+                :disabled="!changeinfo || !suppdis"
+                v-model="one.num"
+                placeholder="数量"
+                @input="numChange(one)"
+              ></el-input>
+            </div>
+          </div>
+          <el-button @click="item.list.push({})" type="text" v-if="suppdis"
+            >继续添加</el-button
+          >
+        </div>
+      </div>
+
+      <div style="margin-bottom: 20px; padding: 0 20px">
+        <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="assignee" label="处理人"> </el-table-column>
+          <!-- <el-table-column prop="opNo" label="处理人工号"> </el-table-column> -->
+          <el-table-column prop="endTime" label="处理时间"> </el-table-column>
+          <el-table-column prop="content" label="备注"> </el-table-column>
+        </el-table>
+      </div>
+    </div>
+    <el-dialog
+      title="选择审批人"
+      v-if="checkexa"
+      :before-close="handleClose"
+      :visible.sync="checkexa"
+      :modal="false"
+      width="100%"
+      :destroy-on-close="true"
+      :modal-append-to-body="false"
+      :close-on-click-modal="false"
+    >
+      <Workflow
+        :list="infoApply"
+        :requestForm="requestForm"
+        @updateForm="updateForm"
+      />
+    </el-dialog>
+    <div slot="footer" class="dialog-footer">
+      <el-button v-if="changeinfo" type="primary" @click="dialogCli(2)"
+        >处 理</el-button
+      >
+      <!-- <el-button v-if="changeinfo" type="primary" @click="dialogCli(1)"
+        >驳 回</el-button
+      > -->
+      <!-- <el-button v-if="!changeinfo" @click="dialogCli(3)">确 定</el-button> -->
+      <el-button @click="dialogCli(3)">取 消</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import Workflow from "../../../../components/workflowBase";
+import uploadDown from "../../../../components/uploadDown.vue";
+import myUpload from "../../../../components/upload.vue";
+export default {
+  props: ["componentInfo", "componentStatus", "changeinfo"],
+  components: {
+    uploadDown,
+    myUpload,
+    Workflow,
+  },
+  data() {
+    return {
+      requestForm: {
+        fresourceId: "99e7da22-5f04-11ed-b399-e00084564cce", //线上环境
+        // fresourceId: "e817fc35-5a51-11ed-8912-00505687dcd3", //测试环境
+        // fresourceId: "3c9baf21-3e43-11ed-ad6b-d6cd97160e00", //本地环境
+        processDefinitionKey: "ggsj_process",
+      },
+      checkexa: false,
+      cdisable: true,
+      dialogStatus: false,
+      infolist: {},
+      rovaList: [],
+      infoApply: {
+        esay: [],
+        picter: [],
+        medium: [],
+        product: [],
+        copywriting: [],
+        video: [],
+        all: [],
+        testing: [],
+        esaystr: "",
+        picterstr: "",
+        mediumstr: "",
+        productstr: "",
+        copywritingstr: "",
+        videostr: "",
+        allstr: "",
+        testingstr: "",
+      },
+      userInfo: {},
+      terminList: [],
+      oneterminal: "",
+      options: [],
+      fireopt: [],
+      typeopt: [],
+      esayopt: [],
+      picteropt: [],
+      mediumopt: [],
+      productopt: [],
+      copywritingopt: [],
+      videoopt: [],
+      allopt: [],
+      testingopt: [],
+      otheropt: [],
+      extensionopt: [],
+      terminalopt: [],
+      materTypeopt: [],
+      datalist: {
+        url: "/bpm/api/download",
+        type: 1,
+      },
+      fileInfo: {
+        type: "img",
+        limit: 50,
+        url: "/market/ggsj/upload",
+        fileList: [],
+      },
+      uploadstatus: false,
+      suppSts: false,
+      suppdis: false,
+      uploadsts: false,
+      attList: [],
+      mkFileShareAttachList:[],
+      gys: [
+        // {
+        //     type:'设计类型1',
+        //     supplier:[
+        //         {
+        //             name:'供应商1',
+        //             price:100
+        //         },
+        //         {
+        //             name:'供应商2',
+        //             price:200
+        //         },
+        //     ],
+        //     list:[{}]
+        // },
+        // {
+        //     type:'设计类型2',
+        //     supplier:[
+        //         {
+        //             name:'供应商3',
+        //             price:100
+        //         },
+        //         {
+        //             name:'供应商4',
+        //             price:200
+        //         },
+        //     ],
+        //     list:[{}]
+        // },
+      ],
+    };
+  },
+  methods: {
+    updateForm(e) {
+      if (e) {
+        this.$router.go(0);
+      }
+    },
+    //取消勾选时清空后边对应的供应商数据
+    cancel(item) {
+      let chexeboxSts = item.sts;
+      //如果页面取消勾选那么将清空复选框后的内容
+      if (!chexeboxSts) {
+        item.list = [{}];
+      }
+    },
+    uploadBack(v) {
+      this.attList = v;
+    },
+    priceone(v, item) {
+      for (let i = 0; i < item.supplier.length; i++) {
+        if (v.cho == item.supplier[i].name) {
+          v.price = item.supplier[i].price;
+        }
+      }
+      v.cho = v.cho + " " + v.price * (v.num || 1) + "元";
+    },
+    numChange(v) {
+      if (!v.cho) return;
+      v.cho = v.cho.split(" ")[0] + " " + v.price * v.num + "元";
+    },
+    //流程追踪接口
+    async clickForm(e) {
+      let list = {
+        processInstanceId: e.process_id,
+        // taskId:e.taskId
+      };
+      let _this = this;
+      let obj = {
+        url: this.$url.formList.getCommentsByProcessId, //流程追踪接口
+        data: list,
+        headers: {
+          "Content-Type": "application/json",
+        },
+      };
+
+      let res = await this.common.httpPost(obj, success);
+      function success(data) {
+         data.data.map((item) => {
+          item.startTime = _this.$util.datetimeFormat(item.startTime);
+          item.endTime = _this.$util.datetimeFormat(item.endTime);
+        });
+        console.log(data.data);
+        _this.rovaList = data.data;
+        // _this.lables.data = data.data;
+        // data.data.map((item) => {
+        //   item.startTime = _this.$util.datetimeFormat(item.startTime);
+        //   item.endTime = _this.$util.datetimeFormat(item.endTime);
+        // });
+        // // _this.getProcess(e, data.data);
+        // _this.lables.data = data.data;
+      }
+    },
+    //处理申请
+    dialogCheck() {
+      this.infoApply = this.componentInfo;
+      this.uploadstatus = true;
+      //判断当前是否有余额上传
+      // if (this.infoApply.price) {
+      //   this.gys = JSON.parse(this.infoApply.param_val);
+      //   console.log(this.gys);
+      //   this.suppSts = true;
+      //   this.suppdis = true;
+      // }else{
+      //   this.suppSts = false;
+      // }
+      
+      this.getinfolist();
+      //判断当前节点
+      if (this.infoApply.taskName == "宣传负责人审批") {
+        this.suppSts = true;
+        this.suppdis = true;
+        this.getSupp();
+      }
+      if (this.infoApply.taskName == "宣传负责人上传") {
+        this.uploadsts = true;
+      }
+      // this.getDepot();
+      // this.$http({
+      //   url: "/bpm/api/taskInit",
+      //   method: "post",
+      //   headers: {
+      //     "Content-Type": "application/json",
+      //   },
+      //   data: {
+      //     taskId: "767191013787082752",
+      //     woNo: "767190809331539968",
+      //   },
+      // }).then((res) => {
+      //   console.log(this.materTypeopt);
+      //   console.log(res);
+      //   this.infolist = Object.assign({}, res.data);
+      //   this.infoApply = JSON.parse(this.infolist.params.terminalRes);
+      //   console.log(this.infoApply);
+      // });
+      //   console.log(res);
+      //   this.rovaList = res.data.taskList; //流程追踪
+      //   // let attlist = JSON.parse(res.data.params.attList);
+      //   for (let i = 0; i < res.data.attachList.length; i++) {
+      //     res.data.attachList[i].id = res.data.attachList[i].attchFileId;
+      //   }
+      //   this.datalist.attList = res.data.attachList;
+      //   if (this.infoApply.price) {
+      //     this.gys = this.infoApply.gys;
+      //     this.suppSts = true;
+      //     this.suppdis = false;
+      //   }
+      //   if (res.data.taskName == "宣传负责人") {
+      //     this.suppSts = true;
+      //     this.suppdis = true;
+      //     this.getSupp();
+      //   }
+      //   if (
+      //     this.rovaList[this.rovaList.length - 1].taskName == "宣传负责人上传"
+      //   ) {
+      //     this.uploadsts = true;
+      //   }
+      //   this.uploadstatus = true;
+      // });
+    },
+    changeArr(v) {
+      let list = "";
+      for (let i = 0; i < v.length; i++) {
+        list += v[i] + " ";
+      }
+      return list;
+    },
+    //添加
+    dialogCli(v) {
+      this.checkexa = true;
+      //取消操作
+      if (v === 3) {
+        console.log(this.gys);
+        this.$emit("closeEdio");
+      } else {
+        if (this.infoApply.taskName == "宣传负责人审批") {
+          if (this.suppSts) {
+            let gys = [];
+            let price = 0;
+            for (let i = 0; i < this.gys.length; i++) {
+              if (this.gys[i].sts) {
+                gys.push(JSON.parse(JSON.stringify(this.gys[i])));
+              }
+            }
+            gys.forEach((n) => {
+              for (let j = 0; j < n.list.length; j++) {
+                price += n.list[j].num * n.list[j].price;
+              }
+            });
+            console.log(gys);
+            this.infoApply.gys = gys;
+            this.infoApply.price = price;
+          }
+          
+          let list = {
+            id: this.infoApply.id,
+            terminalRes: this.infoApply.gys,
+            price: this.infoApply.price,
+          };
+          this.$http({
+            url: "/market/ggsj/update",
+            method: "post",
+            headers: {
+              "Content-Type": "application/json",
+            },
+            data: list,
+          }).then((res) => {
+            console.log(res);
+          });
+          //调用接口
+          // this.suppSts = true;
+          // this.suppdis = true;
+          // this.getSupp();
+        }
+        if (this.infoApply.taskName == "宣传负责人上传") {
+          let list = {
+            id: this.infoApply.id,
+            mkFileShareAttachList: [],
+          };
+          list.mkFileShareAttachList = this.attList;
+          if(this.mkFileShareAttachList){
+            this.mkFileShareAttachList.map((item) =>{
+               list.mkFileShareAttachList.push(item)
+            })
+          }
+          this.$http({
+            url: "/market/ggsj/update",
+            method: "post",
+            headers: {
+              "Content-Type": "application/json",
+            },
+            data: list,
+          }).then((res) => {
+            console.log(res);
+          });
+        }
+      }
+      // this.datalist.attList = [];
+      // this.uploadstatus = false;
+      // if (v === 3) {
+      //   this.closeInfo();
+      //   return;
+      // }
+      // let _this = this;
+      // this.infolist.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD");
+      // if (this.suppSts) {
+      //   let gys = [];
+      //   let price = 0;
+      //   for (let i = 0; i < this.gys.length; i++) {
+      //     if (this.gys[i].sts) {
+      //       gys.push(JSON.parse(JSON.stringify(this.gys[i])));
+      // if(gys[i])
+
+      // {
+      //     for (let j = 0; j < gys[i].list.length; j++) {
+      //         price+=gys[i].list[j].num*gys[i].list[j].price;
+      //     }
+      // }
+      //   }
+      // }
+      // gys.forEach((n) => {
+      //   for (let j = 0; j < n.list.length; j++) {
+      //     price += n.list[j].num * n.list[j].price;
+      //   }
+      // });
+      // console.log(gys);
+      // console.log(price);
+      // this.infoApply.gys = gys;
+      // this.infoApply.price = price;
+      // }
+      // if (v === 1) {
+      //   let params = {
+      //     dealType: "1",
+      //     dealTypeDesc: "打回",
+      //     procId: this.infolist.procId,
+      //     procVersion: this.infolist.procVersion,
+      //     remark: this.infolist.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.infoApply),
+      //     },
+      //     woNo: this.infolist.woNo,
+      //   };
+      //   this.submitInfo("/bpm/api/submitTask", params);
+      // } else if (v === 2) {
+      //   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,
+      //     });
+      //   }
+      //   let param = {
+      //     dealType: "0",
+      //     dealTypeDesc: "提交",
+      //     procId: this.infolist.procId,
+      //     procVersion: this.infolist.procVersion,
+      //     remark: this.infolist.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.infoApply),
+      //     },
+      //     woNo: this.infolist.woNo,
+      //   };
+      //   param.params.attList = JSON.stringify(attList);
+      //   if (this.rovaList[this.rovaList.length - 1].taskName == "市场经营部") {
+      //     param.params.assigneeNo = this.infolist.opNo;
+      //     param.params.assigneeName = this.infolist.opName;
+      //   }
+      //   this.submitInfo("/bpm/api/submitTask", param);
+      // }
+    },
+    submitInfo(u, v) {
+      let _this = this;
+      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.closeInfo();
+        }
+      });
+    },
+    closeInfo() {
+      this.infolist = {};
+      this.rovaList = [];
+      this.infoApply = {
+        esay: [],
+        picter: [],
+        medium: [],
+        product: [],
+        copywriting: [],
+        video: [],
+        all: [],
+        testing: [],
+      };
+      this.userInfo = {};
+      this.cdisable = true;
+      this.$emit("closeEdio");
+    },
+    getinfolist() {
+      this.$http({
+        url: "/sysmgr/cfgDataDicts/queryMap",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+          page: '{"pageNo":"' + 1 + '","pageSize":"100"}',
+        },
+        data: {
+          dictCodePks:
+            "materType,jjcd,ggfl,jysj,xchm,mj,cp,wal,spdhzz,qa,jkfw,tgqd",
+        },
+      }).then((res) => {
+        this.materTypeopt = res.data.body.materType;
+        this.fireopt = res.data.body.jjcd;
+        this.typeopt = res.data.body.ggfl;
+        this.esayopt = res.data.body.jysj;
+        this.picteropt = res.data.body.xchm;
+        this.mediumopt = res.data.body.mj;
+        this.productopt = res.data.body.cp;
+        this.copywritingopt = res.data.body.wal;
+        this.videoopt = res.data.body.spdhzz;
+        this.allopt = res.data.body.qa;
+        this.testingopt = res.data.body.jkfw;
+        this.extensionopt = res.data.body.tgqd;
+      });
+    },
+    //获取部门
+    getDepot() {
+      this.$http({
+        url: "/sysmgr/sysdept/queryList",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {},
+      }).then((res) => {
+        this.terminalopt = res.data;
+      });
+    },
+    getSupp() {
+      this.$http({
+        url: "/market/cDesignSupplier/getSupplier",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {},
+      }).then((res) => {
+        res.data.forEach((item) => {
+          item.list = [{}];
+        });
+
+        this.gys = res.data;
+      });
+    },
+    //获取表单上传列表,爆炸贴
+    getQueryList(e) {
+      this.$http({
+        url: "/market/ggsj/query",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: { id: e.id },
+      }).then((res) => {
+        console.log(res);
+        this.mkFileShareAttachList =  res.data.mkFileShareAttachList;
+        if(res.data.paramVal){
+
+        }
+        console.log(
+          (this.$refs.myupload.infolist = res.data.mkFileShareAttachList)
+        );
+        // this.datalist.attList = res.data.mkFileShareAttachList;
+      });
+    },
+    handleClose(){
+      console.log(123);
+      this.checkexa = false;
+    }
+  },
+  mounted() {
+    this.getQueryList(this.componentInfo); //获取表单上传列表,爆炸贴
+    this.clickForm(this.componentInfo);
+  },
+  created() {
+    if (this.componentStatus) {
+      this.dialogCheck();
+    }
+  },
+  watch: {
+    componentStatus(v) {
+      if (v) {
+        // this.dialogCheck();
+      }
+    },
+  },
+};
+</script>
+
+<style scoped lang="scss">
+.onetab {
+  margin-bottom: 20px;
+  padding: 0 20px;
+}
+
+.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 {
+    width: calc(100% - 100px);
+  }
+
+  .el-input {
+    width: calc(100% - 100px);
+  }
+}
+
+.add {
+  .el-select {
+    width: calc(100% - 200px);
+    margin-right: 20px;
+  }
+}
+
+.online {
+  width: 100%;
+
+  .el-select {
+    width: calc(100% - 100px);
+  }
+
+  span {
+    vertical-align: top;
+  }
+
+  .el-textarea {
+    width: calc(100% - 100px);
+  }
+}
+
+.dialog-footer {
+  text-align: right;
+  padding: 15px 20px;
+}
+.supp-box {
+  span {
+    width: 100px;
+    display: inline-block;
+  }
+  .suppdiv {
+    width: calc(100% - 110px);
+    float: right;
+    .el-checkbox {
+      vertical-align: top;
+      padding-top: 10px;
+    }
+  }
+  .box {
+    width: calc(100% - 200px);
+    display: inline-block;
+    // float: right;
+  }
+  .supp-list {
+    margin-bottom: 20px;
+    .el-select {
+      width: 45%;
+      margin-right: 5%;
+    }
+    .el-input {
+      width: 45%;
+      margin-right: 5%;
+    }
+  }
+}
+</style>

+ 377 - 0
src/pages/main/terminals/components/terminal.vue

@@ -0,0 +1,377 @@
+<template>
+    <div>
+        <div style="height: 50vh;overflow-y: scroll;">
+            <div class="info-line add" v-if="!cdisable" style="margin-bottom: 15px;">
+                <span>添加终端</span>
+                <el-select clearable v-model="oneterminal" placeholder="添加申请终端" multiple>
+                    <el-option v-for="item in terminList" :key="item.id" :label="item.terminalTypeName+'-'+item.brandName+'-'+item.modelType+'-'+item.terminalNo"
+                        :value="item.id">
+                    </el-option>
+                </el-select>
+                <el-button style="width: 80px;" type="primary" @click="addtermin">添加</el-button>
+            </div>
+
+            <div class="onetab">
+                <el-table class="com-table" ref="multipleTable" :data="infoApply" tooltip-effect="dark" size="small"
+                    border style="width: 100%">
+                    <el-table-column prop="terminalTypeName" label="类别">
+                    </el-table-column>
+                    <el-table-column prop="brandName" label="品牌">
+                    </el-table-column>
+                    <el-table-column prop="modelType" label="型号">
+                    </el-table-column>
+                    <el-table-column prop="terminalNo" label="终端编码">
+                    </el-table-column>
+                    <el-table-column label="操作" align="center" v-if="!cdisable">
+                        <template slot-scope="scope">
+                            <el-button size="mini" type="danger" @click="deltermain(scope.row)">删除</el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+            </div>
+
+            <el-form :model="infolist" ref="infolist">
+                <div class="info-line">
+                    <el-form-item>
+                        <span>工单标题</span>
+                        <el-input v-model="infolist.params.woTitle" placeholder="申请数量" :disabled="cdisable"></el-input>
+                    </el-form-item>
+                    <el-form-item>
+                        <span>归还时间</span>
+                        <el-date-picker v-model="reqBackTime" type="date" :disabled="cdisable" placeholder="归还时间">
+                        </el-date-picker>
+                    </el-form-item>
+                </div>
+                <div class="info-line">
+                    <el-form-item>
+                        <span>申请时间</span>
+                        <el-input v-model="infolist.createTime" placeholder="申请时间" disabled></el-input>
+                    </el-form-item>
+                    <el-form-item>
+                        <span>申请人</span>
+                        <el-input v-model="infolist.assigneeName" placeholder="申请人" disabled></el-input>
+                    </el-form-item>
+                </div>
+                <div v-if="changeinfo">
+                    <el-form-item class="info-line online">
+                        <span>备注</span>
+                        <el-input v-model="infolist.remark" placeholder="备注"></el-input>
+                    </el-form-item>
+                </div>
+            </el-form>
+            <div style="margin-bottom: 20px;padding: 0 20px;">
+                <el-table class="com-table" ref="multipleTable" :data="rovaList" tooltip-effect="dark" size="small"
+                    border style="width: 100%">
+                    <el-table-column prop="procId" label="编号">
+                    </el-table-column>
+                    <el-table-column prop="taskName" label="环节">
+                    </el-table-column>
+                    <el-table-column prop="opName" label="处理人">
+                    </el-table-column>
+                    <el-table-column prop="opNo" label="处理人工号">
+                    </el-table-column>
+                    <el-table-column prop="createTime" label="处理时间">
+                    </el-table-column>
+                    <el-table-column prop="remark" label="备注">
+                    </el-table-column>
+                </el-table>
+            </div>
+        </div>
+        <div slot="footer" class="dialog-footer">
+            <el-button v-if="changeinfo" type="primary" @click="dialogCli(2)">同 意</el-button>
+            <el-button v-if="changeinfo" type="primary" @click="dialogCli(1)">驳 回</el-button>
+            <el-button v-if="!changeinfo" @click="dialogCli(3)">确 定</el-button>
+            <el-button @click="dialogCli(3)">取 消</el-button>
+        </div>
+    </div>
+</template>
+
+<script>
+    export default {
+        props: ["componentInfo", "componentStatus","changeinfo"],
+        components: {
+
+        },
+        data() {
+            return {
+                cdisable: true,
+                dialogStatus: false,
+                infolist: {},
+                rovaList: [],
+                infoApply: [],
+                reqBackTime: '',
+                userInfo: {},
+                terminList: [],
+                oneterminal: '',
+            }
+        },
+        methods: {
+            //处理申请
+            dialogCheck() {
+                this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+                this.$http({
+                    url: '/bpm/api/taskInit',
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {
+                        taskId: this.componentInfo.taskId,
+                        woNo: this.componentInfo.woNo
+                    },
+                }).then((res) => {
+                    this.rovaList = res.data.taskList;
+                    this.infolist = Object.assign({}, res.data);
+                    if (res.data.assigneeNo === this.userInfo.loginName && '工单起草' === res.data.taskName && this.changeinfo) {
+                        this.cdisable = false;
+                        this.TerList();
+                    } else {
+                        this.cdisable = true;
+                    }
+
+                    this.infoApply = JSON.parse(this.infolist.params.terminalRes);
+                    this.reqBackTime = this.infolist.params.reqBackTime;
+
+                    this.infolist.assigneeName = this.infolist.taskList[0].opName;
+                    this.infolist.opNo = this.userInfo.loginNo;
+                    this.infolist.opName = this.userInfo.loginName;
+                });
+            },
+            //添加
+            dialogCli(v) {
+                if (v === 3) {
+                    this.closeInfo();
+                    return
+                }
+                let _this = this;
+                this.infolist.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD")
+                // return
+                if (v === 1) {
+                    let params = {
+                        dealType: '1',
+                        dealTypeDesc: '打回',
+                        procId: this.infolist.procId,
+                        procVersion: this.infolist.procVersion,
+                        remark: this.infolist.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.infoApply)
+                        },
+                        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.infolist.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: this.infolist.params,
+                        // params:{
+                        //     procExeCondiVal:'同意'
+                        // },
+                        woNo: this.infolist.woNo,
+                    }
+                    if (!this.cdisable) {
+                        param.params = {};
+                        param.params.terminalRes = [];
+                        for (let i = 0; i < this.infoApply.length; i++) {
+                            let terminal = {
+                                terminalNo: this.infoApply[i].terminalNo,
+                                terminalTypeName: this.infoApply[i].terminalTypeName,
+                                brandName: this.infoApply[i].brandName,
+                                modelType: this.infoApply[i].modelType,
+                                id: this.infoApply[i].id,
+                            }
+                            param.params.terminalRes.push(terminal)
+                        }
+                        param.params.reqBackTime = _this.reqBackTime?_this.$formatDate(_this.reqBackTime, "YYYY-MM-DD"):'';
+                        param.params.procName = this.infolist.procName;
+                        param.params.terminalRes = JSON.stringify(param.params.terminalRes);
+                    }
+                    // console.log(param)
+                    this.submitInfo("/bpm/api/submitTask", param);
+                }
+            },
+            submitInfo(u, v) {
+                let _this = this;
+                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.closeInfo();
+                    }
+
+                });
+            },
+            closeInfo() {
+                this.infolist = {};
+                this.rovaList = [];
+                this.infoApply = [];
+                this.reqBackTime = '';
+                this.userInfo = {};
+                this.terminList = [];
+                this.oneterminal = '';
+                this.cdisable = false;
+                this.$emit("closeEdio")
+            },
+            //获取列表
+            TerList() {
+                let _this = this;
+                this.$http({
+                    url: "/market/terminal/terminalrepo/queryPage",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                        "page": '{"pageNo":"' + 1 + '","pageSize":"1000"}'
+                    },
+                    data: {
+                        sts: '0'
+                    },
+                }).then((res) => {
+                    this.terminList = res.data.data;
+                });
+            },
+            addtermin() {
+                let list = [];
+                for (let j = 0; j < this.oneterminal.length; j++) {
+                    for (let i = 0; i < this.terminList.length; i++) {
+                        if (this.terminList[i].id === this.oneterminal[j]) {
+                            list.push({
+                                terminalTypeName: this.terminList[i].terminalTypeName,
+                                brandName: this.terminList[i].brandName,
+                                modelType: this.terminList[i].modelType,
+                                terminalNo: this.terminList[i].terminalNo,
+                                id: this.terminList[i].id,
+                            })
+                        }
+                    }
+                }
+                for (let j = 0; j < list.length; j++) {
+                    let sts = true;
+                    for (let i = 0; i < this.infoApply.length; i++) {
+                        if (this.infoApply[i].id === list[j].id) {
+                            sts = false;
+                        }
+                    }
+                    sts ? this.infoApply.push(list[j]) : '';
+                }
+            },
+            deltermain(v) {
+                for (let i = 0; i < this.infoApply.length; i++) {
+                    if (this.infoApply[i].id === v.id) {
+                        this.infoApply.splice(i, 1)
+                    }
+                }
+            },
+        },
+        mounted() {
+
+        },
+        created() {
+            if (this.componentStatus) {
+                this.dialogCheck();
+            }
+        },
+        watch: {
+            componentStatus(v) {
+                if (v) {
+                    this.dialogCheck();
+                }
+            }
+        }
+    }
+</script>
+
+<style scoped lang="scss">
+    .onetab {
+        margin-bottom: 20px;
+        padding: 0 20px;
+    }
+
+    .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 {
+            width: calc(100% - 100px);
+        }
+
+        .el-input {
+            width: calc(100% - 100px);
+        }
+    }
+
+    .add {
+        .el-select {
+            width: calc(100% - 200px);
+            margin-right: 20px;
+        }
+    }
+
+    .online {
+        width: 100%;
+
+        .el-select {
+            width: calc(100% - 100px);
+        }
+
+        span {
+            vertical-align: top;
+        }
+
+        .el-textarea {
+            width: calc(100% - 100px);
+        }
+    }
+
+    .dialog-footer {
+        text-align: right;
+        padding: 15px 20px;
+    }
+</style>

+ 343 - 0
src/pages/main/terminals/terminApproval.vue

@@ -0,0 +1,343 @@
+<template>
+    <div>
+        <fullscreen :fullscreen.sync="fullscreen" class="container">
+            <div class="ifram" v-if="ifstatus">
+                <div class="flow">
+                    <iframe height="100%" width="100%" :src="agdataurl" frameborder="0"></iframe>
+                    <div class="closeif" @click="ifstatus=false"><i class="el-icon-close"></i></div>
+                </div>
+
+            </div>
+            <div class="container-box">
+                <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
+                <div class="search">
+                    <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                </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="woNo" label="工单编号">
+                        </el-table-column>
+                        <el-table-column prop="procName" 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="createTime" label="发起时间">
+                        </el-table-column>
+                        <el-table-column prop="taskName" label="当前环节">
+                        </el-table-column>
+                        <el-table-column prop="roleName" label="当前处理人">
+                        </el-table-column>
+                        <el-table-column label="操作" width="160px" align="center">
+                            <template slot-scope="scope">
+                                <el-button size="mini" type="primary" @click="dialogCheck(scope.row)">处理</el-button>
+                                <el-button size="mini" type="primary" @click="trajectory(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="60%" :destroy-on-close="true"
+                    :modal-append-to-body="false" :close-on-click-modal="false">
+
+                    <div>
+
+
+                        <terminal v-if="typestatsu === 1" :changeinfo="true" @closeEdio="closeEdio" :componentInfo="componentInfo" :componentStatus="componentStatus"></terminal>
+
+                        <advert v-if="typestatsu === 2" :changeinfo="true" @closeEdio="closeEdio" :componentInfo="componentInfo" :componentStatus="componentStatus"></advert>
+
+
+                    </div>
+
+                </el-dialog>
+            </div>
+        </fullscreen>
+
+    </div>
+</template>
+<script>
+    import mySearch from "../../../components/search.vue";
+    import toolList from "../../../components/toolList.vue";
+    import terminal from "./components/terminal.vue"
+    import advert from "./components/advert.vue"
+
+    // import $ from 'jquery'
+
+
+    export default {
+        components: {
+            mySearch,
+            toolList,
+            terminal,
+            advert
+        },
+        data() {
+            return {
+                tooltit: '待办任务',
+                agdataurl: '',
+                searchList: [{
+                        type: 'input',
+                        tit: '工单标题',
+                        value: '',
+                        width: '49%',
+                    },
+                    {
+                        type: 'input',
+                        tit: '发起人',
+                        value: '',
+                        width: '49%',
+                    }
+                ],
+                loading: false,
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [{}],
+                dialogStatus: false,
+                titname: '终端',
+                infolist: {},
+                userInfo: {},
+                params: {},
+                ifstatus: false,
+                typestatsu: 1,
+                options: [],
+                typeopt: [],
+                componentInfo:{},
+                componentStatus:false,
+            }
+        },
+        methods: {
+            //搜索数据
+            searchInfo(v) {
+                this.params = {};
+                v[0] ? this.params.procName = v[0] : '';
+                v[1] ? this.params.assigneeName = v[1] : '';
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                this.pageSize = n;
+                let _this = this;
+                this.tableData = [];
+                this.loading = true;
+                this.$http({
+                    url: "/bpm/api/queryToDoTaskList",
+                    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;
+                    for (let i = 0; i < this.tableData.length; i++) {
+                        this.tableData[i].opTime = _this.$formatDate(this.tableData[i].opTime,
+                            "YYYY-MM-DD")
+                    }
+                    this.loading = false;
+                });
+            },
+            // 分页
+            currchange(v) {
+                this.pageSize = v;
+                this.getList(this.params, this.pageSize);
+            },
+            //轨迹
+            trajectory(v) {
+
+                this.agdataurl = '/static/views/flow/flowDesignPrew.html?prevFlag=false&woNo=' + v.woNo + '&taskName=' +
+                    v.taskName + '&fqFlag=N&procId=' + v.procId + '&woTitle=测试终端申请&procName=' + v.procName +
+                    '&procVersion=' + v.procVersion;
+                // window.open(this.agdataurl);
+                this.ifstatus = true;
+
+            },
+            //处理申请
+            dialogCheck(n) {
+                if ('广告申请' === n.procName) {
+                    this.typestatsu = 2;
+                } else if("测试终端申请" === n.procName){
+                    this.typestatsu = 1;
+                }
+                this.dialogStatus = true;
+                this.componentInfo = n;
+                this.componentStatus = true;
+            },
+            closeEdio(){
+                this.getList(this.params, this.pageSize);
+                this.dialogStatus = false;
+                this.componentStatus = false;
+            },
+            //功能栏
+            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;
+
+            }
+        },
+        mounted() {
+            this.getList({}, 1);
+            this.getUser();
+        },
+        created() {
+
+        }
+    }
+</script>
+<style scoped lang="scss">
+    .approval {
+        .roval-box {
+            padding: 0 20px;
+            margin-bottom: 10px;
+
+            .el-input {
+                width: calc(100% - 200px);
+                display: inline-block;
+            }
+
+            span {
+                display: inline-block;
+                width: 80px;
+                font-size: 14px;
+                margin-right: 20px;
+
+                .el-input {
+                    width: 100%;
+                    display: inline-block;
+                }
+            }
+        }
+    }
+
+    .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;
+        // margin-bottom: 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 {
+            width: calc(100% - 100px);
+            // margin-right: 20px;
+        }
+
+        .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);
+        }
+    }
+
+    .ifram {
+        position: fixed;
+        width: 100%;
+        height: 100%;
+        top: 0;
+        left: 0;
+        background: rgba(0, 0, 0, .5);
+        z-index: 1000000;
+
+        .flow {
+            width: 80%;
+            height: 80%;
+            margin-left: 10%;
+            margin-top: 5%;
+            background: #fff;
+            display: inline-block;
+            position: relative;
+        }
+
+        .closeif {
+            position: absolute;
+            right: -40px;
+            background: rgba(0, 0, 0, .4);
+            display: inline-block;
+            width: 40px;
+            height: 40px;
+            line-height: 40px;
+            text-align: center;
+            cursor: pointer;
+            color: #fff;
+            font-size: 20px;
+            font-weight: bold;
+        }
+    }
+</style>

+ 643 - 0
src/pages/main/terminals/terminal.vue

@@ -0,0 +1,643 @@
+<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;" size="medium" type="success" @click="tempUpdate(1)">模板下载
+                        </el-button>
+                        <myUpload style="float: left;" @uploadBack="uploadBack" :fileInfo="fileInfot" :fileList="fileInfot.fileList"></myUpload>
+                        <el-button style="margin-left: 20px;" class="btn-check" size="medium" type="primary" @click="dialogCheck(1)">添加
+                        </el-button>
+                        <myUpload style="float: right;margin-left: 20px;" @uploadBack="uploadBack" :fileInfo="fileInfo" :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%" v-loading="loading">
+                    <el-table-column prop="terminalTypeName" label="类型">
+                    </el-table-column>
+                    <el-table-column prop="brandName" label="品牌">
+                    </el-table-column>
+                    <el-table-column prop="modelType" label="型号">
+                    </el-table-column>
+                    <el-table-column prop="terminalNo" label="终端编码" width="145">
+                    </el-table-column>
+                    <!-- <el-table-column prop="modelType" label="终端序列">
+                        </el-table-column> -->
+                    <el-table-column prop="opNo" label="操作工号">
+                    </el-table-column>
+                    <el-table-column prop="opName" label="操作姓名">
+                    </el-table-column>
+                    <el-table-column prop="opTime" label="操做时间" width="135">
+                    </el-table-column>
+                    <el-table-column prop="stsDesc" label="状态">
+                    </el-table-column>
+                    <el-table-column prop="borrowName" label="借用人" width="100">
+                    </el-table-column>
+                    <el-table-column prop="borrowTime" label="借用时间" width="160">
+                    </el-table-column>
+                    <el-table-column prop="requireBackTime" label="预计归还时间" width="160">
+                    </el-table-column>
+                    <el-table-column prop="lastBackTime" label="实际归还时间" width="160">
+                    </el-table-column>
+                    <el-table-column label="操作" width="180px" align="center" fixed="right">
+                        <template slot-scope="scope">
+                            <el-button size="mini" type="primary" @click="dialogCheck(2,scope.row)">查看</el-button>
+                            <el-button v-if="scope.row.sts == 0" size="mini" type="primary" @click="dialogCheck(3,scope.row)">修改</el-button>
+                            <el-button v-if="scope.row.sts == 0" size="mini" type="danger" @click="delLine(scope.row)">删除</el-button>
+                            <el-button v-if="scope.row.sts == 2" size="mini" type="primary" @click="backterminal(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="titname+'终端管理'" :visible.sync="dialogStatus" width="50%" :destroy-on-close="true"
+                :modal-append-to-body="false" :close-on-click-modal="false">
+                <el-form :model="infolist" ref="infolist" :rules="rules">
+                    <div class="info-line">
+                        <el-form-item prop="infovalue">
+                            <span>终端类型</span>
+                            <el-select :popper-append-to-body="false" v-model="infovalue" placeholder="终端类型" @change="verifcheck"
+                                :disabled="disableStatus">
+                                <el-option v-for="item in termOption" :key="item.id" :label="item.terminalTypeName+' - '+item.brandName+' - '+item.modelType"
+                                    :value="item.id">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item prop="sts">
+                            <span>终端状态</span>
+                            <el-select :popper-append-to-body="false" v-model="infolist.sts" placeholder="终端状态"
+                                :disabled="disableStatus">
+                                <el-option v-for="items in stsOption" :key="items.dataCode" :label="items.dataName"
+                                    :value="items.dataCode">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                    </div>
+                    <div v-if="titname == '查看'">
+                        <div class="info-line">
+                            <el-form-item>
+                                <span>当前借用人</span>
+                                <el-input v-model="infolist.borrowName" placeholder="当前借用人" disabled></el-input>
+                            </el-form-item>
+                            <el-form-item>
+                                <span>借用人工号</span>
+                                <el-input v-model="infolist.borrowNo" placeholder="借用人工号" disabled></el-input>
+                            </el-form-item>
+                        </div>
+                        <div class="info-line">
+                            <el-form-item>
+                                <span>借用时间</span>
+                                <el-date-picker v-model="infolist.borrowTime" type="date" placeholder="借用时间" disabled>
+                                </el-date-picker>
+                            </el-form-item>
+                            <el-form-item>
+                                <span>预计归还</span>
+                                <el-date-picker v-model="infolist.requireBackTime" type="date" placeholder="归还时间"
+                                    disabled>
+                                </el-date-picker>
+                            </el-form-item>
+                        </div>
+                        <div class="info-line">
+                            <el-form-item>
+                                <span>实际归还</span>
+                                <el-date-picker v-model="infolist.lastBackTime" type="date" placeholder="实际归还" disabled>
+                                </el-date-picker>
+                            </el-form-item>
+                            <el-form-item>
+                                <span>操作姓名</span>
+                                <el-input v-model="infolist.opName" placeholder="操作姓名" disabled></el-input>
+                            </el-form-item>
+                        </div>
+                        <div class="info-line">
+                            <el-form-item>
+                                <span>终端编码</span>
+                                <el-input v-model="infolist.terminalNo" placeholder="终端编码" disabled></el-input>
+                            </el-form-item>
+                            <el-form-item>
+                                <span>终端序列</span>
+                                <el-input v-model="infolist.terminalNo" placeholder="终端序列" disabled></el-input>
+                            </el-form-item>
+                        </div>
+                    </div>
+                </el-form>
+                <div slot="footer" class="dialog-footer">
+                    <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>
+            </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 infovalue = (rule, value, callback) => {
+                if (!this.infovalue) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }
+            const sts = (rule, value, callback) => {
+                if (!this.infolist.sts) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }
+            const borrowTime = (rule, value, callback) => {
+                if (!this.borrowTime) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }
+            const requireBackTime = (rule, value, callback) => {
+                if (!this.requireBackTime) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }
+            const borrowName = (rule, value, callback) => {
+                if (!this.infolist.borrowName) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }
+            const borrowNo = (rule, value, callback) => {
+                if (!this.infolist.borrowNo) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }
+            return {
+                rules: {
+                    infovalue: [{
+                        required: true,
+                        trigger: 'change',
+                        validator: infovalue
+                    }],
+                    sts: [{
+                        required: true,
+                        trigger: 'change',
+                        validator: sts
+                    }],
+                    borrowTime: [{
+                        required: true,
+                        trigger: 'change',
+                        validator: borrowTime
+                    }],
+                    requireBackTime: [{
+                        required: true,
+                        trigger: 'change',
+                        validator: requireBackTime
+                    }],
+                    borrowName: [{
+                        required: true,
+                        trigger: 'blur',
+                        validator: borrowName
+                    }],
+                    borrowNo: [{
+                        required: true,
+                        trigger: 'blur',
+                        validator: borrowNo
+                    }],
+                },
+                tooltit: '测试终端管理',
+                searchList: [{
+                        type: 'input',
+                        tit: '类别',
+                        value: '',
+                        width: '32%',
+                    },
+                    {
+                        type: 'input',
+                        tit: '品牌',
+                        value: '',
+                        width: '32%',
+                    },
+                    {
+                        type: 'input',
+                        tit: '型号',
+                        value: '',
+                        width: '32%',
+                    },
+                ],
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [{}],
+                dialogStatus: false,
+                disableStatus: false,
+                titname: '终端',
+                infolist: {},
+                typeOptions: [{
+                    dataCode: 1,
+                    dataName: 111,
+                }],
+                userInfo: {},
+                params: {},
+                stsOption: [{
+                        dataCode: '0',
+                        dataName: '空闲',
+                    },
+                    {
+                        dataCode: '1',
+                        dataName: '预借',
+                    },
+                    {
+                        dataCode: "2",
+                        dataName: '借出',
+                    }
+                ],
+                termOption: [],
+                infovalue: '',
+                borrowTime: '',
+                requireBackTime: '',
+                lastBackTime: '',
+                fileInfo: {
+                    type: 'btn',
+                    typename: '导入',
+                    btntype: 'primary',
+                    limit: 1,
+                    url: '/market/terminal/terminalrepos/import',
+                    fileList: []
+                },
+                fileInfot: {
+                    type: 'btn',
+                    typename: '模板上传',
+                    btntype: 'success',
+                    limit: 1,
+                    url: '/market/compatt/upload',
+                    fileList: []
+                },
+                centerDialogVisible: false,
+                messTit: '',
+                delid: '',
+                loading: false
+            }
+        },
+        methods: {
+            //搜索数据
+            searchInfo(v) {
+                this.params = {};
+                v[0] ? this.params.terminalTypeName = v[0] : '';
+                v[1] ? this.params.brandName = v[1] : '';
+                v[2] ? this.params.modelType = v[2] : '';
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                this.pageSize = n;
+                this.loading = true;
+                this.tableData = [];
+                let _this = this;
+                this.$http({
+                    url: "/market/terminal/terminalrepo/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.infovalue = '';
+                    this.borrowTime = '';
+                    this.requireBackTime = '';
+                    this.lastBackTime = '';
+                    this.getUser();
+                    return
+                } else if (v === 2) {
+                    this.titname = '查看';
+                    this.disableStatus = true;
+                } else if (v === 3) {
+                    this.titname = '修改';
+                }
+                this.infolist = Object.assign({}, n); //拷贝
+                this.infolist.opNo = this.userInfo.loginNo;
+                this.infolist.opName = this.userInfo.loginName;
+                this.borrowTime = this.infolist.borrowTime;
+                this.requireBackTime = this.infolist.requireBackTime;
+                this.lastBackTime = this.infolist.lastBackTime;
+                for (let i = 0; i < this.termOption.length; i++) {
+                    if (this.infolist.terminalType == this.termOption[i].terminalType && this.infolist.brandCode ==
+                        this.termOption[i].brandCode && this.infolist.modelType == this.termOption[i].modelType) {
+                        this.infovalue = this.termOption[i].id;
+                    }
+                }
+            },
+            //修改  添加
+            dialogCli(v) {
+                if (v === 1) {
+                    this.infolist = {};
+                    this.infovalue = '';
+                    this.borrowTime = '';
+                    this.requireBackTime = '';
+                    this.lastBackTime = '';
+                    this.dialogStatus = false;
+                    return
+                }
+                let _this = this;
+                this.infolist.opTime = _this.$formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss')
+                this.infolist.borrowTime = _this.$formatDate(Date.parse(this.borrowTime), 'YYYY-MM-DD');
+                this.infolist.requireBackTime = _this.$formatDate(Date.parse(this.requireBackTime),
+                    'YYYY-MM-DD');
+                this.lastBackTime ? this.infolist.lastBackTime = _this.$formatDate(Date.parse(this.lastBackTime),
+                        'YYYY-MM-DD') :
+                    '';
+                this.infolist.sts === '0' ? this.infolist.stsDesc = '空闲' : this.infolist.sts === '1' ? this.infolist.stsDesc =
+                    '预借' : this.infolist.stsDesc = '借出';
+                if (this.titname === '新建') {
+                    this.submitInfo("/market/terminal/terminalrepos/add", v);
+                } else if (this.titname === '修改') {
+                    this.submitInfo("/market/terminal/terminalrepo/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'
+                                });
+                                _this.infolist = {};
+                                console.log(_this.infolist);
+                                _this.dialogStatus = false;
+                                _this.getList({}, _this.pageSize);
+                            }
+
+                        });
+                    }
+                })
+            },
+            closeMessage(v) {
+                this.centerDialogVisible = false;
+                let _this = this;
+                if (v === 1) {
+                    this.$http({
+                        url: "/market/terminal/terminalrepo/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;
+            },
+            backterminal(v) {
+                let _this = this;
+                this.$http({
+                    url: "/market/terminal/terminalrepos/back",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {
+                        id: v.id
+                    },
+                }).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);
+                    }
+                });
+            },
+            tempUpdate(v) {
+                let path = '';
+                v === 1 ? path = "/market/terminal/terminalrepos/downloadTemp" : path =
+                    "/market/terminal/terminalrepos/downloadTemp";
+                this.$http({
+                    url: path,
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    responseType: "blob",
+                    data: {},
+                }).then((response) => {
+                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                        let blob = new Blob([response.data], {
+                            type: 'application/vnd.ms-excel'
+                        })
+                        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)
+                    }
+                });
+            },
+            verifcheck() {
+                for (let i = 0; i < this.termOption.length; i++) {
+                    if (this.termOption[i].id === this.infovalue) {
+                        this.infolist.terminalTypeName = this.termOption[i].terminalTypeName;
+                        this.infolist.terminalType = this.termOption[i].terminalType;
+                        this.infolist.brandName = this.termOption[i].brandName;
+                        this.infolist.brandCode = this.termOption[i].brandCode;
+                        this.infolist.modelType = this.termOption[i].modelType;
+                    }
+                }
+            },
+            uploadBack(v) {
+                this.getList({}, 1);
+            },
+            //获取列表
+            getDepot() {
+                this.$http({
+                    url: "/market/terminal/terminaltype/queryList",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {},
+                }).then((res) => {
+                    this.termOption = res.data;
+                });
+            },
+            //功能栏
+            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;
+            }
+        },
+        mounted() {
+            this.getList({}, 1);
+            this.getDepot();
+            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>

+ 436 - 0
src/pages/main/terminals/terminalApply.vue

@@ -0,0 +1,436 @@
+<template>
+    <div>
+        <div class="container structure-r" style="margin: 0;width: calc(50% - 10px);">
+            <fullscreen :fullscreen.sync="fullscreen" class="container-box" style="padding: 0 20px 0 0;">
+                <div class="titbox">
+                    <h2 class="font-ui">测试终端申请</h2>
+                </div>
+                <div class="search">
+                    <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                </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%">
+                        <el-table-column prop="terminalTypeName" label="类型">
+                        </el-table-column>
+                        <el-table-column prop="brandName" label="品牌">
+                        </el-table-column>
+                        <el-table-column prop="modelType" label="型号">
+                        </el-table-column>
+                        <el-table-column prop="terminalNo" label="终端编码">
+                        </el-table-column>
+                        <el-table-column label="操作" width="80px" align="center">
+                            <template slot-scope="scope">
+                                <el-button size="mini" type="primary" @click="dialogCheck(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>
+            </fullscreen>
+        </div>
+
+        <div class="container structure-r" style="margin: 0;width: calc(50% - 10px);margin-left: 20px;">
+            <div class="onetab">
+                <el-table height="calc(100% - 10px)" class="com-table" ref="multipleTable" :data="infoApply" tooltip-effect="dark" size="small"
+                    border style="width: 100%">
+                    <el-table-column prop="terminalTypeName" label="类型">
+                    </el-table-column>
+                    <el-table-column prop="brandName" label="品牌">
+                    </el-table-column>
+                    <el-table-column prop="modelType" label="型号">
+                    </el-table-column>
+                    <el-table-column prop="terminalNo" label="终端编码">
+                    </el-table-column>
+                    <el-table-column label="操作" width="80px" align="center">
+                        <template slot-scope="scope">
+                            <el-button size="mini" type="danger" @click="delone(scope.row)">x</el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+            </div>
+
+            <el-form :model="infolist" ref="infolist" :rules="rules">
+                <div class="info-line">
+                    <el-form-item prop="terminalTypeName">
+                        <span>申请标题</span>
+                        <el-input v-model="infolist.tit" placeholder="申请标题" :disabled="disableStatus"></el-input>
+                    </el-form-item>
+                    <el-form-item prop="modelType">
+                        <span>归还时间</span>
+                        <el-date-picker v-model="infolist.time" type="date" placeholder="归还时间">
+                        </el-date-picker>
+                    </el-form-item>
+                </div>
+                <div class="info-line">
+                    <el-form-item>
+                        <span>申请流程</span>
+                        <el-select clearable v-model="terminal" placeholder="申请流程" disabled>
+                            <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.opName" placeholder="操作姓名" disabled></el-input>
+                    </el-form-item>
+                </div>
+            </el-form>
+            <div class="t-footer">
+                <el-button type="primary" @click="dialogCli(2)">确 定</el-button>
+                <el-button @click="dialogCli(1)">取 消</el-button>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+    import mySearch from "../../../components/search.vue";
+
+    export default {
+        components: {
+            mySearch
+        },
+        data() {
+            const terminalTypeName = (rule, value, callback) => {
+                if (!this.infolist.tit) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }
+            const modelType = (rule, value, callback) => {
+                if (!this.infolist.time) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }
+            return {
+                rules: {
+                    terminalTypeName: [{
+                        required: true,
+                        trigger: 'blur',
+                        validator: terminalTypeName
+                    }],
+                    modelType: [{
+                        required: true,
+                        trigger: 'blur',
+                        validator: modelType
+                    }],
+                },
+                searchList: [{
+                        type: 'input',
+                        tit: '类别',
+                        value: '',
+                        width: '48%',
+                    },
+                    {
+                        type: 'input',
+                        tit: '品牌',
+                        value: '',
+                        width: '48%',
+                    },
+                    // {
+                    //     type: 'input',
+                    //     tit: '型号',
+                    //     value: '',
+                    //     width: '32%',
+                    // },
+                ],
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [{}],
+                disableStatus: false,
+                titname: '终端',
+                infolist: {},
+                typeOptions: [{
+                    dataCode: 1,
+                    dataName: 111,
+                }],
+                userInfo: {},
+                params: {},
+                infoApply: [],
+                options: [],
+                terminal:'686495855492730880',
+            }
+        },
+        methods: {
+            //搜索数据
+            searchInfo(v) {
+                this.params = {};
+                v[0] ? this.params.terminalTypeName = v[0] : '';
+                v[1] ? this.params.brandName = v[1] : '';
+                v[2] ? this.params.modelType = v[2] : '';
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                v.sts = '0';
+                this.pageSize = n;
+                let _this = this;
+                this.$http({
+                    url: "/market/terminal/terminalrepo/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;
+                    for (let i = 0; i < this.tableData.length; i++) {
+                        _this.tableData[i].opTime =  _this.$formatDate(_this.tableData[i].opTime, "YYYY-MM-DD")
+                    }
+                });
+            },
+            currchange(v) {
+                this.pageSize = v;
+                this.getList(this.params, this.pageSize);
+            },
+            //申请
+            dialogCheck(n) {
+                let _this = this;
+                let sts = true;
+                this.infolist.opNo = this.userInfo.loginNo;
+                this.infolist.opName = this.userInfo.loginName;
+                for(let i=0;i<this.infoApply.length;i++){
+                    if(n.id === this.infoApply[i].id){
+                        sts = false;
+                    }
+                }
+                sts ? this.infoApply.push(Object.assign({}, n)) : '';
+            },
+            delone(n){
+                for(let i=0;i<this.infoApply.length;i++){
+                    if(n.id === this.infoApply[i].id){
+                        this.infoApply.splice(i,1)
+                    }
+                }
+            },
+            //添加
+            dialogCli(v) {
+                if (v === 1) {
+                    this.infolist = {};
+                    this.infoApply = [];
+                    this.getUser();
+                    return
+                }
+                let _this = this;
+                let info = {};
+                info.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD");
+                info.opNo = this.userInfo.loginNo;
+                info.opName = this.userInfo.loginName;
+                info.params = {};
+                info.params.reqBackTime = _this.infolist.time?_this.$formatDate(_this.infolist.time, "YYYY-MM-DD"):'';
+                info.params.terminalRes = [];
+                for (let i = 0; i < this.infoApply.length; i++) {
+                    let terminal = {
+                        terminalNo: this.infoApply[i].terminalNo,
+                        terminalTypeName: this.infoApply[i].terminalTypeName,
+                        brandName: this.infoApply[i].brandName,
+                        modelType: this.infoApply[i].modelType,
+                        id: this.infoApply[i].id,
+                    }
+                    info.params.terminalRes.push(terminal)
+                }
+                info.woTitle = this.infolist.tit;
+                info.params.woTitle = this.infolist.tit;
+                info.procId = this.terminal;
+                for (let i = 0; i < this.options.length; i++) {
+                    if(this.infolist.terminal === this.options[i].procId){
+                        info.procName = this.options[i].procName;
+                        info.procVersion = this.options[i].procVersion;
+                    }
+                }
+                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 => {
+                    if (valid) {
+                        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.infolist = {};
+                                _this.infoApply = [];
+                                _this.getUser();
+                            }
+
+                        });
+                    }
+                })
+            },
+            //删除
+            delLine(v) {
+                let _this = this;
+                this.$confirm('即将删除此条数据, 是否删除?', '提示', {
+                    confirmButtonText: '确定',
+                    cancelButtonText: '取消',
+                    type: 'warning'
+                }).then(() => {
+                    this.$http({
+                        url: "/market/terminal/terminaltype/del",
+                        method: "post",
+                        headers: {
+                            "Content-Type": "application/json",
+                        },
+                        data: {
+                            id: v.id
+                        },
+                    }).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);
+                        }
+                    });
+                })
+            },
+            //流程
+            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;
+                });
+            },
+            //功能栏
+            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;
+
+            }
+        },
+        mounted() {
+            this.getList({}, 1);
+            this.getTermianl();
+            this.getUser();
+        },
+        created() {
+
+        }
+    }
+</script>
+<style scoped lang="scss">
+    .t-footer {
+        text-align: right;
+        padding-right: 20px;
+    }
+
+    .onetab {
+        padding: 20px;
+        height: calc(100% - 180px);
+    }
+
+    .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>

+ 440 - 0
src/pages/main/terminals/terminalModel.vue

@@ -0,0 +1,440 @@
+<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 class="search">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <el-button class="btn-check" size="medium" type="primary" @click="dialogCheck(1)">添加
+                </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="terminalTypeName" label="类别">
+                    </el-table-column>
+                    <el-table-column prop="brandName" label="品牌">
+                    </el-table-column>
+                    <el-table-column prop="modelType" label="型号">
+                    </el-table-column>
+                    <el-table-column prop="opNo" label="操作工号">
+                    </el-table-column>
+                    <el-table-column prop="opName" label="操作姓名">
+                    </el-table-column>
+                    <el-table-column prop="opTime" label="操做时间">
+                    </el-table-column>
+                    <el-table-column label="操作" width="160px" align="center">
+                        <template slot-scope="scope">
+                            <el-button size="mini" type="primary" @click="dialogCheck(2,scope.row)">查看</el-button>
+                            <el-button size="mini" type="primary" @click="dialogCheck(3,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>
+            <el-dialog :title="titname+'终端'" :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="info-line">
+                            <el-form-item prop="terminalTypeName">
+                                <span>终端类别</span>
+                                <el-input v-model="infolist.terminalTypeName" placeholder="终端类别" :disabled="disableStatus"></el-input>
+                            </el-form-item>
+                            <el-form-item prop="terminalType">
+                                <span>类别编码</span>
+                                <el-input v-model="infolist.terminalType" placeholder="类型编码" :disabled="disableStatus"></el-input>
+                            </el-form-item>
+                        </div>
+                        <div class="info-line">
+                            <el-form-item prop="brandName">
+                                <span>终端品牌</span>
+                                <el-input v-model="infolist.brandName" placeholder="终端品牌" :disabled="disableStatus"></el-input>
+                            </el-form-item>
+                            <el-form-item prop="brandCode">
+                                <span>品牌编码</span>
+                                <el-input v-model="infolist.brandCode" placeholder="品牌编码" :disabled="disableStatus"></el-input>
+                            </el-form-item>
+                        </div>
+                        <div class="info-line">
+                            <el-form-item prop="modelType">
+                                <span>终端型号</span>
+                                <el-input v-model="infolist.modelType" placeholder="终端型号" :disabled="disableStatus"></el-input>
+                            </el-form-item>
+                            <el-form-item prop="opNo">
+                                <span>操作姓名</span>
+                                <el-input v-model="infolist.opName" placeholder="操作姓名" disabled></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 toolList from "../../../components/toolList.vue";
+    import myMessage from "../../../components/myMessage.vue"
+
+    export default {
+        components: {
+            mySearch,
+            toolList,
+            myMessage
+        },
+        data() {
+            const terminalTypeName = (rule, value, callback) => {
+                if (!this.infolist.terminalTypeName) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }
+            const brandName = (rule, value, callback) => {
+                if (!this.infolist.brandName) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }
+            const modelType = (rule, value, callback) => {
+                if (!this.infolist.modelType) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }
+            const brandCode = (rule, value, callback) => {
+                if (!this.infolist.brandCode) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }
+            const terminalType = (rule, value, callback) => {
+                if (!this.infolist.terminalType) {
+                    callback(new Error('不能为空'))
+                } else {
+                    callback()
+                }
+            }
+            return {
+                rules: {
+                    terminalTypeName: [{
+                        required: true,
+                        trigger: 'blur',
+                        validator: terminalTypeName
+                    }],
+                    terminalType: [{
+                        required: true,
+                        trigger: 'blur',
+                        validator: terminalType
+                    }],
+                    brandName: [{
+                        required: true,
+                        trigger: 'blur',
+                        validator: brandName
+                    }],
+                    brandCode: [{
+                        required: true,
+                        trigger: 'blur',
+                        validator: brandCode
+                    }],
+                    modelType: [{
+                        required: true,
+                        trigger: 'blur',
+                        validator: modelType
+                    }],
+                },
+                tooltit: '终端类型管理',
+                searchList: [{
+                        type: 'input',
+                        tit: '类别',
+                        value: '',
+                        width: '32%',
+                    },
+                    {
+                        type: 'input',
+                        tit: '品牌',
+                        value: '',
+                        width: '32%',
+                    },
+                    {
+                        type: 'input',
+                        tit: '型号',
+                        value: '',
+                        width: '32%',
+                    },
+                ],
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [{}],
+                dialogStatus: false,
+                disableStatus: false,
+                titname: '终端',
+                infolist: {},
+                typeOptions: [{
+                    dataCode: 1,
+                    dataName: 111,
+                }],
+                userInfo: {},
+                params: {},
+                centerDialogVisible: false,
+                messTit: '',
+                delid: '',
+                loading:false
+            }
+        },
+        methods: {
+            //搜索数据
+            searchInfo(v) {
+                this.params = {};
+                v[0] ? this.params.terminalTypeName = v[0] : '';
+                v[1] ? this.params.brandName = v[1] : '';
+                v[2] ? this.params.modelType = v[2] : '';
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                this.pageSize = n;
+                let _this = this;
+                this.loading = true;
+                this.tableData = [];
+                this.$http({
+                    url: "/market/terminal/terminaltype/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');
+                if (this.titname === '新建') {
+                    this.submitInfo("/market/terminal/terminaltypes/add", v);
+                } else if (this.titname === '修改') {
+                    this.submitInfo("/market/terminal/terminaltype/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'
+                                });
+                                _this.infolist = {};
+                                _this.dialogStatus = false;
+                                _this.getList({}, _this.pageSize);
+                            }
+
+                        });
+                    }
+                })
+            },
+            closeMessage(v) {
+                this.centerDialogVisible = false;
+                let _this = this;
+                if (v === 1) {
+                    this.$http({
+                        url: "/market/terminal/terminaltype/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;
+            },
+            //获取字典
+            getDepot() {
+                this.$http({
+                    url: "/market/cfgDataDict/queryList",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {},
+                }).then((res) => {
+                    console.log(res.data)
+                    this.typeOptions = res.data;
+                });
+            },
+            //功能栏
+            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;
+                console.log(this.infolist);
+            }
+        },
+        mounted() {
+            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>

+ 270 - 0
src/pages/main/terminals/terminalOver.vue

@@ -0,0 +1,270 @@
+<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>
+            <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="woNo" label="工单编号">
+                    </el-table-column>
+                    <el-table-column prop="procName" 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="createTime" label="发起时间">
+                    </el-table-column>
+                    <el-table-column prop="taskName" label="当前环节">
+                    </el-table-column>
+                    <el-table-column prop="roleName" label="当前处理人">
+                    </el-table-column>
+                    <el-table-column label="操作" width="100px" align="center">
+                        <template slot-scope="scope">
+                            <el-button size="mini" type="primary" @click="dialogCheck(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>
+
+                    <terminal v-if="typestatsu === 1" @closeEdio="closeEdio" :componentInfo="componentInfo"
+                        :componentStatus="componentStatus" :changeinfo="false"></terminal>
+
+                    <advert v-if="typestatsu === 2" @closeEdio="closeEdio" :componentInfo="componentInfo"
+                        :componentStatus="componentStatus" :changeinfo="false"></advert>
+
+                </div>
+            </el-dialog>
+        </div>
+    </fullscreen>
+</template>
+<script>
+    import mySearch from "../../../components/search.vue";
+    import toolList from "../../../components/toolList.vue";
+    import terminal from "./components/terminal.vue"
+    import advert from "./components/advert.vue"
+
+    export default {
+        components: {
+            mySearch,
+            toolList,
+            terminal,
+            advert
+        },
+        data() {
+            return {
+                tooltit: '已办任务',
+                searchList: [{
+                        type: 'input',
+                        tit: '工单标题',
+                        value: '',
+                        width: '49%',
+                    },
+                    {
+                        type: 'input',
+                        tit: '发起人',
+                        value: '',
+                        width: '49%',
+                    },
+                ],
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [{}],
+                dialogStatus: false,
+                disableStatus: false,
+                titname: '终端',
+                infolist: {},
+                userInfo: {},
+                params: {},
+                typestatsu: 1,
+                options: [],
+                typeopt: [],
+                componentInfo:{},
+                componentStatus:false,
+                loading:false,
+            }
+        },
+        methods: {
+            //搜索数据
+            searchInfo(v) {
+                this.params = {};
+                v[0] ? this.params.terminalTypeName = v[0] : '';
+                v[1] ? this.params.brandName = v[1] : '';
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                this.pageSize = n;
+                let _this = this;
+                this.tableData = [];
+                this.loading = true;
+                this.$http({
+                    url: "/bpm/api/queryDoneTaskList",
+                    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(n) {
+                if ('广告申请' === n.procName) {
+                    this.typestatsu = 2;
+                } else if ("测试终端申请" === n.procName) {
+                    this.typestatsu = 1;
+                }
+                this.dialogStatus = true;
+                this.componentInfo = n;
+                this.componentStatus = true;
+            },
+            closeEdio() {
+                this.getList(this.params, this.pageSize);
+                this.dialogStatus = false;
+                this.componentStatus = false;
+            },
+            //功能栏
+            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;
+
+            }
+        },
+        mounted() {
+            this.getList({}, 1);
+            this.getUser();
+        },
+        created() {
+
+        }
+    }
+</script>
+<style scoped lang="scss">
+    .approval {
+        .roval-box {
+            padding: 0 20px;
+            margin-top: 20px;
+            margin-bottom: 10px;
+
+            .el-input {
+                width: calc(100% - 200px);
+                display: inline-block;
+            }
+
+            span {
+                display: inline-block;
+                width: 80px;
+                font-size: 14px;
+                margin-right: 20px;
+
+                .el-input {
+                    width: 100%;
+                    display: inline-block;
+                }
+            }
+        }
+    }
+
+    .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>

+ 198 - 0
src/pages/main/terminals/terminalStandbook.vue

@@ -0,0 +1,198 @@
+<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 class="search">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+            </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="terminalTypeName" label="类别">
+                    </el-table-column>
+                    <el-table-column prop="brandName" label="品牌">
+                    </el-table-column>
+                    <el-table-column prop="modelType" label="型号">
+                    </el-table-column>
+                    <el-table-column prop="resId" label="终端编码" width="160">
+                    </el-table-column>
+                    <el-table-column prop="modelType" label="终端序列">
+                    </el-table-column>
+                    <el-table-column prop="opName" label="操作工号">
+                    </el-table-column>
+                    <el-table-column prop="opNo" label="操作姓名">
+                    </el-table-column>
+                    <el-table-column prop="opTime" label="操作时间">
+                    </el-table-column>
+                    <el-table-column prop="dealContent" label="内容">
+                    </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 toolList from '../../../components/toolList'
+    import mySearch from '../../../components/search'
+
+    export default {
+        components: {
+            toolList,
+            mySearch
+        },
+        data() {
+            return {
+                tooltit: '测试终端管理台账',
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [{}],
+                searchList: [{
+                        type: 'input',
+                        tit: '类别',
+                        value: '',
+                        width: '32%',
+                    },
+                    {
+                        type: 'input',
+                        tit: '品牌',
+                        value: '',
+                        width: '32%',
+                    },
+                    {
+                        type: 'input',
+                        tit: '型号',
+                        value: '',
+                        width: '32%',
+                    },
+                ],
+                loading:false,
+                params:{}
+            }
+        },
+        methods: {
+            //搜索数据
+            searchInfo(v) {
+                this.params = {};
+                v[0] ? this.params.terminalTypeName = v[0] : '';
+                v[1] ? this.params.brandName = v[1] : '';
+                v[2] ? this.params.modelType = v[2] : '';
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                this.pageSize = n;
+                let _this = this;
+                this.tableData = [];
+                this.loading = true;
+                this.$http({
+                    url: "/market/terminal/terminalacct/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);
+            },
+            //功能栏
+            iconCli(v) {
+                if (v === 1) {
+                    this.getList(this.params, this.pageSize);
+                }
+                if (v === 2) {
+                    this.fullscreen = !this.fullscreen
+                }
+            },
+        },
+        mounted() {
+            this.getList({}, 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>

+ 133 - 0
src/pages/main/terminals/terminalhome.vue

@@ -0,0 +1,133 @@
+<template>
+  <div class="inner-container">
+    <div class="tabBox">
+      <el-tabs 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>
+    </div>
+    <div class="infoBox">
+      <router-view />
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      activeName: "",
+      showList: [],
+      routerList: [
+        {
+          label: "测试终端管理",
+          path: "/terminal",
+          name: "terminal",
+        },
+        {
+          label: "测试终端申请",
+          path: "/terminalApply",
+          name: "terminalApply",
+        },
+        {
+          label: "终端型号管理",
+          path: "/terminalModel",
+          name: "terminalModel",
+        },
+        {
+          label: "终端台账管理",
+          path: "/terminalStandbook",
+          name: "terminalStandbook",
+        },
+      ],
+    };
+  },
+  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 lang="scss" scoped>
+
+.el-tabs__content {
+  display: none;
+}
+.inner-container {
+//   display: flex;
+//   justify-content: space-between;
+}
+.tabBox {
+  border-bottom: 1px solid #e1e1e1;
+  height: 55px;
+  margin-top: 10px;
+}
+.infoBox {
+  background: #f4f4f4 !important;
+  height: 100%;
+//   width: calc(100% - 135px);
+    margin-left: 20px;
+}
+::v-deep .el-tabs__item {
+  width: 166px;
+  text-align: center;
+  border-left: 10px solid #ffffff;
+  border-right: 10px solid #ffffff;
+  padding: 0;
+}
+::v-deep .el-tabs__header {
+  margin: 0px;
+  background: #d8eaf6;
+  color: black;
+  margin-left: 20px;
+  display: inline-block;
+}
+::v-deep .is-active {
+  background: #0583cd;
+  color: white;
+}
+
+::v-deep .el-tabs__item:hover {
+  color: black;
+}
+::v-deep .is-active:hover {
+  background: #0583cd;
+  color: white;
+}
+::v-deep .el-tabs__active-bar{
+		width: 0px !important;
+	}
+</style>

+ 6 - 0
src/router/index.js

@@ -2128,6 +2128,12 @@ const routes = [{
             meta: { title: '流程部署' }
         },
         {
+            meta: { name: '广告管理工作流', keepAlive: false },
+            path: '/advertisements',
+            name: 'advertisements',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/terminals/advertisements'], resolve)
+        },
+        {
             path: '/processruns',
             name: 'processruns',