index.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938
  1. <template>
  2. <fullscreen :fullscreen.sync="fullscreen" class="container">
  3. <div class="container-box">
  4. <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
  5. <div style="overflow: hidden;">
  6. <el-button style="float: right;margin-top: 10px;" type="primary" @click="dialogCheck(3)">添加</el-button>
  7. <el-button style="float: right;margin-top: 10px;margin-right: 20px;" type="primary"
  8. @click="getStanding">台账</el-button>
  9. </div>
  10. <div class="tabbox">
  11. <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
  12. tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
  13. <el-table-column prop="woTitle" label="业务名称">
  14. </el-table-column>
  15. <el-table-column prop="opName" label="申请姓名">
  16. </el-table-column>
  17. <el-table-column prop="createTime" label="申请时间">
  18. </el-table-column>
  19. <el-table-column prop="stsDesc" label="状态">
  20. <template slot-scope="scope">
  21. {{scope.row.taskName=="信息补填"&&scope.row.stsDesc == '待办'?'未办结':scope.row.stsDesc}}
  22. </template>
  23. </el-table-column>
  24. <el-table-column label="操作" width="120px" align="center">
  25. <template slot-scope="scope">
  26. <el-button size="mini" type="primary" @click="dialogCheck(1,scope.row)">查看</el-button>
  27. <el-button size="mini" type="danger" v-if="scope.row.sts != 1"
  28. @click="dialogCheck(2,scope.row)">处理</el-button>
  29. <!-- <el-button size="mini" type="danger" @click="delLine(scope.row)">删除</el-button> -->
  30. </template>
  31. </el-table-column>
  32. </el-table>
  33. <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
  34. :total="total">
  35. </el-pagination>
  36. </div>
  37. </div>
  38. <el-dialog :title="titname" :visible.sync="dialogStatus" width="50%" :destroy-on-close="true"
  39. :modal-append-to-body="false" :close-on-click-modal="false" :before-close="closedia" :fullscreen="true">
  40. <div v-loading="loadinged">
  41. <el-form :model="infolist" ref="infolist" :rules="rules"
  42. style="height: calc(100vh - 180px);overflow-y: scroll;">
  43. <div class="info-line">
  44. <el-form-item prop="demandName">
  45. <span>需求名称</span>
  46. <el-input v-model="infolist.demandName" placeholder="需求名称" :disabled="disableStatus">
  47. </el-input>
  48. </el-form-item>
  49. <el-form-item>
  50. <span>需求编号</span>
  51. <el-input v-model="infolist.demandNo" placeholder="需求编号" :disabled="disableStatus">
  52. </el-input>
  53. </el-form-item>
  54. <el-form-item prop="terminal">
  55. <span>申请流程</span>
  56. <el-select clearable v-model="terminal" placeholder="申请流程" :disabled="disableStatus">
  57. <el-option v-for="items in options" :key="items.procId" :label="items.procName"
  58. :value="items.procId">
  59. </el-option>
  60. </el-select>
  61. </el-form-item>
  62. <el-form-item>
  63. <span>紧急程度</span>
  64. <el-select clearable v-model="infolist.urgDegree" placeholder="紧急程度" :disabled="disableStatus">
  65. <el-option v-for="items in urgDegreeopt" :key="items.id" :label="items.name"
  66. :value="items.name">
  67. </el-option>
  68. </el-select>
  69. </el-form-item>
  70. <el-form-item>
  71. <span>业务主题</span>
  72. <el-input v-model="infolist.busiSubject" placeholder="业务主题" :disabled="disableStatus">
  73. </el-input>
  74. </el-form-item>
  75. <el-form-item>
  76. <span>需求类别</span>
  77. <el-select clearable v-model="infolist.demandTypeCode" placeholder="需求类别" :disabled="disableStatus">
  78. <el-option v-for="items in demandTypeopt" :key="items.dataCode" :label="items.dataName"
  79. :value="items.dataCode">
  80. </el-option>
  81. </el-select>
  82. </el-form-item>
  83. <el-form-item>
  84. <span>承载渠道</span>
  85. <el-select clearable v-model="infolist.carryChannelCode" placeholder="承载渠道" :disabled="disableStatus">
  86. <el-option v-for="items in carryChannelopt" :key="items.dataCode" :label="items.dataName"
  87. :value="items.dataCode">
  88. </el-option>
  89. </el-select>
  90. </el-form-item>
  91. <el-form-item>
  92. <span>加载周期</span>
  93. <el-date-picker :disabled="disableStatus" v-model="busiTime" type="daterange" placeholder="加载周期" style="display: inline-flex;width: calc(100% - 120px);">
  94. </el-date-picker>
  95. </el-form-item>
  96. </div>
  97. <el-form-item class="info-line online">
  98. <span>需求背景</span>
  99. <el-input v-model="infolist.demandBackground" placeholder="需求背景" type="textarea" :autosize="{ minRows: 3, maxRows: 10}"
  100. :disabled="disableStatus">
  101. </el-input>
  102. </el-form-item>
  103. <el-form-item class="info-line online">
  104. <span>需求描述</span>
  105. <el-input v-model="infolist.demandDesc" placeholder="需求描述" type="textarea" :autosize="{ minRows: 3, maxRows: 10}"
  106. :disabled="disableStatus">
  107. </el-input>
  108. </el-form-item>
  109. <div style="padding:0 20px 0 120px;margin-bottom: 20px;" v-if="disableStatus">
  110. <uploadDown :datalist="datalist" :dialogStatus="uploadstatus"></uploadDown>
  111. </div>
  112. <div style="padding-left: 100px" v-if="!disableStatus">
  113. <myUpload @uploadBack="uploadBack" :fileInfo="fileInfo" :fileList="fileInfo.fileList">
  114. </myUpload>
  115. </div>
  116. <div style="margin: 20px 0;padding: 0 20px;" v-if="vision == '信息补填'">
  117. <el-table class="com-table" ref="multipleTable" :data="infodatas" tooltip-effect="dark"
  118. size="small" border style="width: 100%">
  119. <el-table-column prop="infoName" label="需求承接支撑方">
  120. <template slot-scope="scope">
  121. <el-input v-model="scope.row.factoryName" :disabled="titname != '审批'"></el-input>
  122. </template>
  123. </el-table-column>
  124. <el-table-column prop="infoName" label="涉及发生工作量">
  125. <template slot-scope="scope">
  126. <el-input v-model="scope.row.workLoad" :disabled="titname != '审批'"></el-input>
  127. </template>
  128. </el-table-column>
  129. <el-table-column label="操作" width="120px" align="center" v-if="titname == '审批'">
  130. <template slot-scope="scope">
  131. <el-button size="mini" type="primary" @click="choline(1,scope)">添加</el-button>
  132. <el-button size="mini" type="danger" @click="choline(2,scope)">删除</el-button>
  133. </template>
  134. </el-table-column>
  135. </el-table>
  136. </div>
  137. <el-form-item class="info-line online" v-if="visionsts == '2'">
  138. <span>审批说明</span>
  139. <el-input v-model="remark" placeholder="审批说明" type="textarea" :rows="3"
  140. :disabled="titname == '查看'">
  141. </el-input>
  142. </el-form-item>
  143. <div style="margin-bottom: 20px;padding: 0 20px;" v-if="titname != '添加'">
  144. <el-table class="com-table" :data="rovaList" tooltip-effect="dark"
  145. size="small" border style="width: 100%">
  146. <el-table-column prop="taskId" label="编号">
  147. </el-table-column>
  148. <el-table-column prop="taskName" label="环节">
  149. </el-table-column>
  150. <el-table-column prop="assigneeName" label="处理人">
  151. </el-table-column>
  152. <el-table-column prop="assigneeNo" label="处理人工号">
  153. </el-table-column>
  154. <el-table-column prop="opTime" label="处理时间">
  155. </el-table-column>
  156. <el-table-column prop="remark" label="备注">
  157. </el-table-column>
  158. </el-table>
  159. </div>
  160. </el-form>
  161. <div slot="footer" class="dialog-footer myfooter">
  162. <el-button v-if="titname != '查看' && vision == '流程发起'" type="primary" @click="dialogCli(2)">确 定
  163. </el-button>
  164. <el-button v-if="titname != '查看' && visionsts == '3'" type="primary" @click="dialogCli(2)">确 定
  165. </el-button>
  166. <el-button v-if="titname != '查看' && visionsts == '2'" type="primary" @click="dialogCli(2)">通 过
  167. </el-button>
  168. <el-button v-if="titname != '查看' && visionsts == '2'" type="primary" @click="dialogCli(1)">打 回
  169. </el-button>
  170. <el-button v-if="titname == '添加'" type="primary" @click="checkexa = true">确 定</el-button>
  171. <el-button v-if="titname == '查看'" @click="dialogCli(3)">确 定</el-button>
  172. <el-button @click="dialogCli(3)">取 消</el-button>
  173. </div>
  174. </div>
  175. </el-dialog>
  176. <el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
  177. :modal-append-to-body="false" :close-on-click-modal="false">
  178. <div>
  179. <el-form :model="infolist" ref="infolist" :rules="rules">
  180. <el-form-item prop="visiblec" class="info-line online">
  181. <span>审批人员</span>
  182. <deptTreeOnly class="tree" @treeCheck="treeCheckonly" :defaultList="defaultList"
  183. :type="depttype" :closeList="closeList"></deptTreeOnly>
  184. <div class="tree treeUser">
  185. <p>{{treeListonly.leaderAuditName}}
  186. <i v-if="treeListonly.leaderAuditName" @click="deletes()"
  187. class="el-icon-error"></i>
  188. </p>
  189. </div>
  190. </el-form-item>
  191. </el-form>
  192. <div slot="footer" style="text-align: right;padding-bottom: 20px;">
  193. <el-button type="primary" @click="dialogCliadd">确 定</el-button>
  194. <el-button @click="checkexa = false">取 消</el-button>
  195. </div>
  196. </div>
  197. </el-dialog>
  198. <myMessage :messTit='messTit' @closeMessage="closeMessage" :centerDialogVisible="centerDialogVisible"
  199. v-if="centerDialogVisible"></myMessage>
  200. </fullscreen>
  201. </template>
  202. <script>
  203. import mySearch from "../../../components/search.vue";
  204. import myMessage from "../../../components/myMessage.vue"
  205. import toolList from '../../../components/toolList'
  206. import myUpload from '../../../components/upload'
  207. import uploadDown from '../../../components/uploadDown.vue'
  208. import deptTreeOnly from "../../../components/deptTreeOnly.vue"
  209. export default {
  210. components: {
  211. mySearch,
  212. myMessage,
  213. toolList,
  214. myUpload,
  215. uploadDown,
  216. deptTreeOnly
  217. },
  218. data() {
  219. const demandName = (rule, value, callback) => {
  220. if (!this.infolist.demandName) {
  221. callback(new Error('不能为空'))
  222. } else {
  223. callback()
  224. }
  225. }
  226. const terminal = (rule, value, callback) => {
  227. if (!this.terminal) {
  228. callback(new Error('不能为空'))
  229. } else {
  230. callback()
  231. }
  232. }
  233. return {
  234. rules: {
  235. demandName: [{
  236. required: true,
  237. trigger: 'blur',
  238. validator: demandName
  239. }],
  240. terminal: [{
  241. required: true,
  242. trigger: 'change',
  243. validator: terminal
  244. }],
  245. },
  246. tooltit: '线上渠道业务需求',
  247. fullscreen: false,
  248. total: 0,
  249. pageSize: 1,
  250. tableData: [{}],
  251. dialogStatus: false,
  252. disableStatus: false,
  253. titname: '',
  254. infolist: {
  255. },
  256. userInfo: {},
  257. params: {},
  258. centerDialogVisible: false,
  259. messTit: '',
  260. delid: '',
  261. loading: false,
  262. loadinged: false,
  263. fileInfo: {
  264. limit: 5,
  265. url: '/bpm/api/upload',
  266. fileList: []
  267. },
  268. rovaList: [],
  269. vision: '',
  270. datalist: {
  271. url: '/bpm/api/download',
  272. type: 1
  273. },
  274. uploadstatus: false,
  275. mydisable: 1,
  276. opname: '',
  277. opno: '',
  278. attList: [],
  279. options: [],
  280. terminal: '',
  281. remark: '',
  282. visionsts: '1',
  283. ifopt: [{
  284. id: 1,
  285. name: '是'
  286. }, {
  287. id: 0,
  288. name: '否'
  289. }],
  290. infodatas: [{}, {}],
  291. busiTime:[],
  292. urgDegreeopt:[
  293. {
  294. id:1,
  295. name:'正常'
  296. },{
  297. id:2,
  298. name:'紧急'
  299. },{
  300. id:3,
  301. name:'非常紧急'
  302. },
  303. ],
  304. demandTypeopt:[],
  305. carryChannelopt:[],
  306. checkexa: false,
  307. treeListonly: {},
  308. defaultList: [],
  309. closeList: false,
  310. depttype: 0
  311. }
  312. },
  313. methods: {
  314. deletes() {
  315. this.treeListonly = {};
  316. this.closeList = !this.closeList;
  317. },
  318. treeCheckonly(v) {
  319. this.treeListonly = v;
  320. },
  321. choline(v, n) {
  322. if (v == 1) {
  323. this.infodatas.push({})
  324. } else {
  325. this.infodatas.splice(n.$index, 1)
  326. }
  327. },
  328. closedia() {
  329. this.infolist = {};
  330. this.attList = [];
  331. this.fileInfo.fileList = [];
  332. this.dialogStatus = false;
  333. },
  334. //获取列表
  335. getList(v, n) {
  336. this.pageSize = n;
  337. let _this = this;
  338. this.loading = true;
  339. v.procName = "业务需求申请(地市公司),业务需求申请(省公司)";
  340. this.$http({
  341. url: "/bpm/api/queryToDoAndFinishTaskList",
  342. method: "post",
  343. headers: {
  344. "Content-Type": "application/json",
  345. "page": '{"pageNo":"' + n + '","pageSize":"10"}'
  346. },
  347. data: v,
  348. }).then((res) => {
  349. this.tableData = res.data.data;
  350. this.total = res.data.totalRecord;
  351. this.loading = false;
  352. });
  353. },
  354. // 分页
  355. currchange(v) {
  356. this.pageSize = v;
  357. this.getList(this.params, this.pageSize);
  358. },
  359. //申请
  360. dialogCheck(v, n) {
  361. this.dialogStatus = true;
  362. let infolist = Object.assign({}, n);
  363. this.vision = '';
  364. this.visionsts = '';
  365. this.infodatas = [{}, {}];
  366. if (v === 1) {
  367. this.titname = '查看';
  368. this.disableStatus = true;
  369. } else if (v === 2) {
  370. this.titname = '审批';
  371. this.disableStatus = true;
  372. } else if (v === 3) {
  373. this.titname = '添加';
  374. this.disableStatus = false;
  375. return
  376. }
  377. this.$http({
  378. url: '/bpm/api/taskInit',
  379. method: "post",
  380. headers: {
  381. "Content-Type": "application/json",
  382. },
  383. data: {
  384. woNo: n.woNo
  385. },
  386. }).then((res) => {
  387. // this.infolist = Object.assign({}, res.data);
  388. this.terminal = infolist.procId;
  389. this.opname = res.data.opName;
  390. this.opno = res.data.opNo;
  391. this.infolist = JSON.parse(res.data.params.terminalRes);
  392. res.data.params.fillList?this.infodatas = JSON.parse(res.data.params.fillList):'';
  393. this.infolist.procId = infolist.procId;
  394. this.infolist.procVersion = infolist.procVersion;
  395. this.remark = infolist.remark;
  396. this.infolist.stepId = infolist.stepId;
  397. this.infolist.taskId = infolist.taskId;
  398. this.infolist.taskName = infolist.taskName;
  399. this.infolist.opName = infolist.opName;
  400. this.infolist.opNo = infolist.opNo;
  401. this.infolist.opTime = infolist.opTime;
  402. this.infolist.woNo = infolist.woNo;
  403. if (res.data.taskList[res.data.taskList.length - 1].taskName == '流程发起') {
  404. this.vision = '流程发起';
  405. if(this.titname == '审批'){
  406. this.disableStatus = false;
  407. }
  408. } else if (res.data.taskList[res.data.taskList.length - 1].taskName == '科室主任初审') {
  409. this.vision = '科室主任初审';
  410. this.visionsts = '2';
  411. } else if (res.data.taskList[res.data.taskList.length - 1].taskName == '部门副主任复审') {
  412. this.vision = '部门副主任复审';
  413. this.visionsts = '2';
  414. } else if (res.data.taskList[res.data.taskList.length - 1].taskName == '主管副总终审') {
  415. this.vision = '主管副总终审';
  416. this.visionsts = '2';
  417. } else if (res.data.taskList[res.data.taskList.length - 1].taskName == '需求预评估') {
  418. this.vision = '需求预评估';
  419. this.visionsts = '2';
  420. }else if (res.data.taskList[res.data.taskList.length - 1].taskName == '需求预评估初审') {
  421. this.vision = '需求预评估初审';
  422. this.visionsts = '2';
  423. }else if (res.data.taskList[res.data.taskList.length - 1].taskName == '需求预评估复审') {
  424. this.vision = '需求预评估复审';
  425. this.visionsts = '2';
  426. }else if (res.data.taskList[res.data.taskList.length - 1].taskName == '渠道经理会签') {
  427. this.vision = '渠道经理会签';
  428. this.visionsts = '2';
  429. }else if (res.data.taskList[res.data.taskList.length - 1].taskName == '需求确认') {
  430. this.vision = '需求确认';
  431. this.visionsts = '3';
  432. }else if (res.data.taskList[res.data.taskList.length - 1].taskName == '上线管理') {
  433. this.vision = '上线管理';
  434. this.visionsts = '3';
  435. }else if (res.data.taskList[res.data.taskList.length - 1].taskName == '上线验证') {
  436. this.vision = '上线验证';
  437. this.visionsts = '3';
  438. }else if (res.data.taskList[res.data.taskList.length - 1].taskName == '信息补填') {
  439. this.vision = '信息补填';
  440. this.visionsts = '3';
  441. }
  442. this.datalist.attList = JSON.parse(res.data.params.attList);
  443. this.attList = [];
  444. this.fileInfo.fileList = [];
  445. this.datalist.attList.forEach(item => {
  446. item.id = item.attchFileId;
  447. this.fileInfo.fileList.push({
  448. name: item.fileName,
  449. url: '',
  450. id: item.id,
  451. attchFileId: item.attchFileId,
  452. fileName: item.fileName
  453. });
  454. this.attList.push({
  455. name: item.fileName,
  456. url: '',
  457. id: item.id,
  458. attchFileId: item.attchFileId,
  459. fileName: item.fileName
  460. });
  461. })
  462. this.rovaList = res.data.taskList;
  463. console.log(this.rovaList)
  464. this.uploadstatus = true;
  465. });
  466. },
  467. //审批
  468. dialogCli(v) {
  469. this.dialogStatus = false;
  470. if (v === 3) {
  471. this.infolist = {};
  472. this.attList = [];
  473. this.fileInfo.fileList = [];
  474. return
  475. }
  476. let _this = this;
  477. this.infolist.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD HH:mm:ss")
  478. if (v === 1) {
  479. let params = {
  480. dealType: '1',
  481. dealTypeDesc: '打回',
  482. procId: this.infolist.procId,
  483. procVersion: this.infolist.procVersion,
  484. remark: this.remark,
  485. stepId: this.infolist.stepId,
  486. taskId: this.infolist.taskId,
  487. taskName: this.infolist.taskName,
  488. opName: this.infolist.opName,
  489. opNo: this.opno,
  490. opTime: this.infolist.opTime,
  491. params: {
  492. procExeCondiVal: '不同意',
  493. terminalRes: JSON.stringify(this.infolist),
  494. assigneeNo: this.opno,
  495. assigneeName: this.opname,
  496. },
  497. woNo: this.infolist.woNo,
  498. }
  499. this.submitInfo("/bpm/api/submitTask", params);
  500. } else if (v === 2) {
  501. let param = {
  502. dealType: '0',
  503. dealTypeDesc: '提交',
  504. procId: this.infolist.procId,
  505. procVersion: this.infolist.procVersion,
  506. remark: this.remark,
  507. stepId: this.infolist.stepId,
  508. taskId: this.infolist.taskId,
  509. taskName: this.infolist.taskName,
  510. opName: this.infolist.opName,
  511. opNo: this.opno,
  512. opTime: this.infolist.opTime,
  513. params: {
  514. woType: this.infolist.woType,
  515. terminalRes: JSON.stringify(this.infolist),
  516. },
  517. woNo: this.infolist.woNo,
  518. }
  519. if(this.vision == '科室主任初审'||this.vision == '部门副主任复审'){
  520. this.$http({
  521. url: "/sysmgr/csysuserinfo/queryUserListByLoginNoAndDuty",
  522. method: "post",
  523. headers: {
  524. "Content-Type": "application/json",
  525. "page": '{"pageNo":"' + 1 + '","pageSize":"100"}'
  526. },
  527. data: {"duty":"7,12"},
  528. }).then((res) => {
  529. if(res.data.length == 0){
  530. this.$message({
  531. message: '暂无领导审批,发起失败!',
  532. type: 'error'
  533. });
  534. return
  535. }else{
  536. param.params.assigneeNo=res.data[0].loginNoStr;
  537. param.params.assigneeName=res.data[0].loginNameStr;
  538. _this.submitInfo("/bpm/api/submitTask", param);
  539. return
  540. }
  541. });
  542. }else if(this.vision == '渠道经理会签'||this.vision == '上线管理'){
  543. param.params.assigneeNo= this.opno;
  544. param.params.assigneeName= this.opname;
  545. this.submitInfo("/bpm/api/submitTask", param);
  546. }else if(this.vision == '信息补填'){
  547. param.params.fillList = JSON.stringify(this.infodatas);
  548. this.submitInfo("/bpm/api/submitTask", param);
  549. }else{
  550. if (this.vision == '流程发起') {
  551. let attList = [];
  552. for (let i = 0; i < this.attList.length; i++) {
  553. attList.push({
  554. id: this.attList[i].id,
  555. fileCode: this.attList[i].fileCode,
  556. fileName: this.attList[i].fileName,
  557. opName: this.attList[i].opName,
  558. opNo: this.attList[i].opNo,
  559. opTime: this.attList[i].opTime,
  560. woNo: this.infolist.woNo,
  561. attchFileId: this.attList[i].attchFileId,
  562. });
  563. }
  564. param.params.attList = JSON.stringify(attList)
  565. }
  566. this.submitInfo("/bpm/api/submitTask", param);
  567. }
  568. }
  569. },
  570. //添加
  571. dialogCliadd(v) {
  572. let _this = this;
  573. let info = {};
  574. info.params = {};
  575. info.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD HH:mm:ss");
  576. info.opNo = this.userInfo.loginNo;
  577. info.opName = this.userInfo.loginName;
  578. info.woTitle = this.infolist.demandName;
  579. info.params.terminalRes = this.infolist;
  580. info.params.terminalRes.busiStartTime = _this.$formatDate(this.busiTime[0], "YYYY-MM-DD HH:mm:ss");
  581. info.params.terminalRes.busiEndTime = _this.$formatDate(this.busiTime[1], "YYYY-MM-DD HH:mm:ss");
  582. info.procId = this.terminal;
  583. info.params.assigneeNo = this.treeListonly.leaderAuditNo;
  584. info.params.assigneeName = this.treeListonly.leaderAuditName;
  585. for (let i = 0; i < this.options.length; i++) {
  586. if (this.terminal == this.options[i].procId) {
  587. info.procName = this.options[i].procName;
  588. info.procVersion = this.options[i].procVersion;
  589. }
  590. }
  591. let attList = [];
  592. for (let i = 0; i < this.attList.length; i++) {
  593. attList.push({
  594. id: this.attList[i].id,
  595. fileCode: this.attList[i].fileCode,
  596. fileName: this.attList[i].fileName,
  597. opName: this.attList[i].opName,
  598. opNo: this.attList[i].opNo,
  599. opTime: this.attList[i].opTime,
  600. woNo: this.infolist.woNo,
  601. attchFileId: this.attList[i].attchFileId,
  602. });
  603. }
  604. info.params.attList = JSON.stringify(attList)
  605. info.params.terminalRes = JSON.stringify(info.params.terminalRes);
  606. this.checkexa = false;
  607. this.submitInfo("/bpm/api/startProc", info);
  608. },
  609. submitInfo(u, v) {
  610. let _this = this;
  611. this.$refs.infolist.validate(valid => {
  612. if (valid) {
  613. this.$http({
  614. url: u,
  615. method: "post",
  616. headers: {
  617. "Content-Type": "application/json",
  618. },
  619. data: v,
  620. }).then((res) => {
  621. if (res.data.result === 1) {
  622. _this.$message({
  623. message: res.data.desc,
  624. type: 'error'
  625. });
  626. } else {
  627. _this.$message({
  628. message: '成功',
  629. type: 'success'
  630. });
  631. _this.closedia();
  632. _this.infolist = {};
  633. _this.attList = [];
  634. _this.fileInfo.fileList = [];
  635. _this.getList(this.params, this.pageSize);
  636. }
  637. });
  638. }
  639. })
  640. },
  641. getStanding() {
  642. this.$router.push({
  643. path: '/yStanding',
  644. });
  645. this.setabList('运营流程台账', '/yStanding');
  646. },
  647. setabList(n, p) {
  648. let params = {
  649. children: "",
  650. name: n,
  651. rountPath: p,
  652. target: "_self",
  653. };
  654. for (let i = 0; i < this.$store.state.tabList.length; i++) {
  655. if (this.$store.state.tabList[i].name === params.name) {
  656. this.$store.state.tabList[i] = params;
  657. }
  658. }
  659. let set = new Set([...this.$store.state.tabList, params]);
  660. set.add(params);
  661. this.$store.commit("setDefaultActive", params.rountPath);
  662. this.$store.commit("setTabList", Array.from(set));
  663. },
  664. //流程
  665. getTermianl() {
  666. this.$http({
  667. url: "/bpm/api/queryBpmProcList",
  668. method: "post",
  669. headers: {
  670. "Content-Type": "application/json",
  671. "page": '{"pageNo":"' + 1 + '","pageSize":"100"}'
  672. },
  673. data: {},
  674. }).then((res) => {
  675. this.options = res.data.data;
  676. });
  677. },
  678. closeMessage(v) {
  679. this.centerDialogVisible = false;
  680. let _this = this;
  681. if (v === 1) {
  682. _this.$http({
  683. url: "/bpm/api/deleteBpmPrePlugin",
  684. method: "post",
  685. headers: {
  686. "Content-Type": "application/json",
  687. },
  688. data: {
  689. id: this.delid
  690. },
  691. }).then((res) => {
  692. if (res.data.result === 1) {
  693. _this.$message({
  694. message: res.data.desc,
  695. type: 'error'
  696. });
  697. } else {
  698. _this.$message({
  699. message: '删除成功',
  700. type: 'success'
  701. });
  702. _this.getList(this.params, this.pageSize);
  703. }
  704. });
  705. }
  706. },
  707. //删除
  708. delLine(v) {
  709. this.centerDialogVisible = true;
  710. this.messTit = '即将删除此条数据, 是否删除?';
  711. this.delid = v.id;
  712. },
  713. //文件返回值
  714. uploadBack(v) {
  715. this.attList = v;
  716. },
  717. //功能栏
  718. iconCli(v) {
  719. if (v === 1) {
  720. this.getList(this.params, this.pageSize);
  721. }
  722. if (v === 2) {
  723. this.fullscreen = !this.fullscreen
  724. }
  725. },
  726. getUser() {
  727. this.userInfo = JSON.parse(window.sessionStorage.userInfo);
  728. },
  729. // 字典
  730. // 需求类别 demandType
  731. // 承载渠道 demandChnl
  732. getsaleChnl() {
  733. this.$http({
  734. url: "/market/cfgDataDict/queryList",
  735. method: "post",
  736. headers: {
  737. "Content-Type": "application/json",
  738. },
  739. data: {
  740. dictCode: 'demandType'
  741. },
  742. }).then((res) => {
  743. this.demandTypeopt = res.data;
  744. });
  745. this.$http({
  746. url: "/market/cfgDataDict/queryList",
  747. method: "post",
  748. headers: {
  749. "Content-Type": "application/json",
  750. },
  751. data: {
  752. dictCode: 'demandChnl'
  753. },
  754. }).then((res) => {
  755. this.carryChannelopt = res.data;
  756. });
  757. },
  758. },
  759. mounted() {
  760. this.getList({}, 1);
  761. this.getUser();
  762. this.getTermianl();
  763. this.getsaleChnl();
  764. },
  765. created() {
  766. }
  767. }
  768. </script>
  769. <style scoped lang="scss">
  770. .onetab {
  771. margin-bottom: 20px;
  772. padding: 0 20px;
  773. }
  774. .titbox {
  775. div {
  776. float: right;
  777. i {
  778. font-size: 22px;
  779. margin-left: 20px;
  780. cursor: pointer;
  781. }
  782. }
  783. }
  784. .tabbox {
  785. margin-top: 15px;
  786. }
  787. .pageBox {
  788. text-align: right;
  789. margin-top: 10px;
  790. }
  791. .info-line {
  792. width: 100%;
  793. display: block;
  794. padding-left: 20px;
  795. div {
  796. width: 50%;
  797. display: inline-block;
  798. }
  799. span {
  800. width: 100px;
  801. display: inline-block;
  802. text-align: left;
  803. i {
  804. color: red;
  805. display: inline-block;
  806. padding-right: 5px;
  807. }
  808. }
  809. .el-select,
  810. .el-input {
  811. width: calc(100% - 120px);
  812. }
  813. }
  814. .online {
  815. width: 100%;
  816. .el-select {
  817. width: calc(100% - 100px);
  818. }
  819. span {
  820. vertical-align: top;
  821. }
  822. .el-textarea {
  823. width: calc(100% - 100px);
  824. }
  825. .tree {
  826. width: calc(50% - 60px);
  827. display: inline-block;
  828. margin-right: 20px;
  829. height: 300px;
  830. overflow-y: scroll;
  831. .el-icon-error {
  832. float: right;
  833. font-size: 20px;
  834. margin-top: 9px;
  835. cursor: pointer;
  836. }
  837. }
  838. .treeUser {
  839. margin: 0;
  840. border: 1px solid #ddd;
  841. p {
  842. background: #f4f4f4;
  843. padding: 0 20px;
  844. margin-bottom: 5px;
  845. }
  846. }
  847. .treeUserb {
  848. width: calc(100% - 100px);
  849. border: 1px solid #ddd;
  850. background: #f4f4f4;
  851. border-radius: 3px;
  852. height: auto;
  853. overflow: hidden;
  854. p {
  855. display: inline-block;
  856. padding: 0 20px;
  857. margin-bottom: 5px;
  858. }
  859. }
  860. }
  861. .adv-type {
  862. margin-top: 20px;
  863. display: flex;
  864. justify-content: space-between;
  865. flex-wrap: wrap;
  866. // border: 1px solid #ddd;
  867. border-radius: 5px;
  868. padding: 20px;
  869. box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
  870. div {
  871. width: 33%;
  872. text-align: center;
  873. height: 80px;
  874. overflow: hidden;
  875. min-width: 100px;
  876. cursor: pointer;
  877. padding-top: 10px;
  878. margin: 10px 0;
  879. }
  880. div:hover {
  881. background: #CFE8FC;
  882. border-radius: 5px;
  883. }
  884. span {
  885. width: 100%;
  886. display: inline-block;
  887. height: 40px;
  888. // line-height: 40px;
  889. i {
  890. color: #0074D9;
  891. font-size: 36px;
  892. }
  893. }
  894. }
  895. </style>