123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227 |
- <template>
- <div class="app-container">
- <div v-if="isLoadingStatus"></div>
- <div v-else>
- <el-alert
- v-if="
- activeIndex !== nodeStepList.length &&
- processStructureValue.workOrder.is_end === 1
- "
- style="margin-top: 15px"
- :title="alertMessage"
- type="error"
- :closable="false"
- />
- <el-card class="box-card" style="margin-top: 15px">
- <div slot="header" class="clearfix">
- <span>公共信息</span>
- </div>
- <div class="text item">
- <el-form label-width="100px">
- <el-row>
- <el-col :span="6">
- <el-form-item label="编号(ID):" style="margin-bottom: 5px">
- <span>{{ this.workOrderId }}</span>
- </el-form-item>
- </el-col>
- <el-col :span="18">
- <el-form-item label="标题:" style="margin-bottom: 5px">
- <span>{{ processStructureValue.workOrder.title }}</span>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="优先级:" style="margin-bottom: 0">
- <span v-if="processStructureValue.workOrder.priority === 2">
- <el-tag type="warning">紧急</el-tag>
- </span>
- <span
- v-else-if="processStructureValue.workOrder.priority === 3"
- >
- <el-tag type="danger">非常紧急</el-tag>
- </span>
- <span v-else>
- <el-tag type="success">一般</el-tag>
- </span>
- </el-form-item>
- </el-col>
- <el-col :span="18">
- <el-form-item label="工单类型:" style="margin-bottom: 5px">
- <span>{{ processStructureValue.process.name }}</span>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- </div>
- </el-card>
- <el-card class="box-card" style="margin-top: 15px">
- <div slot="header" class="clearfix">
- <span>表单信息</span>
- </div>
- <div class="text item">
- <template v-for="(tplItem, tplIndex) in processStructureValue.tpls">
- <fm-generate-form
- v-show="
- currentNode.hideTpls === undefined ||
- currentNode.hideTpls === null ||
- currentNode.hideTpls.indexOf(tplItem.form_structure.id) === -1
- "
- :key="tplIndex"
- :ref="'generateForm-' + tplItem.id"
- :preview="true"
- :remote="remoteFunc"
- :value="tplItem.form_data"
- :data="tplItem.form_structure"
- :organ-list="organList"
- />
- </template>
- </div>
- <hr
- v-if="is_end == 0"
- style="
- background-color: #d9d9d9;
- border: 0;
- height: 1px;
- margin-bottom: 15px;
- "
- />
- <div class="text item" style="margin-top: 18px; text-align: center">
- <!-- 只要没有结束就可以评论 -->
- <el-button round type="info" @click="handleCommit" v-if="is_end == 0"
- >评论</el-button
- >
- <template v-if="is_end == 0 && processStructureValue.userAuthority">
- <!-- 没有结束,自己审批 -->
- <el-button
- type="warning"
- round
- @click="handleInversion(endNodeDetail)"
- >转交</el-button
- >
- <el-button
- v-for="(item, index) in btn_group"
- :key="index"
- :type="item.className"
- @click="submitAction(item)"
- round
- >{{ item.labelShow }}</el-button
- >
- <!-- 拒绝按钮内置 -->
- <el-button
- v-if="endNodeDetail.id"
- type="danger"
- round
- @click="submitAction(endNodeDetail)"
- >{{ endNodeDetail.label }}</el-button
- >
- </template>
- </div>
- </el-card>
- <el-card class="box-card" style="margin-top: 15px">
- <div slot="header" class="clearfix">
- <span>流程</span>
- </div>
- <div class="text item">
- <el-timeline
- v-if="
- currentNode.clazz !== undefined &&
- currentNode.clazz !== null &&
- currentNode.clazz !== ''
- "
- >
- <el-timeline-item
- v-for="(item, index) in circulationList"
- :key="index"
- :icon="formatIcon(item, index, 'icon')"
- :class="activeIndex >= index ? 'large-icon' : ''"
- size="large"
- >
- <div class="step-title">
- {{ item.state || item.label }}
- <span class="apply-time">
- {{
- item.create_time
- ? dayjs(item.create_time).format("MM-DD HH:mm")
- : null
- }}
- </span>
- </div>
- <template v-if="!item.create_time">
- <p
- class="apply-status"
- v-if="item.assignUsers && item.assignUsers.length > 0"
- >
- <!-- 判断是否是自己审批 -->
- <template
- v-if="
- item.assignUsers[0].userId == userInfo.userId &&
- activeIndex == index
- "
- >
- 我(审批中)
- </template>
- <template v-else>
- <template v-if="item.isCounterSign">
- <span
- v-for="(au, aIndex) in item.assignUsers"
- :key="aIndex"
- >
- {{ au.username
- }}{{
- aIndex < item.assignUsers.length - 1 ? "," : null
- }}
- </span>
- </template>
- <template v-else>
- {{ item.assignUsers[0].username }}
- </template>
- {{ activeIndex == index ? `(审批中)` : null }}
- </template>
- </p>
- </template>
- <template v-else>
- <p class="apply-status" v-if="item.processor">
- {{ item.processor
- }}{{ item.circulation ? `(${item.circulation})` : null }}
- </p>
- <template v-if="item.remarks && item.remarks.trim()">
- <p
- class="remarks"
- v-html="dataModelFormatBr(item.remarks)"
- ></p>
- </template>
- <!-- 判断是否有添加图片 -->
- <div
- class="imgUploader"
- v-if="
- item.fileUrl &&
- item.fileUrl.file &&
- item.fileUrl.image.length > 0
- "
- >
- <el-image
- v-for="(file, index) in item.fileUrl.image"
- :key="index"
- style="width: 40px; height: 40px; margin-right: 12px"
- :src="file"
- :preview-src-list="item.fileUrl.image"
- >
- </el-image>
- </div>
- <!-- 判断是否有添加的文件 -->
- <div
- v-if="
- item.fileUrl &&
- item.fileUrl.file &&
- item.fileUrl.file.length > 0
- "
- >
- <div
- v-for="(uploadUrlItem, uploadUrlIndex) in item.fileUrl.file"
- :key="uploadUrlIndex"
- style="margin-bottom: 3px"
- class="fileUploader"
- >
- <i style="color: #909399" class="el-icon-document" />
- <span style="margin-right: 10px">{{
- uploadUrlItem.name || uploadUrlItem.url
- }}</span>
- <el-button
- round
- size="mini"
- @click="onDownload(uploadUrlItem, 'download')"
- >下载</el-button
- >
- <!-- <el-button
- round
- type="primary"
- @click="onDownload(uploadUrlItem)"
- v-if="checkFileSuffix(uploadUrlItem.url)"
- size="mini"
- >预览</el-button
- > -->
- <el-button
- round
- type="primary"
- @click="onDownload(uploadUrlItem)"
- v-if="
- checkFileSuffix(uploadUrlItem.url) &&
- !isCheckImage(uploadUrlItem.url)
- "
- size="mini"
- >预览</el-button
- >
- <div
- v-if="isCheckImage(uploadUrlItem.url)"
- style="
- display: inline-flex;
- position: relative;
- margin-left: 10px;
- "
- >
- <el-button
- style="position: absolute; left: 0; top: 0"
- round
- type="primary"
- @click="onDownload(uploadUrlItem)"
- v-if="checkFileSuffix(uploadUrlItem.url)"
- size="mini"
- >预览</el-button
- >
- <el-image
- style="width: 56px; height: 28px; opacity: 0"
- :src="uploadUrlItem.url"
- :preview-src-list="[uploadUrlItem.url]"
- >
- </el-image>
- </div>
- </div>
- </div>
- </template>
- <!-- 有抄送人并且,本节点已经审批完成了 -->
- <template
- v-if="
- item.cc_user && item.cc_user.length > 0 && activeIndex > index
- "
- >
- <!-- 已抄送1人 -->
- <div class="ccUsers" @click="onCCChange(item)">
- <span>已抄送{{ item.cc_user.length }}人</span>
- <el-icon
- v-show="!item.ccStatus"
- style="color: #cccccc"
- name="arrow-down"
- />
- <el-icon
- v-show="item.ccStatus"
- style="color: #cccccc"
- name="arrow-up"
- />
- </div>
- <div class="ccUserDetail" v-if="item.ccStatus">
- <span>{{ item.cc_user.join(",") }}</span>
- </div>
- </template>
- </el-timeline-item>
- </el-timeline>
- </div>
- </el-card>
- </div>
- <el-dialog title="转交工单" :visible.sync="dialogVisible" width="40%">
- <TransferInversion
- v-if="dialogVisible"
- :selectItem="selectItem"
- @getList="getProcessNodeList"
- @close="dialogVisible = false"
- />
- </el-dialog>
- <el-dialog :title="submitTitle" :visible.sync="dialogSubmit" width="40%">
- <TransferSubmit
- v-if="dialogSubmit"
- :type="submitType"
- :submitItem="submitItem"
- @getList="getProcessNodeList"
- @close="dialogSubmit = false"
- />
- </el-dialog>
- </div>
- </template>
- <script>
- import Upload from "./model/upload";
- import Vue from "vue";
- import { GenerateForm } from "@/components/VueFormMaking";
- import "form-making/dist/FormMaking.css";
- Vue.component(GenerateForm.name, GenerateForm);
- import dayjs from "dayjs";
- import {
- processStructure,
- handleWorkOrder,
- activeOrder,
- asyncPlayLog,
- queryUserInfo,
- queryAllToOrgan,
- queryTeacherOrgan,
- orderComment,
- } from "@/api/process/work-order";
- import store from "@/store";
- import { getInfo } from "@/api/user";
- import { listUser } from "@/api/system/sysuser";
- import TransferInversion from "./model/transferInversion";
- import TransferSubmit from "./model/transferSubmit.vue";
- import load from "@/utils/loading";
- import { mapGetters } from "vuex";
- export default {
- components: {
- TransferInversion,
- TransferSubmit,
- Upload,
- },
- data() {
- const query = this.$route.query;
- return {
- submitTitle: "提交信息",
- dialogSubmit: false,
- submitType: "commit",
- submitItem: {},
- workOrderId: query.workOrderId,
- processId: query.processId,
- isLoadingStatus: true,
- currentNode: {
- hideTpls: null,
- writeTpls: null,
- },
- isActiveProcessing: false,
- tpls: [],
- organList: [],
- dataList: {
- remarks: "", // 备注信息
- },
- fileUrl: [],
- userInfo: {},
- alertMessage: "",
- nodeStepList: [],
- circulationHistoryList: [],
- circulationList: [],
- activeIndex: 0,
- processStructureValue: {
- workOrder: { title: "" },
- },
- ownerApply: false, // 是否是自己提交的申请
- endNodeDetail: {}, // 结束结节信息
- ruleForm: {
- title: "",
- process: "",
- classify: "",
- state_id: "",
- state: "",
- source_state: "",
- processor: "",
- process_method: "",
- tpls: [],
- tasks: [],
- },
- userIds: null,
- tenantId: 1,
- userType: "SYSTEM",
- btn_group: [],
- is_end: 0, // 是否结束
- remoteFunc: {
- // 获取用户列表
- userList(resolve) {
- listUser({
- pageSize: 999999,
- }).then((response) => {
- const options = response.data.list;
- resolve(options);
- });
- },
- },
- dialogVisible: false,
- selectItem: {
- work_order_id: "",
- node_id: null,
- nodeList: [],
- users: [],
- },
- };
- },
- computed: {
- ...mapGetters(["userId"]),
- },
- async mounted() {
- await this.getUserInfo();
- await this.getAllOrgan();
- await this.getProcessNodeList();
- // 获取用户信息
- try {
- let user = await getInfo();
- this.userInfo = user.data;
- this.ownerApply =
- this.processStructureValue.workOrder.creator == user.data.userId
- ? true
- : false;
- } catch {
- //
- }
- console.log({
- is_end: this.is_end,
- ownerApply: this.ownerApply,
- userAuthority: this.processStructureValue.userAuthority,
- });
- },
- methods: {
- dayjs,
- // 获取学校列表
- onDownload(item, type) {
- if (type == "download") {
- window.location.href = item.url;
- return;
- }
- let urlArr = item.url.split(".");
- let suffix = urlArr[urlArr.length - 1];
- const imgSuffix = ["png", "jpg", "jpeg", "gif", "ico"];
- if (imgSuffix.includes(suffix)) {
- } else if (suffix != "pdf") {
- this.previewUrl =
- "https://view.officeapps.live.com/op/view.aspx?src=" + item.url;
- window.open(this.previewUrl);
- return;
- } else {
- this.previewUrl =
- this.validManageUrl() + "/pdf/web/viewer.html?file=" + item.url;
- window.open(this.previewUrl);
- return;
- }
- },
- // 教务地址
- validManageUrl() {
- let url = window.location.href;
- let returnUrl = "";
- if (/dev/.test(url)) {
- // dev 环境
- returnUrl = "http://mandev.dayaedu.com";
- } else if (/test/.test(url)) {
- // dev 环境
- returnUrl = "http://mantest.dayaedu.com";
- } else if (/online/.test(url)) {
- //线上
- returnUrl = "https://manonline.dayaedu.com";
- } else {
- // 默认dev环境
- returnUrl = "http://mandev.dayaedu.com";
- }
- return returnUrl;
- },
- isCheckImage(file) {
- const urlArr = file.split(".");
- const suffix = urlArr[urlArr.length - 1];
- const imgSuffix = ["png", "jpg", "jpeg", "gif", "ico"];
- console.log(imgSuffix.includes(suffix), "11");
- return imgSuffix.includes(suffix);
- },
- checkFileSuffix(url) {
- let urlArr = url.split(".");
- let suffix = urlArr[urlArr.length - 1];
- const passSuffix = [
- "xlsx",
- "xls",
- "pdf",
- "png",
- "jpg",
- "jpeg",
- "gif",
- "ico",
- ];
- if (passSuffix.includes(suffix)) {
- return true;
- } else {
- return false;
- }
- },
- async handleCommit() {
- console.log("handleCommit", true);
- this.submitTitle = "添加评论";
- this.submitType = "commit";
- this.submitItem = {
- workOrderId: parseInt(this.workOrderId),
- };
- this.dialogSubmit = true;
- },
- async handleInversion() {
- let workOrder = this.processStructureValue.workOrder;
- this.selectItem.work_order_id = workOrder.id;
- this.selectItem.nodeList = workOrder.state || [];
- this.selectItem.nodeList.forEach((item) => {
- item.text = item.label;
- });
- if (this.selectItem.nodeList.length === 1) {
- this.selectItem.node_id = this.selectItem.nodeList[0].id;
- }
- if (this.selectItem.users.length <= 0) {
- load.startLoading();
- await listUser({
- pageSize: 999999,
- }).then((response) => {
- this.selectItem.users = response.data.list;
- });
- load.endLoading();
- }
- this.dialogVisible = true;
- },
- async getUserInfo() {
- await queryUserInfo().then((res) => {
- // console.log(res);
- if (res.code == 200) {
- this.userIds = res.data.id;
- this.tenantId = res.data.tenantId;
- this.userType = res.data.userType;
- } else {
- this.$message.error(res.data);
- }
- });
- },
- async getProcessNodeList() {
- await processStructure({
- processId: this.processId,
- workOrderId: this.workOrderId,
- userId: this.userIds,
- }).then((response) => {
- let tempData = response.data.tpls;
- // 获取对应模板中,下拉框的key, value
- let selectList = this.getSelectValueObject(tempData);
- // 获取对应模板中,需要隐藏的字段
- let hiddenFormList = this.getSelectValueObject(
- tempData,
- "hiddenForm",
- selectList
- );
- tempData.forEach((temp, index) => {
- let tempList = temp.form_structure.list || [];
- tempList.forEach((item) => {
- if (hiddenFormList[index].length > 0) {
- if (item.type != "text" && !item.options.relationStatus) {
- item.hidden = true;
- } else {
- item.hidden = false;
- }
- // item.hidden = false
- if (hiddenFormList[index].includes(item.model)) {
- item.hidden = false;
- }
- } else {
- item.hidden = false;
- }
- // 子表单
- if (item.type == "subform") {
- let childList = item.columns || [];
- let subFormStatus = true;
- childList.forEach((child) => {
- let childList = child.list || [];
- childList.forEach((c) => {
- if (hiddenFormList[index].length > 0) {
- if (c.type != "text" && !c.options.relationStatus) {
- c.hidden = true;
- } else {
- c.hidden = false;
- subFormStatus = false;
- }
- if (hiddenFormList[index].includes(c.model)) {
- c.hidden = false;
- subFormStatus = false;
- }
- } else {
- c.hidden = false;
- subFormStatus = false;
- }
- });
- });
- item.hidden = subFormStatus;
- }
- });
- });
- this.isActiveProcessing = false;
- this.processStructureValue = response.data;
- this.is_end = this.processStructureValue.workOrder.is_end;
- this.circulationHistoryList =
- this.processStructureValue.circulationHistory;
- this.circulationList = JSON.parse(
- JSON.stringify(this.circulationHistoryList)
- );
- this.circulationHistoryList.forEach((item) => {
- const file = item.file_url ? JSON.parse(item.file_url) : [];
- const tempFile = {
- image: [],
- file: [],
- };
- // console.log(file)
- file.forEach((item) => {
- if (item.type == "image") {
- tempFile.image.push(item.url);
- } else if (item.type == "file") {
- tempFile.file.push(item);
- }
- });
- item.fileUrl = tempFile;
- });
- this.circulationList.forEach((item) => {
- const file = item.file_url ? JSON.parse(item.file_url) : [];
- const tempFile = {
- image: [],
- file: [],
- };
- // console.log(file)
- file.forEach((item) => {
- if (item.type == "image") {
- tempFile.image.push(item.url);
- } else if (item.type == "file") {
- tempFile.file.push(item);
- }
- });
- item.fileUrl = tempFile;
- });
- // console.log(this.circulationHistoryList, "circulationHistoryList");
- // 获取当前展示节点列表
- // this.nodeStepList = this.processStructureValue.circulationHistory
- // 获取当前展示节点列表
- this.nodeStepList = [];
- let nodes = this.processStructureValue.nodes;
- this.principals = "处理中";
- for (var i = 0; i < nodes.length; i++) {
- // console.log(
- // nodes[i].id,
- // this.processStructureValue.workOrder.current_state,
- // "xji"
- // );
- if (
- nodes[i].id === this.processStructureValue.workOrder.current_state
- ) {
- // 当前节点
- this.nodeStepList.push(nodes[i]);
- this.activeIndex = this.nodeStepList.length - 1;
- if (i + 1 === nodes.length) {
- this.activeIndex = this.nodeStepList.length;
- }
- this.currentNode = nodes[i];
- // 处理是认谁在处理,已处理完成则显示处理中
- const assignUsers = nodes[i].assignUsers;
- if (assignUsers && assignUsers.length > 0) {
- this.principals = assignUsers[0].username + "处理中";
- }
- } else if (!nodes[i].isHideNode) {
- // 非隐藏节点
- this.nodeStepList.push(nodes[i]);
- }
- // 判断节点里面是否有结束节点,而且一个流程里面只能有一个结束结点,
- if (nodes[i].clazz == "end") {
- this.endNodeDetail = JSON.parse(JSON.stringify(nodes[i]));
- this.endNodeDetail.target = nodes[i].id;
- this.endNodeDetail.flowProperties = 0; // 拒绝属性
- this.endNodeDetail.label = "拒绝";
- }
- }
- this.circulationList.reverse();
- // 如果审批流程没有结束则,流程和历史记录合并显示;结束了,就只显示历史记录
- if (!this.processStructureValue.workOrder.is_end) {
- this.circulationList.forEach((cir) => {
- this.nodeStepList.forEach((node) => {
- if (cir.source == node.id) {
- cir.label = node.label;
- cir.assignType = node.assignType;
- cir.assignValue = node.assignValue;
- cir.assignUsers = node.assignUsers;
- cir.id = node.id;
- }
- });
- });
- let tempNodes = [];
- this.nodeStepList.forEach((node) => {
- let count = 0;
- this.circulationList.forEach((cir) => {
- if (node.id === cir.source) {
- count += 1;
- }
- });
- if (count <= 0) {
- tempNodes.push(node);
- }
- });
- this.circulationList.push(...tempNodes);
- this.circulationList.forEach((cir, index) => {
- if (cir.id == this.processStructureValue.workOrder.current_state) {
- this.activeIndex = index;
- if (index + 1 == this.circulationList.length) {
- this.activeIndex = this.circulationList.length;
- }
- }
- });
- } else {
- this.activeIndex = this.circulationList.length;
- }
- // 添加抄送状态
- this.circulationList.forEach((res) => {
- res.ccStatus = true;
- });
- // console.log(this.nodeStepList);
- // console.log(this.circulationList, "this.circulationList");
- // if(this.processStructureValue.nodes) {
- // for (var i = 0; i < this.processStructureValue.nodes.length; i++) {
- // if (this.processStructureValue.nodes[i].id === this.processStructureValue.workOrder.current_state) {
- // // 当前节点
- // this.nodeStepList.push(this.processStructureValue.nodes[i])
- // this.activeIndex = this.nodeStepList.length - 1
- // if (i + 1 === this.processStructureValue.nodes.length) {
- // this.activeIndex = this.nodeStepList.length
- // }
- // this.currentNode = this.processStructureValue.nodes[i]
- // } else if (!this.processStructureValue.nodes[i].isHideNode) {
- // // 非隐藏节点
- // this.nodeStepList.push(this.processStructureValue.nodes[i])
- // }
- // }
- // }
- // 如果回退到初始节点则可编辑。
- if (this.activeIndex === 0 && this.currentNode.clazz === "start") {
- this.currentNode.writeTpls = [];
- for (var tplTmp of this.processStructureValue.tpls) {
- this.currentNode.writeTpls.push(tplTmp.form_structure.id);
- }
- }
- // 判断是否需要主动处理
- for (var stateValue of this.processStructureValue.workOrder.state) {
- if (
- this.processStructureValue.workOrder.current_state ===
- stateValue.id &&
- stateValue.processor.length > 1
- ) {
- this.isActiveProcessing = true;
- break;
- }
- }
- // const nodes = this.processStructureValue.nodes;
- // for (var i = 0; i < nodes.length; i++) {
- // // 判断节点里面是否有结束节点,而且一个流程里面只能有一个结束结点,
- // if (nodes[i].clazz == "end") {
- // this.endNodeDetail = JSON.parse(JSON.stringify(nodes[i]));
- // this.endNodeDetail.target = nodes[i].id;
- // this.endNodeDetail.flowProperties = 0; // 拒绝属性
- // this.endNodeDetail.label = "拒绝";
- // }
- // }
- let psv = response.data.edges || [];
- let btn_group = [];
- psv.forEach((item) => {
- // 过滤其它类型的操作
- if (
- this.processStructureValue.workOrder.is_end === 0 &&
- item.source === this.currentNode.id &&
- item.flowProperties == 1
- ) {
- if (item.flowProperties == 1) {
- item.className = "primary";
- item.labelShow = "同意";
- } else if (item.flowProperties == 0) {
- item.className = "danger";
- } else if (item.flowProperties == 2) {
- item.className = "primary";
- }
- btn_group.push(item);
- } else {
- item.className = "primary";
- }
- });
- this.btn_group = btn_group;
- this.isLoadingStatus = false;
- // console.log(this.circulationList, "circulationList");
- // console.log(this.currentNode, "currentNode ");
- this.getAlertMessage();
- });
- },
- getSelectValueObject(tpls, type = "value", tplValues = []) {
- const tempData = tpls || [];
- let selectList = [];
- tempData.forEach((temp, index) => {
- let tempList = temp.form_structure.list || [];
- let tempSelectList = tplValues[index] || [];
- let listArray = [];
- tempList.forEach((list) => {
- if (list.type == "select") {
- if (type == "value") {
- const result = this.getFormDataDetail(temp.form_data, list.model);
- if (result.status) {
- listArray.push(result);
- }
- } else {
- let selectOptions = [];
- let selectValue = [];
- tempSelectList.forEach((tsl) => {
- if (tsl.model == list.model) {
- selectOptions = list.options.options || [];
- selectValue = tsl.value || [];
- }
- });
- selectOptions.forEach((so) => {
- if (selectValue.includes(so.value)) {
- let tempRo = so.relationOptions || [];
- listArray.push(...tempRo);
- }
- });
- }
- }
- if (list.type == "subform") {
- let childList = list.columns || [];
- childList.forEach((child) => {
- let childList = child.list || [];
- childList.forEach((c) => {
- if (c.type == "select") {
- if (type == "value") {
- const originObj = JSON.parse(JSON.stringify(c));
- const result = this.getFormDataDetail(
- temp.form_data,
- originObj.model
- );
- if (result.status) {
- listArray.push(result);
- }
- } else {
- let selectOptions = [];
- let selectValue = [];
- tempSelectList.forEach((tsl) => {
- if (tsl.model == c.model) {
- selectOptions = c.options.options || [];
- selectValue = tsl.value || [];
- }
- });
- selectOptions.forEach((so) => {
- if (selectValue.includes(so.value)) {
- let tempRo = so.relationOptions || [];
- listArray.push(...tempRo);
- }
- });
- }
- }
- });
- });
- }
- });
- selectList.push(listArray);
- });
- return selectList;
- },
- // 获取对应元素的值
- getFormDataDetail(formData, model) {
- let modelStatus = {
- status: false,
- value: null,
- };
- for (let data in formData) {
- if (typeof formData[data] == "object") {
- // 没有子表单里面有子表单
- for (let child in formData[data]) {
- if (child == model) {
- modelStatus = {
- status: true,
- model: child,
- value: formData[data][child]
- ? formData[data][child].split(",")
- : [],
- };
- }
- }
- } else {
- if (data == model) {
- modelStatus = {
- status: true,
- model: data,
- value: formData[data] ? formData[data].split(",") : [],
- };
- }
- }
- }
- return modelStatus;
- },
- submitAction(item) {
- var promiseList = [];
- this.tpls = [];
- for (var tpl of this.processStructureValue.tpls) {
- this.tpls.push({
- tplDataId: tpl.id,
- tplId: tpl.form_structure.id,
- });
- promiseList.push(this.$refs["generateForm-" + tpl.id][0].getData());
- }
- console.log({
- tasks: this.processStructureValue.process.task,
- source_state: this.processStructureValue.workOrder.current_state,
- target_state: item.target,
- circulation: item.label,
- flow_properties:
- item.flowProperties === undefined ? 2 : parseInt(item.flowProperties),
- work_order_id: parseInt(this.$route.query.workOrderId),
- remarks: this.dataList.remarks,
- fileUrl: JSON.stringify(this.fileUrl || []),
- tpls: this.tpls,
- });
- const flow =
- item.flowProperties === undefined ? 2 : parseInt(item.flowProperties);
- let str = "同意";
- if (flow == 1) {
- str = "同意";
- this.submitTitle = "确认同意";
- this.submitType = "argee";
- } else if (flow == 0) {
- str = "拒绝";
- this.submitTitle = "确认拒绝";
- this.submitType = "reject";
- } else {
- str = "操作";
- this.submitTitle = "操作";
- this.submitType = "operation";
- }
- const tips = `您是否${str}此审批?`;
- // this.$confirm(tips, "提示", {
- // confirmButtonText: "确定",
- // cancelButtonText: "取消",
- // type: "warning"
- // }).then(() => {
- Promise.all(promiseList).then((values) => {
- for (var tplDataIndex in this.tpls) {
- this.tpls[tplDataIndex].tplValue = values[tplDataIndex];
- }
- let fileList = [];
- this.tpls &&
- this.tpls.forEach((tpl) => {
- for (let val in tpl.tplValue) {
- if (val.indexOf("file") != -1) {
- const file = tpl.tplValue[val] || [];
- file.forEach((item) => {
- fileList.push(item.url);
- });
- }
- }
- });
- this.submitItem = {
- tasks: this.processStructureValue.process.task,
- source_state: this.processStructureValue.workOrder.current_state,
- target_state: item.target,
- circulation: item.label,
- flow_properties:
- item.flowProperties === undefined
- ? 2
- : parseInt(item.flowProperties),
- work_order_id: parseInt(this.$route.query.workOrderId),
- tpls: this.tpls,
- fileList,
- tips,
- };
- this.dialogSubmit = true;
- });
- // });
- },
- onCCChange(item) {
- item.ccStatus = !item.ccStatus;
- this.$forceUpdate();
- },
- // 获取提示消息
- getAlertMessage() {
- if (this.processStructureValue.workOrder.is_end === 1) {
- this.alertMessage = "当前工单已结束。";
- }
- },
- // activeOrderActive() {
- // var jsonData = [{
- // id: this.nodeStepList[this.activeIndex].id,
- // label: this.nodeStepList[this.activeIndex].label,
- // process_method: 'person',
- // processor: [this.userId]
- // }]
- // activeOrder(jsonData, this.$route.query.workOrderId).then(() => {
- // this.getProcessNodeList()
- // })
- // },
- async getAllOrgan() {
- // 获取分部
- console.log(this.tenantId, "tenantId");
- // if (this.userType.indexOf("SYSTEM") != -1) {
- queryAllToOrgan({ tenantId: this.tenantId }).then((res) => {
- if (res.code == 200) {
- const result = res.data;
- const processId = this.$route.query.processId;
- let filterOrganId = [];
- if ([40, 41, 45, 46, 47].includes(processId)) {
- filterOrganId = [4];
- } else {
- filterOrganId = [
- 1, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 25, 26, 27, 28, 34, 37, 40, 71, 72, 124, 125,
- ];
- }
- let tempOrgan = [];
- // 过滤不会显示的分部
- result.forEach((item) => {
- if (filterOrganId.includes(item.id)) {
- tempOrgan.push(item);
- }
- });
- this.organList = tempOrgan;
- }
- });
- // } else {
- // queryTeacherOrgan({ tenantId: this.tenantId }).then((res) => {
- // if (res.code == 200) {
- // const result = res.data;
- // const filterOrganId = [
- // 36, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 54, 55, 56,
- // ];
- // let tempOrgan = [];
- // // 过滤不会显示的分部
- // result.forEach((item) => {
- // if (!filterOrganId.includes(item.key)) {
- // tempOrgan.push({
- // id: item.key,
- // name: item.value,
- // });
- // }
- // });
- // this.organList = tempOrgan;
- // }
- // });
- // }
- },
- dataModelFormatBr(str) {
- return str ? str.replace(/\n/g, "<br />") : str;
- },
- formatIcon(item, index, type) {
- // 格式化ICON
- // console.log(item, index)
- // console.log(this.activeIndex)
- if (this.activeIndex >= index) {
- if (item.circulation == "转交") {
- return "icon-transfer";
- } else if (this.activeIndex == index) {
- return "icon-wait";
- } else if (item.status == 0) {
- return "el-icon-error";
- } else {
- return "el-icon-success";
- }
- }
- // #fd803a
- return "";
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- :deep(.el-step__title) {
- font-size: 13px;
- line-height: 1.3;
- width: 100%;
- padding-top: 10px;
- padding-right: 10px;
- }
- .step-title {
- color: #000;
- font-size: 16px;
- }
- .apply-time {
- font-size: #999;
- color: #999;
- padding-left: 10px;
- }
- .apply-status {
- line-height: 1.5;
- color: #999;
- margin: 5px 0;
- }
- .remarks {
- background: #f5f5f5;
- padding: 8px;
- color: #323233;
- border-radius: 6px;
- line-height: 1.5;
- }
- .imgUploader {
- background: #f5f5f5;
- margin-top: 8px;
- padding: 8px;
- border-radius: 6px;
- .el-image {
- vertical-align: middle;
- }
- }
- .fileUploader {
- display: flex;
- align-items: center;
- margin-top: 8px;
- background: #f5f5f5;
- padding: 6px;
- border-radius: 4px;
- }
- :deep(.icon-transfer),
- :deep(.icon-wait) {
- display: flex;
- align-items: center;
- box-sizing: content-box;
- background-color: #fff;
- padding: 2px 0;
- height: 23px;
- &::before {
- content: " ";
- display: inline-block;
- width: 23px;
- height: 23px;
- background: url("../../../assets/system-transfer.png") no-repeat center;
- background-size: contain;
- }
- }
- :deep(.icon-wait) {
- &::before {
- content: " ";
- display: inline-block;
- width: 23px;
- height: 23px;
- background: url("../../../assets/system-wait.png") no-repeat center;
- background-size: contain;
- }
- }
- .large-icon {
- :deep(.el-timeline-item__node--large) {
- top: -8px;
- left: -7px;
- width: 24px;
- height: 24px;
- background-color: transparent;
- }
- :deep(.el-icon-success),
- :deep(.el-icon-error) {
- font-size: 24px;
- color: #22b4a9;
- background-color: #fff;
- padding: 2px 0;
- }
- :deep(.el-icon-error) {
- color: #ff2e2e;
- }
- }
- </style>
|